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.

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

Attack (0 = league average)Defense ↑Red Bull Salzburg -- attack 0.225 (1612 Elo), defense 0.112 (1556 Elo), 128 matchesRed Bull SalzburgAustria Vienna -- attack 0.066 (1533 Elo), defense 0.009 (1505 Elo), 133 matchesLask Linz -- attack 0.359 (1680 Elo), defense 0.144 (1572 Elo), 131 matchesLask LinzAustria Klagenfurt -- attack -0.131 (1434 Elo), defense -0.329 (1336 Elo), 96 matchesWolfsberger AC -- attack -0.024 (1488 Elo), defense 0.042 (1521 Elo), 131 matchesSturm Graz -- attack 0.230 (1615 Elo), defense 0.230 (1615 Elo), 128 matchesSturm GrazRapid Vienna -- attack -0.049 (1476 Elo), defense 0.087 (1543 Elo), 132 matchesRied -- attack -0.126 (1437 Elo), defense -0.008 (1496 Elo), 67 matchesTSV Hartberg -- attack -0.049 (1475 Elo), defense 0.098 (1549 Elo), 131 matchesSCR Altach -- attack -0.208 (1396 Elo), defense 0.025 (1512 Elo), 128 matchesAustria Lustenau -- attack -0.146 (1427 Elo), defense -0.097 (1452 Elo), 67 matchesWSG Wattens -- attack -0.128 (1436 Elo), defense -0.197 (1402 Elo), 128 matchesFC BW Linz -- attack -0.089 (1456 Elo), defense -0.063 (1468 Elo), 96 matchesGrazer AK -- attack -0.003 (1498 Elo), defense 0.022 (1511 Elo), 64 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
Lask Linz0.3590.144168015721.831.11131
Sturm Graz0.2300.230161516151.611.02128
Red Bull Salzburg0.2250.112161215561.601.15128
Austria Vienna0.0660.009153315051.371.27133
Grazer AK-0.0030.022149815111.281.2564
Wolfsberger AC-0.0240.042148815211.251.23131
Rapid Vienna-0.0490.087147615431.221.17132
TSV Hartberg-0.0490.098147515491.221.16131
FC BW Linz-0.089-0.063145614681.171.3696
Ried-0.126-0.008143714961.131.2967
WSG Wattens-0.128-0.197143614021.131.56128
Austria Klagenfurt-0.131-0.329143413361.121.7896
Austria Lustenau-0.146-0.097142714521.111.4167
SCR Altach-0.2080.025139615121.041.25128

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 — Austria - Bundesliga (130)

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

DateMatchScoreP(over)ActualCall
2026-09-18Rapid Vienna v WSG Wattens3-083%over
2026-09-13Austria Vienna v Austria Lustenau2-176%over
2026-09-13WSG Wattens v TSV Hartberg2-275%over
2026-09-13Sturm Graz v Lask Linz2-179%over
2026-09-12SCR Altach v Grazer AK1-272%over
2026-09-12Wolfsberger AC v Rapid Vienna0-377%over
2026-09-11Ried v Red Bull Salzburg1-180%over
2026-09-02Austria Vienna v WSG Wattens0-180%under
2026-09-02Red Bull Salzburg v Rapid Vienna5-179%over
2026-09-01Wolfsberger AC v Lask Linz1-378%over
2026-08-30Rapid Vienna v Sturm Graz3-174%over
2026-08-30TSV Hartberg v Ried3-270%over
2026-08-30Red Bull Salzburg v Austria Vienna4-178%over
2026-08-29Grazer AK v Wolfsberger AC0-077%under
2026-08-29Lask Linz v SCR Altach3-079%over
2026-08-28Austria Lustenau v WSG Wattens0-477%over
2026-08-22SCR Altach v TSV Hartberg1-266%over
2026-08-22Sturm Graz v Austria Lustenau1-176%over
2026-08-21Ried v Grazer AK1-078%under
2026-08-16TSV Hartberg v Austria Vienna0-273%over
2026-08-16WSG Wattens v Red Bull Salzburg0-379%over
2026-08-16Rapid Vienna v Grazer AK8-073%over
2026-08-15Austria Lustenau v Wolfsberger AC2-174%over
2026-08-15Sturm Graz v SCR Altach1-073%under
2026-08-14Lask Linz v Ried4-180%over
2026-08-09Wolfsberger AC v Red Bull Salzburg1-176%over
2026-08-09Ried v Rapid Vienna1-270%over
2026-08-09Austria Vienna v Lask Linz0-281%over
2026-08-08Grazer AK v Austria Lustenau2-175%over
2026-08-08TSV Hartberg v Sturm Graz0-272%over
2026-08-07SCR Altach v WSG Wattens3-172%over
2026-08-02Wolfsberger AC v Austria Vienna3-076%over
2026-08-02Austria Lustenau v Ried1-173%over
2026-08-02Rapid Vienna v SCR Altach1-070%under
2026-08-01WSG Wattens v Sturm Graz1-178%over
2026-08-01Red Bull Salzburg v TSV Hartberg1-076%under
2026-07-31Lask Linz v Grazer AK3-080%over
2026-05-25Rapid Vienna v Ried3-069%over
2026-05-22Ried v Rapid Vienna2-168%over
2026-05-19Ried v Wolfsberger AC2-170%over
2026-05-17Red Bull Salzburg v TSV Hartberg1-375%over
2026-05-17Austria Vienna v Lask Linz0-382%over
2026-05-17Sturm Graz v Rapid Vienna2-074%over
2026-05-16SCR Altach v Ried2-066%over
2026-05-16Wolfsberger AC v WSG Wattens2-078%over
2026-05-16FC BW Linz v Grazer AK0-374%over
2026-05-10Rapid Vienna v Austria Vienna0-275%over
2026-05-10Lask Linz v Red Bull Salzburg2-183%over
2026-05-10TSV Hartberg v Sturm Graz2-467%over
2026-05-09Ried v Wolfsberger AC0-173%under
2026-05-09WSG Wattens v FC BW Linz1-178%over
2026-05-09Grazer AK v SCR Altach2-268%over
2026-05-04SCR Altach v Wolfsberger AC1-465%over
2026-05-04Lask Linz v Rapid Vienna3-178%over
2026-05-03Austria Vienna v TSV Hartberg1-073%under
2026-05-03Red Bull Salzburg v Sturm Graz1-177%over
2026-05-02Ried v FC BW Linz2-074%over
2026-05-02Grazer AK v WSG Wattens4-076%over
2026-04-26Rapid Vienna v Red Bull Salzburg1-077%under
2026-04-26TSV Hartberg v Lask Linz1-571%over
2026-04-26Sturm Graz v Austria Vienna1-180%over
2026-04-25Wolfsberger AC v Grazer AK1-073%under
2026-04-25WSG Wattens v Ried1-078%under
2026-04-24FC BW Linz v SCR Altach3-067%over
2026-04-22Red Bull Salzburg v Austria Vienna3-183%over
2026-04-22Rapid Vienna v TSV Hartberg0-265%over
2026-04-22Sturm Graz v Lask Linz1-179%over
2026-04-21SCR Altach v WSG Wattens0-074%under
2026-04-21FC BW Linz v Wolfsberger AC3-074%over
2026-04-21Ried v Grazer AK2-172%over
2026-04-19Austria Vienna v Red Bull Salzburg1-381%over
2026-04-19TSV Hartberg v Rapid Vienna2-262%over
2026-04-19Lask Linz v Sturm Graz1-180%over
2026-04-18Wolfsberger AC v FC BW Linz0-078%under
2026-04-18WSG Wattens v SCR Altach2-272%over
2026-04-17Grazer AK v Ried1-173%over
2026-04-12Sturm Graz v TSV Hartberg0-072%under
2026-04-12Austria Vienna v Rapid Vienna1-175%over
2026-04-11SCR Altach v Grazer AK1-068%under
2026-04-11Wolfsberger AC v Ried0-079%under
2026-04-11FC BW Linz v WSG Wattens5-078%over
2026-04-10Red Bull Salzburg v Lask Linz2-380%over
2026-04-05Lask Linz v Austria Vienna4-179%over
2026-04-05TSV Hartberg v Red Bull Salzburg1-269%over
2026-04-05Rapid Vienna v Sturm Graz0-275%over
2026-04-04WSG Wattens v Wolfsberger AC3-179%over
2026-04-04Grazer AK v FC BW Linz2-175%over
2026-04-03Ried v SCR Altach3-265%over
2026-03-22TSV Hartberg v Austria Vienna0-172%under
2026-03-22Rapid Vienna v Lask Linz4-270%over
2026-03-21Wolfsberger AC v SCR Altach1-169%over
2026-03-21FC BW Linz v Ried3-271%over
2026-03-21WSG Wattens v Grazer AK1-573%over
2026-03-20Sturm Graz v Red Bull Salzburg1-181%over
2026-03-15Red Bull Salzburg v Rapid Vienna0-176%under
2026-03-15Austria Vienna v Sturm Graz2-576%over
2026-03-14SCR Altach v FC BW Linz3-163%over
2026-03-14Ried v WSG Wattens2-172%over
2026-03-14Grazer AK v Wolfsberger AC2-076%over
2026-03-13Lask Linz v TSV Hartberg0-072%under
2026-03-08Sturm Graz v SCR Altach2-068%over
2026-03-08Rapid Vienna v Red Bull Salzburg1-077%under
2026-03-08Lask Linz v Wolfsberger AC3-177%over
2026-03-08Ried v Austria Vienna0-274%over
2026-03-08TSV Hartberg v FC BW Linz1-170%over
2026-03-08WSG Wattens v Grazer AK2-074%over
2026-03-01Red Bull Salzburg v TSV Hartberg0-080%under
2026-03-01Austria Vienna v Lask Linz2-275%over
2026-03-01SCR Altach v Rapid Vienna1-163%over
2026-03-01Wolfsberger AC v Sturm Graz2-277%over
2026-03-01FC BW Linz v WSG Wattens2-370%over
2026-03-01Grazer AK v Ried2-170%over
2026-02-22Sturm Graz v FC BW Linz1-077%under
2026-02-22WSG Wattens v Ried1-172%over
2026-02-22Lask Linz v Red Bull Salzburg1-577%over
2026-02-21SCR Altach v Austria Vienna2-165%over
2026-02-21Rapid Vienna v Wolfsberger AC2-074%over
2026-02-21TSV Hartberg v Grazer AK1-074%under
2026-02-15FC BW Linz v Wolfsberger AC2-174%over
2026-02-15Grazer AK v Red Bull Salzburg1-181%over
2026-02-15Austria Vienna v Rapid Vienna2-074%over
2026-02-14Ried v Lask Linz1-171%over
2026-02-14TSV Hartberg v SCR Altach0-067%under
2026-02-14WSG Wattens v Sturm Graz1-078%under
2026-02-08SCR Altach v FC BW Linz1-066%under
2026-02-08Wolfsberger AC v Grazer AK2-277%over
2026-02-08Sturm Graz v Ried1-079%under
2026-02-07Rapid Vienna v TSV Hartberg1-174%over
2026-02-07Lask Linz v WSG Wattens1-077%under
2026-02-06Red Bull Salzburg v Austria Vienna0-282%over