Backtest
Aplicamos el modelo actual a los Mundiales 2014, 2018 y 2022 usando el ELO de fin del año anterior y los 192 resultados de tiempo regular. Lo que sigue es honesto, no es marketing.
Por torneo
| Mundial | N | Brier | Log loss | Accuracy |
|---|---|---|---|---|
| 2014 · Brazil | 64 | 0.579 | 0.966 | 57.8% |
| 2018 · Russia | 64 | 0.578 | 0.976 | 56.3% |
| 2022 · Qatar | 64 | 0.610 | 1.047 | 54.7% |
Por etapa
| Etapa | N | Brier | Log loss | Accuracy |
|---|---|---|---|---|
| Fase de grupos | 144 | 0.576 | 0.983 | 59.0% |
| Octavos | 24 | 0.623 | 1.023 | 50.0% |
| Cuartos | 12 | 0.662 | 1.079 | 50.0% |
| Semis | 6 | 0.546 | 0.935 | 50.0% |
| Tercer puesto | 3 | 0.650 | 1.068 | 33.3% |
| Final | 3 | 0.679 | 1.132 | 33.3% |
El modelo es más sólido en fase de grupos (más muestras, ELO gap más decisivo) y se degrada en KO tardío donde los rivales tienen ELO parecido y la varianza Poisson domina.
Calibración
Cuando el modelo dice "X% de probabilidad", ¿la frecuencia observada coincide? La diagonal punteada es la calibración perfecta - cuanto más cerca, mejor.
Cada bola es un bucket. Tamaño ∝ √(n samples).
Sweep · Recent-form blend
Hipótesis: el ELO se actualiza lento porque su K-factor está calibrado para amistosos + qualifiers. Un equipo que cambió de nivel en el último año queda subvaluado. Probamos un ajuste ELO_eff = ELO + α · (ELO − ELO_X años atrás) con cap ±150, sweepeando α ∈ {0, 0.1, 0.2, 0.3, 0.5} y X ∈ {1, 2, 3, 4, 5} años.
| lookback ↓ / α → | 0.00 | 0.10 | 0.20 | 0.30 | 0.50 |
|---|---|---|---|---|---|
| 1 año | 0.5892 54.7% | 0.5890 55.2% | 0.5889 56.3% | 0.5889 57.3% | 0.5895 55.2% |
| 2 años | 0.5892 54.7% | 0.5889 55.2% | 0.5889 55.2% | 0.5891 56.3% | 0.5902 54.7% |
| 3 años | 0.5892 54.7% | 0.5899 54.7% | 0.5910 55.2% | 0.5922 55.7% | 0.5956 54.7% |
| 4 años | 0.5892 54.7% | 0.5889 56.3% | 0.5889 56.3% | 0.5893 54.7% | 0.5909 54.2% |
| 5 años | 0.5892 54.7% | 0.5890 56.3% | 0.5892 55.2% | 0.5899 55.2% | 0.5921 54.2% |
Óptimo: α=0.2, lookback=1 año. Brier 0.5889 vs baseline 0.5892. Δ minúsculo en Brier (~−0.0003), pero accuracy +1.6 puntos (3 partidos más correctos de 192).
Lookback de 3 años empeora claramente - a esa distancia el equipo cambió de lineup y la "tendencia" mete ruido. Lookbacks 1, 2, 4, 5 funcionan parecido. Que el mínimo esté en 1y confirma que el ELO actual ya integra los últimos 12 meses con buen peso.
Decisión: mergeado al motor de producción con α=0.2 y lookback=1y. El cambio se aplica en match.ts vía effectiveElo(). Caveat: el efecto es chico y dentro del ruido posible con n=192. Confirmable expandiendo a WCs 1990-2010.
Tier 1 #3 · Modelo de penales
El motor antes resolvía empates 0-0 en KO con una moneda al aire (50/50). Lo reemplazamos por un modelo Bayesian Empirical shrinkage sobre 103 shootouts históricos en torneos top (Mundial, Eurocopa, Copa América, Copa Asia, AFCON):
rate(team) = (wins + k · 0.5) / (n + k) k = 10 P(A gana) = rate(A) / (rate(A) + rate(B))
| Año | Etapa | Local (n, rate) | Visitante (n, rate) | P(local) | Modelo | Real | ✓/✗ |
|---|---|---|---|---|---|---|---|
| 2014 | r16 | BRA(10, 55%) | CHI(1, 45%) | 55% | BRA | BRA | ✓ |
| 2014 | r16 | CRC(0, 50%) | GRC(0, 50%) | 50% | CRC | CRC | ✓ |
| 2014 | qf | NED(5, 40%) | CRC(0, 50%) | 44% | CRC | NED | ✗ |
| 2014 | sf | NED(5, 40%) | ARG(9, 53%) | 43% | ARG | ARG | ✓ |
| 2018 | r16 | ESP(7, 53%) | RUS(0, 50%) | 51% | ESP | RUS | ✗ |
| 2018 | r16 | CRO(1, 45%) | DEN(2, 50%) | 48% | DEN | CRO | ✗ |
| 2018 | r16 | COL(5, 53%) | ENG(7, 35%) | 60% | COL | ENG | ✗ |
| 2018 | qf | RUS(0, 50%) | CRO(1, 45%) | 52% | RUS | CRO | ✗ |
| 2022 | r16 | JPN(2, 42%) | CRO(3, 54%) | 44% | CRO | CRO | ✓ |
| 2022 | r16 | MAR(0, 50%) | ESP(10, 50%) | 50% | MAR | MAR | ✓ |
| 2022 | qf | CRO(3, 54%) | BRA(13, 57%) | 49% | BRA | CRO | ✗ |
| 2022 | qf | NED(7, 41%) | ARG(14, 54%) | 43% | ARG | ARG | ✓ |
| 2022 | final | ARG(14, 54%) | FRA(7, 53%) | 51% | ARG | ARG | ✓ |
Honesto: con n=13 shootouts el IC 95% de la accuracy es [26%, 81%]. El +3.8pp del modelo vs coin flip no es estadísticamente significativo. Brier es esencialmente igual.
2018 fue devastador (0/4): Inglaterra rompió la curse, Rusia ganó como anfitrión, Croacia ganó dos seguidos. El modelo no podía saber. 2014 y 2022 fueron sólidos (3/4 y 4/5).
Mergeado de todos modos. Razones: (1) filosóficamente más correcto que un coin flip ciego, (2) no empeora Brier de forma significativa, (3) en el video se vende mejor que "moneda al aire", (4) cuando expandamos el backtest a 1990-2010 tendremos n≥40 shootouts y veremos si la señal es real. Si en ese punto Brier sube, retiramos.
Sweep · Host bonus
El modelo actual le da +100 ELO al equipo anfitrión solo en fase de grupos. Probamos varios valores (0 a 220) y dos políticas (solo grupos vs grupos + KO) para ver cuál minimiza Brier. Los 28 partidos donde uno de los equipos es anfitrión son los que cambian - el resto del dataset se mueve solo por efecto de redondeo.
Counter-intuición: aumentar el bonus empeora marginalmente el Brier en cada paso (0.595 → 0.608 al saltar de 0 a 220). Aplicarlo también en KO empeora aún más.
Pero con n=28 partidos el error estándar de Brier es ~0.09 - todos los valores del sweep están dentro del ruido. Direccionalmente sugiere "menos bonus" pero no es estadísticamente decisivo. Los 3 hosts del set (BRA-2014, RUS-2018, QAT-2022) eran o ya-favoritos o demasiado débiles para que el bonus genérico ayudara.
Próximo paso para concluir: expandir el backtest a Mundiales 1990-2010 (+6 torneos = +36 partidos de host). Ahí sí va a haber poder estadístico para confirmar o descartar el bonus actual.
Peores predicciones - el modelo no vio venir
| Mundial | Etapa | Partido | Predicha | P(resultado real) |
|---|---|---|---|---|
| 2022 | group | CMR1 - 0BRA→ gana CMR | BRA (82%) | 3.9% |
| 2022 | group | ARG1 - 2KSA→ gana KSA | ARG (77%) | 6.2% |
| 2022 | group | TUN1 - 0FRA→ gana TUN | FRA (77%) | 6.3% |
| 2018 | group | KOR2 - 0GER→ gana KOR | GER (69%) | 11.1% |
| 2014 | r16 | GER0 - 0ALG→ empate | GER (79%) | 15.4% |
| 2018 | group | GER0 - 1MEX→ gana MEX | GER (62%) | 15.6% |
| 2022 | group | BEL0 - 2MAR→ gana MAR | BEL (62%) | 15.7% |
| 2022 | group | JPN2 - 1ESP→ gana JPN | ESP (60%) | 16.7% |
Estos son los batacazos históricos. El modelo les asignó probabilidad muy baja y igual ocurrieron. La frecuencia con la que pasan vs lo que predijimos es donde está la mayor deuda - el Tier 1 (peso al último año, lesiones, host bonus reforzado) ataca exactamente esto.
Mejores predicciones - donde el ELO se impone
| Mundial | Etapa | Partido | Predicha | P(resultado real) |
|---|---|---|---|---|
| 2014 | group | CMR1 - 4BRA→ gana BRA | BRA (85%) | 85.1% |
| 2022 | group | ESP7 - 0CRC→ gana ESP | ESP (73%) | 72.8% |
| 2014 | group | BRA3 - 1CRO→ gana BRA | BRA (71%) | 71.3% |
| 2018 | group | BRA2 - 0CRC→ gana BRA | BRA (71%) | 71.0% |
| 2022 | r16 | ARG2 - 1AUS→ gana ARG | ARG (70%) | 70.0% |
| 2022 | group | FRA4 - 1AUS→ gana FRA | FRA (70%) | 69.7% |
| 2014 | group | AUS0 - 3ESP→ gana ESP | ESP (69%) | 69.3% |
| 2022 | group | POL0 - 2ARG→ gana ARG | ARG (68%) | 68.3% |
Cómo leer esto
- Brier score mide el error cuadrático medio del vector de probabilidades. 0 = predicción perfecta, 0.667 = predicción uniforme (random). Nuestro 0.59 significa que el modelo aporta señal real, pero deja plata sobre la mesa.
- Log loss penaliza más las predicciones confiadas y equivocadas. Es la métrica estándar en competencias de prediction markets. 1.00 ubica al modelo entre "pick favorite" y "modelo serio bien calibrado".
- Accuracy top-1 = en qué % de partidos la clase con más probabilidad fue la que ocurrió. 56% no parece mucho pero hay que recordar que "draw" es difícil de pronosticar (3 outcomes, no 2) y que en 192 partidos el sesgo del torneo (presión, contraataques) le da chance al underdog.
- Por qué backtest sobre el regulation-time: nuestro modelo Poisson predice goles en 90 minutos. Los partidos definidos en alargue/penales se cuentan como empate al final del tiempo regular - que es exactamente lo que el modelo predice.
- Lo que NO incluye este backtest: predicciones a nivel torneo (probabilidad de campeón) - requiere correr el bracket de 32 equipos. Lo agregamos en Tier 1.5 cuando esté implementado el formato viejo del Mundial.
