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.

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

Attack (0 = league average)Defense ↑Cape Town City -- attack -0.219 (1391 Elo), defense 0.023 (1511 Elo), 97 matchesMamelodi Sundowns -- attack 0.677 (1839 Elo), defense 0.305 (1652 Elo), 119 matchesMamelodi SundownsMarumo Gallants -- attack -0.169 (1415 Elo), defense -0.166 (1417 Elo), 88 matchesStellenbosch -- attack 0.012 (1506 Elo), defense 0.114 (1557 Elo), 118 matchesGolden Arrows -- attack 0.041 (1520 Elo), defense -0.034 (1483 Elo), 119 matchesRichards Bay -- attack -0.187 (1407 Elo), defense 0.074 (1537 Elo), 123 matchesOrlando Pirates -- attack 0.592 (1796 Elo), defense 0.429 (1714 Elo), 118 matchesOrlando PiratesMoroka Swallows -- attack -0.071 (1465 Elo), defense -0.055 (1473 Elo), 60 matchesRoyal AM -- attack -0.053 (1474 Elo), defense -0.140 (1430 Elo), 71 matchesKaizer Chiefs -- attack 0.033 (1516 Elo), defense 0.209 (1604 Elo), 119 matchesMaritzburg Utd -- attack -0.027 (1487 Elo), defense -0.023 (1489 Elo), 34 matchesSekhukhune United -- attack 0.094 (1547 Elo), defense 0.020 (1510 Elo), 119 matchesSekhukhune UnitedTS Galaxy -- attack -0.005 (1497 Elo), defense -0.115 (1443 Elo), 119 matchesAmazulu -- attack 0.056 (1528 Elo), defense 0.050 (1525 Elo), 119 matchesSupersport United -- attack -0.107 (1446 Elo), defense -0.012 (1494 Elo), 89 matchesChippa United -- attack -0.133 (1434 Elo), defense -0.221 (1389 Elo), 118 matchesCasric Stars -- attack -0.064 (1468 Elo), defense -0.007 (1496 Elo), 8 matchesAjax Cape Town -- attack -0.071 (1465 Elo), defense -0.046 (1477 Elo), 34 matchesPolokwane City -- attack -0.257 (1372 Elo), defense 0.226 (1613 Elo), 89 matchesPolokwane CityUniversity of Pretoria -- attack -0.013 (1493 Elo), defense 0.007 (1504 Elo), 4 matchesBaroka FC -- attack -0.037 (1482 Elo), defense -0.029 (1486 Elo), 4 matchesMagesi -- attack -0.127 (1437 Elo), defense -0.163 (1419 Elo), 63 matchesOrbit College -- attack -0.173 (1414 Elo), defense -0.210 (1395 Elo), 34 matchesSiwelele -- attack -0.061 (1469 Elo), defense 0.043 (1522 Elo), 30 matchesDurban City -- attack -0.097 (1452 Elo), defense 0.086 (1543 Elo), 30 matchesMilford FC -- attack -0.034 (1483 Elo), defense 0.034 (1517 Elo), 4 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
Mamelodi Sundowns0.6770.305183916521.730.65119
Orlando Pirates0.5920.429179617141.590.57118
Sekhukhune United0.0940.020154715100.970.86119
Amazulu0.0560.050152815250.930.84119
Golden Arrows0.041-0.034152014830.920.91119
Kaizer Chiefs0.0330.209151616040.910.71119
Stellenbosch0.0120.114150615570.890.78118
TS Galaxy-0.005-0.115149714430.870.99119
University of Pretoria-0.0130.007149315040.870.874
Maritzburg Utd-0.027-0.023148714890.860.9034
Milford FC-0.0340.034148315170.850.854
Baroka FC-0.037-0.029148214860.850.904
Royal AM-0.053-0.140147414300.831.0171
Siwelele-0.0610.043146915220.830.8430
Casric Stars-0.064-0.007146814960.820.898
Moroka Swallows-0.071-0.055146514730.820.9360
Ajax Cape Town-0.071-0.046146514770.820.9234
Durban City-0.0970.086145215430.800.8130
Supersport United-0.107-0.012144614940.790.8989
Magesi-0.127-0.163143714190.771.0363
Chippa United-0.133-0.221143413890.771.10118
Marumo Gallants-0.169-0.166141514170.741.0488
Orbit College-0.173-0.210141413950.741.0834
Richards Bay-0.1870.074140715370.730.82123
Cape Town City-0.2190.023139115110.710.8697
Polokwane City-0.2570.226137216130.680.7089

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 — South Africa - Premier Soccer League (185)

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

DateMatchScoreP(over)ActualCall
2026-09-17Orlando Pirates v Durban City2-066%over
2026-09-13Milford FC v Richards Bay5-155%over
2026-09-13Siwelele v Golden Arrows1-158%over
2026-09-13TS Galaxy v Kruger United0-167%under
2026-09-12Amazulu v Marumo Gallants1-069%under
2026-09-12Polokwane City v Kaizer Chiefs1-156%over
2026-09-12Chippa United v Mamelodi Sundowns1-174%over
2026-09-11Stellenbosch v Sekhukhune United1-159%over
2026-09-09Mamelodi Sundowns v Siwelele3-079%over
2026-09-06Golden Arrows v Mamelodi Sundowns1-268%over
2026-09-06Kaizer Chiefs v Siwelele3-260%over
2026-09-05Chippa United v Milford FC0-057%under
2026-09-05Sekhukhune United v TS Galaxy0-067%under
2026-09-04Marumo Gallants v Polokwane City2-255%over
2026-09-04Richards Bay v Amazulu1-260%over
2026-09-02Mamelodi Sundowns v Milford FC2-074%over
2026-09-01Durban City v Stellenbosch0-056%under
2026-09-01Kruger United v Orlando Pirates0-467%over
2026-08-26Golden Arrows v Stellenbosch1-059%under
2026-08-26Polokwane City v Milford FC0-054%under
2026-08-26Mamelodi Sundowns v Amazulu5-271%over
2026-08-26Richards Bay v Kaizer Chiefs2-254%over
2026-08-25Marumo Gallants v TS Galaxy2-363%over
2026-08-25Orlando Pirates v Sekhukhune United2-070%over
2026-08-25Kruger United v Durban City0-256%over
2026-08-25Siwelele v Chippa United1-161%over
2026-08-19Mamelodi Sundowns v Marumo Gallants2-077%over
2026-08-16Chippa United v Orlando Pirates0-366%over
2026-08-16TS Galaxy v Golden Arrows0-064%under
2026-08-15Amazulu v Siwelele2-059%over
2026-08-15Kaizer Chiefs v Mamelodi Sundowns1-167%over
2026-08-15Sekhukhune United v Polokwane City2-056%over
2026-08-15Milford FC v Kruger United2-159%over
2026-08-15Durban City v Richards Bay1-151%over
2026-08-14Stellenbosch v Marumo Gallants3-161%over
2026-08-12Amazulu v Orlando Pirates1-163%over
2026-08-12Kaizer Chiefs v Sekhukhune United2-060%over
2026-08-12Milford FC v Siwelele1-058%under
2026-08-12Durban City v Golden Arrows0-056%under
2026-08-11Marumo Gallants v Kruger United0-061%under
2026-08-11Polokwane City v Stellenbosch3-349%over
2026-08-11Chippa United v Richards Bay1-156%over
2026-08-11TS Galaxy v Mamelodi Sundowns2-372%over
2026-08-02Richards Bay v Polokwane City1-246%over
2026-08-02Siwelele v TS Galaxy2-261%over
2026-08-01Golden Arrows v Chippa United0-065%under
2026-08-01Orlando Pirates v Milford FC2-068%over
2026-08-01Stellenbosch v Amazulu0-158%under
2026-08-01Sekhukhune United v Durban City1-059%under
2026-08-01Kruger United v Kaizer Chiefs1-357%over
2026-06-13Magesi v Milford FC1-159%over
2026-06-10Cape Town City v Magesi1-155%over
2026-06-06Milford FC v Cape Town City0-154%under
2026-06-03Milford FC v Magesi1-063%under
2026-05-30Magesi v Cape Town City2-055%over
2026-05-26Cape Town City v Milford FC0-154%under
2026-05-23Marumo Gallants v Stellenbosch0-060%under
2026-05-23Golden Arrows v TS Galaxy0-069%under
2026-05-23Kaizer Chiefs v Chippa United0-165%under
2026-05-23Orbit College v Orlando Pirates0-273%over
2026-05-23Sekhukhune United v Siwelele2-257%over
2026-05-23Magesi v Richards Bay1-055%under
2026-05-23Durban City v Amazulu0-156%under
2026-05-16Amazulu v Kaizer Chiefs0-158%under
2026-05-16Polokwane City v Marumo Gallants1-150%over
2026-05-16Chippa United v Golden Arrows0-267%over
2026-05-16Orlando Pirates v Durban City0-074%under
2026-05-16Stellenbosch v Orbit College2-063%over
2026-05-16Richards Bay v Sekhukhune United1-153%over
2026-05-16Siwelele v Magesi1-061%under
2026-05-12TS Galaxy v Mamelodi Sundowns3-277%over
2026-05-10Sekhukhune United v Kaizer Chiefs0-257%over
2026-05-09Marumo Gallants v Richards Bay1-154%over
2026-05-09Golden Arrows v Polokwane City0-053%under
2026-05-09TS Galaxy v Chippa United1-168%over
2026-05-09Orbit College v Amazulu0-066%under
2026-05-09Mamelodi Sundowns v Siwelele7-463%over
2026-05-09Magesi v Orlando Pirates0-375%over
2026-05-08Durban City v Stellenbosch0-059%under
2026-05-06Chippa United v Sekhukhune United1-361%over
2026-05-06Amazulu v Golden Arrows1-169%over
2026-05-06Marumo Gallants v TS Galaxy1-164%over
2026-05-06Mamelodi Sundowns v Kaizer Chiefs1-167%over
2026-05-06Richards Bay v Polokwane City0-044%under
2026-05-05Stellenbosch v Orlando Pirates0-269%over
2026-05-05Magesi v Orbit College1-265%over
2026-05-05Siwelele v Durban City2-247%over
2026-05-03Mamelodi Sundowns v Polokwane City3-059%over
2026-04-29Polokwane City v Mamelodi Sundowns0-154%under
2026-04-29Siwelele v Kaizer Chiefs2-045%over
2026-04-26Polokwane City v Stellenbosch1-050%under
2026-04-26Orlando Pirates v Kaizer Chiefs1-171%over
2026-04-26TS Galaxy v Magesi0-069%under
2026-04-26Richards Bay v Mamelodi Sundowns0-064%under
2026-04-25Amazulu v Chippa United5-162%over
2026-04-25Sekhukhune United v Marumo Gallants1-164%over
2026-04-24Golden Arrows v Siwelele0-057%under
2026-04-24Durban City v Orbit College1-162%over
2026-04-22Mamelodi Sundowns v Stellenbosch1-174%over
2026-04-19TS Galaxy v Richards Bay0-162%under
2026-04-19Magesi v Durban City5-254%over
2026-04-18Marumo Gallants v Siwelele0-053%under
2026-04-18Orlando Pirates v Amazulu3-075%over
2026-04-18Orbit College v Golden Arrows1-268%over
2026-04-18Polokwane City v Kaizer Chiefs0-048%under
2026-04-17Stellenbosch v Sekhukhune United3-157%over
2026-04-15Magesi v Kaizer Chiefs1-454%over
2026-04-12Kaizer Chiefs v TS Galaxy2-063%over
2026-04-12Marumo Gallants v Orbit College0-068%under
2026-04-11Golden Arrows v Durban City1-061%under
2026-04-11Siwelele v Amazulu1-151%over
2026-04-11Sekhukhune United v Magesi1-061%under
2026-04-11Chippa United v Polokwane City1-149%over
2026-04-10Richards Bay v Orlando Pirates2-265%over
2026-04-08TS Galaxy v Polokwane City1-254%over
2026-04-07Chippa United v Siwelele1-051%under
2026-04-07Orlando Pirates v Golden Arrows5-077%over
2026-04-07Richards Bay v Stellenbosch2-153%over
2026-04-07Magesi v Marumo Gallants3-061%over
2026-04-07Durban City v Mamelodi Sundowns0-163%under
2026-04-06Orbit College v Kaizer Chiefs1-357%over
2026-04-06Amazulu v Sekhukhune United2-256%over
2026-04-03Mamelodi Sundowns v Chippa United4-175%over
2026-03-22Golden Arrows v Sekhukhune United1-064%under
2026-03-22TS Galaxy v Orlando Pirates0-665%over
2026-03-22Siwelele v Orbit College1-057%under
2026-03-22Durban City v Richards Bay1-052%under
2026-03-21Polokwane City v Amazulu0-149%under
2026-03-21Stellenbosch v Chippa United2-158%over
2026-03-21Kaizer Chiefs v Magesi2-054%over
2026-03-18Golden Arrows v Stellenbosch1-165%over
2026-03-17Mamelodi Sundowns v Marumo Gallants3-179%over
2026-03-15Kaizer Chiefs v Durban City1-051%under
2026-03-14Marumo Gallants v Golden Arrows1-268%over
2026-03-14Orlando Pirates v Siwelele1-161%over
2026-03-14Magesi v Chippa United2-253%over
2026-03-14Amazulu v Richards Bay2-153%over
2026-03-14Sekhukhune United v Polokwane City0-051%under
2026-03-13Stellenbosch v TS Galaxy1-161%over
2026-03-11Orlando Pirates v Richards Bay2-064%over
2026-03-10Orbit College v Mamelodi Sundowns0-272%over
2026-03-04Amazulu v Magesi0-060%under
2026-03-04Polokwane City v Orlando Pirates1-252%over
2026-03-04Chippa United v Marumo Gallants1-356%over
2026-03-04Mamelodi Sundowns v Golden Arrows2-178%over
2026-03-04Durban City v Sekhukhune United1-155%over
2026-03-03TS Galaxy v Orbit College1-268%over
2026-03-03Richards Bay v Kaizer Chiefs1-050%under
2026-03-03Siwelele v Stellenbosch0-053%under
2026-03-01Marumo Gallants v Durban City0-158%under
2026-03-01Mamelodi Sundowns v Sekhukhune United3-166%over
2026-02-28Kaizer Chiefs v Orlando Pirates0-355%over
2026-02-28Golden Arrows v Chippa United0-064%under
2026-02-28Siwelele v TS Galaxy1-056%under
2026-02-28Orbit College v Richards Bay0-060%under
2026-02-27Stellenbosch v Amazulu1-061%under
2026-02-27Magesi v Polokwane City0-247%over
2026-02-24Amazulu v Mamelodi Sundowns0-166%under
2026-02-24Kaizer Chiefs v Stellenbosch1-254%over
2026-02-18Orlando Pirates v Mamelodi Sundowns1-261%over
2026-02-18Stellenbosch v Magesi1-159%over
2026-02-15Sekhukhune United v Orbit College2-066%over
2026-02-14Orlando Pirates v Marumo Gallants3-068%over
2026-02-14Polokwane City v Siwelele0-046%under
2026-02-14Chippa United v Richards Bay3-050%over
2026-02-13Magesi v Golden Arrows0-265%over
2026-02-13Durban City v TS Galaxy2-059%over
2026-02-03Amazulu v Orlando Pirates0-260%over
2026-02-01TS Galaxy v Sekhukhune United0-162%under
2026-01-31Marumo Gallants v Amazulu0-163%under
2026-01-31Chippa United v Durban City2-052%over
2026-01-31Polokwane City v Orbit College2-254%over
2026-01-31Orlando Pirates v Magesi2-064%over
2026-01-30Richards Bay v Golden Arrows2-260%over
2026-01-28Marumo Gallants v Kaizer Chiefs0-156%under
2026-01-27Sekhukhune United v Mamelodi Sundowns0-262%over
2026-01-25Amazulu v TS Galaxy3-261%over
2026-01-25Durban City v Polokwane City1-047%under
2026-01-24Orbit College v Chippa United0-160%under
2026-01-24Sekhukhune United v Orlando Pirates0-060%under
2026-01-23Richards Bay v Siwelele1-149%over
2026-01-21TS Galaxy v Marumo Gallants2-067%over
2026-01-20Kaizer Chiefs v Golden Arrows1-063%under
2026-01-20Sekhukhune United v Stellenbosch0-163%under
2026-01-19Mamelodi Sundowns v Orbit College2-078%over