Methodology
What goes in, what comes out, and how the published record is calculated. The guide explains the model and how a stake is sized; this page covers everything around it.
The data behind a prediction
Every fixture is priced from the same set of inputs, and every match page publishes which ones were actually available for that match. Nothing is silently missing.
| Input | What it contributes |
|---|---|
| Recent form | Each side's last matches, results and goals, home and away. |
| Head to head | Recent meetings between these two clubs. |
| Season profile | The season's record for each side: scoring, conceding, shot volume. |
| Competition standings | Where both sides sit in the table they are playing in. |
| Historical results | Years of league results, used to rate clubs against each other. |
| Bookmaker odds | Live prices from several books, the number our number is compared to. |
| Injuries and suspensions | Who is unavailable. |
| Confirmed lineups | When published before kickoff. |
| Match-day weather | Conditions at the ground. |
Match history and odds come from commercial data providers. Historical league results come from football-data.co.uk. Ratings are built from that history rather than bought in.
How a fixture becomes a prediction
- Identify. Work out which club and which competition this actually is. Clubs share names across countries, reserve and women's sides share names with senior ones, and a second-tier match must never be priced off top-flight history. This step is unglamorous and it is where most of our past mistakes came from.
- Rate. Turn each side's history into attack and defence strength, shrunk toward the league average when the record is thin, so a club with three matches behind it does not get the same confidence as one with thirty.
- Model. Dixon-Coles, a standard goal model for football, turns those strengths into a probability for every scoreline. Where a competition has too little history for it, a weaker fallback is used and the fixture is labelled accordingly.
- Derive the markets. Every market we publish comes from that same scoreline distribution, so the 1X2 call, the over/under and the correct score can never contradict each other.
- Price. Compare our probability to the bookmaker's, with the bookmaker's margin removed, and compute the edge.
- Select. Fixed rules decide whether a bet is placed: minimum probability, minimum price, minimum edge, a cap on how large an edge is believable, and a limit per market. A big edge that fails any of them is not backed.
Confidence labels come out of this too. They describe how much history a fixture was priced on, not how likely the bet is to win. The bands are defined here.
What the AI analyst does, and what it does not
A small number of fixtures a day get a written analysis from a large language model. It reads the same data ledger above and argues the bet the model already backs.
It does: write the argument, flag the risk in it, name the context a goal model cannot see, and adjust the expected goals for a match within limits when it has a stated reason.
It does not: choose which bet to place, set the price, set the stake, or decide whether a bet clears the rules. Selection and staking are arithmetic, and the model's numbers are what they run on.
If the write-up and the placed bet ever come apart, the write-up is not published. A reader is never shown the case for one bet next to a different one.
Settlement
Bets settle against the final score from the data provider, automatically, within minutes of full time. Every bet is graded won or lost. A cancelled or abandoned fixture is voided and its stake returned, which means it counts in neither column.
The price recorded is the price at the moment the bet was called, not the closing price. If a market moves after we publish, that movement is shown next to the original number rather than replacing it.
A day's board is frozen once the day ends. Changing a selection rule afterwards cannot alter what was claimed on a past day.
Whether our prices beat the closing line
A bet's result is a poor way to judge the bet. Over a few hundred bets the noise is far larger than any edge, so a good run and a lucky run look identical. The closing price is a better instrument. It is the market's last and best estimate, and comparing our price to it answers the same question far more precisely.
We measure our odds against the closing odds. Both carry the bookmaker's margin, so the margin cancels and zero means we struck at the close.
The current answer is that we cannot tell. Across 596 comparable bets between 2026-08-04 and 2026-09-04, our prices sit +0.18% against the close, with a standard error of 0.12%. That is a t statistic of 1.48 against a bar of 2.69. It is indistinguishable from striking at the market price.
Of 7 markets measured, 0 clear the bar. 4 cannot be measured at all: both sides of the market appear to beat the close, which is impossible, so what we are seeing there is a difference between two price sources rather than line value.
551 of 1147 bets are excluded because no comparable closing price was captured for them.
We publish this because the alternative is publishing only the findings that flatter us. If the answer changes, this section changes with it.
How the numbers on the results page are calculated
| Figure | How it is computed |
|---|---|
| Settled bets | Bets won plus bets lost. Voids and anything not yet settled are excluded. |
| Win rate | Bets won divided by settled bets. |
| Profit | Returns minus stakes, over settled bets, at the recorded price. |
| Return (ROI) | Profit divided by total staked, as a percentage. Not profit over bankroll, which flatters a small book. |
Stakes are the ones the rules actually produced, at a fixed reference bankroll. Every settled bet counts, including the ones that lost, and nothing is removed once it has settled.
A win rate on its own says very little, because a 70% win rate at short prices can lose money and a 30% win rate at long ones can make it. Return is the number that matters, and over any short run it is mostly noise.
What we hold back
How the inputs are weighted, and where we let the model disagree with the market, stays in-house. That is the part that took the longest to get right.
Everything that affects whether you can check us is public: the prediction, the price we called it at, the stake, the result, and the running record.