Public accuracy record · 2025/26

2025/26 FPL back-test: projected vs actual points

A retrospective back-test of KFT's current deterministic forecasting core across all 38 gameweeks of last season.

Test completed: · Report prepared: · Season: 2025/26, GW1–38

Read this before the numbers: these forecasts were reconstructed after the season. They are not predictions published during 2025/26, an untouched holdout, or a full replay of every live production input.

See the results · See the largest misses · Find a player · Read the method and limits

The result is mixed

On 8,258 player-weeks projected for at least 45 minutes, full-points RMSE was 3.087, versus 3.311 for a simple past-average baseline. Full-points MAE was 2.374, slightly worse than the baseline's 2.367. The model reduced large errors in this replay; it did not win on every metric.

Lower MAE and RMSE are better. MAE is the average absolute points miss; RMSE gives large misses more weight. Bias is projected minus actual, so a positive number means overprediction. All metrics are pooled over player-weeks, rather than an unweighted average of weekly scores.

Points error · 8,258 predicted-45+-minute player-weeks
TargetMetricKFT replayPast-average baseline
Points excluding bonus · primaryMAE2.0612.074
Points excluding bonus · primaryRMSE2.6012.804
Points excluding bonus · primaryBIAS0.192-0.344
Full FPL points · approximate bonusMAE2.3742.367
Full FPL points · approximate bonusRMSE3.0873.311
Full FPL points · approximate bonusBIAS0.207-0.369

Points excluding bonus are the primary endpoint because bonus is only approximately forecast. The paired four-gameweek block-bootstrap 95% interval for the non-bonus MAE difference (model minus baseline) is −0.061 to +0.031, crossing zero; the RMSE interval is −0.276 to −0.146. These intervals are conditional on the reconstruction assumptions. This report does not establish an advantage over another forecasting website.

Keep the sample in view

Full-points sample comparison
PoolRowsKFT MAEKFT RMSEBaseline MAEBaseline RMSE
Predicted 45+ minutes82582.3743.0872.3673.311
All matched; includes non-players296460.9091.9171.0752.098

All 29,646 matched player-weeks remain in the downloadable record. The all-player pool includes many straightforward zero-minute, zero-point rows, which makes its error look smaller. The headline pool is selected using projected minutes, never actual points or actual minutes; unexpected starters remain visible in the full record and explorer.

Coverage: 101 actual player-week entries were absent from the reconstructed pre-deadline rosters; nine were appearances. These are unscored coverage gaps, not zero-error forecasts. No roster row lacks an actual result. Blank and double gameweeks are retained.

All 38 gameweeks, including the bad ones

Same predicted-45+-minute pool each week. Projected and actual columns are mean full FPL points per selected player-week. The comparison CSV provides the individual scores.

Weekly full-points results · predicted 45+ minutes
GWRowsProjected meanActual meanKFT MAEBaseline MAEKFT RMSEBaseline RMSE
12203.3732.8142.6462.2663.3763.331
22143.1683.2292.5703.1033.5404.645
32113.1833.2652.3262.7752.9943.673
42143.2703.3552.3152.4132.9933.181
52163.2812.8702.1732.2052.8813.083
62183.3042.8392.2512.2482.9683.108
72163.3193.1852.1802.3292.8833.054
82233.2803.3182.3902.4773.2723.576
92143.3703.4212.5342.5133.4753.632
102183.3703.2942.2132.3012.7852.957
112153.4283.4282.4642.5333.1863.438
122163.4073.3802.5482.5043.5263.655
132173.3613.0282.3342.4843.0123.337
142213.3313.1672.4462.3953.2443.325
152283.2812.9962.3492.1553.0062.908
162233.3053.2602.3992.4733.1973.385
172213.4723.3082.3532.3683.1223.396
182203.4113.4452.3802.4523.2243.551
192253.3813.3472.4172.3493.0283.179
202273.3223.0792.2342.3232.9633.309
212233.3252.9962.2282.0042.8272.843
222183.4303.1742.4162.3442.9613.095
232153.3993.0192.4692.2843.0363.040
242203.4063.0412.2882.2322.8663.069
252223.3193.0902.3432.2243.0563.198
262253.6943.3562.5642.5233.2973.647
272123.4123.3352.4082.2673.1263.187
282223.3882.8872.2632.1282.7852.893
292253.3503.1332.3662.3213.0413.235
302263.3183.0752.2642.2652.7392.954
311803.2943.3282.4492.3023.1103.191
322193.3532.9452.3532.1553.1753.236
332374.2304.2912.6232.8933.4884.214
341583.2833.0572.3522.2882.9703.106
352173.3922.9172.2712.1602.9653.041
362263.6483.2122.2822.2482.8593.006
372163.3423.0142.2702.1603.0273.178
382203.3382.8362.4952.4463.0253.165

The largest misses stay in

The 20 largest absolute full-points errors across all matched player-weeks, chosen by error magnitude, including zero-minute forecasts. A negative error is an underestimated return; a positive error is an overprediction. These are descriptive examples, not a separate performance sample.

20 largest full-points misses · all matched players
GWPlayerPositionProjectedActualErrorExpected minsActual mins
2J.TimberDEF3.6824-20.3264.863
9Van de VenDEF3.0223-19.9890.090
17Lewis-PotterDEF3.0121-17.9955.690
38DorguDEF0.9918-17.0114.861
16Hudson-OdoiMID2.0419-16.9639.290
28DamsgaardMID1.1018-16.9015.390
32MavropanosDEF4.3921-16.6181.590
18SchadeMID3.8220-16.1871.190
14RomeroDEF0.9117-16.0931.590
20RiceMID1.3917-15.6127.290
16SangaréMID2.6118-15.3956.390
35AwoniyiFWD0.7216-15.282.690
25PalmerMID4.8720-15.1373.060
12MurilloDEF2.0617-14.9490.090
33Gibbs-WhiteMID5.2820-14.7290.088
13L.MileyMID0.3415-14.663.590
29João PedroFWD4.4419-14.5690.084
19GabrielDEF0.5015-14.508.476
16GustoDEF3.6118-14.3983.290
10GomezMID1.6316-14.3740.080

When the projection was too high

The ten largest overpredictions across the same complete matched pool. The largest absolute misses above happen to be underestimated returns; both directions of error remain in the record.

10 largest full-points overpredictions · all matched players
GWPlayerPositionProjectedActualErrorExpected minsActual mins
1AdingraMID18.176+12.1790.075
33PalmerMID12.662+10.66180.090
33João PedroFWD8.910+8.91162.30
1HarrisonMID9.721+8.7290.012
6ChalobahDEF4.85-3+7.8590.052
2HaalandFWD9.682+7.6888.090
6B.FernandesMID6.43-1+7.4390.090
35PalmerMID7.050+7.0590.090
13M.SalahMID6.910+6.9190.00
38HaalandFWD6.870+6.8790.00

Expected-minutes MAE was 18.01 minutes with +8.90 minutes bias in the headline pool. Minutes allocation remains a weakness. Stronger results later in some metrics do not mean improvement was steady.

Inspect any matched player-week

The explorer starts with every matched row, ordered by largest miss. Search, gameweek and pool controls change only the table; the headline results above always use the stated full sample.

The complete CSV is also available below. No sign-in needed.

What this test does and does not measure

Each week's player inputs were reconstructed from archived pre-deadline snapshots. Rates and minutes histories use earlier fixture rows whose kickoff plus three hours precedes the deadline. Target results are joined only for scoring. Previous-season priors use completed 2024/25 data with unambiguous normalized-name matches; unmatched players use available-data fallbacks. Team models are refitted using eligible earlier Understat matches.

The baseline is each player's points from earlier completed gameweeks divided by elapsed completed gameweeks, including blanks. For GW1 it uses the matched previous-season total divided by 38, or zero without an unambiguous match. It is intentionally simple, is not adjusted for the new defensive-contribution rules at GW1, and is compared on exactly the same rows.

Download and audit the record

Every projected vs actual row (CSV) · Deadlines, snapshot dates and coverage (CSV) · Unrounded metrics and weekly-file checksums (JSON) · Snapshot source URLs and checksums (JSON)

The CSV keeps full exported precision, model and baseline scores, non-bonus points, minutes, sample membership and each week's deadline/snapshot date. Display tables round values for readability. The 409 blank-roster rows retain their player IDs; unavailable names or positions are labelled explicitly. No misses were trimmed and no missing players were converted into correct zero predictions.

Source archives: Fantasy-Premier-League historical actuals, FPL Core Insights snapshots and Understat match history. Snapshot URLs and hashes are listed in the source download. Learn how the live model works on the methodology page.