Before every deadline we freeze the expected-points feed. Once FPL has finalised the gameweek, we score that frozen file against what actually happened. Nothing on this page can be edited after the fact, and every number says which players it was calculated over.
not yetNot yet. The rule needs 6 graded gameweeks with our model ahead of FPL’s feed on rank match among starters, the lead clear of chance, and at least as many of the top 20 starters picked. So far: 1 of 6 gameweeks graded with both sets of numbers frozen; our model is not ahead of FPL’s feed on rank match among starters; it picks fewer of the top 20 starters than FPL’s feed.
Over the one gameweek in the window our model’s rank match among starters is -0.021 against FPL’s feed, and it picks 0.078 of the top 20 starters against the feed’s 0.102.
The rule is written down in the xPoints repository's score.py and evaluated over the last 6 graded gameweeks (currently gameweek 3).
| GW | Players graded all / starters | FPL's feed | Our model (shadow) | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Average error | Zero guess | Rank match | Top 20 | Captain regret | Average error | Rank match | Top 20 | Captain regret | ||
| GW1 | 600 / 210 | 1.598 | 1.593 | 0.086-0.05 to 0.22 | 0.11 | 13.4 | n/a | n/a | n/a | n/a |
| GW2 | 616 / 209 | 1.467 | 1.450 | 0.1730.04 to 0.32 | 0.32 | 9.8 | n/a | n/a | n/a | n/a |
| GW3 | 652 / 212 | 1.295 | 1.402 | -0.023-0.16 to 0.11 | 0.10 | 13.0 | 1.100 | -0.044-0.16 to 0.08 | 0.08 | 6.0 |
Average error covers every player in the file. When the Zero guess column is red, predicting zero points for every player was closer than the feed that week. That happens because most players score zero, so we show this number but never use it to choose a model. The data behind each row (every player's prediction, minutes and points) is in the scores folder on GitHub.
Who is counted. All means every player in the frozen file. Starters means the players who played 60 minutes or more that gameweek. The same feed can look good on one group and close to random on the other. In Gameweek 1 it ordered the full list well, largely by giving near-zero to players who did not play, and only a little better than chance among those who did. So every number here says which group it covers.
Rank match is a rank correlation (Spearman). It asks whether the feed put players in the order their points actually fell. 1 is a perfect order, 0 is no better than chance. This is the number that decides whether our model replaces FPL's figure. The small range beside it is a 95% confidence interval.
Top 20 is the share of the feed's top 20 who finished in the real top 20 that week. Captain regret is the best score any player got that week minus the score of the feed's top pick, so lower is better.
The three feeds. FPL's feed is the official expected-points figure from the game itself, and it is what the app shows today. Price only ranks players by price and nothing else, a sanity check any model must beat (it appears once the next gameweek is graded). Our model is FPL Analyst's own projection. It runs in shadow, is graded here every gameweek, and replaces FPL's figure in the app only after it has won over a run of gameweeks, not before.
One gameweek tells you very little. Rank match among starters moves by about 0.098 from one gameweek to the next through luck alone (measured from the graded gameweeks).
To be reasonably sure that one feed beats another by +0.05 in rank match takes about 31 gameweeks of evidence, or about 41 to be very sure.
Until that many gameweeks exist, a lead on this page is a hint, not proof, and the page will say so rather than round up.
What no feed can see: late team news, press conferences after the freeze, and rotation decided on the day. Predictions are frozen at the deadline, and those things happen after it.
The Transfer Planner's projections are frozen at every deadline from Gameweek 4 onwards. The first grade appears once Gameweek 4 is final; projections made further ahead are graded as the later gameweeks finish.
xMins and its chance of sixty minutes are frozen at every deadline from Gameweek 4 onwards and graded once the gameweek is final.
Scorecard generated 14 Sept 2026, 18:28 UTC. Latest graded gameweek: GW3. Method, source code and raw scores are on GitHub. Back to xPoints.