Every projection in this app comes from one expected-points (xP) model. Most FPL tools ask you to trust their numbers. We'd rather show you the machinery — including the parts that don't work yet — because a forecast you can interrogate is worth more than a forecast you have to believe.
The shape of the model
The model has two layers.
The team layer estimates how many goals each side will score and concede in a given fixture. It's a double-Poisson model: every team gets an attacking strength and a defensive strength, updated as results arrive, and a fixture's expected scoreline falls out of the interaction between the two — adjusted for home advantage. This is a well-worn approach in football analytics, and we use it deliberately: it's simple enough to debug and strong enough to capture what matters, which is that who you play, and where, changes what you should expect.
The player layer converts team expectations into player points. Each player's per-90-minute rates — goals, assists, clean-sheet share, bonus, appearance points — are scaled by their expected minutes and by what the team layer says about that specific fixture. A striker away at a title contender and the same striker home to a relegated side get very different numbers, even in identical form.
The result is one xP figure per player per gameweek, recomputed before every gameweek from scratch.
Walk-forward, or it doesn't count
The single most important property of the backtest: the model only ever sees data from before the gameweek it predicts. Predicting GW20 uses GW1–19 and nothing else, exactly as if it were running live. This is called walk-forward validation, and without it any accuracy claim is fiction — a model allowed to peek at the future scores brilliantly and means nothing.
How it scored
We backtested on the 2025/26 season, gameweeks 8 through 38 (the first seven are burn-in while team strengths settle). The measure is Spearman rank correlation — does the model order players correctly by the points they went on to score? Ranking is the thing that actually matters in FPL: you're choosing between players, not betting on totals.
| Predictor | Rank correlation with actual points |
|---|---|
| Our xP model | 0.286 |
| Season points-per-game | 0.158 |
| Last-5-gameweek form | 0.141 |
The model beat points-per-game in 31 out of 31 gameweeks — not on average while losing some weeks, but every single week. It also nearly doubles the predictive value of short-term form, which is the number most managers actually pick on.
Worth being honest about the absolute level: 0.286 is a long way from clairvoyance. Football is brutally random week to week — a deflection, a red card, a rotation decision. What the model offers is a consistent edge in the ordering, applied over 38 gameweeks. Compounding a modest edge every week is how ranks are built.
Where it still fails
Three known gaps, all on the fix list for the 2026/27 reset:
- No injury awareness. The model doesn't yet read availability flags, so a player ruled out on Friday can still carry Saturday xP. The data is already in our database; wiring it in is scheduled.
- Optimistic at the very top. The model over-predicts season totals for premium players — the ordering is right but the calibration at the top of the range runs hot. Fixing this matters most for captaincy maths.
- No penalty or set-piece boost. A confirmed penalty taker deserves a bump the model doesn't yet give.
When these ship, we'll publish the before/after backtest numbers here. A model that grades itself in public has to keep doing so when the grade is embarrassing — that's the deal.
What this means for your team
The xP columns you see in Assistant Manager and on every player page are this model's output — the orange expectation line on a player's gameweek chart is the same number, drawn against what actually happened. When the line and the bars diverge for weeks, that's the signal worth acting on: conditions changing faster than reputation.
The model reset for 2026/27 happens the moment the new season's API goes live. The numbers will be rough for the first few gameweeks — they always are while team strengths re-settle — and we'll say so on the page rather than hide it.