Goal Elo

monitoring only -- not used by any card's picks

An attack/defense Elo variant tracking goal-scoring and goal-conceding strength independently of win/loss. Each team's Attack and Defense sit on a log scale where 0 is exactly league average; ratings update after every match from the gap between actual and expected goals. See scripts/goal_elo/goal_elo.py for the model.

25 teams · K=0.025 · league avg 1.336 goals/team/match · home advantage +0.192 log-units (~21%) · seasons 2022, 2023, 2024, 2025 · generated 2026-09-19 10:32 UTC

Attack (0 = league average)Defense ↑Crystal Palace -- attack -0.171 (1414 Elo), defense 0.057 (1529 Elo), 152 matchesArsenal -- attack 0.236 (1618 Elo), defense 0.539 (1769 Elo), 152 matchesArsenalFulham -- attack -0.112 (1444 Elo), defense 0.130 (1565 Elo), 152 matchesLiverpool -- attack 0.198 (1599 Elo), defense 0.071 (1536 Elo), 152 matchesNewcastle -- attack 0.086 (1543 Elo), defense 0.039 (1520 Elo), 152 matchesNottingham Forest -- attack 0.023 (1511 Elo), defense 0.164 (1582 Elo), 152 matchesBournemouth -- attack 0.092 (1546 Elo), defense 0.164 (1582 Elo), 152 matchesAston Villa -- attack 0.095 (1547 Elo), defense 0.098 (1549 Elo), 152 matchesTottenham -- attack -0.096 (1452 Elo), defense -0.059 (1471 Elo), 152 matchesSouthampton -- attack -0.317 (1342 Elo), defense -0.228 (1386 Elo), 76 matchesLeeds -- attack -0.040 (1480 Elo), defense 0.055 (1528 Elo), 76 matchesWolves -- attack -0.378 (1311 Elo), defense -0.105 (1448 Elo), 152 matchesEverton -- attack -0.095 (1453 Elo), defense 0.121 (1561 Elo), 152 matchesChelsea -- attack 0.020 (1510 Elo), defense 0.059 (1530 Elo), 152 matchesManchester United -- attack 0.237 (1619 Elo), defense 0.151 (1576 Elo), 152 matchesManchester UnitedBrighton -- attack 0.011 (1505 Elo), defense 0.167 (1584 Elo), 152 matchesBrightonLeicester -- attack -0.270 (1365 Elo), defense -0.153 (1424 Elo), 76 matchesBrentford -- attack 0.050 (1525 Elo), defense 0.102 (1551 Elo), 152 matchesWest Ham -- attack -0.084 (1458 Elo), defense -0.012 (1494 Elo), 152 matchesManchester City -- attack 0.327 (1663 Elo), defense 0.388 (1694 Elo), 152 matchesManchester CityBurnley -- attack -0.242 (1379 Elo), defense -0.238 (1381 Elo), 76 matchesLuton -- attack -0.017 (1491 Elo), defense -0.191 (1405 Elo), 38 matchesSheffield Utd -- attack -0.140 (1430 Elo), defense -0.266 (1367 Elo), 38 matchesIpswich -- attack -0.183 (1408 Elo), defense -0.231 (1384 Elo), 38 matchesSunderland -- attack -0.144 (1428 Elo), defense 0.090 (1545 Elo), 38 matches

Dot size = matches played (a small dot is a partial-season sample -- promoted/relegated sides). Color is combined attack+defense strength, green (strong) to red (weak). Labeled: top 3 by attack, top 3 by defense.

TeamAttackDefenseAtk EloDef EloGF vs avg defenseGA vs avg attackMatches
Manchester City0.3270.388166316941.850.91152
Manchester United0.2370.151161915761.691.15152
Arsenal0.2360.539161817691.690.78152
Liverpool0.1980.071159915361.631.24152
Aston Villa0.0950.098154715491.471.21152
Bournemouth0.0920.164154615821.461.13152
Newcastle0.0860.039154315201.461.28152
Brentford0.0500.102152515511.401.21152
Nottingham Forest0.0230.164151115821.371.13152
Chelsea0.0200.059151015301.361.26152
Brighton0.0110.167150515841.351.13152
Luton-0.017-0.191149114051.311.6238
Leeds-0.0400.055148015281.281.2676
West Ham-0.084-0.012145814941.231.35152
Everton-0.0950.121145315611.211.18152
Tottenham-0.096-0.059145214711.211.42152
Fulham-0.1120.130144415651.191.17152
Sheffield Utd-0.140-0.266143013671.161.7438
Sunderland-0.1440.090142815451.161.2238
Crystal Palace-0.1710.057141415291.131.26152
Ipswich-0.183-0.231140813841.111.6838
Burnley-0.242-0.238137913811.051.6976
Leicester-0.270-0.153136514241.021.5676
Southampton-0.317-0.228134213860.971.6876
Wolves-0.378-0.105131114480.911.48152

Atk/Def Elo = 1500 + raw × 500 -- a cosmetic rescale for familiarity, not a real unit conversion. Chess Elo's 400-point gap has a specific meaning (10:1 win odds) that goal-scoring rate has no equivalent of. The Attack/Defense columns are what the model actually computes with.

2026 over 1.5 check

P(total goals ≥ 2) for every completed match since 2026-01-01 across all 38 tracked leagues -- the mu_home + mu_away → Poisson total construction, same as over-15-card's own math, just fed by Goal Elo's ratings instead. Each prediction used only ratings built from strictly earlier matches, compared against a baseline that knows just the league's average scoring rate and home advantage, no team identity at all.

7,770
Matches scored
75.8%
Actual over-1.5 rate
0.182
Model Brier score
-0.5%
Skill vs baseline

Honest read: over 1.5 is a low bar in football (the baseline alone already expects it 76% of the time), so knowing which specific teams are playing barely moves the needle here -- skill sits close to 0% pooled, unlike the real, consistent edge Attack/Defense showed on raw expected goals. The model is well calibrated (see below), it just isn't adding much information a viewer didn't already have from the league's baseline rate.

Reliability

0%0%25%25%50%50%75%75%100%100%Predicted P(over 1.5)Actual over-1.5 rateperfect calibrationpredicted ~50%, actually over 1.5 51% of the time (n=45)predicted ~55%, actually over 1.5 67% of the time (n=177)predicted ~60%, actually over 1.5 65% of the time (n=428)predicted ~65%, actually over 1.5 71% of the time (n=967)predicted ~70%, actually over 1.5 74% of the time (n=1564)predicted ~75%, actually over 1.5 76% of the time (n=1858)predicted ~80%, actually over 1.5 79% of the time (n=1593)predicted ~85%, actually over 1.5 84% of the time (n=835)predicted ~90%, actually over 1.5 87% of the time (n=243)predicted ~95%, actually over 1.5 95% of the time (n=44)

Matches bucketed by predicted P(over 1.5); dot = actual over-1.5 rate in that bucket (size = sample). On the dashed line means perfectly calibrated.

Skill vs no-team-identity baseline

Peru - Primera Division
5.0%
Bolivia - Primera Division
3.8%
South Africa - Premier Soccer League
3.2%
Turkey - Super Lig
2.2%
Portugal - Primeira Liga
2.1%
Ecuador - Liga Pro
1.8%
Russia - Premier League
1.1%
China - Super League
1.1%
USA - MLS
1.0%
Australia - A-League
0.9%
Brazil - Serie A
0.4%
Argentina - Liga Profesional
0.3%
Colombia - Primera A
0.1%
Costa Rica - Primera Division
0.0%
Chile - Primera Division
-0.2%
Norway - Eliteserien
-0.2%
France - Ligue 1
-0.3%
Greece - Super League
-0.5%
Guatemala - Liga Nacional
-0.6%
Spain - La Liga
-0.6%
Italy - Serie A
-1.1%
Netherlands - Eredivisie
-1.3%
El Salvador - Primera Division
-1.3%
Uruguay - Primera Division
-1.4%
Honduras - Liga Nacional
-1.6%
Sweden - Allsvenskan
-1.9%
Denmark - Superliga
-2.1%
Mexico - Liga MX
-2.4%
Paraguay - Division Profesional (Apertura)
-2.4%
Saudi Arabia - Pro League
-2.6%
England - Premier League
-2.7%
India - Indian Super League
-2.9%
Austria - Bundesliga
-2.9%
Scotland - Premiership
-3.0%
Venezuela - Primera Division
-3.3%
Japan - J1 League
-3.5%
Belgium - Jupiler Pro League
-4.1%
Germany - Bundesliga
-4.7%

1 − (model Brier / baseline Brier). 0% = no better than ignoring which teams are playing; a negative bar means Attack/Defense info actually hurt on that league's calls.

Biggest surprises

Lowest probability the model gave to what actually happened.

  • VfL Wolfsburg 0-1 Bayern München (Germany - Bundesliga, 2026-05-09)model said 96% over
  • CF Montreal 0-1 Inter Miami (USA - MLS, 2026-07-25)model said 93% over
  • Club Brugge KV 1-0 Cercle Brugge (Belgium - Jupiler Pro League, 2026-08-23)model said 92% over
  • Barcelona 1-0 Celta Vigo (Spain - La Liga, 2026-04-22)model said 92% over
  • FC Schalke 04 0-0 Bayern München (Germany - Bundesliga, 2026-09-05)model said 92% over
  • Sirius 0-1 Malmo FF (Sweden - Allsvenskan, 2026-08-31)model said 91% over
  • FC Midtjylland 0-1 FC Nordsjaelland (Denmark - Superliga, 2026-03-15)model said 91% over
  • Always Ready 1-0 Oriente Petrolero (Bolivia - Primera Division, 2026-04-22)model said 91% over
  • Newcastle Jets 1-0 Macarthur (Australia - A-League, 2026-02-22)model said 90% over
  • Al-Fateh 0-1 Al-Hilal Saudi FC (Saudi Arabia - Pro League, 2026-03-14)model said 90% over

All predictions — England - Premier League (235)

Switch leagues with the tabs above the ratings table; newest match first.

DateMatchScoreP(over)ActualCall
2026-09-18Brentford v Chelsea3-082%over
2026-09-14Leeds v Newcastle4-177%over
2026-09-13Coventry v Brighton0-577%over
2026-09-13Manchester United v Manchester City0-182%under
2026-09-12Bournemouth v Brentford2-277%over
2026-09-12Liverpool v Fulham0-081%under
2026-09-12Chelsea v Hull City2-279%over
2026-09-12Crystal Palace v Ipswich2-381%over
2026-09-12Aston Villa v Nottingham Forest1-273%over
2026-09-12Tottenham v Everton0-073%under
2026-09-12Sunderland v Arsenal0-269%over
2026-09-06Everton v Manchester United2-278%over
2026-09-06Arsenal v Chelsea2-179%over
2026-09-05Newcastle v Bournemouth2-279%over
2026-09-05Fulham v Crystal Palace2-373%over
2026-09-05Manchester City v Coventry1-082%under
2026-09-05Brighton v Leeds1-177%over
2026-09-05Brentford v Sunderland1-174%over
2026-09-05Nottingham Forest v Tottenham0-077%under
2026-09-05Hull City v Aston Villa0-077%under
2026-09-04Ipswich v Liverpool0-285%over
2026-08-31Aston Villa v Arsenal0-176%under
2026-08-30Chelsea v Brighton4-378%over
2026-08-30Leeds v Brentford1-176%over
2026-08-30Sunderland v Fulham1-073%under
2026-08-30Manchester United v Ipswich5-283%over
2026-08-29Liverpool v Nottingham Forest2-279%over
2026-08-29Bournemouth v Everton1-175%over
2026-08-29Coventry v Hull City0-179%under
2026-08-29Tottenham v Newcastle0-280%over
2026-08-28Crystal Palace v Manchester City1-475%over
2026-08-24Fulham v Chelsea2-375%over
2026-08-23Manchester City v Bournemouth2-179%over
2026-08-23Brighton v Aston Villa4-077%over
2026-08-23Newcastle v Liverpool2-282%over
2026-08-22Hull City v Manchester United2-081%over
2026-08-22Everton v Crystal Palace2-072%over
2026-08-22Ipswich v Sunderland2-176%over
2026-08-22Nottingham Forest v Leeds0-176%under
2026-08-22Brentford v Tottenham3-079%over
2026-08-21Arsenal v Coventry3-077%over
2026-05-24Fulham v Newcastle2-075%over
2026-05-24Liverpool v Brentford1-183%over
2026-05-24Burnley v Wolves1-174%over
2026-05-24Tottenham v Everton1-075%under
2026-05-24West Ham v Leeds3-075%over
2026-05-24Manchester City v Aston Villa1-282%over
2026-05-24Brighton v Manchester United0-377%over
2026-05-24Crystal Palace v Arsenal1-268%over
2026-05-24Nottingham Forest v Bournemouth1-175%over
2026-05-24Sunderland v Chelsea2-172%over
2026-05-19Bournemouth v Manchester City1-178%over
2026-05-19Chelsea v Tottenham2-179%over
2026-05-18Arsenal v Burnley1-086%under
2026-05-17Manchester United v Nottingham Forest3-276%over
2026-05-17Wolves v Fulham1-168%over
2026-05-17Everton v Sunderland1-368%over
2026-05-17Brentford v Crystal Palace2-272%over
2026-05-17Leeds v Brighton1-075%under
2026-05-17Newcastle v West Ham3-179%over
2026-05-15Aston Villa v Liverpool4-279%over
2026-05-13Manchester City v Crystal Palace3-077%over
2026-05-11Tottenham v Leeds1-179%over
2026-05-10Burnley v Aston Villa2-279%over
2026-05-10Crystal Palace v Everton2-264%over
2026-05-10Nottingham Forest v Newcastle1-177%over
2026-05-10West Ham v Arsenal0-176%under
2026-05-09Liverpool v Chelsea1-182%over
2026-05-09Fulham v Bournemouth0-175%under
2026-05-09Brighton v Wolves3-074%over
2026-05-09Sunderland v Manchester United0-077%under
2026-05-09Manchester City v Brentford3-079%over
2026-05-04Chelsea v Nottingham Forest1-373%over
2026-05-04Everton v Manchester City3-368%over
2026-05-03Bournemouth v Crystal Palace3-072%over
2026-05-03Manchester United v Liverpool3-282%over
2026-05-03Aston Villa v Tottenham1-279%over
2026-05-02Newcastle v Brighton3-176%over
2026-05-02Wolves v Sunderland1-168%over
2026-05-02Brentford v West Ham3-077%over
2026-05-02Arsenal v Fulham3-074%over
2026-05-01Leeds v Burnley3-181%over
2026-04-27Manchester United v Brentford2-179%over
2026-04-25Fulham v Aston Villa1-074%under
2026-04-25Wolves v Tottenham0-176%under
2026-04-25Liverpool v Crystal Palace3-172%over
2026-04-25West Ham v Everton2-168%over
2026-04-25Arsenal v Newcastle1-081%under
2026-04-24Sunderland v Nottingham Forest0-566%over
2026-04-22Bournemouth v Leeds2-277%over
2026-04-22Burnley v Manchester City0-185%under
2026-04-21Brighton v Chelsea3-074%over
2026-04-20Crystal Palace v West Ham0-072%under
2026-04-19Everton v Liverpool1-270%over
2026-04-19Nottingham Forest v Burnley4-174%over
2026-04-19Aston Villa v Sunderland4-365%over
2026-04-19Manchester City v Arsenal2-173%over
2026-04-18Brentford v Fulham0-078%under
2026-04-18Newcastle v Bournemouth1-280%over
2026-04-18Leeds v Wolves3-073%over
2026-04-18Tottenham v Brighton2-276%over
2026-04-18Chelsea v Manchester United0-181%under
2026-04-13Manchester United v Leeds1-281%over
2026-04-12Crystal Palace v Newcastle2-173%over
2026-04-12Nottingham Forest v Aston Villa1-167%over
2026-04-12Sunderland v Tottenham1-074%under
2026-04-12Chelsea v Manchester City0-377%over
2026-04-11Arsenal v Bournemouth1-279%over
2026-04-11Burnley v Brighton0-277%over
2026-04-11Brentford v Everton2-268%over
2026-04-11Liverpool v Fulham2-080%over
2026-04-10West Ham v Wolves4-072%over
2026-03-22Newcastle v Sunderland1-273%over
2026-03-22Tottenham v Nottingham Forest0-373%over
2026-03-22Aston Villa v West Ham2-076%over
2026-03-21Brighton v Liverpool2-176%over
2026-03-21Fulham v Burnley3-180%over
2026-03-21Everton v Chelsea3-067%over
2026-03-21Leeds v Brentford0-080%under
2026-03-20Bournemouth v Manchester United2-280%over
2026-03-16Brentford v Wolves2-275%over
2026-03-15Manchester United v Aston Villa3-176%over
2026-03-15Crystal Palace v Leeds0-074%under
2026-03-15Nottingham Forest v Fulham0-073%under
2026-03-15Liverpool v Tottenham1-185%over
2026-03-14Burnley v Bournemouth0-082%under
2026-03-14Sunderland v Brighton0-167%under
2026-03-14Arsenal v Everton2-069%over
2026-03-14Chelsea v Newcastle0-183%under
2026-03-14West Ham v Manchester City1-180%over
2026-03-05Tottenham v Crystal Palace1-374%over
2026-03-04Fulham v West Ham0-182%under
2026-03-04Manchester City v Nottingham Forest2-276%over
2026-03-04Brighton v Arsenal0-175%under
2026-03-04Aston Villa v Chelsea1-472%over
2026-03-04Newcastle v Manchester United2-183%over
2026-03-03Bournemouth v Brentford0-083%under
2026-03-03Everton v Burnley2-074%over
2026-03-03Leeds v Sunderland0-174%under
2026-03-03Wolves v Liverpool2-175%over
2026-03-01Manchester United v Crystal Palace2-174%over
2026-03-01Fulham v Tottenham2-183%over
2026-03-01Brighton v Nottingham Forest2-170%over
2026-03-01Arsenal v Chelsea2-177%over
2026-02-28Bournemouth v Sunderland1-176%over
2026-02-28Newcastle v Everton2-369%over
2026-02-28Liverpool v West Ham5-280%over
2026-02-28Burnley v Brentford3-480%over
2026-02-28Leeds v Manchester City0-183%under
2026-02-27Wolves v Aston Villa2-068%over
2026-02-23Everton v Manchester United0-170%under
2026-02-22Crystal Palace v Wolves1-068%under
2026-02-22Nottingham Forest v Liverpool0-173%under
2026-02-22Sunderland v Fulham1-372%over
2026-02-22Tottenham v Arsenal1-478%over
2026-02-21Chelsea v Burnley1-185%over
2026-02-21Brentford v Brighton0-278%over
2026-02-21Aston Villa v Leeds1-180%over
2026-02-21West Ham v Bournemouth0-084%under
2026-02-21Manchester City v Newcastle2-183%over
2026-02-18Wolves v Arsenal2-273%over
2026-02-12Brentford v Arsenal1-176%over
2026-02-11Manchester City v Fulham3-082%over
2026-02-11Crystal Palace v Burnley2-373%over
2026-02-11Nottingham Forest v Wolves0-071%under
2026-02-11Aston Villa v Brighton1-075%under
2026-02-11Sunderland v Liverpool0-174%under
2026-02-10Everton v Bournemouth1-273%over
2026-02-10Tottenham v Newcastle1-281%over
2026-02-10Chelsea v Leeds2-284%over
2026-02-10West Ham v Manchester United1-183%over
2026-02-08Brighton v Crystal Palace0-172%under
2026-02-08Liverpool v Manchester City1-279%over
2026-02-07Manchester United v Tottenham2-084%over
2026-02-07Bournemouth v Aston Villa1-181%over
2026-02-07Fulham v Everton1-268%over
2026-02-07Wolves v Chelsea1-374%over
2026-02-07Arsenal v Sunderland3-072%over
2026-02-07Burnley v West Ham0-281%over
2026-02-07Newcastle v Brentford2-379%over
2026-02-06Leeds v Nottingham Forest3-176%over
2026-02-02Sunderland v Burnley3-074%over
2026-02-01Manchester United v Fulham3-281%over
2026-02-01Nottingham Forest v Crystal Palace1-167%over
2026-02-01Aston Villa v Brentford0-178%under
2026-02-01Tottenham v Manchester City2-280%over
2026-01-31Wolves v Bournemouth0-280%over
2026-01-31Brighton v Everton1-168%over
2026-01-31Leeds v Arsenal0-477%over
2026-01-31Chelsea v West Ham3-281%over
2026-01-31Liverpool v Newcastle4-178%over
2026-01-26Everton v Leeds1-171%over
2026-01-25Newcastle v Aston Villa0-277%over
2026-01-25Crystal Palace v Chelsea1-367%over
2026-01-25Brentford v Nottingham Forest0-277%over
2026-01-25Arsenal v Manchester United2-376%over
2026-01-24West Ham v Sunderland3-171%over
2026-01-24Fulham v Brighton2-178%over
2026-01-24Burnley v Tottenham2-279%over
2026-01-24Manchester City v Wolves2-081%over
2026-01-24Bournemouth v Liverpool3-282%over
2026-01-19Brighton v Bournemouth1-185%over
2026-01-18Wolves v Newcastle0-078%under
2026-01-18Aston Villa v Everton0-169%under
2026-01-17Manchester United v Manchester City2-081%over
2026-01-17Liverpool v Burnley1-183%over
2026-01-17Tottenham v West Ham1-281%over
2026-01-17Chelsea v Brentford2-078%over
2026-01-17Leeds v Fulham1-083%under
2026-01-17Sunderland v Crystal Palace2-162%over
2026-01-17Nottingham Forest v Arsenal0-072%under
2026-01-08Arsenal v Liverpool0-079%under
2026-01-07Bournemouth v Tottenham3-282%over
2026-01-07Fulham v Chelsea2-176%over
2026-01-07Everton v Wolves1-169%over
2026-01-07Manchester City v Brighton1-184%over
2026-01-07Crystal Palace v Aston Villa0-073%under
2026-01-07Brentford v Sunderland3-072%over
2026-01-07Newcastle v Leeds4-381%over
2026-01-07Burnley v Manchester United2-280%over
2026-01-06West Ham v Nottingham Forest1-275%over
2026-01-04Leeds v Manchester United1-182%over
2026-01-04Newcastle v Crystal Palace2-073%over
2026-01-04Everton v Brentford2-466%over
2026-01-04Tottenham v Sunderland1-170%over
2026-01-04Fulham v Liverpool2-279%over
2026-01-04Manchester City v Chelsea1-180%over
2026-01-03Aston Villa v Nottingham Forest3-177%over
2026-01-03Wolves v West Ham3-076%over
2026-01-03Brighton v Burnley2-084%over
2026-01-03Bournemouth v Arsenal2-379%over
2026-01-01Liverpool v Leeds0-087%under
2026-01-01Crystal Palace v Fulham1-173%over
2026-01-01Brentford v Tottenham0-082%under
2026-01-01Sunderland v Manchester City0-077%under