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.268 goals/team/match · home advantage +0.212 log-units (~24%) · seasons 2022, 2023, 2024, 2025 · generated 2026-09-19 10:32 UTC

Attack (0 = league average)Defense ↑Standard Liege -- attack -0.186 (1407 Elo), defense 0.230 (1615 Elo), 159 matchesStandard LiegeGent -- attack -0.073 (1464 Elo), defense 0.070 (1535 Elo), 162 matchesCharleroi -- attack -0.036 (1482 Elo), defense 0.159 (1580 Elo), 150 matchesAS Eupen -- attack -0.211 (1395 Elo), defense -0.110 (1445 Elo), 70 matchesZulte Waregem -- attack 0.107 (1554 Elo), defense -0.050 (1475 Elo), 70 matchesSeraing United -- attack -0.116 (1442 Elo), defense -0.091 (1455 Elo), 34 matchesKortrijk -- attack -0.093 (1453 Elo), defense -0.098 (1451 Elo), 108 matchesOH Leuven -- attack -0.209 (1396 Elo), defense -0.021 (1489 Elo), 154 matchesSt. Truiden -- attack 0.151 (1576 Elo), defense 0.171 (1586 Elo), 150 matchesUnion St. Gilloise -- attack 0.206 (1603 Elo), defense 0.598 (1799 Elo), 160 matchesUnion St. GilloiseClub Brugge KV -- attack 0.728 (1864 Elo), defense 0.272 (1636 Elo), 160 matchesClub Brugge KVGenk -- attack 0.087 (1543 Elo), defense 0.152 (1576 Elo), 162 matchesKV Mechelen -- attack -0.047 (1477 Elo), defense -0.079 (1461 Elo), 153 matchesAntwerp -- attack -0.139 (1431 Elo), defense 0.112 (1556 Elo), 161 matchesAnderlecht -- attack 0.155 (1578 Elo), defense -0.057 (1472 Elo), 153 matchesAnderlechtOostende -- attack -0.060 (1470 Elo), defense -0.136 (1432 Elo), 34 matchesKVC Westerlo -- attack -0.008 (1496 Elo), defense -0.035 (1483 Elo), 160 matchesCercle Brugge -- attack 0.113 (1557 Elo), defense -0.138 (1431 Elo), 154 matchesRWDM -- attack -0.092 (1454 Elo), defense -0.195 (1402 Elo), 36 matchesLommel United -- attack 0.080 (1540 Elo), defense 0.031 (1515 Elo), 8 matchesDender -- attack -0.221 (1389 Elo), defense -0.174 (1413 Elo), 78 matchesBeerschot VA -- attack -0.098 (1451 Elo), defense -0.178 (1411 Elo), 40 matchesPatro Eisden -- attack -0.019 (1491 Elo), defense -0.122 (1439 Elo), 4 matchesRAAL La Louvière -- attack -0.178 (1411 Elo), defense -0.056 (1472 Elo), 36 matchesLiège -- attack -0.046 (1477 Elo), defense -0.053 (1474 Elo), 2 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
Club Brugge KV0.7280.272186416362.630.97160
Union St. Gilloise0.2060.598160317991.560.70160
Anderlecht0.155-0.057157814721.481.34153
St. Truiden0.1510.171157615861.481.07150
Cercle Brugge0.113-0.138155714311.421.46154
Zulte Waregem0.107-0.050155414751.411.3370
Genk0.0870.152154315761.381.09162
Lommel United0.0800.031154015151.371.238
KVC Westerlo-0.008-0.035149614831.261.31160
Patro Eisden-0.019-0.122149114391.241.434
Charleroi-0.0360.159148215801.221.08150
Liège-0.046-0.053147714741.211.342
KV Mechelen-0.047-0.079147714611.211.37153
Oostende-0.060-0.136147014321.191.4534
Gent-0.0730.070146415351.181.18162
RWDM-0.092-0.195145414021.161.5436
Kortrijk-0.093-0.098145314511.151.40108
Beerschot VA-0.098-0.178145114111.151.5240
Seraing United-0.116-0.091144214551.131.3934
Antwerp-0.1390.112143115561.101.13161
RAAL La Louvière-0.178-0.056141114721.061.3436
Standard Liege-0.1860.230140716151.051.01159
OH Leuven-0.209-0.021139614891.031.30154
AS Eupen-0.211-0.110139514451.031.4270
Dender-0.221-0.174138914131.021.5178

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 — Belgium - Jupiler Pro League (216)

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

DateMatchScoreP(over)ActualCall
2026-09-18Gent v Standard Liege2-171%over
2026-09-13Club Brugge KV v Antwerp3-185%over
2026-09-13Genk v Gent1-176%over
2026-09-13Zulte Waregem v Charleroi0-178%under
2026-09-13RAAL La Louvière v Kortrijk3-076%over
2026-09-12SK Beveren v St. Truiden2-081%over
2026-09-12KVC Westerlo v Standard Liege4-277%over
2026-09-12OH Leuven v Cercle Brugge1-178%over
2026-09-12Union St. Gilloise v Lommel United5-074%over
2026-09-11KV Mechelen v Anderlecht0-179%under
2026-09-06Cercle Brugge v Gent0-377%over
2026-09-06Kortrijk v Zulte Waregem0-279%over
2026-09-06Anderlecht v Genk0-082%under
2026-09-06SK Beveren v OH Leuven3-075%over
2026-09-05Charleroi v Union St. Gilloise2-368%over
2026-09-05KV Mechelen v KVC Westerlo0-484%over
2026-09-05Standard Liege v Antwerp1-074%under
2026-09-05St. Truiden v RAAL La Louvière4-081%over
2026-09-04Lommel United v Club Brugge KV0-181%under
2026-09-03Anderlecht v Kortrijk1-082%under
2026-09-03Gent v OH Leuven1-075%under
2026-09-02St. Truiden v Union St. Gilloise0-373%over
2026-08-30Gent v Club Brugge KV2-181%over
2026-08-30Antwerp v St. Truiden1-478%over
2026-08-30Union St. Gilloise v Anderlecht3-077%over
2026-08-30KVC Westerlo v Zulte Waregem2-283%over
2026-08-29RAAL La Louvière v KV Mechelen2-277%over
2026-08-29Kortrijk v Charleroi1-373%over
2026-08-29OH Leuven v Standard Liege1-270%over
2026-08-29Cercle Brugge v Lommel United0-182%under
2026-08-28Genk v SK Beveren4-081%over
2026-08-23Lommel United v KVC Westerlo4-081%over
2026-08-23Club Brugge KV v Cercle Brugge1-092%under
2026-08-22Zulte Waregem v SK Beveren4-078%over
2026-08-22Charleroi v KV Mechelen2-078%over
2026-08-22Antwerp v Genk4-474%over
2026-08-21Standard Liege v RAAL La Louvière2-072%over
2026-08-16SK Beveren v Anderlecht1-081%under
2026-08-16RAAL La Louvière v Gent1-272%over
2026-08-16KV Mechelen v Standard Liege3-371%over
2026-08-16Lommel United v Charleroi0-175%under
2026-08-15Union St. Gilloise v Zulte Waregem0-079%under
2026-08-15Kortrijk v Antwerp0-373%over
2026-08-15OH Leuven v Club Brugge KV0-384%over
2026-08-15Genk v KVC Westerlo3-280%over
2026-08-14Cercle Brugge v St. Truiden3-381%over
2026-08-09Gent v KV Mechelen2-076%over
2026-08-09Zulte Waregem v Genk2-179%over
2026-08-09Charleroi v OH Leuven3-172%over
2026-08-09Anderlecht v RAAL La Louvière2-180%over
2026-08-09Antwerp v SK Beveren2-173%over
2026-08-08Standard Liege v Cercle Brugge2-275%over
2026-08-08KVC Westerlo v Union St. Gilloise1-572%over
2026-08-08St. Truiden v Lommel United1-179%over
2026-08-07Club Brugge KV v Kortrijk3-089%over
2026-05-31Gent v Genk1-173%over
2026-05-24Club Brugge KV v Gent5-088%over
2026-05-24St. Truiden v KV Mechelen3-079%over
2026-05-24Union St. Gilloise v Anderlecht5-172%over
2026-05-23Dender v Lommel United0-081%under
2026-05-23OH Leuven v Genk0-272%over
2026-05-23Standard Liege v Charleroi0-262%over
2026-05-23Antwerp v KVC Westerlo2-073%over
2026-05-21KV Mechelen v Club Brugge KV2-290%over
2026-05-21Anderlecht v St. Truiden3-178%over
2026-05-21Gent v Union St. Gilloise0-065%under
2026-05-19KVC Westerlo v Standard Liege1-267%over
2026-05-19Charleroi v OH Leuven1-170%over
2026-05-19Genk v Antwerp0-075%under
2026-05-17Anderlecht v KV Mechelen2-280%over
2026-05-17Lommel United v Dender3-282%over
2026-05-17Club Brugge KV v Union St. Gilloise5-075%over
2026-05-16Charleroi v KVC Westerlo0-176%under
2026-05-16Standard Liege v Genk0-070%under
2026-05-16St. Truiden v Gent1-176%over
2026-05-15OH Leuven v Antwerp3-068%over
2026-05-10Gent v Anderlecht1-178%over
2026-05-10Antwerp v Charleroi0-171%under
2026-05-10Union St. Gilloise v KV Mechelen3-072%over
2026-05-10Genk v KVC Westerlo3-081%over
2026-05-09Zulte Waregem v Dender2-183%over
2026-05-09RAAL La Louvière v Cercle Brugge4-178%over
2026-05-09Beerschot VA v Lommel United1-380%over
2026-05-09Club Brugge KV v St. Truiden2-088%over
2026-05-08Standard Liege v OH Leuven2-164%over
2026-05-03KV Mechelen v Gent1-078%under
2026-05-03Antwerp v Standard Liege0-561%over
2026-05-03Anderlecht v Club Brugge KV1-388%over
2026-05-03Dender v RAAL La Louvière2-172%over
2026-05-02KVC Westerlo v OH Leuven3-372%over
2026-05-02Charleroi v Genk2-078%over
2026-05-02Lommel United v Beerschot VA3-180%over
2026-05-02St. Truiden v Union St. Gilloise2-165%over
2026-05-01Cercle Brugge v Zulte Waregem2-384%over
2026-04-27Beerschot VA v Patro Eisden3-278%over
2026-04-27Liège v Lommel United1-278%over
2026-04-26Gent v Club Brugge KV0-288%over
2026-04-26KV Mechelen v St. Truiden1-475%over
2026-04-26Anderlecht v Union St. Gilloise1-365%over
2026-04-26Zulte Waregem v RAAL La Louvière4-075%over
2026-04-25OH Leuven v Charleroi0-269%over
2026-04-25Genk v Standard Liege1-171%over
2026-04-25KVC Westerlo v Antwerp2-467%over
2026-04-24Cercle Brugge v Dender2-183%over
2026-04-23Lommel United v Liège3-078%over
2026-04-23Patro Eisden v Beerschot VA1-180%over
2026-04-23St. Truiden v Anderlecht2-078%over
2026-04-22Club Brugge KV v KV Mechelen6-186%over
2026-04-22Union St. Gilloise v Gent0-073%under
2026-04-21OH Leuven v KVC Westerlo0-268%over
2026-04-21Standard Liege v Antwerp1-256%over
2026-04-21Genk v Charleroi1-181%over
2026-04-19Gent v St. Truiden0-082%under
2026-04-19Dender v Cercle Brugge1-478%over
2026-04-19Union St. Gilloise v Club Brugge KV2-174%over
2026-04-19RAAL La Louvière v Zulte Waregem0-275%over
2026-04-18Antwerp v OH Leuven2-063%over
2026-04-18KVC Westerlo v Genk1-278%over
2026-04-18Charleroi v Standard Liege1-263%over
2026-04-18KV Mechelen v Anderlecht1-276%over
2026-04-12KV Mechelen v Union St. Gilloise0-165%under
2026-04-12Genk v OH Leuven0-080%under
2026-04-12Anderlecht v Gent3-182%over
2026-04-12Dender v Zulte Waregem1-278%over
2026-04-11Cercle Brugge v RAAL La Louvière3-075%over
2026-04-11Standard Liege v KVC Westerlo1-260%over
2026-04-11St. Truiden v Club Brugge KV1-286%over
2026-04-10Charleroi v Antwerp2-166%over
2026-04-06Club Brugge KV v Anderlecht4-285%over
2026-04-06RAAL La Louvière v Dender0-174%under
2026-04-06Gent v KV Mechelen1-180%over
2026-04-05KVC Westerlo v Charleroi2-073%over
2026-04-04Zulte Waregem v Cercle Brugge2-281%over
2026-04-04OH Leuven v Standard Liege1-356%over
2026-04-04Union St. Gilloise v St. Truiden1-073%under
2026-04-03Antwerp v Genk1-274%over
2026-03-22OH Leuven v Antwerp1-063%under
2026-03-22Anderlecht v Cercle Brugge2-378%over
2026-03-22Club Brugge KV v KV Mechelen4-183%over
2026-03-22Zulte Waregem v Charleroi1-080%under
2026-03-22Standard Liege v KVC Westerlo0-062%under
2026-03-22St. Truiden v Union St. Gilloise1-367%over
2026-03-22RAAL La Louvière v Genk5-569%over
2026-03-22Dender v Gent1-379%over
2026-03-15Genk v St. Truiden1-081%under
2026-03-15Antwerp v Standard Liege1-156%over
2026-03-15KV Mechelen v Anderlecht1-075%under
2026-03-15Cercle Brugge v RAAL La Louvière1-367%over
2026-03-14Charleroi v OH Leuven0-274%over
2026-03-14Union St. Gilloise v Dender2-075%over
2026-03-14KVC Westerlo v Club Brugge KV1-282%over
2026-03-13Gent v Zulte Waregem2-085%over
2026-03-08Club Brugge KV v Anderlecht2-282%over
2026-03-08Gent v KV Mechelen3-179%over
2026-03-08Zulte Waregem v Standard Liege0-170%under
2026-03-08St. Truiden v Cercle Brugge2-180%over
2026-03-07OH Leuven v KVC Westerlo0-173%under
2026-03-07Dender v Charleroi2-275%over
2026-03-07Union St. Gilloise v Genk2-171%over
2026-03-06RAAL La Louvière v Antwerp0-061%under
2026-03-01Genk v Gent3-083%over
2026-03-01KVC Westerlo v Union St. Gilloise0-070%under
2026-03-01Charleroi v Club Brugge KV1-282%over
2026-03-01Cercle Brugge v Dender0-080%under
2026-02-28KV Mechelen v Zulte Waregem2-181%over
2026-02-28Antwerp v St. Truiden1-074%under
2026-02-28Anderlecht v OH Leuven5-169%over
2026-02-27Standard Liege v RAAL La Louvière1-155%over
2026-02-22Genk v Standard Liege0-369%over
2026-02-22RAAL La Louvière v KV Mechelen0-266%over
2026-02-22Zulte Waregem v Anderlecht2-474%over
2026-02-22KVC Westerlo v Charleroi2-177%over
2026-02-21Dender v St. Truiden1-479%over
2026-02-21Club Brugge KV v OH Leuven2-181%over
2026-02-21Union St. Gilloise v Antwerp2-164%over
2026-02-20Gent v Cercle Brugge0-185%under
2026-02-15Cercle Brugge v Club Brugge KV1-286%over
2026-02-15Antwerp v KVC Westerlo0-274%over
2026-02-15Anderlecht v RAAL La Louvière0-066%under
2026-02-15St. Truiden v Zulte Waregem3-281%over
2026-02-14OH Leuven v Dender3-267%over
2026-02-14Charleroi v Gent2-380%over
2026-02-14Standard Liege v Union St. Gilloise1-157%over
2026-02-13KV Mechelen v Genk2-374%over
2026-02-08Genk v Anderlecht2-074%over
2026-02-08Union St. Gilloise v RAAL La Louvière2-165%over
2026-02-08Club Brugge KV v Standard Liege3-076%over
2026-02-08KV Mechelen v Antwerp2-068%over
2026-02-07Zulte Waregem v Dender1-079%under
2026-02-07Charleroi v Cercle Brugge3-475%over
2026-02-07Gent v OH Leuven1-374%over
2026-02-06KVC Westerlo v St. Truiden0-478%over
2026-02-01Standard Liege v Anderlecht2-060%over
2026-02-01Dender v Genk1-276%over
2026-02-01Union St. Gilloise v Club Brugge KV1-075%under
2026-02-01OH Leuven v KV Mechelen2-262%over
2026-01-31Cercle Brugge v Antwerp0-470%over
2026-01-31Zulte Waregem v KVC Westerlo0-183%under
2026-01-31St. Truiden v Charleroi0-274%over
2026-01-30RAAL La Louvière v Gent1-173%over
2026-01-25Antwerp v Charleroi0-266%over
2026-01-25Genk v Cercle Brugge1-178%over
2026-01-25Anderlecht v Dender0-078%under
2026-01-25KV Mechelen v KVC Westerlo1-176%over
2026-01-24RAAL La Louvière v St. Truiden1-270%over
2026-01-24Club Brugge KV v Zulte Waregem4-386%over
2026-01-24OH Leuven v Union St. Gilloise0-063%under
2026-01-23Standard Liege v Gent0-465%over
2026-01-18Gent v Anderlecht4-273%over
2026-01-18Dender v Antwerp1-073%under
2026-01-18Charleroi v Standard Liege2-060%over
2026-01-18St. Truiden v OH Leuven1-073%under
2026-01-17Zulte Waregem v Genk2-180%over
2026-01-17KVC Westerlo v Cercle Brugge0-281%over
2026-01-17Union St. Gilloise v KV Mechelen1-071%under
2026-01-16Club Brugge KV v RAAL La Louvière2-376%over