Sideline Quant
Loading…

Accuracy record · 2026-27 · settled

Gameweek 8

In GW8 the model missed by 2.50 points a player across the 182 likely starters it scored, and the real team scored 47.

There’s one of these for every settled GW, good or bad, and I don’t touch them once they’re up. The misses are at the top, and everything they’re worked out from is further down.

Provisional. This went up at the final whistle, before FPL confirmed the bonus points. Once FPL does, it gets rescored automatically and this note goes away. Bonus is the only thing that can change.

Where Gameweek 8 went wrong

  • Worse than usual this week - the model was out by 2.50 points a player, against 2.44 across the season so far.
  • Its ordering of the players barely matched the week's: rank correlation 0.14, where 1.00 would be a perfect order and 0 no relationship at all.
  • Last season's points per game was better than the model at spotting 10+ hauls this week: on the 140 players both scored, it ranked a hauler above a non-hauler 65% of the time, the model 61%.
  • The team scored 10.1 fewer than the model predicted for it at the deadline: 57.1 predicted, 47 scored.
  • The best team the model could legally have bought scored 55, 43% of the 127 a perfect-hindsight XI would have made.

What went right

  • The model was closer than last season's points per game on points per player: 2.58 to 2.65 on the 140 players both scored.
  • The model was closer than last season's points per game on the big misses: 3.21 to 3.34 on the 140 players both scored.
  • The model ordered the players better than last season's points per game: 0.12 to -0.03 on the 140 players both scored.
  • The model was better than last season's points per game at spotting 6+ hauls: 67% to 53% on the 140 players both scored.
  • The model ordered the players better than top-10k effective ownership: 0.14 to 0.11 on the 182 players both scored.
  • The model was better than top-10k effective ownership at spotting 6+ hauls: 69% to 62% on the 182 players both scored.
  • The model was better than top-10k effective ownership at spotting 10+ hauls: 65% to 54% on the 182 players both scored.
  • The model ordered the players better than fpl's own projection (ep_next): 0.14 to 0.04 on the 182 players both scored.
  • The model was better than fpl's own projection (ep_next) at spotting 6+ hauls: 69% to 55% on the 182 players both scored.
  • The model was better than fpl's own projection (ep_next) at spotting 10+ hauls: 65% to 62% on the 182 players both scored.
  • The team scored 47, 20 above the average manager's 27.

Not available this week

  • Only 44 players scored 6+ this week, too few to claim a result on the 6+ figure.
  • Only 11 players scored 10+ this week, too few to claim a result on the 10+ figure.

League-wide accuracy

Scored over predicted E[minutes] > 60 (n=182 of 668 player-fixtures). Every figure below is this gameweek only; the season-to-date line beside each one is the pooled figure across all settled gameweeks.

MAE
2.50
season to date 2.44 · mean absolute error, points per player-fixture
RMSE
3.14
season to date 3.19 · punishes big misses harder
Rank corr.
0.14 (-0.01–0.28)
Spearman: 1.00 means it ordered the players how the week turned out, 0 means no relationship. The bracket is a 95% row-bootstrap interval and if anything it's too narrow.
Rows
182
player-fixtures scored in this gameweek's population
Σ projected
619
points the model projected over that population
Σ realised
626
points those players actually scored (the model was −7 on the total)
P(≥6) AUC
0.69 (0.61–0.77)
put a player who went on to haul above one who didn't 69% of the time; 0.50 is a coin flip. 44 hauls, too few to claim a result
P(≥10) AUC
0.65 (0.52–0.78)
put a player who went on to haul above one who didn't 65% of the time; 11 hauls, too few to claim a result

Prediction vintage: 23 Oct, 16:44 UTC run · Predictions are from the last model run before each gameweek's deadline (90 minutes before the first kickoff). A gameweek marked 'seed' is from before I kept the runs, so it's scored against the pre-season predictions I committed.

95% percentile intervals from a row-level bootstrap (1000 resamples, seeded). Player-fixtures in the same GW share fixtures and clean sheets, which makes these intervals understate the true width - read them as a floor on the uncertainty. Fewer than 50 hauls is too few to claim a result from a haul AUC.

The same error on every group of players

I never show the every-player figure on its own (SPEC §1.6), so all four are here. Whichever group you think is the right one, my number for it is on the page - just compare it with other people's on the same rows.

PopulationnMAERMSESeason MAE
Every player-fixture with a prediction6681.081.991.15
Predicted E[minutes] > 05571.302.181.35
Played at least one minute (selected on the outcome)hindsight3031.972.812.00
Predicted E[minutes] > 60headline1822.503.142.44

Reliability of the stated probabilities

In each bin of predicted probability, what fraction actually happened, with a Wilson 95% interval. A calibrated forecaster's observed column tracks its predicted column. The minutes model's P(60+) is read on every gameweek, the haul probabilities on the gameweeks whose run retained them.

P(plays 60+ minutes)
played 60+ minutes · every projected player-fixture whose run kept this probability (n=668 of 668)
PredictedObserved95%n
0%0%0–3134
0%0%0–567
1%0%0–666
4%4%2–1267
13%22%14–3467
33%44%33–5666
67%69%57–7867
87%91%82–9667
94%84%73–9167
P(scores 6+)
scored 6+ points · every projected player-fixture whose run kept this probability (n=668 of 668)
PredictedObserved95%n
0%0%0–3142
0%0%0–662
0%0%0–663
2%0%0–568
4%8%3–1766
8%8%3–1766
14%13%7–2467
21%24%15–3567
31%36%25–4867
P(scores 10+)
scored 10+ points · every projected player-fixture whose run kept this probability (n=668 of 668)
PredictedObserved95%n
0%0%0–2202
0%0%0–666
0%0%0–567
1%1%0–867
2%2%0–865
3%4%2–1267
5%9%4–1867
10%6%2–1467

Against the comparators

The model's error next to a comparator's, on the same rows. If a comparator can't cover every row the model scored, I drop the rows it's missing and re-score the model on what's left. The model's headline number for the week isn't part of the comparison.

Comparator
Last season's points per game

Each player's total FPL points last season divided by his appearances, which is the number most of us reach for before a ball is kicked.

Different rows. This comparator scored 140 of the model's 182 rows for this GW; 42 of the model’s rows are left out because it has nothing to say about them. Every “model” number in this table is the model re-scored on exactly the 140 rows it covers. Its headline error for the GW (2.50, over 182 rows) is not the one to read against this comparator.

Population: reference arm's predicted E[minutes] > 60, imposed on every arm (n=140 of 409 player-fixtures); players with a prior-season appearance only

Last season's points per game against the model on the 140 rows both cover, Gameweek 8
MetricModel · these 140 rowsLast season's points per game
MAE
model ahead
2.582.65
RMSE
model ahead
3.213.34
Spearman rank correlation
model ahead
0.12-0.03
Haul AUC, 6+ points
model ahead
0.670.53
Haul AUC, 10+ points
comparator ahead
0.610.65

A dash means there’s no figure for that metric from this comparator, which isn’t the same as a zero. “No direction stated” means the data doesn’t say which way is better for that metric, and without that I don’t call a winner.

Comparator
Top-10k effective ownership

How much the top-10k sample owned each player at the last capture before the deadline, including captaincy. It doesn't come with a points prediction so I only score it as a rank.

Rows covered. This comparator scored 182 of the model's 182 rows for this GW, with none of the model’s rows excluded. Every “model” number in this table is the model re-scored on exactly the 182 rows it covers, which is the only like-for-like comparison.

Population: reference arm's predicted E[minutes] > 60, imposed on every arm (n=182 of 668 player-fixtures); every model row; double-gameweek rows excluded (ownership is per gameweek, the record is per fixture)

Top-10k effective ownership against the model on the 182 rows both cover, Gameweek 8
MetricModel · these 182 rowsTop-10k effective ownership
MAE
not carried by this arm
——
RMSE
not carried by this arm
——
Spearman rank correlation
model ahead
0.140.11
Haul AUC, 6+ points
model ahead
0.690.62
Haul AUC, 10+ points
model ahead
0.650.54

A dash means there’s no figure for that metric from this comparator, which isn’t the same as a zero. “No direction stated” means the data doesn’t say which way is better for that metric, and without that I don’t call a winner.

Comparator
FPL's own projection (ep_next)

The expected-points figure FPL publishes for each player before the GW, captured between the previous deadline and this one. It's a per-GW number and can't tell you anything about the second game in a DGW, so like the ownership figure I only score it as a rank.

Rows covered. This comparator scored 182 of the model's 182 rows for this GW, with none of the model’s rows excluded. Every “model” number in this table is the model re-scored on exactly the 182 rows it covers, which is the only like-for-like comparison.

Population: reference arm's predicted E[minutes] > 60, imposed on every arm (n=182 of 668 player-fixtures); players with an FPL projection captured in the pre-deadline window; double-gameweek rows excluded

FPL's own projection (ep_next) against the model on the 182 rows both cover, Gameweek 8
MetricModel · these 182 rowsFPL's own projection (ep_next)
MAE
not carried by this arm
——
RMSE
not carried by this arm
——
Spearman rank correlation
model ahead
0.140.04
Haul AUC, 6+ points
model ahead
0.690.55
Haul AUC, 10+ points
model ahead
0.650.62

A dash means there’s no figure for that metric from this comparator, which isn’t the same as a zero. “No direction stated” means the data doesn’t say which way is better for that metric, and without that I don’t call a winner.

How the comparators are scored Lower is better for MAE and RMSE, and higher is better for Spearman and haul AUC. Which way is better is stored with each metric and the verdicts just follow that. Each baseline is scored on the model's own likely starters (expected minutes over 60) and reports the model's score over those same rows, which keeps the two numbers like for like even when the baseline can't cover every row. Overall Spearman and AUC are averages over the GWs where both sides have a value. I don't pool them across gameweeks, because that would rank a GW1 blank against a GW7 haul.

Legal-squad Team of the Week

Picked from the last model run before the deadline, at the prices captured before it, then scored on what actually happened.

Not comparable with the real entry. A fresh £100.0m squad bought from scratch every gameweek - it never pays a transfer hit or banks a price rise and nothing carries over from the week before. Think of it as a weekly check on the model's picks within the real squad rules. Nobody could run a team this way in practice, so it's not comparable with a managed entry.

XI projected
55.4
with captain 61.0
XI realised
55
with captain 57
Capture
43%
of the 127-point hindsight XI, a ceiling that ignores the budget and the club cap
Spend
£96.6m
of £100.0m · 3-4-3
The legal-squad Team of the Week for Gameweek 8
PlayerClubPosPoints
TraffordLeedsGK10
GabrielArsenalDEF17
CalafioriArsenalDEF1
BogleLeedsDEF5
Mbeumo(C)Man UtdMID2
ØdegaardArsenalMID3
B.FernandesMan UtdMID0
E.Le FéeSunderlandMID3
João PedroChelseaFWD0
IsakLiverpoolFWD9
ThiagoBrentfordFWD5
Bench (does not score)
DubravkaSpursGK0
DiopIpswich TownDEF1
van EwijkCoventry CityDEF2
HughesCrystal PalaceMID0

Against the real entry

TOTW
57
XI with the captain doubled
Entry
47
before hits; none were taken this week
Difference
+10
not a like-for-like contest

Don’t read this as a head-to-head. A fresh £100.0m squad bought from scratch every gameweek - it never pays a transfer hit or banks a price rise and nothing carries over from the week before. Think of it as a weekly check on the model's picks within the real squad rules. Nobody could run a team this way in practice, so it's not comparable with a managed entry.

Deadline 23 Oct, 17:30 UTC · prediction 23 Oct, 16:44 UTC (run) · prices 18 Jul, 13:53 UTC–23 Oct, 16:44 UTC (173 from an earlier capture) · pool 668 of 668 predicted

The real entry · Sideline's Team

This is the squad the model actually ran. Unlike the Team of the Week above, it has to live with its transfer hits, its bench and whatever it carried over from the week before.

Points
47
no hits taken
vs average
+20
field average 27 (FPL publishes it before hits)
vs top 10k
+0.8
sampled average 46.2 from 593 managers, sampled as of the capture
Overall rank
430,479
gameweek rank 493,076
Projected
57.1
Σ multiplier × xP over 15 of 15 picks, from the last pre-deadline run (23 Oct, 16:44 UTC)
Bench
2
left on the bench
Transfers
1
0 paid
Squad value
£100.4m
£0.1m in the bank · captain Haaland
The entry’s squad in Gameweek 8
PlayerClubMinsBonusPoints
RayaArsenal9007
GabrielArsenal90317
CalafioriArsenal2201
VirgilLiverpool9019
CastagneFulham9017
WirtzLiverpool6406
TavernierBournemouth86210
E.Le FéeSunderland7803
MbeumoMan Utd9002
Haaland(C)Man City9028
João Pedro(V)Chelsea000
TzolakisbenchHull City9003
BarrybenchEverton9002
AjayibenchHull City9004
HughesbenchCrystal Palace000

Transfers De Cuyper → Virgil

Cumulative after this gameweek: 531 · captured 25 Oct, 19:05 UTC · 3 squad captures

Where these numbers come from

Predictions are from the last model run before each gameweek's deadline (90 minutes before the first kickoff). A gameweek marked 'seed' is from before I kept the runs, so it's scored against the pre-season predictions I committed.

Population scored: predicted E[minutes] > 60 (n=182 of 668 player-fixtures).

This page is a slice of the same /performance/live payload that drives the full record, which means a GW page and the season page can’t disagree. The projections themselves are published in full at /data/gw/8.

The exact rows this GW was scored on (the last run before the deadline, as it was served) are at fpl-quant-api.fly.dev/performance/live/gw/8/predictions with sha256 c928dafd…ce6d. The digest is of the rows array alone as compact JSON (no whitespace), rows sorted by player then fixture, and the response says so beside it. You can recompute any number on this page from them.

What this record measures, on which rows, against which comparators and at which checkpoints was fixed in advance: the pre-registration (sha256 27307797…ba4f, checkpoints GW10, GW19, GW38).

Every settled gameweek has a page: GW1, GW2, GW3, GW4, GW5, GW6, GW7, GW8.