I built an eighteen-feature model to predict Florida Lotto numbers, backtested it, and watched it report a 17% edge at p = 0.012. Then I tested that result properly and it evaporated. This is the write-up of a negative result: eighteen features, roughly forty statistical tests, twelve errors caught in my own work, and the one finding that turned out to be worth real money.
Florida Lotto draws 6 numbers from 53, giving 22,957,480 possible combinations. The internet is full of systems built on hot numbers, overdue numbers and pattern analysis. This project asked whether historical draw data can predict future draws, and more importantly, how anyone would know if it could.
4,009 draws under strict walk-forward validation. Every test draw was scored by an engine rebuilt from prior draws only, so no future information could leak backward. Eighteen features were engineered across three categories. Number-level signals covered frequency, exponential recency, number freshness and hot/cold z-scores. Structural signals covered positional distribution, pair and triplet co-occurrence, gap sequences, consecutive counts, odd/even and low/high balance, decade distribution, and sum and spread modelled with Gaussian kernels. Inter-draw signals measured how numbers and combinations repeat from one draw to the next.
The exact baseline comes first. A hypergeometric distribution gives 0.6792 expected matches per ticket, and any model has to beat that number to claim an edge. Each feature was then tested independently by scoring 400 candidate tickets per draw, splitting them into top and bottom quartiles, and comparing actual match counts between the halves. The final step is the one most analyses skip: the entire backtest was re-run across twelve independent datasets to check whether the edge survived resampling.
The first backtest reported 0.795 average matches against the 0.679 baseline, a 17% edge at p = 0.012, which looked like a real result. Across twelve independent datasets the same model averaged 0.6606 matches, below the theoretical baseline, with a paired p-value of 0.43. The apparent edge was sampling noise. A 150-draw backtest carries a standard error of 0.06, so a model with no skill at all lands anywhere between 0.56 and 0.80 about 95% of the time. A single backtest cannot establish an edge.
Four of the eighteen features reached p below 0.05. None survived correction. Testing eighteen features at a 5% threshold produces roughly one false positive by chance, and the Bonferroni threshold for that many tests is p below 0.0028.
The underlying reason appears in a direct test. Walking all 4,009 draws and recording every number's gap since its last appearance shows that a number drawn last time had an 11.38% chance of appearing again, while one cold for twenty or more draws had 11.16%. The expected rate under independence is 11.32%. Fisher's exact test returned p = 0.30, and a chi-squared test across twenty-six gap buckets returned p = 0.62. The gap carries no information about the next draw. The process has no memory.
A null result invites the objection that the tests were simply too weak to detect anything. To rule that out, the identical battery was run against three systems with known structure.
| System | Lag-1 autocorrelation | Forecast vs baseline | Edge persists |
|---|---|---|---|
| Lottery | 0.0142 | -0.3% | 0 of 10 runs |
| Weather-like | 0.8462 | +47.3% | 10 of 10 runs |
| Sales-like | 0.9824 | +47.3% | yes |
| Churn-like | n/a | p = 2.6e-160 | yes |
The same machinery that found nothing in the lottery fired instantly on every system with real structure, and held across every independent sample. There is a real difference between a model that failed and a question that has no answer. This was the second kind, and the tools were working correctly by telling me so.
Most portfolio pieces show only the finished result. This one includes the wreckage, because the error trail is the skill on display. Every item below was published with confidence and later retracted. Eleven of the twelve were caught by running a test rather than by re-reading the reasoning, which is itself the lesson about where review effort belongs.
Nearly every error came from computing an answer under an assumption and then letting the conclusion stand as though the assumption were settled. The fix is cheap and mechanical. When a single unverified fact can flip a recommendation, verify it before publishing rather than after.
Once prediction was ruled out, the question changed. The probability of winning is fixed at one in 22,957,480 regardless of which numbers are chosen, but the jackpot is divided among winners, and that depends entirely on what other people play. That is a fact about human behavior rather than about the draw, and human behavior does have memory.
Reading the operator's own rules document surfaced something no amount of draw analysis could. Florida's automatic multiplier applies to the Double Play add-on as well as the base game, and Double Play's prize floors are higher at half the price: $3,500 against $3,000 for five matches, $60 against $50 for four, $7 against $5 for three. Working the coupled free-ticket recursion through, the one-dollar add-on returns 78.2 cents against the base ticket's 27.0 cents per dollar. The crossover where base tickets become the better buy sits near a $65 million jackpot, a level this game does not reach.
Three patterns in player behavior proved measurable. Players cluster heavily on 1 through 31 because they use birthdays. They avoid consecutive pairs because those do not look random, even though 46.5% of actual draws contain one. And a few percent mark visual shapes on the playslip, such as lines, diagonals and blocks, which randomly chosen tickets form essentially never. Modelling all three produced a ticket selector whose expected number of co-winners is half that of a random ticket, and which stays below average popularity even if a third of self-pickers adopt the same contrarian approach.
A three-dollar full ticket returns about $1.32 in expected value. None of this makes the lottery a positive-value proposition, and nothing can. What it does is ensure that if the improbable happens the prize is split fewer ways, and that every dollar spent buys more than it otherwise would.