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.

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

Attack (0 = league average)Defense ↑Ham-Kam -- attack -0.026 (1487 Elo), defense 0.066 (1533 Elo), 120 matchesLillestrom -- attack -0.125 (1438 Elo), defense -0.187 (1407 Elo), 90 matchesMolde -- attack 0.129 (1565 Elo), defense 0.149 (1575 Elo), 120 matchesValerenga -- attack 0.056 (1528 Elo), defense -0.052 (1474 Elo), 91 matchesHaugesund -- attack -0.391 (1304 Elo), defense -0.431 (1284 Elo), 122 matchesSandefjord -- attack 0.171 (1585 Elo), defense 0.108 (1554 Elo), 122 matchesODD Ballklubb -- attack -0.214 (1393 Elo), defense -0.076 (1462 Elo), 90 matchesTromso -- attack 0.049 (1525 Elo), defense 0.243 (1621 Elo), 120 matchesTromsoSarpsborg 08 FF -- attack 0.078 (1539 Elo), defense -0.087 (1457 Elo), 120 matchesViking -- attack 0.549 (1775 Elo), defense 0.226 (1613 Elo), 120 matchesVikingAalesund -- attack -0.178 (1411 Elo), defense -0.130 (1435 Elo), 62 matchesKristiansund BK -- attack -0.194 (1403 Elo), defense -0.184 (1408 Elo), 91 matchesjerv -- attack -0.072 (1464 Elo), defense -0.107 (1446 Elo), 30 matchesStromsgodset -- attack -0.183 (1409 Elo), defense -0.352 (1324 Elo), 120 matchesBodo/Glimt -- attack 0.680 (1840 Elo), defense 0.350 (1675 Elo), 120 matchesBodo/GlimtRosenborg -- attack 0.105 (1553 Elo), defense 0.089 (1545 Elo), 120 matchesKongsvinger -- attack -0.017 (1491 Elo), defense -0.018 (1491 Elo), 2 matchesStabaek -- attack -0.129 (1436 Elo), defense 0.004 (1502 Elo), 30 matchesBrann -- attack 0.210 (1605 Elo), defense 0.092 (1546 Elo), 90 matchesBrannFredrikstad -- attack -0.141 (1430 Elo), defense 0.250 (1625 Elo), 60 matchesFredrikstadKFUM Oslo -- attack -0.109 (1445 Elo), defense 0.152 (1576 Elo), 60 matchesMoss -- attack -0.049 (1475 Elo), defense 0.005 (1502 Elo), 2 matchesBryne -- attack -0.171 (1415 Elo), defense -0.140 (1430 Elo), 32 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
Bodo/Glimt0.6800.350184016752.690.96120
Viking0.5490.226177516132.361.09120
Brann0.2100.092160515461.681.2490
Sandefjord0.1710.108158515541.621.22122
Molde0.1290.149156515751.551.17120
Rosenborg0.1050.089155315451.511.25120
Sarpsborg 08 FF0.078-0.087153914571.471.49120
Valerenga0.056-0.052152814741.441.4491
Tromso0.0490.243152516211.431.07120
Kongsvinger-0.017-0.018149114911.341.392
Ham-Kam-0.0260.066148715331.331.28120
Moss-0.0490.005147515021.301.362
jerv-0.072-0.107146414461.271.5230
KFUM Oslo-0.1090.152144515761.221.1760
Lillestrom-0.125-0.187143814071.201.6490
Stabaek-0.1290.004143615021.201.3630
Fredrikstad-0.1410.250143016251.181.0660
Bryne-0.171-0.140141514301.151.5732
Aalesund-0.178-0.130141114351.141.5562
Stromsgodset-0.183-0.352140913241.141.94120
Kristiansund BK-0.194-0.184140314081.121.6491
ODD Ballklubb-0.214-0.076139314621.101.4790
Haugesund-0.391-0.431130412840.922.10122

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 — Norway - Eliteserien (161)

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

DateMatchScoreP(over)ActualCall
2026-09-18Sarpsborg 08 FF v KFUM Oslo1-373%over
2026-09-14Bodo/Glimt v Sandefjord3-284%over
2026-09-13Viking v Kristiansund BK8-185%over
2026-09-13Start v Brann2-084%over
2026-09-13KFUM Oslo v Aalesund2-182%over
2026-09-13Ham-Kam v Molde1-585%over
2026-09-13Fredrikstad v Sarpsborg 08 FF1-170%over
2026-09-12Lillestrom v Valerenga2-088%over
2026-09-12Rosenborg v Tromso5-379%over
2026-09-06Molde v KFUM Oslo2-085%over
2026-09-06Sarpsborg 08 FF v Valerenga2-286%over
2026-09-06Kristiansund BK v Tromso2-076%over
2026-09-05Rosenborg v Ham-Kam4-082%over
2026-09-05Brann v Lillestrom1-285%over
2026-09-04Aalesund v Start2-088%over
2026-09-04Fredrikstad v Bodo/Glimt1-281%over
2026-09-04Sandefjord v Viking1-177%over
2026-08-30Bodo/Glimt v Rosenborg4-286%over
2026-08-30Tromso v Sarpsborg 08 FF0-080%under
2026-08-30Valerenga v Molde3-489%over
2026-08-30Sandefjord v Brann0-081%under
2026-08-30Start v KFUM Oslo4-176%over
2026-08-30Viking v Aalesund2-195%over
2026-08-30Ham-Kam v Kristiansund BK2-276%over
2026-08-30Lillestrom v Fredrikstad1-470%over
2026-08-16Aalesund v Valerenga5-587%over
2026-08-16Brann v Ham-Kam3-086%over
2026-08-16Molde v Tromso3-282%over
2026-08-16Sarpsborg 08 FF v Sandefjord1-273%over
2026-08-16Fredrikstad v Kristiansund BK1-071%under
2026-08-15KFUM Oslo v Lillestrom1-174%over
2026-08-14Rosenborg v Viking2-183%over
2026-08-09Lillestrom v Rosenborg0-278%over
2026-08-09Ham-Kam v Aalesund1-187%over
2026-08-09Kristiansund BK v Molde2-180%over
2026-08-08Valerenga v Bodo/Glimt1-289%over
2026-08-08Viking v Sarpsborg 08 FF2-186%over
2026-08-08Start v Fredrikstad0-176%under
2026-08-07Sandefjord v KFUM Oslo0-173%under
2026-08-02Molde v Sarpsborg 08 FF3-378%over
2026-08-02Aalesund v Tromso2-679%over
2026-08-02KFUM Oslo v Kristiansund BK2-173%over
2026-08-02Brann v Rosenborg3-283%over
2026-08-01Fredrikstad v Sandefjord1-072%under
2026-08-01Start v Viking0-388%over
2026-07-31Valerenga v Ham-Kam0-385%over
2026-07-31Bodo/Glimt v Lillestrom4-087%over
2026-07-27Rosenborg v Fredrikstad4-073%over
2026-07-26Brann v Valerenga2-388%over
2026-07-26Sandefjord v Bodo/Glimt0-381%over
2026-07-26Sarpsborg 08 FF v Ham-Kam1-080%under
2026-07-26KFUM Oslo v Molde2-473%over
2026-07-26Aalesund v Viking1-190%over
2026-07-25Kristiansund BK v Start1-278%over
2026-07-22Lillestrom v Viking1-285%over
2026-07-22Bodo/Glimt v Ham-Kam3-090%over
2026-07-18Ham-Kam v Tromso1-476%over
2026-07-18Kristiansund BK v Sarpsborg 08 FF0-076%under
2026-07-18Lillestrom v KFUM Oslo2-173%over
2026-07-18Start v Rosenborg0-379%over
2026-07-18Molde v Brann1-283%over
2026-07-18Viking v Sandefjord2-187%over
2026-07-17Bodo/Glimt v Fredrikstad1-087%under
2026-07-16Valerenga v Aalesund6-182%over
2026-07-12KFUM Oslo v Bodo/Glimt0-283%over
2026-07-12Brann v Start2-188%over
2026-07-12Rosenborg v Kristiansund BK3-076%over
2026-07-12Sandefjord v Ham-Kam2-277%over
2026-07-12Sarpsborg 08 FF v Viking1-088%under
2026-07-11Fredrikstad v Lillestrom0-276%over
2026-07-11Aalesund v Molde2-279%over
2026-07-11Tromso v Valerenga4-076%over
2026-05-30Molde v Sandefjord2-176%over
2026-05-29Brann v Sarpsborg 08 FF1-287%over
2026-05-29Valerenga v Kristiansund BK3-177%over
2026-05-29Rosenborg v Bodo/Glimt2-284%over
2026-05-29Aalesund v Ham-Kam2-280%over
2026-05-29KFUM Oslo v Tromso0-072%under
2026-05-29Fredrikstad v Start2-180%over
2026-05-25Start v Valerenga2-083%over
2026-05-25Tromso v Aalesund1-179%over
2026-05-25Sarpsborg 08 FF v Molde2-179%over
2026-05-25KFUM Oslo v Rosenborg2-074%over
2026-05-25Ham-Kam v Lillestrom2-080%over
2026-05-25Sandefjord v Fredrikstad1-174%over
2026-05-24Bodo/Glimt v Brann3-191%over
2026-05-24Kristiansund BK v Viking1-287%over
2026-05-20Start v Bodo/Glimt1-488%over
2026-05-20Lillestrom v Kristiansund BK1-278%over
2026-05-20Aalesund v Brann2-186%over
2026-05-16Brann v KFUM Oslo2-185%over
2026-05-16Lillestrom v Sandefjord3-174%over
2026-05-16Molde v Kristiansund BK1-081%under
2026-05-16Rosenborg v Aalesund2-377%over
2026-05-16Viking v Start6-390%over
2026-05-16Fredrikstad v Ham-Kam2-177%over
2026-05-16Bodo/Glimt v Tromso5-081%over
2026-05-16Valerenga v Sarpsborg 08 FF3-279%over
2026-05-10Rosenborg v Lillestrom2-075%over
2026-05-10Tromso v Molde2-076%over
2026-05-10Sandefjord v Kristiansund BK2-077%over
2026-05-10KFUM Oslo v Viking0-285%over
2026-05-09Sarpsborg 08 FF v Fredrikstad2-176%over
2026-05-08Ham-Kam v Valerenga1-082%under
2026-05-04Bodo/Glimt v Molde0-188%under
2026-05-03Lillestrom v Sarpsborg 08 FF4-077%over
2026-05-03Kristiansund BK v Ham-Kam1-181%over
2026-05-03Sandefjord v Aalesund1-081%under
2026-05-03Start v Tromso1-176%over
2026-05-03Valerenga v KFUM Oslo2-277%over
2026-05-02Brann v Fredrikstad3-183%over
2026-05-01Viking v Rosenborg3-087%over
2026-04-30Bodo/Glimt v Start5-087%over
2026-04-29Tromso v Brann0-580%over
2026-04-26Molde v Valerenga5-179%over
2026-04-26Tromso v Sandefjord3-172%over
2026-04-26Aalesund v Kristiansund BK1-181%over
2026-04-26KFUM Oslo v Sarpsborg 08 FF1-078%under
2026-04-26Ham-Kam v Start2-182%over
2026-04-26Lillestrom v Bodo/Glimt0-284%over
2026-04-25Fredrikstad v Viking1-284%over
2026-04-25Rosenborg v Brann1-182%over
2026-04-19Valerenga v Lillestrom0-279%over
2026-04-19Kristiansund BK v Fredrikstad2-077%over
2026-04-19Sarpsborg 08 FF v Tromso0-176%under
2026-04-19Ham-Kam v KFUM Oslo4-079%over
2026-04-19Start v Molde1-180%over
2026-04-18Bodo/Glimt v Aalesund3-091%over
2026-04-18Sandefjord v Rosenborg0-078%under
2026-04-18Viking v Brann3-290%over
2026-04-15Tromso v Lillestrom0-081%under
2026-04-15Sarpsborg 08 FF v Bodo/Glimt1-188%over
2026-04-12Rosenborg v Sarpsborg 08 FF2-181%over
2026-04-12Molde v Ham-Kam4-181%over
2026-04-12Aalesund v KFUM Oslo2-278%over
2026-04-12Fredrikstad v Valerenga1-177%over
2026-04-12Brann v Sandefjord0-185%under
2026-04-11Lillestrom v Start3-180%over
2026-04-11Tromso v Kristiansund BK2-083%over
2026-04-11Viking v Bodo/Glimt5-089%over
2026-04-07Aalesund v Fredrikstad2-376%over
2026-04-07KFUM Oslo v Sandefjord1-276%over
2026-04-06Valerenga v Viking0-186%under
2026-04-06Kristiansund BK v Bodo/Glimt0-389%over
2026-04-06Molde v Lillestrom0-184%under
2026-04-06Sarpsborg 08 FF v Start1-183%over
2026-04-06Ham-Kam v Brann1-582%over
2026-04-06Tromso v Rosenborg2-079%over
2026-03-22Rosenborg v Valerenga0-282%over
2026-03-22Brann v Tromso1-282%over
2026-03-22Sandefjord v Sarpsborg 08 FF0-284%over
2026-03-22Fredrikstad v KFUM Oslo3-171%over
2026-03-21Start v Aalesund1-182%over
2026-03-21Viking v Molde4-186%over
2026-03-15Kristiansund BK v Brann3-283%over
2026-03-15Valerenga v Sandefjord1-084%under
2026-03-15Aalesund v Lillestrom1-382%over
2026-03-15KFUM Oslo v Start2-077%over
2026-03-15Tromso v Fredrikstad4-072%over
2026-03-14Ham-Kam v Viking2-185%over
2026-03-14Molde v Rosenborg2-082%over