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.

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

Attack (0 = league average)Defense ↑Kerala Blasters -- attack -0.054 (1473 Elo), defense 0.004 (1502 Elo), 81 matchesEast Bengal -- attack -0.096 (1452 Elo), defense 0.003 (1502 Elo), 66 matchesBengaluru -- attack 0.066 (1533 Elo), defense 0.168 (1584 Elo), 87 matchesBengaluruNorthEast United -- attack 0.033 (1517 Elo), defense -0.049 (1475 Elo), 80 matchesHyderabad -- attack -0.222 (1389 Elo), defense -0.171 (1414 Elo), 68 matchesMumbai City -- attack -0.010 (1495 Elo), defense 0.259 (1629 Elo), 85 matchesMumbai CityATK Mohun Bagan -- attack 0.181 (1590 Elo), defense 0.366 (1683 Elo), 89 matchesATK Mohun BaganChennaiyin -- attack -0.170 (1415 Elo), defense -0.128 (1436 Elo), 80 matchesJamshedpur -- attack -0.038 (1481 Elo), defense 0.112 (1556 Elo), 82 matchesOdisha -- attack 0.009 (1505 Elo), defense -0.068 (1466 Elo), 83 matchesGoa -- attack 0.025 (1512 Elo), defense 0.211 (1605 Elo), 84 matchesGoaMinerva Punjab -- attack -0.002 (1499 Elo), defense 0.079 (1539 Elo), 59 matchesMohammedan -- attack -0.396 (1302 Elo), defense -0.314 (1343 Elo), 37 matchesInter Kashi -- attack -0.132 (1434 Elo), defense 0.036 (1518 Elo), 13 matchesSC Delhi -- attack -0.101 (1449 Elo), defense 0.033 (1517 Elo), 13 matchesEast Bengal II -- attack 0.237 (1619 Elo), defense 0.132 (1566 Elo), 13 matchesEast Bengal II

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
East Bengal II0.2370.132161915661.641.1313
ATK Mohun Bagan0.1810.366159016831.550.9089
Bengaluru0.0660.168153315841.381.0987
NorthEast United0.033-0.049151714751.341.3680
Goa0.0250.211151216051.321.0584
Odisha0.009-0.068150514661.301.3883
Minerva Punjab-0.0020.079149915391.291.1959
Mumbai City-0.0100.259149516291.281.0085
Jamshedpur-0.0380.112148115561.241.1582
Kerala Blasters-0.0540.004147315021.221.2981
East Bengal-0.0960.003145215021.171.2966
SC Delhi-0.1010.033144915171.171.2513
Inter Kashi-0.1320.036143415181.131.2513
Chennaiyin-0.170-0.128141514361.091.4780
Hyderabad-0.222-0.171138914141.031.5368
Mohammedan-0.396-0.314130213430.871.7737

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 — India - Indian Super League (91)

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

DateMatchScoreP(over)ActualCall
2026-05-21Minerva Punjab v Mumbai City0-268%over
2026-05-21Jamshedpur v Odisha0-079%under
2026-05-21ATK Mohun Bagan v SC Delhi2-171%over
2026-05-21Inter Kashi v East Bengal II1-275%over
2026-05-19NorthEast United v Mohammedan2-081%over
2026-05-18Kerala Blasters v Goa2-170%over
2026-05-17SC Delhi v Inter Kashi0-072%under
2026-05-17ATK Mohun Bagan v East Bengal II1-176%over
2026-05-16Chennaiyin v Bengaluru1-273%over
2026-05-16Odisha v Minerva Punjab2-376%over
2026-05-15Mohammedan v Mumbai City0-469%over
2026-05-12ATK Mohun Bagan v Inter Kashi0-077%under
2026-05-11East Bengal II v Minerva Punjab0-081%under
2026-05-10Kerala Blasters v Mohammedan3-173%over
2026-05-10NorthEast United v Chennaiyin4-175%over
2026-05-09Goa v ATK Mohun Bagan1-169%over
2026-05-09Jamshedpur v Bengaluru0-174%under
2026-05-08SC Delhi v Odisha1-277%over
2026-05-06Minerva Punjab v Chennaiyin1-076%under
2026-05-05Mumbai City v East Bengal II1-273%over
2026-05-04Odisha v Bengaluru1-178%over
2026-05-02NorthEast United v Inter Kashi3-274%over
2026-05-02SC Delhi v Minerva Punjab0-077%under
2026-05-01Jamshedpur v Goa2-072%over
2026-04-28East Bengal II v Odisha3-084%over
2026-04-26SC Delhi v Mohammedan2-274%over
2026-04-25Bengaluru v Mumbai City0-071%under
2026-04-25Jamshedpur v Chennaiyin4-172%over
2026-04-24NorthEast United v Goa0-273%over
2026-04-23Kerala Blasters v Odisha2-176%over
2026-04-21Chennaiyin v Mohammedan0-075%under
2026-04-20Minerva Punjab v Inter Kashi3-075%over
2026-04-19NorthEast United v ATK Mohun Bagan0-178%under
2026-04-18Kerala Blasters v Jamshedpur2-072%over
2026-04-18Goa v Mumbai City2-067%over
2026-04-17Chennaiyin v SC Delhi1-076%under
2026-04-17Odisha v Mohammedan1-182%over
2026-04-16East Bengal II v Bengaluru3-378%over
2026-04-15Kerala Blasters v NorthEast United1-176%over
2026-04-12Inter Kashi v Mohammedan1-078%under
2026-04-12ATK Mohun Bagan v Minerva Punjab3-277%over
2026-04-11Chennaiyin v East Bengal II1-378%over
2026-04-11Bengaluru v Kerala Blasters1-275%over
2026-04-10NorthEast United v SC Delhi0-378%over
2026-04-10Goa v Odisha3-175%over
2026-04-09Jamshedpur v Mumbai City1-169%over
2026-04-07Chennaiyin v Inter Kashi1-273%over
2026-04-05SC Delhi v Kerala Blasters2-075%over
2026-04-05Mumbai City v Odisha1-076%under
2026-04-04Jamshedpur v ATK Mohun Bagan1-174%over
2026-04-04Goa v Bengaluru0-271%over
2026-04-03Minerva Punjab v Mohammedan2-180%over
2026-03-23East Bengal II v Mohammedan7-076%over
2026-03-22Chennaiyin v Goa1-172%over
2026-03-22Inter Kashi v Bengaluru1-371%over
2026-03-21Kerala Blasters v Minerva Punjab1-373%over
2026-03-20NorthEast United v Odisha1-479%over
2026-03-20ATK Mohun Bagan v Mumbai City0-174%under
2026-03-19SC Delhi v Jamshedpur1-176%over
2026-03-16Minerva Punjab v Goa1-172%over
2026-03-15NorthEast United v Jamshedpur2-176%over
2026-03-15Inter Kashi v Mumbai City1-269%over
2026-03-14East Bengal II v Kerala Blasters1-175%over
2026-03-14Bengaluru v ATK Mohun Bagan0-077%under
2026-03-09Minerva Punjab v NorthEast United1-177%over
2026-03-08Mumbai City v SC Delhi2-272%over
2026-03-07Mohammedan v Bengaluru1-273%over
2026-03-07Kerala Blasters v Chennaiyin0-175%under
2026-03-06ATK Mohun Bagan v Odisha5-178%over
2026-03-06Jamshedpur v Inter Kashi1-075%under
2026-03-05East Bengal II v Goa0-076%under
2026-03-01Odisha v Chennaiyin1-179%over
2026-03-01Mumbai City v NorthEast United1-173%over
2026-02-28Kerala Blasters v Inter Kashi1-273%over
2026-02-28ATK Mohun Bagan v Mohammedan5-174%over
2026-02-27East Bengal II v Jamshedpur1-278%over
2026-02-27Bengaluru v Minerva Punjab0-277%over
2026-02-26Goa v SC Delhi1-078%under
2026-02-24Odisha v Inter Kashi0-079%under
2026-02-23ATK Mohun Bagan v Chennaiyin2-078%over
2026-02-22Bengaluru v NorthEast United1-179%over
2026-02-22Kerala Blasters v Mumbai City0-172%under
2026-02-21East Bengal II v SC Delhi4-176%over
2026-02-21Jamshedpur v Minerva Punjab1-080%under
2026-02-20Mohammedan v Goa0-272%over
2026-02-19Mumbai City v Chennaiyin1-077%under
2026-02-16East Bengal II v NorthEast United3-078%over
2026-02-15Jamshedpur v Mohammedan1-076%under
2026-02-15Bengaluru v SC Delhi2-078%over
2026-02-14ATK Mohun Bagan v Kerala Blasters2-076%over
2026-02-14Goa v Inter Kashi1-177%over