How it works
The short version
For each match we build both teams out of the eleven players likely to be on the pitch, work out how many goals each side should expect to score, and turn that into the chance of a home win, a draw or an away win. Then we show our working.
- Free, public dataSquads and availability, every player's match-by-match record, results and odds going back a decade.
- The elevenWho is actually likely to start – and what each of those eleven has been doing on the pitch lately.
- Two sides, weighedAttack against the defence it faces, keeper against the shots he will see, form, rest, congestion.
- Goals expectedHow many each side should score, against this opponent, on this day.
- Every scorelineThe chance of 1–0, 2–1, 3–3 and the rest, added up into a home win, a draw, an away win.
Eleven players, not two badges
This is the part that makes the site different, so it is worth being clear about. Most public models rate the club: a single number that moves slowly, season to season. We rate the team sheet. Every player carries his own record – what he creates, what gets conceded while he is on, what a keeper saves – weighted towards recent matches, and a thin record is pulled towards what is normal for that position so that one lively cameo cannot turn a substitute into a superstar.
Before team news is out we predict the eleven ourselves: from availability, from how much of the club's own recent sides each player has been part of – his record in another shirt does not count, which is what keeps a returning loanee out of an eleven he is no longer picked for – from the last published team sheet, and from where a new arrival sits in his club's price order until he has played enough to be judged on the pitch instead. The weights were set by replaying five seasons of confirmed team sheets, where this method names about eight of the eleven. Every predicted starter carries a percentage. When the real line-up lands in the hour before kick-off it replaces the prediction, and the card tells you which one you are looking at.
Reading a match card
The chart down the middle compares the two sides stat by stat. A bar grows from the centre towards whichever side is ahead, and a full-length bar means the gap is about as big as that stat ever gets – measured from the real spread across nearly two thousand past matches, not a number picked by eye.
Roughly half the rows are the stats you would expect to see: recent form, goal difference, the same split home and away, expected possession, expected goals. The rest change from match to match. Those are the measures that most separate these two sides, and the one at the top is the single stat most likely to decide it – flagged when it points away from our own call, which is the most interesting thing a card can tell you.
Where the numbers come from
Everything is free and public: the official Fantasy Premier League feed for squads, availability and per-player match stats; football-data.co.uk for results and bookmakers' odds back to 2015-16; BBC Sport for confirmed line-ups, per-match possession, passing and expected goals, and the live score while a match is on. Nothing is bought, and no single source is load-bearing – if one breaks, the rest still produce a prediction.
From players to probabilities
The two sides' figures go into a scoreline model: rather than guessing at a result, it works out how many goals each side should expect, then the likelihood of every plausible score – 1–0, 2–1, 3–3 and the rest. Add up the scorelines where the home side finishes ahead and that is the home win probability. It carries a correction for something the raw arithmetic gets wrong: real football produces rather more tight, low-scoring draws than chance alone would suggest.
Each side's expected goals are a weighted sum of its measures, so the gap between the two sides splits exactly into one share per measure. Every match page shows that split under What separates them, in goals: the reasons pulling each way and the margin they add up to, which is the margin the call rests on. One flaw to own. A few of the model's weights are corrections for measures that overlap – two ways of counting the same goals – and read on their own they would credit a side with the weaker attack for its attack. Those never get a line of their own. They go into Everything else, with the smallest measures, so the total still adds up.
The model also knows each side's full calendar. Cup and European matches count towards rest and congestion, playing midweek before a league game is a signal in its own right, and so is how many of the eleven have changed since the last match.
There is also a version of the model that knows what every squad costs and who is waiting on the bench. Replayed over the same five seasons it could not beat the one above, so it is tracked in the table below rather than published – the bar every layer has to clear before it touches a number we put our name to.
The probabilities are published exactly as the model produces them, with no cosmetic layer on top. We tested one and found the raw output already honest – when we say 60% it happens about 60% of the time – so the extra layer only added noise. If that ever stops being true, the calibration chart further down this page will show it before we do.
The key stat
This is the oldest idea in the project. Take every stat and set it against its opposite number, then weigh those measures in combination as well as on their own. That gives a large field of candidate comparisons. Score each one on how well it has actually told winners from losers – never on the match we are about to predict, only on matches already played – and keep the strongest for the two sides in question.
The score you see is the plain reading: of the matches where one side was ahead on that measure, how often that side went on to win. Which measures get combined, and how, is the part we keep to ourselves.
One honest note about what this layer does. We tested whether it should move the probability itself, and over five seasons it made no measurable difference – so it does not. The published number comes from the model above. This layer chooses which stats are worth your attention for each match, and the gold row on every card is its pick – which is why the key stat can point the other way from the call, and the card says so when it does. What the call itself is made of is the model's arithmetic, on each match page.
The match notes
No AI writes the match notes. They are built straight from the numbers behind the chart by a piece of code that fills in templates: the call and its probabilities, the biggest gaps each way, the form with a note on where that form was actually played, who is missing. Each line is one fact with its figures attached, so nothing is asserted that you cannot check against the chart above it. A language model could not put a number in one of those lines if it wanted to, because it never sees them.
The pages around them are a different matter, and the honest version is worth stating plainly. This site was built with an AI coding assistant, and the explanatory writing on pages like this one was drafted with one too, then edited. That is not the same thing as a machine writing the football: the notes on a card, the probabilities, the tables and the charts are all produced by code from data, and no model has a hand in any figure the site publishes. But the sentence you are reading now had one, and a site that makes this much of showing its working should say so rather than claim a purity it does not have.
They are deliberately plain. An earlier version wrote them as paragraphs, and prose assembled by machine either repeats itself across a round of fixtures or reaches for phrasing it cannot quite control. The line for the side we have not tipped is always printed, even when the honest answer is that nothing in the measured stats favours them.
How we grade ourselves
Picking the winner is the easy half. The harder half is being right about how sure to be, and that is what our headline score measures: the distance between the probabilities we published and what actually happened, turned round so that a hundred per cent is perfect. A pure guess – 33% on each of the three outcomes – scores 66.7%, so anything above that is doing some work.
Replayed match by match across five seasons, our model scores 71.06%, against 71.51% for the bookmakers – who have money, market forces and far more information than we do. Beating them is not the goal. Being close to them while showing every step of the working is.
The same scores are calculated the same way for us, for the bookmakers, and for the stripped-down versions of our own model, so the comparison is fair. The full table is below; this season's live scores are on the results page.
How it did on four seasons of matches already played
Before anything went out live, we replayed 1,900 matches from 2021-22 to 2025-26 – predicting each one using only what was known the day before it kicked off. It is a rehearsal rather than a record, which is why it sits here with the method rather than on the results page: it is evidence about how this works, not something that happened this season.
Our model against the alternatives
Each row is a different amount of knowledge. The bookmakers are the standard to beat; the rest are versions of our own model with pieces taken away, so you can see what each piece is worth.
| # | What it knew | Forecast accuracyHigher is better | Confidence penaltyLower is better | Winner called rightHigher is better |
|---|---|---|---|---|
| 1 | The bookmakers the standard to beat | 71.51% | 0.9594 | 55.3% |
| 2 | Expected goals, line-ups, schedule and squad value | 71.08% | 0.9720 | 53.7% |
| 3 | Our published model ours | 71.06% | 0.9727 | 54.3% |
| 4 | Expected goals, line-ups and key stats | 71.05% | 0.9733 | 53.6% |
| 5 | Expected goals | 71.04% | 0.9732 | 53.8% |
| 6 | Expected goals, with line-ups | 71.04% | 0.9734 | 53.5% |
| 7 | Team strength alone | 70.94% | 0.9758 | 54.2% |
The order is set by the accuracy score, which judges the whole forecast – not just whether the right team was picked, but whether the confidence attached to it was deserved. Being right while sounding far more certain than the evidence allowed scores badly, and so does hedging on a match that was never in doubt. Team strength alone is the case worth noticing: it is third for winners called, and still finishes seventh overall, because it is confident in the wrong places.
Our percentages mean what they say
Not, as the man said, sixty per cent of the time it works every time. When we say 60%, it happens about 60% of the time – and when we say 25%, about a quarter. That is the whole test, and it is the difference between a forecast and a hunch with a number attached.
Every prediction we have ever made, sorted into buckets by how likely we said it was, then checked against how often it actually happened. A dot on the dashed line means that group of calls came in exactly as often as claimed. Across 5,700 calls the average distance from the line is 0.6 of a percentage point. Point at any dot to read it out.
What has been separating winners
- Team strength & shots on target 76%
- Team strength & keeper faced 76%
- Team strength 76%
- Team strength & attack from this XI 76%
- Team strength & attacking threat 76%
- Team strength & defence from this XI 76%
- Team strength & defence faced 76%
Read as: across recent matches, how often the side ahead on that measure went on to win. We weigh these in combination as well as singly; which stats go together, and how, is the part we keep to ourselves.
What this can't do
- It knows nothing about a manager's plan, a row in the dressing room, or a cup final three days later.
- Before team news, the eleven is our best guess – and our guess is worse than the real thing.
- It is built on who wins when someone does. Draws come from the model, not from the comparisons.
- Five seasons is 1,900 matches. Differences in the fourth decimal place are noise, and we treat them as noise.