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.

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

Attack (0 = league average)Defense ↑AD Guanacasteca -- attack -0.234 (1383 Elo), defense -0.079 (1461 Elo), 126 matchesCS Herediano -- attack 0.089 (1545 Elo), defense 0.429 (1715 Elo), 190 matchesCS HeredianoLD Alajuelense -- attack 0.269 (1634 Elo), defense 0.371 (1685 Elo), 190 matchesLD AlajuelenseSantos DE Guapiles -- attack -0.027 (1486 Elo), defense -0.123 (1438 Elo), 126 matchesPerez Zeledon -- attack -0.098 (1451 Elo), defense -0.188 (1406 Elo), 162 matchesDeportivo Saprissa -- attack 0.411 (1705 Elo), defense 0.173 (1587 Elo), 198 matchesDeportivo SaprissaGuadalupe FC -- attack -0.227 (1387 Elo), defense -0.373 (1313 Elo), 74 matchesSporting San Jose -- attack -0.198 (1401 Elo), defense 0.151 (1575 Elo), 162 matchesCS Cartagines -- attack 0.038 (1519 Elo), defense 0.254 (1627 Elo), 170 matchesCS CartaginesMunicipal Grecia -- attack -0.147 (1426 Elo), defense -0.065 (1467 Elo), 82 matchesPuntarenas FC -- attack -0.025 (1488 Elo), defense -0.050 (1475 Elo), 166 matchesSan Carlos -- attack -0.112 (1444 Elo), defense -0.080 (1460 Elo), 166 matchesMunicipal Liberia -- attack 0.005 (1503 Elo), defense 0.170 (1585 Elo), 128 matchesSanta Ana -- attack -0.103 (1448 Elo), defense -0.230 (1385 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
Deportivo Saprissa0.4110.173170515871.650.92198
LD Alajuelense0.2690.371163416851.430.76190
CS Herediano0.0890.429154517151.200.71190
CS Cartagines0.0380.254151916271.140.85170
Municipal Liberia0.0050.170150315851.100.93128
Puntarenas FC-0.025-0.050148814751.071.15166
Santos DE Guapiles-0.027-0.123148614381.071.24126
Perez Zeledon-0.098-0.188145114060.991.32162
Santa Ana-0.103-0.230144813850.991.3844
San Carlos-0.112-0.080144414600.981.19166
Municipal Grecia-0.147-0.065142614670.951.1782
Sporting San Jose-0.1980.151140115750.900.94162
Guadalupe FC-0.227-0.373138713130.871.5974
AD Guanacasteca-0.234-0.079138314610.871.19126

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 — Costa Rica - Primera Division (136)

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

DateMatchScoreP(over)ActualCall
2026-09-19Perez Zeledon v Sporting San Jose1-268%over
2026-09-14CS Cartagines v LD Alajuelense3-170%over
2026-09-13Escorpiones Belén v CS Herediano0-267%over
2026-09-13Sporting San Jose v Deportivo Saprissa4-271%over
2026-09-12Perez Zeledon v San Carlos0-270%over
2026-09-12Inter San Carlos v Puntarenas FC1-172%over
2026-09-07San Carlos v Sporting San Jose1-064%under
2026-09-06LD Alajuelense v Deportivo Saprissa0-276%over
2026-09-06Puntarenas FC v CS Cartagines1-371%over
2026-09-05Escorpiones Belén v Inter San Carlos0-271%over
2026-09-05CS Herediano v Perez Zeledon2-367%over
2026-08-31Deportivo Saprissa v Escorpiones Belén2-183%over
2026-08-30Perez Zeledon v LD Alajuelense1-170%over
2026-08-30CS Cartagines v CS Herediano1-068%under
2026-08-30San Carlos v Puntarenas FC1-269%over
2026-08-29Sporting San Jose v Inter San Carlos2-066%over
2026-08-24LD Alajuelense v San Carlos0-176%under
2026-08-23CS Herediano v Sporting San Jose0-361%over
2026-08-23Inter San Carlos v Deportivo Saprissa1-079%under
2026-08-22Puntarenas FC v Perez Zeledon1-073%under
2026-08-22Escorpiones Belén v CS Cartagines1-469%over
2026-08-18Sporting San Jose v Escorpiones Belén2-066%over
2026-08-16Deportivo Saprissa v CS Cartagines3-277%over
2026-08-16Perez Zeledon v Inter San Carlos0-174%under
2026-08-15San Carlos v CS Herediano1-066%under
2026-08-15LD Alajuelense v Puntarenas FC2-176%over
2026-08-10CS Herediano v LD Alajuelense0-365%over
2026-08-09Escorpiones Belén v Perez Zeledon0-077%under
2026-08-09Puntarenas FC v Deportivo Saprissa0-279%over
2026-08-09Inter San Carlos v San Carlos2-074%over
2026-08-08CS Cartagines v Sporting San Jose2-164%over
2026-08-04Perez Zeledon v CS Cartagines1-074%under
2026-08-03Inter San Carlos v CS Herediano1-167%over
2026-08-02LD Alajuelense v Escorpiones Belén2-174%over
2026-08-02Deportivo Saprissa v San Carlos2-183%over
2026-08-01Puntarenas FC v Sporting San Jose1-167%over
2026-07-26Sporting San Jose v LD Alajuelense1-165%over
2026-07-25Deportivo Saprissa v Perez Zeledon5-183%over
2026-07-25CS Cartagines v Inter San Carlos3-171%over
2026-07-24CS Herediano v Puntarenas FC1-171%over
2026-05-17CS Herediano v Deportivo Saprissa2-071%over
2026-05-14Deportivo Saprissa v CS Herediano2-172%over
2026-05-10CS Herediano v CS Cartagines0-063%under
2026-05-10Deportivo Saprissa v Municipal Liberia2-079%over
2026-05-03CS Cartagines v CS Herediano0-163%under
2026-05-03Municipal Liberia v Deportivo Saprissa1-177%over
2026-04-26CS Herediano v Sporting San Jose0-065%under
2026-04-26Guadalupe FC v CS Cartagines0-571%over
2026-04-26Municipal Liberia v LD Alajuelense2-166%over
2026-04-26Puntarenas FC v Deportivo Saprissa1-379%over
2026-04-25San Carlos v Perez Zeledon1-176%over
2026-04-24LD Alajuelense v Puntarenas FC5-269%over
2026-04-23Perez Zeledon v CS Herediano0-174%under
2026-04-23Deportivo Saprissa v Guadalupe FC5-086%over
2026-04-22Sporting San Jose v Municipal Liberia0-163%under
2026-04-22CS Cartagines v San Carlos2-170%over
2026-04-19Puntarenas FC v Sporting San Jose1-263%over
2026-04-19CS Herediano v San Carlos1-076%under
2026-04-19LD Alajuelense v Deportivo Saprissa1-175%over
2026-04-18Municipal Liberia v CS Cartagines1-066%under
2026-04-18Guadalupe FC v Perez Zeledon1-080%under
2026-04-13San Carlos v Guadalupe FC4-075%over
2026-04-12Perez Zeledon v Puntarenas FC3-370%over
2026-04-12Sporting San Jose v LD Alajuelense0-260%over
2026-04-12Deportivo Saprissa v Municipal Liberia1-280%over
2026-04-11CS Cartagines v CS Herediano1-264%over
2026-04-07Municipal Liberia v San Carlos5-167%over
2026-04-06LD Alajuelense v Guadalupe FC1-180%over
2026-04-05Deportivo Saprissa v Perez Zeledon4-085%over
2026-04-05Puntarenas FC v CS Herediano0-165%under
2026-04-03Sporting San Jose v CS Cartagines2-356%over
2026-03-23San Carlos v Deportivo Saprissa1-374%over
2026-03-22CS Herediano v LD Alajuelense2-164%over
2026-03-22Perez Zeledon v CS Cartagines3-166%over
2026-03-21Puntarenas FC v Municipal Liberia0-167%under
2026-03-21Guadalupe FC v Sporting San Jose0-069%under
2026-03-15Sporting San Jose v San Carlos1-064%under
2026-03-15CS Herediano v Municipal Liberia1-270%over
2026-03-15CS Cartagines v Deportivo Saprissa2-169%over
2026-03-15Guadalupe FC v Puntarenas FC2-172%over
2026-03-14LD Alajuelense v Perez Zeledon3-077%over
2026-03-10Sporting San Jose v Perez Zeledon3-265%over
2026-03-10Municipal Liberia v Guadalupe FC1-077%under
2026-03-08San Carlos v LD Alajuelense0-265%over
2026-03-08CS Cartagines v Puntarenas FC3-256%over
2026-03-08Deportivo Saprissa v CS Herediano2-173%over
2026-03-06Deportivo Saprissa v Sporting San Jose1-272%over
2026-03-05Puntarenas FC v San Carlos0-069%under
2026-03-05Guadalupe FC v CS Herediano0-276%over
2026-03-04LD Alajuelense v CS Cartagines2-059%over
2026-03-04Perez Zeledon v Municipal Liberia1-170%over
2026-03-02Municipal Liberia v Sporting San Jose1-063%under
2026-03-02San Carlos v CS Cartagines1-161%over
2026-03-01Puntarenas FC v LD Alajuelense2-063%over
2026-03-01CS Herediano v Perez Zeledon3-073%over
2026-03-01Guadalupe FC v Deportivo Saprissa0-284%over
2026-02-23San Carlos v CS Herediano1-070%under
2026-02-22Sporting San Jose v Puntarenas FC1-258%over
2026-02-22Deportivo Saprissa v LD Alajuelense2-172%over
2026-02-22CS Cartagines v Municipal Liberia2-162%over
2026-02-22Perez Zeledon v Guadalupe FC1-181%over
2026-02-16LD Alajuelense v Sporting San Jose1-264%over
2026-02-15CS Herediano v CS Cartagines1-061%under
2026-02-15Municipal Liberia v Deportivo Saprissa0-177%under
2026-02-14Puntarenas FC v Perez Zeledon1-071%under
2026-02-14Guadalupe FC v San Carlos3-474%over
2026-02-09Sporting San Jose v Guadalupe FC1-170%over
2026-02-08LD Alajuelense v CS Herediano1-167%over
2026-02-08CS Cartagines v Perez Zeledon1-068%under
2026-02-08Deportivo Saprissa v San Carlos2-180%over
2026-02-07Municipal Liberia v Puntarenas FC1-464%over
2026-01-30CS Cartagines v Sporting San Jose0-257%over
2026-01-29San Carlos v Municipal Liberia1-069%under
2026-01-29CS Herediano v Puntarenas FC2-167%over
2026-01-29Perez Zeledon v Deportivo Saprissa3-376%over
2026-01-28Guadalupe FC v LD Alajuelense1-372%over
2026-01-27Perez Zeledon v Sporting San Jose0-067%under
2026-01-26Deportivo Saprissa v CS Cartagines0-071%under
2026-01-25Puntarenas FC v Guadalupe FC0-076%under
2026-01-25LD Alajuelense v San Carlos1-074%under
2026-01-25Municipal Liberia v CS Herediano1-071%under
2026-01-23Municipal Liberia v Perez Zeledon1-175%over
2026-01-23Sporting San Jose v Deportivo Saprissa0-172%under
2026-01-22San Carlos v Puntarenas FC1-068%under
2026-01-22CS Cartagines v LD Alajuelense1-060%under
2026-01-21CS Herediano v Guadalupe FC4-080%over
2026-01-19Guadalupe FC v Municipal Liberia2-176%over
2026-01-19San Carlos v Sporting San Jose3-065%over
2026-01-18Puntarenas FC v CS Cartagines0-261%over
2026-01-18CS Herediano v Deportivo Saprissa2-078%over
2026-01-18Perez Zeledon v LD Alajuelense1-172%over
2026-01-16LD Alajuelense v Municipal Liberia2-273%over
2026-01-15Sporting San Jose v CS Herediano0-264%over
2026-01-15CS Cartagines v Guadalupe FC2-174%over
2026-01-14Deportivo Saprissa v Puntarenas FC2-277%over
2026-01-13Perez Zeledon v San Carlos3-173%over