Premier League · several engines · one identical exam

The engine room

Most sites show you one model and ask you to trust it. We run several, put them through an identical exam, and show you the marks — including the ones we would rather not publish. Pick whichever you want to follow.

This leaderboard is the Premier League's. The other four leagues each run a single engine rather than a field of challengers, so there is nothing to rank — their held-out record, their calibration and their week-by-week ledger are on the record, one league at a time.

Over 1900 held-out matches the best engine scores 0.1982 against the closing market's 0.1949 — closer to the sharpest benchmark there is than any public model we know, and every week of it is on the record, including the bad ones.
Algorithm of the week
xGB Momentum

Best ranked-probability score over the last 8 weeks of matches (since 2026-03-29). This changes as form changes — which is rather the point of running more than one model. The full week-by-week record is on the weekly record.

Every model is fitted on 2016–2020 only, then run forward week by week across 2021–2025 without ever seeing those seasons during tuning. Same data, same refit schedule, same metrics — the only thing that differs is the algorithm.

1

Closing market

benchmark — not selectable

Not ours: the betting market's closing prices, the strongest public predictor in football. The bar every engine is judged against.

RPS
0.19491
95% 0.1889–0.2007
Accuracy
55.2%
1900 matches
Log loss
0.9597
Brier
0.5700
2

xGB Core

The house engine. Reads the quality of every chance a side creates and concedes — not just results — adjusted for opponent and venue, weighted toward now. The champion until another engine beats it where it counts.

RPS
0.19824
95% 0.1924–0.2045
Accuracy
54.5%
1900 matches
Log loss
0.9707
Brier
0.5769
Season record — since this engine started running
Season RPS
0.20750
Season accuracy
46.0%
Live RPS
0.20750
Graded live
50
Reconstructed
0
GameweeknRPSAccuracy
GW1100.229270.0%
GW2100.189560.0%
GW3100.139130.0%
GW4100.241130.0%
GW5100.238340.0%
Opponent-tier breakdown

Draws: caught 0 of the 16 that actually happened.

Top 6 involved · called 12 of 26 · RPS 0.1758
Mid-table involved · called 15 of 32 · RPS 0.1935
Relegation contenders involved · called 11 of 26 · RPS 0.2332
Every tier pairing seen so far (6 of 6)

Tiers from last season's final table (2025/26). A promoted club with no row in that table counts as a relegation contender here.

MatchupnCalledRPS
Mid-table vs Mid-table85/80.1993
Mid-table vs Relegation contenders126/120.2236
Mid-table vs Top 6124/120.1596
Relegation contenders vs Relegation contenders40/40.3813
Relegation contenders vs Top 6105/100.1856
Top 6 vs Top 643/40.1999
Top 6
Arsenal, Aston Villa, Bournemouth, Liverpool, Man City, Man United
Mid-table
Brentford, Brighton, Chelsea, Everton, Fulham, Leeds, Newcastle, Sunderland
Relegation contenders
Burnley, Crystal Palace, Nottingham Forest, Tottenham, West Ham, Wolves
See xGB Core's calls on the board →
3

xGB Consensus

The engines vote. Disagreement between them is information, and the vote is settled before the season starts — never adjusted in hindsight.

RPS
0.19830
95% 0.1927–0.2044
Accuracy
54.4%
1900 matches
Log loss
0.9704
Brier
0.5769

Against the reigning champion engine over the same 1900 matches: worse by 0.00006 RPS (p = 0.8549) — inside noise, so we do not claim a difference.

Season record — since this engine started running
Season RPS
0.20510
Season accuracy
48.0%
Live RPS
0.20130
Graded live
30
Reconstructed
20
backfilled, not recorded live
GameweeknRPSAccuracy
GW1↺ reconstructed100.237570.0%
GW2↺ reconstructed100.184260.0%
GW3100.137730.0%
GW4100.228840.0%
GW5100.237440.0%
Opponent-tier breakdown

Draws: caught 0 of the 16 that actually happened.

Top 6 involved · called 12 of 26 · RPS 0.1753
Mid-table involved · called 16 of 32 · RPS 0.1923
Relegation contenders involved · called 12 of 26 · RPS 0.2272
Every tier pairing seen so far (6 of 6)

Tiers from last season's final table (2025/26). A promoted club with no row in that table counts as a relegation contender here.

MatchupnCalledRPS
Mid-table vs Mid-table85/80.2043
Mid-table vs Relegation contenders127/120.2152
Mid-table vs Top 6124/120.1614
Relegation contenders vs Relegation contenders40/40.3709
Relegation contenders vs Top 6105/100.1842
Top 6 vs Top 643/40.1946
Top 6
Arsenal, Aston Villa, Bournemouth, Liverpool, Man City, Man United
Mid-table
Brentford, Brighton, Chelsea, Everton, Fulham, Leeds, Newcastle, Sunderland
Relegation contenders
Burnley, Crystal Palace, Nottingham Forest, Tottenham, West Ham, Wolves

Includes 20 reconstructed calls above — backfilled, not recorded live.

See xGB Consensus's calls on the board →
4

xGB Current

Ratings that move with every match instead of being rebuilt from a window. The quickest engine in the room to accept that a side has changed, and the least attached to what they used to be.

RPS
0.19892
95% 0.1932–0.2050
Accuracy
53.9%
1900 matches
Log loss
0.9723
Brier
0.5782

Against the reigning champion engine over the same 1900 matches: worse by 0.00068 RPS (p = 0.2622) — inside noise, so we do not claim a difference.

Season record — since this engine started running
Season RPS
0.20380
Season accuracy
48.0%
Live RPS
0.19440
Graded live
31
Reconstructed
19
backfilled, not recorded live
GameweeknRPSAccuracy
GW1↺ reconstructed100.246770.0%
GW2↺ reconstructed90.188344.4%
GW210.0967100.0%
GW3100.137130.0%
GW4100.218840.0%
GW5100.237250.0%
Opponent-tier breakdown

Draws: caught 0 of the 16 that actually happened.

Top 6 involved · called 13 of 26 · RPS 0.1755
Mid-table involved · called 15 of 32 · RPS 0.1919
Relegation contenders involved · called 13 of 26 · RPS 0.2229
Every tier pairing seen so far (6 of 6)

Tiers from last season's final table (2025/26). A promoted club with no row in that table counts as a relegation contender here.

MatchupnCalledRPS
Mid-table vs Mid-table84/80.2091
Mid-table vs Relegation contenders127/120.2089
Mid-table vs Top 6124/120.1636
Relegation contenders vs Relegation contenders40/40.3617
Relegation contenders vs Top 6106/100.1843
Top 6 vs Top 643/40.1890
Top 6
Arsenal, Aston Villa, Bournemouth, Liverpool, Man City, Man United
Mid-table
Brentford, Brighton, Chelsea, Everton, Fulham, Leeds, Newcastle, Sunderland
Relegation contenders
Burnley, Crystal Palace, Nottingham Forest, Tottenham, West Ham, Wolves

Includes 19 reconstructed calls above — backfilled, not recorded live.

See xGB Current's calls on the board →
5

xGB Momentum

Short memory on purpose: what have you done lately? Streaks and slumps count for more here than anywhere else in the room.

RPS
0.20047
95% 0.1943–0.2070
Accuracy
54.2%
1900 matches
Log loss
0.9790
Brier
0.5825

Against the reigning champion engine over the same 1900 matches: worse by 0.00223 RPS (p = 0.0316).

Season record — since this engine started running
Season RPS
0.24220
Season accuracy
36.0%
Live RPS
0.24000
Graded live
31
Reconstructed
19
backfilled, not recorded live
GameweeknRPSAccuracy
GW1↺ reconstructed100.234250.0%
GW2↺ reconstructed90.258844.4%
GW210.26450.0%
GW3100.190520.0%
GW4100.280520.0%
GW5100.246550.0%
Opponent-tier breakdown

Draws: caught 0 of the 16 that actually happened.

Top 6 involved · called 10 of 26 · RPS 0.2103
Mid-table involved · called 13 of 32 · RPS 0.2122
Relegation contenders involved · called 8 of 26 · RPS 0.2704
Every tier pairing seen so far (6 of 6)

Tiers from last season's final table (2025/26). A promoted club with no row in that table counts as a relegation contender here.

MatchupnCalledRPS
Mid-table vs Mid-table84/80.2187
Mid-table vs Relegation contenders124/120.2528
Mid-table vs Top 6125/120.1673
Relegation contenders vs Relegation contenders40/40.4651
Relegation contenders vs Top 6104/100.2136
Top 6 vs Top 641/40.3311
Top 6
Arsenal, Aston Villa, Bournemouth, Liverpool, Man City, Man United
Mid-table
Brentford, Brighton, Chelsea, Everton, Fulham, Leeds, Newcastle, Sunderland
Relegation contenders
Burnley, Crystal Palace, Nottingham Forest, Tottenham, West Ham, Wolves

Includes 19 reconstructed calls above — backfilled, not recorded live.

See xGB Momentum's calls on the board →
6

xGB Ladder

A long-memory strength ladder: every result moves both clubs up or down, big upsets move them further. Slow to convince, hard to fool.

RPS
0.20075
95% 0.1950–0.2069
Accuracy
53.6%
1900 matches
Log loss
0.9781
Brier
0.5823

Against the reigning champion engine over the same 1900 matches: worse by 0.00251 RPS (p = 0.0268).

Season record — since this engine started running
Season RPS
0.20640
Season accuracy
44.0%
Live RPS
0.20820
Graded live
31
Reconstructed
19
backfilled, not recorded live
GameweeknRPSAccuracy
GW1↺ reconstructed100.189960.0%
GW210.1189100.0%
GW2↺ reconstructed90.218244.4%
GW3100.151940.0%
GW4100.259030.0%
GW5100.222740.0%
Opponent-tier breakdown

Draws: caught 0 of the 16 that actually happened.

Top 6 involved · called 12 of 26 · RPS 0.1814
Mid-table involved · called 14 of 32 · RPS 0.1946
Relegation contenders involved · called 11 of 26 · RPS 0.2246
Every tier pairing seen so far (6 of 6)

Tiers from last season's final table (2025/26). A promoted club with no row in that table counts as a relegation contender here.

MatchupnCalledRPS
Mid-table vs Mid-table84/80.2069
Mid-table vs Relegation contenders126/120.2055
Mid-table vs Top 6124/120.1755
Relegation contenders vs Relegation contenders40/40.3702
Relegation contenders vs Top 6105/100.1894
Top 6 vs Top 643/40.1790
Top 6
Arsenal, Aston Villa, Bournemouth, Liverpool, Man City, Man United
Mid-table
Brentford, Brighton, Chelsea, Everton, Fulham, Leeds, Newcastle, Sunderland
Relegation contenders
Burnley, Crystal Palace, Nottingham Forest, Tottenham, West Ham, Wolves

Includes 19 reconstructed calls above — backfilled, not recorded live.

See xGB Ladder's calls on the board →
7

xGB Pattern

Learns the result distribution straight from dozens of form and context signals instead of modelling goals first. The most data-hungry engine in the room, and so far the least convincing.

RPS
0.20414
95% 0.1982–0.2103
Accuracy
52.8%
1900 matches
Log loss
0.9938
Brier
0.5909

Against the reigning champion engine over the same 1900 matches: worse by 0.00590 RPS (p = 0.0001).

Season record — since this engine started running
Season RPS
0.22380
Season accuracy
32.0%
Live RPS
0.20160
Graded live
31
Reconstructed
19
backfilled, not recorded live
GameweeknRPSAccuracy
GW1↺ reconstructed100.286730.0%
GW210.23940.0%
GW2↺ reconstructed90.230333.3%
GW3100.134850.0%
GW4100.221220.0%
GW5100.245130.0%
Opponent-tier breakdown

Draws: caught 1 of the 16 that actually happened (called 7 in total, including wrong calls).

Top 6 involved · called 11 of 26 · RPS 0.1841
Mid-table involved · called 10 of 32 · RPS 0.2058
Relegation contenders involved · called 9 of 26 · RPS 0.2323
Every tier pairing seen so far (6 of 6)

Tiers from last season's final table (2025/26). A promoted club with no row in that table counts as a relegation contender here.

MatchupnCalledRPS
Mid-table vs Mid-table81/80.2951
Mid-table vs Relegation contenders124/120.2192
Mid-table vs Top 6125/120.1329
Relegation contenders vs Relegation contenders40/40.3534
Relegation contenders vs Top 6105/100.1995
Top 6 vs Top 641/40.2991
Top 6
Arsenal, Aston Villa, Bournemouth, Liverpool, Man City, Man United
Mid-table
Brentford, Brighton, Chelsea, Everton, Fulham, Leeds, Newcastle, Sunderland
Relegation contenders
Burnley, Crystal Palace, Nottingham Forest, Tottenham, West Ham, Wolves

Includes 19 reconstructed calls above — backfilled, not recorded live.

See xGB Pattern's calls on the board →

Teams are not players

The model that best picks match outcomes is not automatically the one you want for “will he score?”. A match forecast depends on the difference between two sides; a player’s chance of scoring depends on the level of his own team’s expected goals. A model can get the difference right while running high or low on the level, and the match leaderboard would never show it. So we grade each model on players too, over 9,008 appearances.

ModelGoal BrierBiasTop-10 boardSeparation
xGB Core0.07503-0.98%27.5%2.23×
xGB Momentum0.07547-0.84%28.9%2.39×
xGB LadderCannot answer this question — it rates teams, not scorelines, so it has no expected-goals number to hand a player model. We leave the row empty rather than invent one.

Separation is how much more often the model’s top-ten board returns a goal or assist than everyone else — the number that actually matters when you are picking a captain. The two are close, and they disagree about which is best: the champion is better calibrated, while rolling form separates its top picks more sharply. Graded only on players who actually appeared — the projection is conditional on playing, and we do not claim to know the teamsheet.

Tuned on 2016, 2017, 2018, 2019, 2020 · evaluated on 2021, 2022, 2023, 2024, 2025 · generated 2026-08-21