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.103 goals/team/match · home advantage +0.151 log-units (~16%) · seasons 2022, 2023, 2024, 2025 · generated 2026-09-19 10:32 UTC

Attack (0 = league average)Defense ↑Atletico Torque -- attack 0.008 (1504 Elo), defense -0.147 (1427 Elo), 66 matchesCerro Largo -- attack -0.135 (1433 Elo), defense 0.031 (1515 Elo), 88 matchesFenix -- attack -0.105 (1447 Elo), defense 0.050 (1525 Elo), 66 matchesPenarol -- attack 0.283 (1641 Elo), defense 0.276 (1638 Elo), 90 matchesPenarolDefensor Sporting -- attack 0.150 (1575 Elo), defense 0.128 (1564 Elo), 89 matchesLiverpool Montevideo -- attack 0.135 (1567 Elo), defense 0.036 (1518 Elo), 89 matchesAlbion FC -- attack -0.019 (1491 Elo), defense -0.061 (1470 Elo), 22 matchesRentistas -- attack -0.051 (1475 Elo), defense -0.050 (1475 Elo), 22 matchesBoston River -- attack -0.050 (1475 Elo), defense -0.015 (1493 Elo), 88 matchesPlaza Colonia -- attack -0.135 (1432 Elo), defense 0.058 (1529 Elo), 66 matchesClub Nacional -- attack 0.541 (1771 Elo), defense 0.206 (1603 Elo), 90 matchesClub NacionalDeportivo Maldonado -- attack -0.094 (1453 Elo), defense -0.028 (1486 Elo), 66 matchesCA River Plate -- attack -0.168 (1416 Elo), defense -0.078 (1461 Elo), 88 matchesWanderers -- attack -0.135 (1433 Elo), defense 0.134 (1567 Elo), 88 matchesCerrito -- attack -0.106 (1447 Elo), defense -0.094 (1453 Elo), 22 matchesDanubio -- attack -0.057 (1471 Elo), defense -0.017 (1491 Elo), 88 matchesRacing Montevideo -- attack 0.016 (1508 Elo), defense 0.182 (1591 Elo), 66 matchesRacing MontevideoCerro -- attack -0.108 (1446 Elo), defense -0.020 (1490 Elo), 66 matchesLa Luz -- attack 0.028 (1514 Elo), defense -0.157 (1421 Elo), 22 matchesMiramar -- attack -0.172 (1414 Elo), defense -0.106 (1447 Elo), 44 matchesProgreso -- attack -0.063 (1468 Elo), defense -0.179 (1410 Elo), 44 matchesRampla Juniors -- attack -0.021 (1489 Elo), defense -0.126 (1437 Elo), 22 matchesJuventud -- attack 0.209 (1605 Elo), defense 0.023 (1511 Elo), 22 matchesJuventud

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
Club Nacional0.5410.206177116031.900.9090
Penarol0.2830.276164116381.460.8490
Juventud0.2090.023160515111.361.0822
Defensor Sporting0.1500.128157515641.280.9789
Liverpool Montevideo0.1350.036156715181.261.0689
La Luz0.028-0.157151414211.131.2922
Racing Montevideo0.0160.182150815911.120.9266
Atletico Torque0.008-0.147150414271.111.2866
Albion FC-0.019-0.061149114701.081.1722
Rampla Juniors-0.021-0.126148914371.081.2522
Boston River-0.050-0.015147514931.051.1288
Rentistas-0.051-0.050147514751.051.1622
Danubio-0.057-0.017147114911.041.1288
Progreso-0.063-0.179146814101.041.3244
Deportivo Maldonado-0.094-0.028145314861.001.1366
Fenix-0.1050.050144715250.991.0566
Cerrito-0.106-0.094144714530.991.2122
Cerro-0.108-0.020144614900.991.1366
Cerro Largo-0.1350.031143315150.961.0788
Wanderers-0.1350.134143315670.960.9688
Plaza Colonia-0.1350.058143215290.961.0466
CA River Plate-0.168-0.078141614610.931.1988
Miramar-0.172-0.106141414470.931.2344

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 — Uruguay - Primera Division (224)

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

DateMatchScoreP(over)ActualCall
2026-09-14Atletico Torque v Liverpool Montevideo3-174%over
2026-09-13Progreso v Cerro1-361%over
2026-09-13Juventud v Danubio1-167%over
2026-09-13Defensor Sporting v Deportivo Maldonado1-064%under
2026-09-13Penarol v Albion FC3-175%over
2026-09-12Racing Montevideo v Boston River3-259%over
2026-09-12Wanderers v Club Nacional1-174%over
2026-09-12Cerro Largo v Central Espanol0-062%under
2026-09-07Albion FC v Progreso0-169%under
2026-09-06Cerro v Racing Montevideo1-059%under
2026-09-06Central Espanol v Defensor Sporting1-163%over
2026-09-06Club Nacional v Juventud2-275%over
2026-09-06Liverpool Montevideo v Boston River1-069%under
2026-09-05Danubio v Penarol0-464%over
2026-09-05Deportivo Maldonado v Wanderers2-070%over
2026-09-04Atletico Torque v Cerro Largo2-172%over
2026-08-31Racing Montevideo v Albion FC1-064%under
2026-08-30Penarol v Club Nacional0-177%under
2026-08-30Cerro Largo v Liverpool Montevideo1-163%over
2026-08-29Progreso v Danubio1-060%under
2026-08-29Juventud v Deportivo Maldonado2-070%over
2026-08-29Boston River v Cerro1-166%over
2026-08-29Defensor Sporting v Atletico Torque1-369%over
2026-08-28Wanderers v Central Espanol3-067%over
2026-08-23Danubio v Racing Montevideo0-058%under
2026-08-23Atletico Torque v Wanderers5-171%over
2026-08-23Club Nacional v Progreso1-077%under
2026-08-22Central Espanol v Juventud0-170%under
2026-08-22Cerro Largo v Defensor Sporting1-158%over
2026-08-22Deportivo Maldonado v Penarol0-073%under
2026-08-21Albion FC v Boston River2-367%over
2026-08-21Liverpool Montevideo v Cerro4-067%over
2026-08-16Progreso v Deportivo Maldonado0-270%over
2026-08-16Defensor Sporting v Liverpool Montevideo0-459%over
2026-08-16Penarol v Central Espanol2-173%over
2026-08-15Cerro v Albion FC2-165%over
2026-08-15Juventud v Atletico Torque0-177%under
2026-08-15Racing Montevideo v Club Nacional2-070%over
2026-08-15Wanderers v Cerro Largo1-162%over
2026-08-14Boston River v Danubio0-064%under
2026-08-10Deportivo Maldonado v Racing Montevideo2-262%over
2026-08-09Danubio v Cerro0-164%under
2026-08-09Defensor Sporting v Wanderers0-162%under
2026-08-09Club Nacional v Boston River1-277%over
2026-08-08Central Espanol v Progreso1-070%under
2026-08-08Liverpool Montevideo v Albion FC1-068%under
2026-08-07Cerro Largo v Juventud1-168%over
2026-08-05Penarol v Wanderers5-167%over
2026-08-03Defensor Sporting v Cerro2-160%over
2026-08-02Racing Montevideo v Boston River1-063%under
2026-08-02Central Espanol v Liverpool Montevideo0-069%under
2026-08-02Club Nacional v Progreso2-179%over
2026-08-01Albion FC v Danubio2-266%over
2026-08-01Deportivo Maldonado v Juventud0-078%under
2026-08-01Penarol v Cerro Largo3-065%over
2026-07-31Atletico Torque v Wanderers0-271%over
2026-07-26Cerro v Racing Montevideo1-061%under
2026-07-25Central Espanol v Cerro Largo0-166%under
2026-07-25Defensor Sporting v Liverpool Montevideo1-260%over
2026-07-24Atletico Torque v Danubio1-074%under
2026-07-18Progreso v Deportivo Maldonado1-074%under
2026-07-18Penarol v Boston River3-070%over
2026-07-17Albion FC v Juventud0-177%under
2026-07-17Club Nacional v Wanderers1-273%over
2026-07-13Cerro Largo v Defensor Sporting1-157%over
2026-07-12Liverpool Montevideo v Cerro1-267%over
2026-07-12Boston River v Central Espanol0-072%under
2026-07-12Racing Montevideo v Penarol1-162%over
2026-07-11Juventud v Atletico Torque1-380%over
2026-07-11Danubio v Club Nacional0-077%under
2026-07-11Wanderers v Progreso2-068%over
2026-07-10Deportivo Maldonado v Albion FC1-175%over
2026-07-05Danubio v Juventud1-175%over
2026-06-08Liverpool Montevideo v Cerro Largo0-066%under
2026-06-07Progreso v Albion FC1-271%over
2026-06-07Cerro v Penarol0-169%under
2026-06-07Defensor Sporting v Boston River1-163%over
2026-06-06Central Espanol v Racing Montevideo1-166%over
2026-06-06Atletico Torque v Deportivo Maldonado2-474%over
2026-06-06Club Nacional v Juventud2-184%over
2026-06-05Wanderers v Danubio0-069%under
2026-06-01Boston River v Liverpool Montevideo0-171%under
2026-06-01Penarol v Central Espanol0-177%under
2026-05-31Albion FC v Atletico Torque1-273%over
2026-05-31Juventud v Wanderers2-568%over
2026-05-31Deportivo Maldonado v Club Nacional3-079%over
2026-05-30Racing Montevideo v Defensor Sporting0-059%under
2026-05-30Danubio v Progreso1-271%over
2026-05-29Cerro Largo v Cerro2-065%over
2026-05-24Cerro v Central Espanol1-073%under
2026-05-24Wanderers v Deportivo Maldonado1-166%over
2026-05-24Defensor Sporting v Penarol0-265%over
2026-05-23Progreso v Atletico Torque1-272%over
2026-05-23Cerro Largo v Boston River3-066%over
2026-05-23Club Nacional v Albion FC1-081%under
2026-05-22Liverpool Montevideo v Racing Montevideo0-068%under
2026-05-18Deportivo Maldonado v Danubio3-171%over
2026-05-17Central Espanol v Defensor Sporting2-168%over
2026-05-17Racing Montevideo v Cerro Largo1-066%under
2026-05-17Albion FC v Wanderers0-071%under
2026-05-16Boston River v Cerro4-165%over
2026-05-16Juventud v Progreso2-074%over
2026-05-16Penarol v Liverpool Montevideo2-173%over
2026-05-15Atletico Torque v Club Nacional1-281%over
2026-05-11Deportivo Maldonado v Boston River2-169%over
2026-05-11Cerro Largo v Penarol2-364%over
2026-05-10Defensor Sporting v Juventud1-266%over
2026-05-10Atletico Torque v Progreso2-173%over
2026-05-10Club Nacional v Cerro4-078%over
2026-05-09Danubio v Albion FC0-175%under
2026-05-09Central Espanol v Racing Montevideo2-073%over
2026-05-08Wanderers v Liverpool Montevideo1-070%under
2026-05-04Penarol v Defensor Sporting1-162%over
2026-05-03Progreso v Cerro Largo0-166%under
2026-05-03Boston River v Central Espanol2-172%over
2026-05-03Racing Montevideo v Atletico Torque1-171%over
2026-05-03Albion FC v Club Nacional3-280%over
2026-05-02Juventud v Wanderers2-170%over
2026-05-02Cerro v Deportivo Maldonado0-167%under
2026-05-02Liverpool Montevideo v Danubio3-073%over
2026-04-27Defensor Sporting v Progreso1-067%under
2026-04-26Central Espanol v Cerro3-170%over
2026-04-26Cerro Largo v Racing Montevideo0-166%under
2026-04-26Wanderers v Penarol1-069%under
2026-04-25Juventud v Liverpool Montevideo1-175%over
2026-04-25Deportivo Maldonado v Albion FC1-273%over
2026-04-25Club Nacional v Danubio1-280%over
2026-04-24Atletico Torque v Boston River4-167%over
2026-04-20Boston River v Cerro Largo1-064%under
2026-04-20Penarol v Juventud2-273%over
2026-04-19Cerro v Atletico Torque1-166%over
2026-04-19Danubio v Deportivo Maldonado1-171%over
2026-04-19Liverpool Montevideo v Club Nacional1-378%over
2026-04-18Progreso v Wanderers2-168%over
2026-04-18Racing Montevideo v Defensor Sporting1-163%over
2026-04-17Albion FC v Central Espanol6-171%over
2026-04-13Penarol v Liverpool Montevideo0-274%over
2026-04-12Central Espanol v Danubio2-270%over
2026-04-12Juventud v Progreso1-076%under
2026-04-12Wanderers v Racing Montevideo1-266%over
2026-04-11Atletico Torque v Albion FC0-173%under
2026-04-11Defensor Sporting v Boston River2-061%over
2026-04-11Deportivo Maldonado v Club Nacional4-273%over
2026-04-10Cerro Largo v Cerro1-164%over
2026-04-05Albion FC v Cerro Largo2-266%over
2026-04-05Cerro v Defensor Sporting1-061%under
2026-04-05Liverpool Montevideo v Deportivo Maldonado0-272%over
2026-04-04Racing Montevideo v Juventud2-172%over
2026-04-04Danubio v Atletico Torque1-172%over
2026-04-04Progreso v Penarol0-274%over
2026-04-03Boston River v Wanderers4-160%over
2026-04-03Club Nacional v Central Espanol0-179%under
2026-03-31Central Espanol v Deportivo Maldonado2-170%over
2026-03-31Progreso v Liverpool Montevideo3-371%over
2026-03-31Defensor Sporting v Albion FC1-165%over
2026-03-30Juventud v Boston River1-267%over
2026-03-30Cerro Largo v Danubio2-067%over
2026-03-29Penarol v Racing Montevideo1-268%over
2026-03-28Wanderers v Cerro3-060%over
2026-03-28Atletico Torque v Club Nacional2-375%over
2026-03-26Racing Montevideo v Progreso1-171%over
2026-03-26Danubio v Defensor Sporting0-068%under
2026-03-25Albion FC v Wanderers2-163%over
2026-03-25Cerro v Juventud1-069%under
2026-03-25Boston River v Penarol0-265%over
2026-03-24Deportivo Maldonado v Atletico Torque1-071%under
2026-03-24Liverpool Montevideo v Central Espanol3-367%over
2026-03-24Club Nacional v Cerro Largo3-073%over
2026-03-22Juventud v Albion FC0-175%under
2026-03-22Progreso v Boston River0-167%under
2026-03-21Defensor Sporting v Club Nacional2-169%over
2026-03-21Racing Montevideo v Liverpool Montevideo1-068%under
2026-03-21Atletico Torque v Central Espanol2-169%over
2026-03-21Wanderers v Danubio2-164%over
2026-03-21Penarol v Cerro3-168%over
2026-03-20Cerro Largo v Deportivo Maldonado3-164%over
2026-03-16Danubio v Juventud4-172%over
2026-03-16Liverpool Montevideo v Atletico Torque0-074%under
2026-03-15Central Espanol v Cerro Largo1-362%over
2026-03-15Deportivo Maldonado v Defensor Sporting1-066%under
2026-03-14Cerro v Progreso0-169%under
2026-03-14Boston River v Racing Montevideo0-166%under
2026-03-14Albion FC v Penarol0-171%under
2026-03-13Club Nacional v Wanderers2-070%over
2026-03-10Boston River v Liverpool Montevideo0-168%under
2026-03-09Cerro Largo v Atletico Torque0-169%under
2026-03-08Racing Montevideo v Cerro1-070%under
2026-03-08Juventud v Club Nacional3-175%over
2026-03-08Defensor Sporting v Central Espanol0-067%under
2026-03-07Progreso v Albion FC2-271%over
2026-03-07Penarol v Danubio1-172%over
2026-03-06Wanderers v Deportivo Maldonado0-066%under
2026-03-02Deportivo Maldonado v Juventud2-172%over
2026-03-01Liverpool Montevideo v Cerro Largo2-067%over
2026-03-01Club Nacional v Penarol0-175%under
2026-02-28Albion FC v Racing Montevideo1-369%over
2026-02-28Danubio v Progreso2-270%over
2026-02-28Central Espanol v Wanderers0-166%under
2026-02-27Cerro v Boston River1-164%over
2026-02-26Atletico Torque v Defensor Sporting1-074%under
2026-02-22Wanderers v Atletico Torque0-469%over
2026-02-22Juventud v Central Espanol0-173%under
2026-02-22Penarol v Deportivo Maldonado2-173%over
2026-02-21Defensor Sporting v Cerro Largo1-067%under
2026-02-21Racing Montevideo v Danubio4-066%over
2026-02-21Boston River v Albion FC0-070%under
2026-02-21Progreso v Club Nacional0-179%under
2026-02-20Cerro v Liverpool Montevideo1-169%over
2026-02-17Atletico Torque v Juventud2-275%over
2026-02-16Albion FC v Cerro3-067%over
2026-02-15Danubio v Boston River2-067%over
2026-02-15Central Espanol v Penarol2-170%over
2026-02-14Liverpool Montevideo v Defensor Sporting1-271%over
2026-02-14Deportivo Maldonado v Progreso2-073%over
2026-02-14Club Nacional v Racing Montevideo1-177%over
2026-02-13Cerro Largo v Wanderers1-259%over
2026-02-09Cerro v Danubio0-166%under
2026-02-08Juventud v Cerro Largo0-170%under
2026-02-08Racing Montevideo v Deportivo Maldonado2-465%over
2026-02-08Boston River v Club Nacional1-275%over
2026-02-07Wanderers v Defensor Sporting1-164%over
2026-02-07Progreso v Central Espanol0-371%over
2026-02-07Penarol v Atletico Torque3-174%over
2026-02-06Albion FC v Liverpool Montevideo1-271%over