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.

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

Attack (0 = league average)Defense ↑Hammarby FF -- attack 0.327 (1663 Elo), defense 0.314 (1657 Elo), 120 matchesHammarby FFHelsingborg -- attack -0.115 (1442 Elo), defense -0.064 (1468 Elo), 30 matchesBK Hacken -- attack 0.076 (1538 Elo), defense -0.080 (1460 Elo), 120 matchesAIK Stockholm -- attack -0.034 (1483 Elo), defense 0.168 (1584 Elo), 120 matchesIFK Goteborg -- attack -0.026 (1487 Elo), defense 0.252 (1626 Elo), 120 matchesIFK GoteborgIFK Varnamo -- attack -0.080 (1460 Elo), defense -0.397 (1301 Elo), 122 matchesSirius -- attack 0.282 (1641 Elo), defense -0.120 (1440 Elo), 120 matchesSiriusGIF Sundsvall -- attack -0.072 (1464 Elo), defense -0.196 (1402 Elo), 30 matchesKalmar FF -- attack -0.056 (1472 Elo), defense -0.084 (1458 Elo), 90 matchesMalmo FF -- attack 0.143 (1572 Elo), defense 0.221 (1611 Elo), 120 matchesIFK Norrkoping -- attack -0.123 (1438 Elo), defense -0.209 (1395 Elo), 122 matchesVarbergs BoIS FC -- attack -0.114 (1443 Elo), defense -0.214 (1393 Elo), 62 matchesIF Elfsborg -- attack 0.039 (1519 Elo), defense -0.171 (1414 Elo), 120 matchesMjallby AIF -- attack 0.203 (1602 Elo), defense 0.510 (1755 Elo), 120 matchesMjallby AIFDjurgardens IF -- attack 0.283 (1641 Elo), defense 0.225 (1613 Elo), 120 matchesDjurgardens IFDegerfors IF -- attack -0.150 (1425 Elo), defense -0.092 (1454 Elo), 90 matchesOsters IF -- attack -0.164 (1418 Elo), defense -0.118 (1441 Elo), 32 matchesIF Brommapojkarna -- attack -0.005 (1497 Elo), defense -0.115 (1443 Elo), 92 matchesHalmstad -- attack -0.326 (1337 Elo), defense -0.022 (1489 Elo), 90 matchesUtsikten -- attack -0.039 (1481 Elo), defense -0.045 (1477 Elo), 2 matchesGais -- attack 0.055 (1527 Elo), defense 0.250 (1625 Elo), 60 matchesVasteras SK FK -- attack -0.161 (1420 Elo), defense 0.017 (1509 Elo), 30 matchesLandskrona BoIS -- attack -0.007 (1497 Elo), defense -0.012 (1494 Elo), 2 matchesOrgryte IS -- attack -0.015 (1493 Elo), defense 0.064 (1532 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
Hammarby FF0.3270.314166316571.760.93120
Djurgardens IF0.2830.225164116131.681.01120
Sirius0.282-0.120164114401.681.43120
Mjallby AIF0.2030.510160217551.550.76120
Malmo FF0.1430.221157216111.461.02120
BK Hacken0.076-0.080153814601.371.37120
Gais0.0550.250152716251.340.9960
IF Elfsborg0.039-0.171151914141.321.51120
IF Brommapojkarna-0.005-0.115149714431.261.4292
Landskrona BoIS-0.007-0.012149714941.261.282
Orgryte IS-0.0150.064149315321.251.192
IFK Goteborg-0.0260.252148716261.240.99120
AIK Stockholm-0.0340.168148315841.231.07120
Utsikten-0.039-0.045148114771.221.332
Kalmar FF-0.056-0.084147214581.201.3890
GIF Sundsvall-0.072-0.196146414021.181.5430
IFK Varnamo-0.080-0.397146013011.171.89122
Varbergs BoIS FC-0.114-0.214144313931.131.5762
Helsingborg-0.115-0.064144214681.131.3530
IFK Norrkoping-0.123-0.209143813951.121.56122
Degerfors IF-0.150-0.092142514541.091.3990
Vasteras SK FK-0.1610.017142015091.081.2530
Osters IF-0.164-0.118141814411.081.4332
Halmstad-0.326-0.022133714890.921.3090

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 — Sweden - Allsvenskan (168)

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

DateMatchScoreP(over)ActualCall
2026-09-16AIK Stockholm v Mjallby AIF1-175%over
2026-09-14Djurgardens IF v Gais2-072%over
2026-09-14Sirius v Degerfors IF2-085%over
2026-09-13Hammarby FF v IF Brommapojkarna3-185%over
2026-09-13IF Elfsborg v Kalmar FF1-073%under
2026-09-13Malmo FF v Orgryte IS4-182%over
2026-09-12AIK Stockholm v Vasteras SK FK1-475%over
2026-09-12IFK Goteborg v Halmstad2-174%over
2026-09-11BK Hacken v Mjallby AIF1-178%over
2026-09-07Kalmar FF v Djurgardens IF0-180%under
2026-09-07Malmo FF v AIK Stockholm0-079%under
2026-09-07Mjallby AIF v IFK Goteborg1-478%over
2026-09-06Orgryte IS v Hammarby FF1-186%over
2026-09-06IF Brommapojkarna v IF Elfsborg2-177%over
2026-09-05Gais v BK Hacken0-074%under
2026-09-05Degerfors IF v Halmstad2-065%over
2026-09-05Vasteras SK FK v Sirius0-187%under
2026-09-03Mjallby AIF v Djurgardens IF0-279%over
2026-08-31Djurgardens IF v Mjallby AIF4-078%over
2026-08-31Sirius v Malmo FF0-191%under
2026-08-31Gais v IF Brommapojkarna4-070%over
2026-08-30AIK Stockholm v Hammarby FF3-279%over
2026-08-30IFK Goteborg v Orgryte IS1-084%under
2026-08-29BK Hacken v Vasteras SK FK1-381%over
2026-08-29IF Elfsborg v Degerfors IF2-073%over
2026-08-29Halmstad v Kalmar FF1-069%under
2026-08-24Malmo FF v Djurgardens IF0-384%over
2026-08-23IFK Goteborg v IF Elfsborg1-179%over
2026-08-23Vasteras SK FK v Kalmar FF0-079%under
2026-08-23Hammarby FF v Gais2-074%over
2026-08-23IF Brommapojkarna v Degerfors IF2-076%over
2026-08-22Orgryte IS v Halmstad1-177%over
2026-08-21Sirius v BK Hacken0-392%over
2026-08-17BK Hacken v Halmstad1-080%under
2026-08-16Djurgardens IF v AIK Stockholm1-380%over
2026-08-16IF Brommapojkarna v Orgryte IS3-183%over
2026-08-16Degerfors IF v IFK Goteborg3-076%over
2026-08-16Kalmar FF v Hammarby FF0-480%over
2026-08-16Gais v Malmo FF0-176%under
2026-08-15Mjallby AIF v Sirius4-383%over
2026-08-14IF Elfsborg v Vasteras SK FK3-078%over
2026-08-10Sirius v IF Brommapojkarna2-290%over
2026-08-10Vasteras SK FK v Djurgardens IF1-084%under
2026-08-09Hammarby FF v BK Hacken3-086%over
2026-08-09Malmo FF v Degerfors IF1-282%over
2026-08-09IFK Goteborg v Kalmar FF3-277%over
2026-08-09Halmstad v Gais0-267%over
2026-08-08Orgryte IS v AIK Stockholm3-474%over
2026-08-08Mjallby AIF v IF Elfsborg0-175%under
2026-08-03Djurgardens IF v Vasteras SK FK6-082%over
2026-08-03Halmstad v Sirius0-288%over
2026-08-02IFK Goteborg v Degerfors IF2-077%over
2026-08-02IF Brommapojkarna v Malmo FF1-283%over
2026-08-02AIK Stockholm v Orgryte IS0-377%over
2026-08-01BK Hacken v Kalmar FF1-183%over
2026-07-27BK Hacken v AIK Stockholm0-082%under
2026-07-26Sirius v IFK Goteborg4-191%over
2026-07-26IF Brommapojkarna v Hammarby FF1-182%over
2026-07-26Malmo FF v IF Elfsborg1-284%over
2026-07-26Gais v Halmstad1-173%over
2026-07-25Degerfors IF v Djurgardens IF0-180%under
2026-07-25Kalmar FF v Mjallby AIF2-172%over
2026-07-24Vasteras SK FK v Orgryte IS2-082%over
2026-07-20Kalmar FF v Malmo FF2-281%over
2026-07-20Orgryte IS v Djurgardens IF0-088%under
2026-07-19Hammarby FF v Degerfors IF4-082%over
2026-07-19IF Elfsborg v Sirius1-387%over
2026-07-19Halmstad v BK Hacken0-283%over
2026-07-18AIK Stockholm v Gais2-068%over
2026-07-17IFK Goteborg v IF Brommapojkarna2-180%over
2026-07-17Mjallby AIF v Vasteras SK FK0-081%under
2026-07-13Djurgardens IF v Halmstad3-086%over
2026-07-12Hammarby FF v Kalmar FF2-083%over
2026-07-12Malmo FF v IFK Goteborg4-084%over
2026-07-12Vasteras SK FK v Degerfors IF2-080%over
2026-07-12IF Brommapojkarna v Sirius1-289%over
2026-07-12Gais v IF Elfsborg1-074%under
2026-07-11Mjallby AIF v AIK Stockholm1-274%over
2026-07-11Orgryte IS v BK Hacken4-385%over
2026-07-06BK Hacken v Djurgardens IF2-485%over
2026-07-06IF Brommapojkarna v Gais1-175%over
2026-07-05IFK Goteborg v AIK Stockholm1-275%over
2026-07-05Kalmar FF v Orgryte IS3-079%over
2026-07-05IF Elfsborg v Hammarby FF1-281%over
2026-07-04Halmstad v Vasteras SK FK1-377%over
2026-07-04Degerfors IF v Malmo FF0-182%under
2026-07-03Sirius v Mjallby AIF4-480%over
2026-05-31BK Hacken v Hammarby FF3-282%over
2026-05-31Degerfors IF v IF Brommapojkarna2-277%over
2026-05-31Vasteras SK FK v IFK Goteborg4-574%over
2026-05-30Malmo FF v Halmstad5-277%over
2026-05-30AIK Stockholm v Sirius0-383%over
2026-05-30Gais v Kalmar FF3-073%over
2026-05-29Orgryte IS v IF Elfsborg2-279%over
2026-05-25IFK Goteborg v Mjallby AIF1-169%over
2026-05-25IF Elfsborg v BK Hacken1-182%over
2026-05-24Hammarby FF v AIK Stockholm1-279%over
2026-05-24Sirius v Gais2-182%over
2026-05-24Malmo FF v Vasteras SK FK2-379%over
2026-05-23Kalmar FF v Degerfors IF2-175%over
2026-05-23Halmstad v Orgryte IS2-074%over
2026-05-22Djurgardens IF v IF Brommapojkarna1-286%over
2026-05-21IF Elfsborg v Mjallby AIF1-173%over
2026-05-20Gais v Hammarby FF2-075%over
2026-05-19Orgryte IS v IFK Goteborg2-374%over
2026-05-18Djurgardens IF v Sirius2-388%over
2026-05-17Hammarby FF v Malmo FF4-180%over
2026-05-17IF Brommapojkarna v Kalmar FF1-080%under
2026-05-17Mjallby AIF v BK Hacken0-181%under
2026-05-17Vasteras SK FK v AIK Stockholm1-173%over
2026-05-16Halmstad v IF Elfsborg1-173%over
2026-05-16Gais v Degerfors IF1-174%over
2026-05-11Sirius v Orgryte IS2-089%over
2026-05-10Kalmar FF v Halmstad2-074%over
2026-05-10AIK Stockholm v Djurgardens IF2-474%over
2026-05-10BK Hacken v Malmo FF3-281%over
2026-05-09IFK Goteborg v Hammarby FF0-178%under
2026-05-09Degerfors IF v Mjallby AIF1-470%over
2026-05-09Vasteras SK FK v Gais0-174%under
2026-05-08IF Elfsborg v IF Brommapojkarna2-083%over
2026-05-04Djurgardens IF v IFK Goteborg6-073%over
2026-05-04Halmstad v IF Brommapojkarna1-374%over
2026-05-03Hammarby FF v Vasteras SK FK3-083%over
2026-05-03Malmo FF v Mjallby AIF2-368%over
2026-05-03IF Elfsborg v AIK Stockholm1-176%over
2026-05-03Gais v Orgryte IS4-076%over
2026-05-02Sirius v Kalmar FF3-286%over
2026-05-02Degerfors IF v BK Hacken1-180%over
2026-04-27BK Hacken v Sirius2-288%over
2026-04-27Kalmar FF v IF Elfsborg2-179%over
2026-04-27AIK Stockholm v Malmo FF0-173%under
2026-04-27Orgryte IS v Degerfors IF1-177%over
2026-04-27Mjallby AIF v Halmstad2-069%over
2026-04-26Djurgardens IF v Hammarby FF1-180%over
2026-04-26IFK Goteborg v Gais2-266%over
2026-04-26IF Brommapojkarna v Vasteras SK FK1-280%over
2026-04-23Kalmar FF v IFK Goteborg1-171%over
2026-04-23Malmo FF v Sirius2-382%over
2026-04-23Gais v Mjallby AIF0-068%under
2026-04-23Degerfors IF v AIK Stockholm2-171%over
2026-04-22Hammarby FF v Halmstad1-183%over
2026-04-22IF Elfsborg v Djurgardens IF2-180%over
2026-04-22Orgryte IS v IF Brommapojkarna1-282%over
2026-04-22Vasteras SK FK v BK Hacken3-378%over
2026-04-19AIK Stockholm v Kalmar FF1-076%under
2026-04-19BK Hacken v Gais2-176%over
2026-04-18Hammarby FF v Orgryte IS8-176%over
2026-04-18Sirius v Vasteras SK FK4-181%over
2026-04-18Halmstad v IFK Goteborg1-166%over
2026-04-18Mjallby AIF v IF Brommapojkarna3-077%over
2026-04-17Djurgardens IF v Malmo FF0-178%under
2026-04-17Degerfors IF v IF Elfsborg0-180%under
2026-04-13Sirius v Hammarby FF2-084%over
2026-04-13IF Brommapojkarna v AIK Stockholm2-276%over
2026-04-12Djurgardens IF v Kalmar FF3-279%over
2026-04-12Halmstad v Degerfors IF0-371%over
2026-04-12Malmo FF v Gais3-171%over
2026-04-11IFK Goteborg v BK Hacken0-275%over
2026-04-11Mjallby AIF v Orgryte IS0-272%over
2026-04-11Vasteras SK FK v IF Elfsborg2-276%over
2026-04-06BK Hacken v IF Brommapojkarna2-281%over
2026-04-06IF Elfsborg v IFK Goteborg2-076%over
2026-04-06Gais v Djurgardens IF0-174%under
2026-04-05Kalmar FF v Vasteras SK FK0-175%under
2026-04-05AIK Stockholm v Halmstad2-170%over
2026-04-05Orgryte IS v Malmo FF1-174%over
2026-04-04Hammarby FF v Mjallby AIF3-072%over
2026-04-04Degerfors IF v Sirius0-382%over