Reducing the size of the groups is the easier part of my algorithm so I'll give that first. All of my methods (due, followers, etc) put the balls in a rank from greatest to least, depending on the algorithm chosen. Then I simply pick how many balls I would like to play (or display/report) and I take the top ranked balls up to that number.
Followers:
I set up an array 56x56 (BALL x FOLLOWER) and each indexes represents a different ball combinations. I loop through all of the past draws and for each ball I increment positions in the array for that ball corresponding with each 5 WB's in the following draw. Therefor each drawing I loop through I will be adding the 5 WB's from the following draw 5 times each, once for each position in the current draw.
i.e., if the draw I am looking at is 1-2-3-4-5 and the following draw was 6-7-8-9-10, I increment 6 as a follower of 1, 6 as a follower of 2, 6 as a follower of 3, 6 as a follower of 4 and 6 as a follower of 5. Balls of 2,3,4,5 are incremented for 6,7,8,9,10 as well.
After all the past calculation is done and I am looking to pick followers for the upcoming draw, the system adds 5 rows in the array together (each row corresponding to each WB from the most recent draw) and totals the amount. i.e. if the most recent draw was 1-2-3-4-5, and the ball #11 has followed ball #1 15 times, and followed #2 20 times, and followed #3,4,5 10 times each, the value for 11 is set to 65. All values are calculated and ordered from greatest to least, and I choose off the top how many I am looking for. I have had a few different algorithms for followers but this seems to be the most profitable.
Due:
My due alrogithm is not rediculously complex. I run a 'for' loop for 1 to the maximum balls (56 in this case) and it loops back through all of the draw history analyzing hits. I take the total amount of hits for each ball, and divide the total draws by that number. Then I subtract the count of draws back where the ball in question hit last and that gives the due rank.
i.e. if ball #25 has hit 13 times in the past 350 draws, it has an average of 26.9 draws (round to 27). If the last hit for ball #25 was 21 draws ago it has a due value of 27 - 21 = 6 (-1 because we want the difference between draws to equal one less than the average) = 5. You can think of it such as, if a ball averages 10 draws and hit 9 draws ago, it will be exactly 'due' for the 10th (next) draw.
I take the absolute value of the due rank since some balls will be overdue, giving them a negative value. I consider positive and due values equally likely (+4 = -4 for example). After these due ranks are calculated I order the balls from most due (0 rank) to least due (higher ranks) and pick the top # of balls that I would like to play.
Due (Top Ranks):
Here is where I take the due algorithm one step further. I noticed that my due ranking system did decent, but often numbers hit in consistent ranges of my rankings which might not be always at the top. There seemed to be groupings in the middle and bottom of the due ranks, so I implemented this. What this algorithm does is loops back through the entire history first completing the due rank. Then it analyzes where the balls that were drawn would have been in the due rankings. It keeps track of which rank has hit over the entire history and suggests balls that are calculated in the top rated due ranks.
For instance, according to my 'due' and 'due ranks' algorithm, the due ranking order for MM is currently:
51,54,17,41,7,20,36,45,12,14,16,23,29,5,25,26,49,52,53,2,19....
This means that most often balls hit that I have ranked in the 51 position based on due. Last draw is no exception, on 10/28 balls 6,39,45,46,48 were ranked #31, #7, #51, #20 and #19. 51 and 7 were both in the top 5 for rank hits. However, this method is a little more profitable in Powerball than it is in Mega Millions, and it is the method we are using for our Powerball pool. Followers seems to have higher percentages for MM for the time being.
Hopefully this makes sense!!