Our Model Went 15 for 15. That Is How We Knew It Was Broken.
A perfect backtest is not a triumph; it is a bug report. Rebuilt so that cheating was impossible, the same method beat the spread 51.0% of the time across 2,140 games — and the interval around that contains 50.
The question: can our ratings beat a betting line?
No. And for one afternoon we had convincing evidence that we could.
Why that is surprising. Not the answer — the answer is what anyone should expect. What is surprising is how good the wrong evidence looked, and that the thing which exposed it was the result being too good.
What you get: the smell test that catches this in your own work.
The result that was too good
We keep a ledger of picks in a family pool. Wanting to know whether our method was any use, we ran it backwards over a week of games already played.
It went 15 for 15. Every pick, against the spread, in the correct order of confidence.
Now, that should feel wonderful for about four seconds. Fifteen coin flips landing the same way is roughly a one-in-thirty-three-thousand event. Which is the point: when a test hands you a number that good, the model is almost never the explanation.
So we measured the thing directly. Across all 51 games that week, the correlation between our edge and what actually happened against the spread was +0.842.
Nobody predicts closing lines at 0.84. A genuinely good model sits near +0.10. That number is not a discovery; it is a confession.
What we had done
The ratings we fed the test were not the ratings that existed before the games. They were today’s.
The data provider serves one set of ratings and overwrites them as results arrive. We had noticed the drift ourselves two days earlier — one club had moved from 32.7 to 30.0 — and then ran the test with the updated numbers anyway.
So the model was asked to predict games it had already watched. It did brilliantly. Anyone would.
Leakage does not announce itself with an error. It announces itself with a wonderful result.
The ProfessorDoing it so cheating was impossible
The fix was to stop borrowing anybody’s rating. We built our own from scratch, and rebuilt it every week of the season using only the games played before that week. A rating for week seven has never seen week seven. It cannot.
Then we let it pick against the closing line for every game of 2024 and 2025 — 2,140 games.
It won 51.0% of them. The 95% interval runs from 48.9% to 53.1%. Break-even against a standard line is 52.4%.
The interval contains 50. We cannot reject the possibility that our model knows nothing whatsoever about football.
Look at what that figure does to the idea underneath the whole method. We rank our confidence by how far our number sits from the line — the bigger the disagreement, the more sure we are.
If that were sound, the bars would climb. They sit flat. A six-point disagreement wins 51.1% of the time; so does a disagreement of more than ten. The one band above break-even, at three to six points, is a lonely bar among four and we are not going to build anything on it.
Why the market is so hard to beat
Worth saying plainly, because it is not a failure of our arithmetic.
A betting line is not a prediction. It is the price at which the money balances. Every injury report, every bit of local knowledge, every professional model already sits inside it. To beat it you do not need to be good; you need to know something several thousand motivated people have missed.
We did not. Almost nobody does.
What to take home: be suspicious of your best result
Everyone knows to check a result that looks wrong. Almost nobody checks the one that looks wonderful, and that is where the errors live, because a mistake that flatters you does not feel like a mistake.
So keep one rule: when a number comes back better than it has any right to be, treat it as a bug until you have proved otherwise.
The specific version, for anything predicting the future: ask what your inputs knew, and when they knew it. A rating that updates is a rating that has read the newspaper. A survey scored after the outcome is a survey that saw it. The past is remarkably easy to predict once it has happened.
We now write the ratings down every Thursday, before kickoff, and keep them. In November we will be able to answer this honestly. Today we cannot, and saying so costs less than the alternative.
Baseball is ranked by championship leverage: we simulate the rest of the season 60,000 times, then split those seasons by who won each of today's games. College football cannot be simulated that way, so it is ranked by how close to a coin flip the ratings make it — a lopsided game teaches you nothing. Tomorrow this block reports what happened to today's pick.
Notes & sources
The broken test: SP+ ratings from the CollegeFootballData API against mean closing spreads from the same source, on the 51 games of week one 2026 where both clubs were rated and a line existed. Fifteen of fifteen against the spread on the top-ranked card; correlation between our edge and the actual result against the spread +0.842. The endpoint serves current ratings and overwrites them as the season progresses; there is no historical snapshot.
The honest test: a Simple Rating System solved from scratch by iterating each club’s value to the mean of its game margins plus its opponents’ values, margins capped at 28 points, 2.5 points removed for home field. For each week from week five onward it is rebuilt using only games from earlier weeks that season, then used to pick against that week’s closing line. 2,140 games across 2024 and 2025, pushes excluded.
Result: 1,091 wins, 51.0%. Standard error on a proportion at this sample is 1.1 points, giving a 95% interval of 48.9% to 53.1%. Correlation between edge and result against the spread, +0.018. By season: 52.6% in 2024 (r = +0.039), 49.4% in 2025 (r = −0.004). By edge band: 0–3 points 49.3% (n=980), 3–6 points 53.5% (n=620), 6–10 points 51.1% (n=354), above 10 points 51.1% (n=186).
Three limits. Beginning at week five means the early season, where a market is least settled and an edge most plausible, is excluded — that is a real cost of removing leakage, since a rating needs games before it exists. Our rating uses margins alone and no injury, weather or personnel information, so this bounds what a simple rating can do rather than what any model could. And 51.0% is not proof of no edge; it is a failure to detect one, which is a weaker and more honest claim.
Reproduce it: python3 scripts/snapshot_ratings.py freezes each week’s ratings before kickoff so that future tests need no reconstruction at all.