Goal Elo
monitoring only -- not used by any card's picksAn 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.
Ratings
17 teams · K=0.025 · league avg 1.206 goals/team/match · home advantage +0.009 log-units (~1%) · seasons 2022, 2023, 2024, 2025 · generated 2026-09-19 10:32 UTC
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.
| Team | Attack | Defense | Atk Elo | Def Elo | GF vs avg defense | GA vs avg attack | Matches |
|---|---|---|---|---|---|---|---|
| Cerro Porteno | 0.290 | 0.271 | 1645 | 1635 | 1.61 | 0.92 | 88 |
| Libertad Asuncion | 0.224 | 0.356 | 1612 | 1678 | 1.51 | 0.85 | 88 |
| Sportivo Trinidense | 0.101 | 0.102 | 1550 | 1551 | 1.33 | 1.09 | 66 |
| Club Guarani | 0.078 | 0.066 | 1539 | 1533 | 1.30 | 1.13 | 88 |
| Deportivo Recoleta | 0.056 | -0.042 | 1528 | 1479 | 1.28 | 1.26 | 22 |
| Olimpia | 0.034 | 0.154 | 1517 | 1577 | 1.25 | 1.03 | 88 |
| Nacional Asuncion | -0.007 | -0.027 | 1496 | 1487 | 1.20 | 1.24 | 88 |
| SOL DE America | -0.012 | -0.171 | 1494 | 1415 | 1.19 | 1.43 | 44 |
| Tacuary | -0.056 | -0.165 | 1472 | 1417 | 1.14 | 1.42 | 66 |
| 12 de Octubre | -0.075 | -0.078 | 1462 | 1461 | 1.12 | 1.30 | 22 |
| Resistencia | -0.114 | -0.099 | 1443 | 1451 | 1.08 | 1.33 | 44 |
| Sportivo Ameliano | -0.118 | 0.142 | 1441 | 1571 | 1.07 | 1.05 | 88 |
| Guairena FC | -0.127 | -0.022 | 1437 | 1489 | 1.06 | 1.23 | 44 |
| General Caballero | -0.166 | -0.031 | 1417 | 1485 | 1.02 | 1.24 | 88 |
| Atlético Tembetary | -0.166 | -0.087 | 1417 | 1457 | 1.02 | 1.32 | 22 |
| 2 de Mayo | -0.179 | 0.031 | 1410 | 1515 | 1.01 | 1.17 | 44 |
| Sportivo Luqueno | -0.246 | 0.084 | 1377 | 1542 | 0.94 | 1.11 | 66 |
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.
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
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
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 — Paraguay - Division Profesional (Apertura) (131)
Switch leagues with the tabs above the ratings table; newest match first.
| Date | Match | Score | P(over) | Actual | Call |
|---|---|---|---|---|---|
| 2026-05-24 | Nacional Asuncion v Libertad Asuncion | 2-1 | 71% | over | ✓ |
| 2026-05-24 | Cerro Porteno v Rubio NU | 2-0 | 65% | over | ✓ |
| 2026-05-24 | Sportivo Ameliano v Sportivo Trinidense | 1-2 | 66% | over | ✓ |
| 2026-05-23 | Sportivo Luqueno v Olimpia | 1-2 | 68% | over | ✓ |
| 2026-05-23 | Deportivo Recoleta v Club Guarani | 2-1 | 76% | over | ✓ |
| 2026-05-22 | 2 de Mayo v Club Sp. San Lorenzo | 0-1 | 69% | under | ✗ |
| 2026-05-17 | Club Sp. San Lorenzo v Sportivo Luqueno | 0-0 | 72% | under | ✗ |
| 2026-05-16 | Club Guarani v Sportivo Ameliano | 1-0 | 64% | under | ✗ |
| 2026-05-15 | Olimpia v Deportivo Recoleta | 3-2 | 75% | over | ✓ |
| 2026-05-15 | Rubio NU v Nacional Asuncion | 1-1 | 64% | over | ✓ |
| 2026-05-15 | Sportivo Trinidense v Cerro Porteno | 3-1 | 68% | over | ✓ |
| 2026-05-14 | Libertad Asuncion v 2 de Mayo | 0-0 | 77% | under | ✗ |
| 2026-05-11 | Sportivo Ameliano v Deportivo Recoleta | 3-2 | 70% | over | ✓ |
| 2026-05-11 | Cerro Porteno v Club Guarani | 0-0 | 70% | under | ✗ |
| 2026-05-10 | Club Sp. San Lorenzo v Olimpia | 1-0 | 76% | under | ✗ |
| 2026-05-10 | Sportivo Luqueno v Libertad Asuncion | 2-3 | 72% | over | ✓ |
| 2026-05-09 | 2 de Mayo v Rubio NU | 2-0 | 64% | over | ✓ |
| 2026-05-09 | Nacional Asuncion v Sportivo Trinidense | 2-1 | 69% | over | ✓ |
| 2026-05-03 | Olimpia v Sportivo Ameliano | 1-1 | 63% | over | ✓ |
| 2026-05-03 | Deportivo Recoleta v Cerro Porteno | 2-1 | 76% | over | ✓ |
| 2026-05-03 | Club Guarani v Nacional Asuncion | 0-1 | 71% | under | ✗ |
| 2026-05-02 | Rubio NU v Sportivo Luqueno | 0-0 | 65% | under | ✗ |
| 2026-05-01 | Sportivo Trinidense v 2 de Mayo | 1-2 | 72% | over | ✓ |
| 2026-05-01 | Libertad Asuncion v Club Sp. San Lorenzo | 5-0 | 76% | over | ✓ |
| 2026-04-26 | 2 de Mayo v Club Guarani | 2-2 | 70% | over | ✓ |
| 2026-04-26 | Club Sp. San Lorenzo v Rubio NU | 0-1 | 69% | under | ✗ |
| 2026-04-25 | Sportivo Luqueno v Sportivo Trinidense | 2-1 | 69% | over | ✓ |
| 2026-04-25 | Libertad Asuncion v Olimpia | 3-2 | 66% | over | ✓ |
| 2026-04-24 | Nacional Asuncion v Deportivo Recoleta | 2-1 | 75% | over | ✓ |
| 2026-04-24 | Cerro Porteno v Sportivo Ameliano | 1-1 | 65% | over | ✓ |
| 2026-04-21 | Rubio NU v Libertad Asuncion | 3-0 | 66% | over | ✓ |
| 2026-04-20 | Sportivo Ameliano v Nacional Asuncion | 1-1 | 64% | over | ✓ |
| 2026-04-18 | Club Guarani v Sportivo Luqueno | 2-1 | 69% | over | ✓ |
| 2026-04-18 | Deportivo Recoleta v 2 de Mayo | 5-0 | 72% | over | ✓ |
| 2026-04-17 | Sportivo Trinidense v Club Sp. San Lorenzo | 2-1 | 74% | over | ✓ |
| 2026-04-12 | Rubio NU v Olimpia | 0-2 | 65% | over | ✓ |
| 2026-04-12 | Libertad Asuncion v Sportivo Trinidense | 1-1 | 68% | over | ✓ |
| 2026-04-11 | Sportivo Luqueno v Deportivo Recoleta | 2-1 | 72% | over | ✓ |
| 2026-04-11 | Nacional Asuncion v Cerro Porteno | 0-0 | 74% | under | ✗ |
| 2026-04-10 | 2 de Mayo v Sportivo Ameliano | 1-2 | 61% | over | ✓ |
| 2026-04-10 | Club Sp. San Lorenzo v Club Guarani | 1-0 | 76% | under | ✗ |
| 2026-04-06 | Sportivo Trinidense v Rubio NU | 4-0 | 63% | over | ✓ |
| 2026-04-05 | Sportivo Ameliano v Sportivo Luqueno | 2-2 | 61% | over | ✓ |
| 2026-04-05 | Club Guarani v Libertad Asuncion | 1-0 | 71% | under | ✗ |
| 2026-04-04 | Olimpia v Nacional Asuncion | 3-0 | 68% | over | ✓ |
| 2026-04-04 | Cerro Porteno v 2 de Mayo | 3-0 | 71% | over | ✓ |
| 2026-04-04 | Deportivo Recoleta v Club Sp. San Lorenzo | 4-2 | 74% | over | ✓ |
| 2026-04-01 | Rubio NU v Club Guarani | 0-2 | 66% | over | ✓ |
| 2026-04-01 | Sportivo Trinidense v Olimpia | 2-1 | 63% | over | ✓ |
| 2026-03-31 | 2 de Mayo v Nacional Asuncion | 1-1 | 69% | over | ✓ |
| 2026-03-31 | Sportivo Luqueno v Cerro Porteno | 2-3 | 67% | over | ✓ |
| 2026-03-31 | Club Sp. San Lorenzo v Sportivo Ameliano | 1-2 | 64% | over | ✓ |
| 2026-03-30 | Libertad Asuncion v Deportivo Recoleta | 1-0 | 74% | under | ✗ |
| 2026-03-29 | Club Guarani v Sportivo Trinidense | 0-0 | 72% | under | ✗ |
| 2026-03-28 | Olimpia v 2 de Mayo | 4-1 | 60% | over | ✓ |
| 2026-03-28 | Cerro Porteno v Club Sp. San Lorenzo | 2-0 | 75% | over | ✓ |
| 2026-03-27 | Nacional Asuncion v Sportivo Luqueno | 3-2 | 64% | over | ✓ |
| 2026-03-27 | Sportivo Ameliano v Libertad Asuncion | 2-0 | 63% | over | ✓ |
| 2026-03-26 | Deportivo Recoleta v Rubio NU | 1-0 | 69% | under | ✗ |
| 2026-03-25 | Club Guarani v 2 de Mayo | 1-1 | 69% | over | ✓ |
| 2026-03-23 | Sportivo Trinidense v Deportivo Recoleta | 3-2 | 69% | over | ✓ |
| 2026-03-23 | Rubio NU v Sportivo Ameliano | 1-2 | 56% | over | ✓ |
| 2026-03-22 | Club Sp. San Lorenzo v Nacional Asuncion | 0-0 | 76% | under | ✗ |
| 2026-03-22 | Sportivo Luqueno v 2 de Mayo | 0-2 | 58% | over | ✓ |
| 2026-03-21 | Club Guarani v Olimpia | 0-2 | 68% | over | ✓ |
| 2026-03-21 | Libertad Asuncion v Cerro Porteno | 2-3 | 67% | over | ✓ |
| 2026-03-19 | Sportivo Trinidense v Sportivo Ameliano | 1-1 | 58% | over | ✓ |
| 2026-03-18 | Rubio NU v Cerro Porteno | 2-0 | 65% | over | ✓ |
| 2026-03-18 | Club Guarani v Deportivo Recoleta | 3-1 | 73% | over | ✓ |
| 2026-03-18 | Libertad Asuncion v Nacional Asuncion | 2-1 | 71% | over | ✓ |
| 2026-03-17 | Club Sp. San Lorenzo v 2 de Mayo | 1-1 | 69% | over | ✓ |
| 2026-03-17 | Olimpia v Sportivo Luqueno | 1-0 | 60% | under | ✗ |
| 2026-03-15 | Nacional Asuncion v Rubio NU | 1-0 | 69% | under | ✗ |
| 2026-03-15 | Sportivo Ameliano v Club Guarani | 0-0 | 67% | under | ✗ |
| 2026-03-14 | Deportivo Recoleta v Olimpia | 0-1 | 67% | under | ✗ |
| 2026-03-14 | Cerro Porteno v Sportivo Trinidense | 2-1 | 65% | over | ✓ |
| 2026-03-13 | Sportivo Luqueno v Club Sp. San Lorenzo | 1-1 | 69% | over | ✓ |
| 2026-03-13 | 2 de Mayo v Libertad Asuncion | 0-2 | 66% | over | ✓ |
| 2026-03-09 | Sportivo Trinidense v Nacional Asuncion | 1-1 | 69% | over | ✓ |
| 2026-03-09 | Deportivo Recoleta v Sportivo Ameliano | 1-1 | 65% | over | ✓ |
| 2026-03-08 | Olimpia v Club Sp. San Lorenzo | 1-1 | 73% | over | ✓ |
| 2026-03-08 | Rubio NU v 2 de Mayo | 0-1 | 64% | under | ✗ |
| 2026-03-07 | Club Guarani v Cerro Porteno | 0-2 | 72% | over | ✓ |
| 2026-03-07 | Libertad Asuncion v Sportivo Luqueno | 1-0 | 68% | under | ✗ |
| 2026-03-02 | Sportivo Luqueno v Rubio NU | 0-1 | 64% | under | ✗ |
| 2026-03-02 | Club Sp. San Lorenzo v Libertad Asuncion | 0-7 | 69% | over | ✓ |
| 2026-03-01 | Nacional Asuncion v Club Guarani | 1-1 | 77% | over | ✓ |
| 2026-03-01 | Cerro Porteno v Deportivo Recoleta | 2-0 | 71% | over | ✓ |
| 2026-02-28 | Sportivo Ameliano v Olimpia | 0-1 | 60% | under | ✗ |
| 2026-02-28 | 2 de Mayo v Sportivo Trinidense | 1-0 | 65% | under | ✗ |
| 2026-02-26 | Rubio NU v Club Sp. San Lorenzo | 2-0 | 70% | over | ✓ |
| 2026-02-26 | Deportivo Recoleta v Nacional Asuncion | 2-2 | 73% | over | ✓ |
| 2026-02-25 | Sportivo Ameliano v Cerro Porteno | 0-1 | 63% | under | ✗ |
| 2026-02-25 | Olimpia v Libertad Asuncion | 1-0 | 65% | under | ✗ |
| 2026-02-25 | Sportivo Trinidense v Sportivo Luqueno | 1-1 | 64% | over | ✓ |
| 2026-02-23 | Sportivo Luqueno v Club Guarani | 3-2 | 68% | over | ✓ |
| 2026-02-21 | Cerro Porteno v Olimpia | 0-1 | 69% | under | ✗ |
| 2026-02-20 | Libertad Asuncion v Rubio NU | 0-1 | 69% | under | ✗ |
| 2026-02-20 | 2 de Mayo v Deportivo Recoleta | 0-1 | 71% | under | ✗ |
| 2026-02-19 | Club Sp. San Lorenzo v Sportivo Trinidense | 1-1 | 70% | over | ✓ |
| 2026-02-19 | Nacional Asuncion v Sportivo Ameliano | 1-1 | 67% | over | ✓ |
| 2026-02-15 | Sportivo Trinidense v Libertad Asuncion | 1-0 | 68% | under | ✗ |
| 2026-02-15 | Cerro Porteno v Nacional Asuncion | 0-2 | 74% | over | ✓ |
| 2026-02-14 | Olimpia v Rubio NU | 0-0 | 72% | under | ✗ |
| 2026-02-14 | Sportivo Ameliano v 2 de Mayo | 3-0 | 62% | over | ✓ |
| 2026-02-13 | Club Guarani v Club Sp. San Lorenzo | 3-1 | 74% | over | ✓ |
| 2026-02-13 | Deportivo Recoleta v Sportivo Luqueno | 1-2 | 67% | over | ✓ |
| 2026-02-08 | Libertad Asuncion v Club Guarani | 3-3 | 67% | over | ✓ |
| 2026-02-08 | Nacional Asuncion v Olimpia | 1-2 | 72% | over | ✓ |
| 2026-02-07 | Rubio NU v Sportivo Trinidense | 0-1 | 71% | under | ✗ |
| 2026-02-07 | 2 de Mayo v Cerro Porteno | 0-0 | 73% | under | ✗ |
| 2026-02-06 | Club Sp. San Lorenzo v Deportivo Recoleta | 0-3 | 72% | over | ✓ |
| 2026-02-06 | Sportivo Luqueno v Sportivo Ameliano | 0-1 | 59% | under | ✗ |
| 2026-02-02 | Deportivo Recoleta v Libertad Asuncion | 2-1 | 68% | over | ✓ |
| 2026-02-02 | Cerro Porteno v Sportivo Luqueno | 2-0 | 70% | over | ✓ |
| 2026-02-01 | Olimpia v Sportivo Trinidense | 3-2 | 66% | over | ✓ |
| 2026-02-01 | Club Guarani v Rubio NU | 4-0 | 70% | over | ✓ |
| 2026-01-31 | Nacional Asuncion v 2 de Mayo | 5-1 | 67% | over | ✓ |
| 2026-01-31 | Sportivo Ameliano v Club Sp. San Lorenzo | 1-0 | 67% | under | ✗ |
| 2026-01-29 | Sportivo Trinidense v Club Guarani | 0-0 | 70% | under | ✗ |
| 2026-01-29 | Rubio NU v Deportivo Recoleta | 1-1 | 72% | over | ✓ |
| 2026-01-28 | Libertad Asuncion v Sportivo Ameliano | 1-0 | 65% | under | ✗ |
| 2026-01-28 | 2 de Mayo v Olimpia | 1-1 | 65% | over | ✓ |
| 2026-01-27 | Sportivo Luqueno v Nacional Asuncion | 1-2 | 64% | over | ✓ |
| 2026-01-27 | Club Sp. San Lorenzo v Cerro Porteno | 2-4 | 70% | over | ✓ |
| 2026-01-25 | Olimpia v Club Guarani | 2-1 | 68% | over | ✓ |
| 2026-01-25 | Sportivo Ameliano v Rubio NU | 2-2 | 65% | over | ✓ |
| 2026-01-24 | Nacional Asuncion v Club Sp. San Lorenzo | 1-0 | 70% | under | ✗ |
| 2026-01-24 | Cerro Porteno v Libertad Asuncion | 1-1 | 68% | over | ✓ |
| 2026-01-23 | Deportivo Recoleta v Sportivo Trinidense | 1-1 | 71% | over | ✓ |
| 2026-01-23 | 2 de Mayo v Sportivo Luqueno | 1-2 | 60% | over | ✓ |