The public ledger

The SquadPilot public scorecard.

SquadPilot freezes its Fantasy Premier League projections before each deadline and publishes its own error after the Gameweek is played, measured against what actually happened and against the free baseline FPL already gives every manager. This page sets out exactly what gets frozen, when, and how the error is calculated.

STATUS · 2026/27 SEASON · GW1 TO GW5 ARE SCORED. FINAL. 3,187 player projections have been frozen before kick-off and graded against realised outcomes once FPL confirmed each Gameweek. Overall points error: 1.21 per player. Each Gameweek is published separately below, because an average across weeks can hide a bad one. The figures are whatever the ledger emitted, hits and misses alike. Five scored Gameweeks is still a measurement, not a trend.

squadpilot://scorecard · read-only
Gameweek1 · 2026/27 · SCORED · FINAL
Frozen at2026-08-21T17:30:56Z
Frozen predictions600 players
Model versionxmins-v2/6 + xpts-v2/3
Outcomes matched600 / 600
Points MAE1.50 points per player, across all 600
xMins MAE22.5 minutes per player
Start Brier score0.176
Biggest missDe Cuyper: forecast 2.3, scored 17 (error 14.7). It stays up.
vs ep_nextmodel 1.50 vs baseline 1.60 on the same 600 players, model ahead by 0.10
vs points-per-gamemodel 1.50 vs baseline 1.93, model ahead by 0.43
ex. FPL defaultson the 25 players FPL priced individually: model 2.34 vs ep_next 2.14, so the baseline is ahead by 0.20
The last row is the caveat this page promised to publish against itself. 575 of 600 ep_next values were repeated defaults, and on the small slice that remains FPL's own estimate came out ahead. It stays on the record. One Gameweek is a measurement, not a trend.
squadpilot://scorecard · read-only
Gameweek2 · 2026/27 · SCORED · FINAL
Frozen at2026-08-28T17:30:45Z
Frozen predictions620 players
Model versionxmins-v2/7 + xpts-v2/3
Outcomes matched620 / 620
Points MAE1.19 points per player, across all 620
xMins MAE15.9 minutes per player
Start Brier score0.096
Biggest missB.Fernandes: forecast 6.2, scored 23 (error 16.8). It stays up.
vs ep_nextmodel 1.19 vs baseline 1.46 on the same 620 players, model ahead by 0.27
vs points-per-gamemodel 1.19 vs baseline 1.43, model ahead by 0.24
ex. FPL defaultson the 29 players FPL priced individually: model 2.93 vs ep_next 3.01, model ahead by 0.08
The last row is the same caveat run again, and this time it went the other way: with the 591 repeated defaults removed, the frozen forecast was ahead by 0.08 on the 29 players FPL priced individually. That is a much smaller margin than the headline 0.27, on a much smaller sample, which is exactly why the slice gets published instead of the headline alone.

Error by segment

The average hides where the error actually lives. Broken out by what each player actually did in GW1: didn't play (292 players) 0.66 points error; blanks (200) 1.20; returns (89) 3.21; hauls (19) 9.49.

The same cut of GW2: didn't play (310) 0.48; blanks (204) 1.10; returns (92) 2.65; hauls (14) 8.60. Every segment tightened, and the haul segment is still nearly nine points out. Hauls are where every points model hurts, and where this one has the most to prove. Two weeks of movement in the right direction proves nothing on its own.

What gets frozen

A projection you cannot edit after the fact.

Thirty minutes before each FPL deadline the ingest is refreshed, the model runs, and the result is written to an append-only ledger. Each frozen row carries:

  • the player and the Gameweek it applies to;
  • expected minutes and the start/cameo distribution behind them;
  • expected points, broken into its components: appearance, goals, assists, clean sheet, goals conceded, saves, bonus, defensive contribution;
  • the model version that produced it, so a later model cannot quietly take credit for an older call;
  • the ingest snapshot the inputs came from, recorded by id and hash so the exact inputs are recoverable;
  • a UTC timestamp of the freeze itself.
Append-only means append-only. Realised outcomes are recorded later as separate observation events, joined to the frozen row at read time. There is no code path that rewrites a frozen prediction, and no way to delete one after a Gameweek goes badly.
How error is measured

Four numbers, and the definitions that make them auditable.

Accuracy metrics published on the SquadPilot scorecard
MetricWhat it measures
Points MAE Mean absolute error between the frozen expected points and the points the player actually scored, across every frozen player in the Gameweek.
xMins MAE Mean absolute error between frozen expected minutes and minutes actually played. Minutes are where most points error is really born, so the figure is reported separately rather than hidden inside the points number.
Start Brier score Calibration of the start probability. A model that says 70% should start about 70% of the time. The Brier score is what catches it when it does not.
Biggest miss The single worst call of the Gameweek, named. It gets published because burying it is exactly what a scorecard is meant to prevent.

Segments

A model can look accurate on average while being useless at the only outcomes that change your rank. Error is therefore also broken out by what the player actually did, using definitions published alongside the numbers:

  • Blank: played, but scored 2 points or fewer.
  • Return: scored between 3 and 9 points.
  • Haul: scored 10 points or more.
  • Did not play: zero minutes.
The baseline

An error figure needs something to be measured against.

"Our MAE is 2.1" means nothing on its own. The honest question is what a free, zero-effort forecast manages on the same players in the same Gameweek.

Baseline 1

ep_next: FPL's own estimate

The official Fantasy Premier League API ships its own next-Gameweek points estimate for every player in bootstrap-static. It is free and already sitting on the site you play on, which makes it the most relevant "why not just use the free thing?" test available.

Baseline 2

Points per game: naive persistence

The player's points-per-game rate from the same snapshot. Before a ball is kicked this is last season's rate, which makes it the natural "assume nothing changed" benchmark for the opening Gameweek.

The caveat we publish against ourselves

Why ep_next is a weak baseline at GW1

With no current-season data, FPL emits flat repeated defaults. On the 21 August 2026 snapshot, six different reserve goalkeepers all carried exactly 2.60. A number repeated across hundreds of players is a prior, and beating a prior would prove nothing.

So the comparison gets published twice: once on the full population, and once with those repeated-default rows removed. The count of degenerate values travels with the payload. Beating a broken baseline counts for very little, and we would rather say so than let the first number stand unqualified.

The cycle

One Gameweek, on the record.

1
Inputs refreshed T MINUS 30 MINUTES
Latest official FPL data ingested and snapshotted by id and hash.
2
Forecast frozen AT THE DEADLINE
Every projection written append-only, timestamped, with its model version.
3
Reality runs GAMEWEEK IN PROGRESS
The pitch doesn't care what anyone projected.
4
Outcomes matched and scored AFTER THE FINAL FIXTURE
Error, calibration, segments and the baseline comparison published here.
What this page will never do

The rules we hold ourselves to

No accuracy claim before there is a scored Gameweek to support it. Five scored Gameweeks is still a measurement, not a trend, and it will be labelled as such until the sample is worth the word.

No retro-fitting. A frozen call is graded against the model version that made it, not the version running today.

No quiet deletions. Misses stay next to hits, permanently. Your own overrides are scored on the same terms. The ledger cuts both ways.

No placeholder numbers. Until outcomes exist, this page says awaiting outcome and nothing more.

FAQ

The scorecard, answered.

What accuracy has SquadPilot achieved so far?

Five Gameweeks have been scored. In GW1 2026/27, 600 player projections were frozen on 21 August 2026 before kick-off. They averaged 1.50 points of error per player, against 1.60 for FPL's own free ep_next estimate and 1.93 for points-per-game on the same 600 players. With FPL's repeated default values excluded the comparable slice is only 25 players, and on that slice ep_next was ahead by 0.20. In GW2, 620 projections were frozen on 28 August 2026 and averaged 1.19, against 1.46 for ep_next and 1.43 for points-per-game; on the 29 individually priced players the frozen forecast was ahead by 0.08. The worst calls of those two weeks were De Cuyper (forecast 2.3, scored 17) and B.Fernandes (forecast 6.2, scored 23). GW3 to GW5 were scored the same way: 652, 656 and 659 projections averaged 1.10, 1.20 and 1.10, against 1.29, 1.23 and 1.16 for ep_next, so the frozen forecast was ahead in each of the five weeks, though only by 0.04 in GW4. Across all five Gameweeks, 3,187 frozen forecasts average 1.21. The biggest misses were Mitchell (forecast 3.6, scored 15), Groß (4.4, scored 17) and Brobbey (3.1, scored 17). Five scored Gameweeks is still a measurement, not a trend.

What is the frozen forecast measured against?

Two things. First, realised FPL outcomes: actual points and actual minutes for the same players. Second, two free public baselines taken from the official FPL bootstrap-static feed: ep_next, FPL's own next-Gameweek points estimate, and points-per-game as a naive persistence baseline. Both baselines are scored on exactly the same players and the same Gameweek.

Can a projection be edited after the deadline?

No. Frozen forecasts are written to an append-only ledger with a timestamp and the model version that produced them. Outcomes are recorded as separate append-only observations. There is no code path that rewrites a frozen row.

Why is ep_next a weak baseline in Gameweek 1?

With no current-season data, FPL emits the same ep_next value across large groups of players, which is a prior rather than a per-player forecast. SquadPilot counts how many values are shared defaults and publishes the baseline comparison a second time with those rows removed, so the comparison is not flattered by them.

Every Gameweek locks. The projection freezes with it.

DEADLINE FREEZE EVERY GAMEWEEK
Start free