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.

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

Attack (0 = league average)Defense ↑Jocoro -- attack -0.091 (1454 Elo), defense -0.143 (1429 Elo), 88 matchesAtlético Marte -- attack -0.038 (1481 Elo), defense -0.027 (1487 Elo), 35 matchesChalatenango -- attack -0.018 (1491 Elo), defense -0.079 (1461 Elo), 33 matchesSanta Tecla -- attack -0.035 (1483 Elo), defense -0.189 (1405 Elo), 78 matchesIsidro Metapán -- attack -0.079 (1460 Elo), defense 0.039 (1520 Elo), 181 matchesPlatense -- attack -0.059 (1470 Elo), defense -0.006 (1497 Elo), 169 matchesÁguila -- attack 0.073 (1536 Elo), defense 0.243 (1622 Elo), 186 matchesÁguilaOnce Municipal -- attack -0.144 (1428 Elo), defense -0.149 (1425 Elo), 125 matchesFAS -- attack 0.487 (1744 Elo), defense 0.322 (1661 Elo), 190 matchesFASDragón -- attack -0.153 (1424 Elo), defense -0.128 (1436 Elo), 125 matchesAlianza -- attack 0.191 (1595 Elo), defense 0.204 (1602 Elo), 188 matchesAlianzaFirpo -- attack 0.305 (1652 Elo), defense 0.233 (1617 Elo), 180 matchesFirpoMunicipal Limeño -- attack 0.113 (1556 Elo), defense 0.187 (1594 Elo), 146 matchesFuerte San Francisco -- attack -0.277 (1361 Elo), defense -0.113 (1444 Elo), 134 matchesCacahuatique -- attack -0.053 (1474 Elo), defense 0.078 (1539 Elo), 96 matchesInter -- attack -0.047 (1477 Elo), defense 0.009 (1505 Elo), 46 matchesHércules -- attack -0.023 (1489 Elo), defense -0.306 (1347 Elo), 44 matchesZacatecoluca -- attack -0.114 (1443 Elo), defense -0.215 (1393 Elo), 44 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
FAS0.4870.322174416611.880.84190
Firpo0.3050.233165216171.570.92180
Alianza0.1910.204159516021.400.94188
Municipal Limeño0.1130.187155615941.300.96146
Águila0.0730.243153616221.240.91186
Chalatenango-0.018-0.079149114611.141.2533
Hércules-0.023-0.306148913471.131.5744
Santa Tecla-0.035-0.189148314051.121.4078
Atlético Marte-0.038-0.027148114871.111.1935
Inter-0.0470.009147715051.101.1546
Cacahuatique-0.0530.078147415391.101.0796
Platense-0.059-0.006147014971.091.16169
Isidro Metapán-0.0790.039146015201.071.11181
Jocoro-0.091-0.143145414291.061.3388
Zacatecoluca-0.114-0.215144313931.031.4344
Once Municipal-0.144-0.149142814251.001.34125
Dragón-0.153-0.128142414360.991.31125
Fuerte San Francisco-0.277-0.113136114440.881.30134

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 — El Salvador - Primera Division (202)

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

DateMatchScoreP(over)ActualCall
2026-09-19Inca Aruba v Fuerte San Francisco2-167%over
2026-09-17Inter v FAS2-272%over
2026-09-13Fuerte San Francisco v Municipal Limeño0-266%over
2026-09-13Cacahuatique v Inter0-270%over
2026-09-13Firpo v Isidro Metapán1-271%over
2026-09-12Atletico Balboa v Platense3-169%over
2026-09-12Águila v Inca Aruba3-171%over
2026-09-10Municipal Limeño v Águila0-072%under
2026-09-09Inca Aruba v Atletico Balboa1-070%under
2026-09-09Platense v Isidro Metapán1-268%over
2026-09-06Isidro Metapán v Inca Aruba0-172%under
2026-09-06Águila v Alianza2-270%over
2026-09-06Atletico Balboa v Municipal Limeño0-270%over
2026-09-06Firpo v Inter3-070%over
2026-09-05Fuerte San Francisco v FAS0-176%under
2026-09-05Cacahuatique v Platense1-271%over
2026-08-30Alianza v Atletico Balboa2-071%over
2026-08-30Águila v Fuerte San Francisco4-166%over
2026-08-30FAS v Firpo3-173%over
2026-08-29Inca Aruba v Cacahuatique1-173%over
2026-08-29Platense v Inter0-367%over
2026-08-28Municipal Limeño v Isidro Metapán3-167%over
2026-08-26Platense v Alianza2-267%over
2026-08-23Isidro Metapán v Alianza2-067%over
2026-08-23FAS v Águila1-076%under
2026-08-23Atletico Balboa v Fuerte San Francisco1-070%under
2026-08-23Firpo v Platense1-071%under
2026-08-22Inter v Inca Aruba4-167%over
2026-08-22Cacahuatique v Municipal Limeño1-368%over
2026-08-17Platense v FAS2-174%over
2026-08-16Alianza v Cacahuatique0-074%under
2026-08-16Inca Aruba v Firpo0-075%under
2026-08-15Municipal Limeño v Inter0-167%under
2026-08-15Águila v Atletico Balboa2-467%over
2026-08-15Fuerte San Francisco v Isidro Metapán1-067%under
2026-08-09Firpo v Municipal Limeño2-073%over
2026-08-09Cacahuatique v Fuerte San Francisco0-075%under
2026-08-09FAS v Atletico Balboa1-178%over
2026-08-08Isidro Metapán v Águila2-165%over
2026-08-08Platense v Inca Aruba2-071%over
2026-08-08Inter v Alianza2-069%over
2026-08-02Cacahuatique v Águila2-268%over
2026-08-02Atletico Balboa v Isidro Metapán0-071%under
2026-08-02Inca Aruba v FAS0-476%over
2026-08-01Fuerte San Francisco v Inter2-265%over
2026-08-01Municipal Limeño v Platense1-170%over
2026-07-31Isidro Metapán v FAS2-076%over
2026-07-31Inter v Águila0-065%under
2026-07-30Firpo v Fuerte San Francisco4-073%over
2026-07-29Municipal Limeño v Inca Aruba2-072%over
2026-07-28Cacahuatique v Atletico Balboa4-269%over
2026-07-26Inca Aruba v Alianza1-371%over
2026-07-26Águila v Firpo1-169%over
2026-07-26Fuerte San Francisco v Platense1-167%over
2026-07-25FAS v Municipal Limeño3-174%over
2026-07-25Cacahuatique v Isidro Metapán2-466%over
2026-07-25Atletico Balboa v Inter0-070%under
2026-05-24Águila v FAS0-370%over
2026-05-18FAS v Municipal Limeño2-075%over
2026-05-17Firpo v Águila0-171%under
2026-05-15Municipal Limeño v FAS1-076%under
2026-05-13Águila v Firpo1-269%over
2026-05-11Inter v Municipal Limeño2-169%over
2026-05-10FAS v Cacahuatique1-179%over
2026-05-10Firpo v Isidro Metapán1-175%over
2026-05-10Alianza v Águila0-267%over
2026-05-08Municipal Limeño v Inter2-070%over
2026-05-07Cacahuatique v FAS1-178%over
2026-05-07Isidro Metapán v Firpo1-272%over
2026-05-06Águila v Alianza2-166%over
2026-05-01FAS v Platense1-084%under
2026-05-01Municipal Limeño v Cacahuatique2-366%over
2026-05-01Águila v Firpo1-169%over
2026-05-01Fuerte San Francisco v Alianza0-171%under
2026-05-01Zacatecoluca v Inter2-073%over
2026-05-01Hércules v Isidro Metapán3-075%over
2026-04-26Alianza v Zacatecoluca4-276%over
2026-04-26Firpo v FAS1-182%over
2026-04-26Isidro Metapán v Fuerte San Francisco1-365%over
2026-04-26Inter v Municipal Limeño2-167%over
2026-04-26Platense v Hércules1-180%over
2026-04-26Cacahuatique v Águila0-066%under
2026-04-19Isidro Metapán v Platense0-269%over
2026-04-19Zacatecoluca v Fuerte San Francisco1-069%under
2026-04-19Municipal Limeño v Alianza0-069%under
2026-04-19Águila v Inter0-170%under
2026-04-19Hércules v Firpo2-285%over
2026-04-19FAS v Cacahuatique3-082%over
2026-04-16Firpo v Isidro Metapán0-274%over
2026-04-16Zacatecoluca v Municipal Limeño3-468%over
2026-04-16Alianza v Águila0-270%over
2026-04-16Inter v FAS2-281%over
2026-04-15Cacahuatique v Hércules1-278%over
2026-04-15Fuerte San Francisco v Platense1-169%over
2026-04-12Alianza v FAS0-280%over
2026-04-12Isidro Metapán v Cacahuatique1-165%over
2026-04-12Águila v Zacatecoluca1-074%under
2026-04-12Fuerte San Francisco v Municipal Limeño0-266%over
2026-04-12Hércules v Inter2-276%over
2026-04-12Platense v Firpo0-180%under
2026-04-05Alianza v Hércules3-284%over
2026-04-05Municipal Limeño v Águila2-067%over
2026-04-05Inter v Isidro Metapán2-164%over
2026-04-05Fuerte San Francisco v Firpo0-278%over
2026-04-05Cacahuatique v Platense1-172%over
2026-04-04Zacatecoluca v FAS1-678%over
2026-04-02Firpo v Cacahuatique1-080%under
2026-04-02Isidro Metapán v Alianza0-070%under
2026-04-02FAS v Municipal Limeño2-075%over
2026-04-01Águila v Fuerte San Francisco1-174%over
2026-04-01Platense v Inter0-074%under
2026-04-01Hércules v Zacatecoluca2-074%over
2026-03-29Alianza v Platense3-378%over
2026-03-29Inter v Firpo0-378%over
2026-03-29Zacatecoluca v Isidro Metapán2-264%over
2026-03-29Águila v FAS3-078%over
2026-03-29Fuerte San Francisco v Cacahuatique0-170%under
2026-03-29Municipal Limeño v Hércules1-182%over
2026-03-26Hércules v Águila0-183%under
2026-03-22Isidro Metapán v Municipal Limeño1-066%under
2026-03-22Platense v Zacatecoluca1-368%over
2026-03-22Firpo v Alianza2-176%over
2026-03-22FAS v Fuerte San Francisco3-183%over
2026-03-21Cacahuatique v Inter5-066%over
2026-03-20Zacatecoluca v Firpo1-374%over
2026-03-19Alianza v Cacahuatique2-173%over
2026-03-19Municipal Limeño v Platense2-073%over
2026-03-19FAS v Hércules4-092%over
2026-03-18Águila v Isidro Metapán1-171%over
2026-03-18Fuerte San Francisco v Inter0-070%under
2026-03-15Isidro Metapán v FAS0-375%over
2026-03-15Municipal Limeño v Firpo2-175%over
2026-03-15Inter v Alianza2-071%over
2026-03-15Cacahuatique v Zacatecoluca0-067%under
2026-03-15Hércules v Fuerte San Francisco1-278%over
2026-03-15Platense v Águila2-076%over
2026-03-08Inter v Zacatecoluca1-069%under
2026-03-08Alianza v Fuerte San Francisco3-277%over
2026-03-08Isidro Metapán v Hércules1-182%over
2026-03-08Cacahuatique v Municipal Limeño0-565%over
2026-03-08Firpo v Águila1-081%under
2026-03-08Platense v FAS2-378%over
2026-03-01Municipal Limeño v Inter2-167%over
2026-03-01Zacatecoluca v Alianza0-270%over
2026-03-01FAS v Firpo2-083%over
2026-03-01Águila v Cacahuatique1-175%over
2026-03-01Fuerte San Francisco v Isidro Metapán1-268%over
2026-03-01Hércules v Platense0-479%over
2026-02-22Alianza v Municipal Limeño1-069%under
2026-02-22Inter v Águila0-177%under
2026-02-22Firpo v Hércules3-291%over
2026-02-22Fuerte San Francisco v Zacatecoluca2-263%over
2026-02-22Cacahuatique v FAS0-178%under
2026-02-22Platense v Isidro Metapán1-170%over
2026-02-19Municipal Limeño v Zacatecoluca2-164%over
2026-02-19FAS v Inter3-178%over
2026-02-19Isidro Metapán v Firpo1-079%under
2026-02-19Águila v Alianza0-374%over
2026-02-18Platense v Fuerte San Francisco1-170%over
2026-02-18Hércules v Cacahuatique1-377%over
2026-02-15FAS v Alianza3-174%over
2026-02-15Firpo v Platense3-184%over
2026-02-15Cacahuatique v Isidro Metapán1-169%over
2026-02-15Zacatecoluca v Águila0-273%over
2026-02-14Municipal Limeño v Fuerte San Francisco5-062%over
2026-02-14Inter v Hércules3-179%over
2026-02-08Firpo v Fuerte San Francisco1-084%under
2026-02-08Isidro Metapán v Inter0-370%over
2026-02-08Águila v Municipal Limeño1-074%under
2026-02-08Hércules v Alianza1-477%over
2026-02-08Platense v Cacahuatique0-172%under
2026-02-08FAS v Zacatecoluca1-078%under
2026-02-05Municipal Limeño v FAS1-174%over
2026-02-05Inter v Platense0-075%under
2026-02-05Alianza v Isidro Metapán2-167%over
2026-02-04Fuerte San Francisco v Águila2-373%over
2026-02-04Zacatecoluca v Hércules1-273%over
2026-02-04Cacahuatique v Firpo1-380%over
2026-02-01FAS v Águila3-082%over
2026-02-01Firpo v Inter0-087%under
2026-02-01Isidro Metapán v Zacatecoluca1-069%under
2026-02-01Cacahuatique v Fuerte San Francisco0-070%under
2026-02-01Hércules v Municipal Limeño1-173%over
2026-02-01Platense v Alianza0-273%over
2026-01-29Alianza v Inter1-374%over
2026-01-28Águila v Platense4-178%over
2026-01-25Alianza v Firpo2-374%over
2026-01-25Águila v Hércules3-183%over
2026-01-25Fuerte San Francisco v FAS1-178%over
2026-01-25Municipal Limeño v Isidro Metapán0-070%under
2026-01-25Zacatecoluca v Platense2-367%over
2026-01-24Inter v Cacahuatique2-173%over
2026-01-22Firpo v Zacatecoluca1-182%over
2026-01-22Isidro Metapán v Águila4-270%over
2026-01-22Hércules v FAS0-285%over
2026-01-22Inter v Fuerte San Francisco2-071%over
2026-01-21Platense v Municipal Limeño0-171%under
2026-01-21Cacahuatique v Alianza1-168%over
2026-01-18FAS v Isidro Metapán2-277%over
2026-01-18Firpo v Municipal Limeño2-084%over
2026-01-18Fuerte San Francisco v Hércules1-175%over
2026-01-17Zacatecoluca v Cacahuatique1-267%over