Every morning the model is rebuilt from scratch out of past results - 29,723 of them across 50 leagues. Nothing is hand-picked, and no tip is written by a person.
Each team carries an attack and a defence rating, fitted by a time-weighted regression over results with a 200-day half-life - so last week counts for more than last autumn, without last autumn counting for nothing. Ratings are centred within each league, because a mid-table side in one division is not the same animal as a mid-table side in another. Fixtures across divisions are handled with an explicit tier ladder, and where two leagues cannot honestly be compared the fixture is skipped rather than guessed at.
Those ratings give an expected goals figure for each side. From that pair every market on the page is derived as one coherent set - match outcome, double chance, over and under, both teams to score, team totals - which is why the numbers on a match page agree with one another.
They are the model's estimate of how often that outcome happens in games like this one. They are not odds. A bookmaker's price carries their margin; ours does not, which is why the two rarely match exactly.
Results are graded against an authoritative source, and the published confidence is corrected from the model's own record: where a market has been landing more or less often than claimed, the shift is measured and applied, shrunk toward no correction while the sample is still small. The more games that are played, the better calibrated the numbers become.
Every market is graded against the final score on matches the model had not seen when it made the call. Not only the tip we lead with - all of them, including the ones we get least right.
| Market | Games | We said | Landed | Diff |
|---|---|---|---|---|
| Match result | 1,626 | 45% | 48% | +2.9 |
| Double chance | 1,626 | 71% | 73% | +2.0 |
| Over 1.5 | 1,626 | 75% | 78% | +3.2 |
| Over 2.5 | 1,626 | 51% | 55% | +4.4 |
| Over 3.5 | 1,626 | 30% | 32% | +2.2 |
| Both to score | 1,626 | 54% | 58% | +3.5 |
| Team over 0.5 | 1,626 | 78% | 82% | +4.4 |
| Team over 1.5 | 1,626 | 46% | 49% | +3.0 |
| First-half goal | 350 | 70% | 73% | +3.2 |
Graded on 1,626 matches the model had not seen when it made the call. “We said” is the average confidence we published; “landed” is how often it actually happened.
It cannot see injuries, suspensions, team news, a manager resting a squad, or the weather. It has no opinion on motivation. On any single match it can be comfortably wrong, and sometimes will be. What it offers is consistency across a lot of matches, not certainty about one.