Pregunta. ¿Qué tan bien anticipan el resultado de un partido de la Premier League (gana el local, empate o gana el visitante) las estadísticas disponibles antes del encuentro, frente a las probabilidades implícitas en las cuotas de apuestas?

Hipótesis. Las estadísticas sí contienen información útil, pero el mercado, que además tiene información ventajosa, la aprovecha mejor.

Resultado: El modelo se acerca mucho al mercado, pero no lo supera.

Ventaja del mercado que alcanza el modelo

80%

De cada 100 puntos que el mercado mejora sobre una referencia ingenua, el modelo logra 80

Partidos acertados por el modelo

48.0%

Mercado: 48.9%

Referencia ingenua: 41.5%

Variables en el mejor modelo

3

Elo y goles a favor y en contra de la temporada.

El modelo recupera la mayor parte de la ventaja del mercado, sin superarlo

Cuánto mejora cada predictor frente a una referencia ingenua.
ValidaciónPrueba

Resumen
  1. Las estadísticas sí anticipan resultados. Con sólo 3 variables, el modelo acierta 48.0% de los partidos de prueba, contra 41.5% de un pronóstico básico. La mejora es estadísticamente significativa.
  2. El mercado sabe un poco más. Sus cuotas pronostican mejor en validación y en prueba. La diferencia es pequeña (0.016 de LogLoss con validación y prueba juntas), pero real.
  3. Más variables no es mejor. Otros modelos con más variables como Forma reciente y tiros ayudaron en validación, pero no en prueba. El modelo base M0 fue el más robusto.
  4. Conclusión. Las cuotas del mercado ya incorporan la estadística pública, y algo más. Nuestro modelo simple y transparente se acerca, pero no le gana al mercado de forma sistemática.

Partidos analizados

9,540

26 temporadas.

Del 18 de agosto de 2001 al 14 de septiembre de 2026

Gana el equipo local

45.6%

Empate 24.7%

Visitante 29.7%

(25 temporadas completas)

Gana el favorito de las cuotas

54.2%

Casi la mitad de las veces, el favorito no gana (Bet365)

Jugar en casa siempre ayuda… salvo sin público

Las bandas grises marcan los periodos que usa el modelo.

Ni el favorito es garantía

Resultado según el favorito de Bet365.

  • Predecir fútbol es difícil por naturaleza. Si el favorito de las casas de apuestas gana sólo 54% de las veces, un buen modelo debe aspirar a acertar cerca de 50 %. Por eso el tablero evalúa probabilidades y no sólo aciertos.
  • El COVID-19 no tiene un impacto drástico en el modelo. Al reentrenar M0 sin los 472 partidos jugados sin público (del 17 de junio de 2020 al 23 de mayo de 2021), la probabilidad media de victoria local sube de 42.6% a 44.0%, pero el LogLoss de prueba casi no cambia (1.0331 → 1.0328), mientras que la brecha con el mercado es de 0.013.
Temporada Partidos Local Empate Visitante Ventaja local (pp) Goles local Goles visitante
2001/02 380 43.4% 26.6% 30.0% +13.4 1.47 1.17
2002/03 380 49.2% 23.7% 27.1% +22.1 1.50 1.13
2003/04 380 43.9% 28.4% 27.6% +16.3 1.51 1.16
2004/05 380 45.5% 28.9% 25.5% +20.0 1.50 1.07
2005/06 380 50.5% 20.3% 29.2% +21.3 1.46 1.02
2006/07 380 47.9% 25.8% 26.3% +21.6 1.45 1.00
2007/08 380 46.3% 26.3% 27.4% +18.9 1.53 1.11
2008/09 380 45.5% 25.5% 28.9% +16.6 1.40 1.08
2009/10 380 50.8% 25.3% 23.9% +26.8 1.70 1.07
2010/11 380 47.1% 29.2% 23.7% +23.4 1.62 1.17
2011/12 380 45.0% 24.5% 30.5% +14.5 1.59 1.22
2012/13 380 43.7% 28.4% 27.9% +15.8 1.56 1.24
2013/14 380 47.1% 20.5% 32.4% +14.7 1.57 1.19
2014/15 380 45.3% 24.5% 30.3% +15.0 1.47 1.09
2015/16 380 41.3% 28.2% 30.5% +10.8 1.49 1.21
2016/17 380 49.2% 22.1% 28.7% +20.5 1.60 1.20
2017/18 380 45.5% 26.1% 28.4% +17.1 1.53 1.15
2018/19 380 47.6% 18.7% 33.7% +13.9 1.57 1.25
2019/20 380 45.3% 24.2% 30.5% +14.7 1.52 1.21
2020/21 380 37.9% 21.8% 40.3% -2.4 1.35 1.34
2021/22 380 42.9% 23.2% 33.9% +8.9 1.51 1.31
2022/23 380 48.4% 22.9% 28.7% +19.7 1.63 1.22
2023/24 380 46.1% 21.6% 32.4% +13.7 1.80 1.48
2024/25 380 40.8% 24.5% 34.7% +6.1 1.51 1.42
2025/26 380 42.6% 27.4% 30.0% +12.6 1.53 1.22
A más ventaja de Elo, más victorias locales

Resultados según la diferencia de Elo antes del partido, en deciles (2019/20 a 2026/27, 2,696 partidos).

Las cuotas están bien calibradas

Cuando las cuotas de Bet365 dicen 70 %, ocurre ≈70 % de las veces.

Goles por partido observados contra una distribución de Poisson con la misma media.
observadoPoisson con la misma media

Cada patrón se traduce a una decisión del modelo:

  • Elo como variable principal.

Mientras más fuerte es el local según el Elo, más gana, 13% de las veces cuando está en clara desventaja y 76% cuando tiene clara ventaja. Incluso con fuerzas iguales, el local gana más, por eso el modelo toma en cuenta quién juega en casa.

  • Mercado calibrado como rival difícil.

Las probabilidades de las cuotas coinciden con lo que de verdad pasa, así que para ganarles hace falta saber algo que el mercado no sepa. Sólo en los extremos se equivoca un poco, da algo de más a los equipos muy poco probables y algo de menos a los grandes favoritos.

  • Goles tipo Poisson - regresión de Poisson.

Los goles se reparten como predice una distribución de Poisson, y la variación que queda dentro del modelo es la esperada, 1.00 en el local y 1.04 en el visitante.

Decil Diferencia de Elo Partidos Gana local Empate Gana visitante
1 -428 a -191 270 12.6% 20.7% 66.7%
2 -191 a -122 270 26.3% 24.8% 48.9%
3 -122 a -76 269 28.3% 26.8% 45.0%
4 -76 a -37 270 35.9% 24.4% 39.6%
5 -37 a -3 269 45.7% 25.7% 28.6%
6 -3 a +33 270 36.7% 31.1% 32.2%
7 +33 a +77 269 52.8% 22.7% 24.5%
8 +77 a +124 270 54.1% 27.0% 18.9%
9 +124 a +189 269 63.2% 21.6% 15.2%
10 +189 a +438 270 76.3% 13.7% 10.0%
Probabilidad implícita (promedio del grupo) Frecuencia observada Casos
4.3% 3.4% 119
7.8% 6.9% 1,024
12.7% 11.7% 1,637
17.6% 16.9% 2,421
22.7% 22.0% 3,453
27.7% 28.0% 7,462
32.4% 29.9% 1,981
37.6% 37.5% 1,804
42.3% 42.1% 1,450
47.4% 46.9% 1,453
52.6% 55.0% 1,116
57.3% 59.0% 936
62.0% 65.6% 719
67.5% 70.7% 713
72.6% 72.7% 491
77.4% 77.0% 413
82.1% 87.7% 219
86.8% 92.5% 67
Cómo funciona
Histórico9,540 partidos, 2001–2026
→
Variables previas al partidoElo · goles de la temporada · forma reciente · tiros
→
Poisson: goles del localλ local
Poisson: goles del visitanteλ visita
→
Marcadores posibles (Skellam)P(local) · P(empate) · P(visitante)
→
Comparación con LogLosscontra la referencia ingenua y el mercado
←
Mercado1/cuota de apertura, normalizada
En pocas palabras
  • Dos regresiones de Poisson estiman los goles esperados de cada equipo, con información anterior al partido.
  • De esos goles salen las probabilidades de cada marcador y de cada resultado.
  • Entrenamiento 2019/20–2023/24 (1,897 partidos) · validación 2024/25 (380) · prueba ago-2025 a sep-2026 (419).
  • Las cuotas nunca entran al modelo, sólo sirven para comparar.
Agregar variables no generaliza

Comparativa de LogLoss entre modelos.
ValidaciónPruebaMercadoEspecificaciones del modelo

No es una derrota…

Diferencia de LogLoss entre M0 y el mercado, según el resultado.

Efecto sobre los goles esperados de subir una desviación estándar cada variable de M0, con intervalo de 95 %. La diferencia de Elo domina en ambas ecuaciones. Los goles en contra del rival pesan poco, no son significativos en la ecuación del visitante (p = 0.506) y quedan en el límite en la del local (p = 0.0498).

modelo M0mercado (apertura)
Probabilidad asignada contra frecuencia observada (validación + prueba). El modelo confía de más en los favoritos claros: cuando les da 60–80 %, ganan menos de lo previsto. También subestima el empate: en prueba le asigna 23.6% en promedio, el mercado 24.5%, y ocurrió en 28.2% de los partidos.

Probabilidad de victoria local según el mercado y según M0 en cada partido de prueba. Coinciden en lo esencial; las discrepancias grandes son pocas.

LogLoss, probabilidad media asignada al resultado real, aciertos y error absoluto medio de goles.

Periodo Predictor Partidos LogLoss Prob. media al resultado real Aciertos P(empate) media MAE goles
Validación Azar · 1/3 por resultado 380 1.0986 33.3% 40.8% 33.3% —
Validación Referencia ingenua 380 1.0794 34.0% 40.8% 24.7% —
Validación M0 · Base 380 0.9895 37.2% 53.2% 22.8% 0.918
Validación M1 · + Forma 380 0.9876 37.2% 52.4% 22.6% 0.922
Validación M2 · + Tiros 380 0.9807 37.5% 53.4% 22.2% 0.921
Validación M3 · + Tiros a puerta 380 0.9823 37.4% 52.4% 22.4% 0.921
Validación M4 · Completo 380 0.9786 37.6% 53.7% 22.2% 0.922
Validación Mercado · Apertura 380 0.9706 37.9% 54.2% 23.0% —
Validación Mercado · Cierre 380 0.9667 38.0% 55.5% 23.3% —
Prueba Azar · 1/3 por resultado 419 1.0986 33.3% 41.5% 33.3% —
Prueba Referencia ingenua 419 1.0868 33.7% 41.5% 24.7% —
Prueba M0 · Base 419 1.0331 35.6% 48.0% 23.6% 0.902
Prueba M1 · + Forma 419 1.0347 35.5% 46.3% 23.6% 0.904
Prueba M2 · + Tiros 419 1.0373 35.4% 47.5% 23.7% 0.902
Prueba M3 · + Tiros a puerta 419 1.0339 35.6% 46.3% 24.1% 0.894
Prueba M4 · Completo 419 1.0367 35.5% 47.5% 23.8% 0.899
Prueba Mercado · Apertura 419 1.0200 36.1% 48.9% 24.5% —
Prueba Mercado · Cierre 419 1.0170 36.2% 48.9% 24.8% —

Intervalos bootstrap con 10,000 remuestreos de partidos. Si el intervalo no incluye el cero, la diferencia no se explica por azar.

Periodo Comparación (A − B) Partidos Diferencia de LogLoss IC 95 % ¿Distinta de cero?
Prueba M0 · Base − Referencia ingenua 419 -0.0537 -0.0861 a -0.0217 Sí
Prueba M0 · Base − Mercado · Apertura 419 +0.0131 -0.0005 a +0.0264 No
Prueba M4 · Completo − M0 · Base 419 +0.0037 -0.0063 a +0.0139 No
Prueba M4 · Completo − Mercado · Apertura 419 +0.0167 +0.0034 a +0.0301 Sí
Validación M4 · Completo − M0 · Base 380 -0.0109 -0.0213 a -0.0001 Sí
Validación M0 · Base − Mercado · Apertura 380 +0.0190 +0.0053 a +0.0328 Sí
Validación + prueba M0 · Base − Mercado · Apertura 799 +0.0159 +0.0064 a +0.0255 Sí

Lectura. El modelo supera con claridad a la referencia ingenua. Frente al mercado, la prueba sola no es concluyente; con validación y prueba juntas, sí. Entre M4 y M0, en validación M4 fue mejor por un margen mínimo; en prueba la diferencia no es concluyente.

Fuente. Football-Data.co.uk: un archivo CSV por temporada de la Premier League (código E0), de 2001/02 a 2026/27. Son 26 archivos; el último llega hasta el 14 de septiembre de 2026. Se descargan directamente del sitio, sin API.

Consolidación (Limpieza de datos.ipynb). Se unieron los 26 archivos con las 23 columnas presentes en todas las temporadas (división, fecha, equipos, resultado final y al medio tiempo, árbitro, tiros, tiros a puerta, faltas, córners y tarjetas) y 11 complementarias (cuotas de Bet365, cuotas promedio de apertura y de cierre, y goles esperados). Resultado: E0_consolidado.csv, con 9,540 partidos × 34 variables.

Elemento Definición
Unidad de análisis El partido
Población Partidos de la Premier League inglesa
Periodo 2001–2026 para el histórico (Elo y exploración); 2019/20–2026/27 para modelar
Variable objetivo Goles del local y del visitante, de los que se deriva el resultado 1X2
Variables explicativas Diferencia de Elo, goles a favor y en contra de la temporada, forma reciente, tiros y tiros a puerta; todas previas al partido
Referencia externa Cuotas promedio de apertura (AvgH, AvgD, AvgA), convertidas a probabilidad
Datos complementarios Ninguno externo: las cuotas vienen en los mismos archivos
Decisiones de limpieza
  1. Lectura completa de los archivos. No se descartan renglones con formato irregular. Una primera versión lo hacía y perdía 90 partidos de 2003/04 y 2004/05.
  2. No se eliminaron partidos por faltar cuotas o xG. Esas columnas quedan vacías, y así el histórico completo sirve para el Elo.
  3. Fechas homologadas. Los archivos antiguos usan dd/mm/aa y los recientes dd/mm/aaaa. Se leyeron con el día primero, se exportaron en formato ISO y se verificó que ninguna fecha invirtiera día y mes.
  4. Orden cronológico estricto, para calcular cada variable sin usar información del futuro.
  5. La modelación empieza en agosto de 2019, cuando aparecen las cuotas promedio de apertura y de cierre. Así se puede comparar con el mercado y quedan cinco temporadas de entrenamiento.
  6. Se excluyeron 4 partidos de equipos debutantes sin partidos previos en la base para calcular tiros.
  7. Revisiones de consistencia en el notebook: duplicados, un equipo contra sí mismo, valores negativos, goles al medio tiempo mayores que los finales, tiros a puerta mayores que tiros, resultado contra marcador, cuotas ≤ 1 y xG negativos.
Revisión de calidad de E0_consolidado.csv
Revisión Resultado Comentario
Registros 9,540 partidos, 34 columnas Base completa del equipo, 18-08-2001 a 14-09-2026
Duplicados (fecha, local, visitante) 0 Sin duplicados
Resultado (FTR) incongruente con los goles 0 Sin incongruencias
Temporadas incompletas Ninguna Las 25 temporadas completas tienen 380 partidos (una primera lectura descartaba 90 de 2003/04 y 2004/05)
Tiros a puerta mayores que tiros 1 Error de la fuente: Newcastle–West Ham 2021-08-15; no se corrigió
Goles mayores que tiros a puerta 50 Plausible (autogoles); no es error
Cuotas Bet365 faltan en 2001/02 Se usan desde 2002/03 para el análisis histórico del mercado
Cuotas promedio de apertura y cierre sólo desde 2019/20 Por eso la comparación modelo–mercado es 2024/25–2026/27
Goles esperados (xG) sólo 2026/27 No se usan: cobertura insuficiente
Partidos excluidos de la base de modelación 4 Equipos sin historial previo de tiros en la base (Brentford 2021, Nott'm Forest 2022, Luton 2023, Coventry 2026)

Todas se calculan sólo con partidos anteriores al encuentro (wc_predictor.py):

Variable Cómo se construye Parámetro
Diferencia de Elo Rating que sube al ganar y baja al perder, más cuanto más inesperado el resultado; entra como (Elo local − Elo visitante) / 400 Inicial 1,500, K = 15 (calibrado)
Goles a favor y en contra de la temporada Promedio de la temporada en curso; antes de su primer partido, el de la temporada anterior (o el de la liga, si el equipo no jugó en Premier). La mezcla con la temporada anterior (shrinkage, peso n/(n+k) a la actual) se calibró y el mejor valor fue k = 0, es decir, sin mezcla k = 0 (calibrado)
Forma reciente Promedio ponderado de goles de los últimos 10 partidos, con más peso a los recientes Decaimiento 0.85
Tiros y tiros a puerta Mismo promedio ponderado, a favor y concedidos 10 partidos, 0.85

Especificaciones comparadas. M0 = Elo + goles de la temporada (3 variables por ecuación) · M1 = M0 + forma · M2 = M0 + tiros · M3 = M0 + tiros a puerta · M4 = todo (9 variables). En M4 las variables se traslapan (correlación de 0.86 entre tiros y tiros a puerta; VIF máximo 5.6), lo que vuelve inestables sus coeficientes.

  • Partición temporal, no aleatoria. El modelo aprende del pasado y se evalúa con el futuro, como se usaría en la práctica. Entrenamiento 2019/20–2023/24 (1,897), validación 2024/25 (380) y prueba del 15 de agosto de 2025 al 14 de septiembre de 2026 (419). Los coeficientes no se reestiman después del entrenamiento.
  • LogLoss (métrica principal). Menos el promedio del logaritmo de la probabilidad asignada al resultado que ocurrió. Premia dar mucha probabilidad a lo que pasa y castiga la sobreconfianza. Como referencia, el azar puro da ln 3 ≈ 1.099, y exp(−LogLoss) es la probabilidad media (geométrica) asignada al resultado real.
  • Calibración de K y k. El K del Elo y el k del shrinkage se eligieron con validación temporal de ventana creciente: se entrena con todo lo anterior y se evalúa en 2021/22, 2022/23 y 2023/24, todas dentro del periodo de entrenamiento. Se probaron K de 15 a 45 y k de 0 a 20 con M0, y ganó la combinación de menor LogLoss: K = 15 y k = 0. Ni la validación 2024/25 ni la prueba se usaron para elegirlos.
  • MAE de goles. Error absoluto medio entre goles observados y esperados; evalúa λ, no las probabilidades 1X2.
  • Complementos. Tasa de aciertos (fácil de comunicar, pero ignora la confianza), intervalos bootstrap, calibración y descomposición de la brecha con el mercado.
  • Mercado. Probabilidad implícita = 1/cuota, normalizada para que las tres sumen 1. Esto retira el margen de la casa de apuestas: 4.49 % en validación y 5.84 % en prueba, en promedio.
Limitaciones
  • Independencia entre goles. Poisson + Skellam supone que los goles de un equipo no dependen de los del otro; por eso subestima los empates (ver “Calibración” en El modelo).
  • Parámetros optimizados sólo en parte. K y k se calibraron en una rejilla (K de 15 a 45, k de 0 a 20) y sólo con M0. El K elegido quedó en el borde inferior de la rejilla, así que un valor menor podría ser aún mejor. El decaimiento 0.85 y la ventana de 10 partidos no se optimizaron.
  • Equipos ascendidos. El Elo sólo usa partidos de Premier: un equipo que regresa conserva el Elo de su última temporada en primera, a veces de hace años, y uno nuevo empieza con 1,500. Su forma reciente también puede venir de temporadas lejanas.
  • Información ausente. Alineaciones, lesiones, calendario, descanso y fichajes, que el mercado sí considera.
  • Muestra de prueba pequeña (419 partidos): las diferencias entre especificaciones caen dentro del ruido.
  • Mercado aproximado. Cuotas promedio con normalización proporcional; no se evaluó rentabilidad.
Posibles extensiones
  • Corrección de Dixon–Coles para marcadores bajos y empates, o regresión binomial negativa.
  • Ampliar la búsqueda de K por debajo de 15 y optimizar también el decaimiento y la ventana de forma reciente.
  • Elo con segunda división, para tratar mejor a los ascendidos.
  • Goles esperados (xG) cuando haya cobertura histórica, y comparación contra cuotas de cierre.
  • Detectar equipos que el mercado sobrevalora o infravalora de forma sistemática.

Verificación. El tablero recalcula todo desde los archivos del equipo cada vez que se genera. Esta tabla compara sus cifras con las que publica el notebook del equipo (Analisis.ipynb): todas coinciden.

Cifra Notebook Dashboard Coincide
LogLoss M0 · Base (validación) 0.989547 0.989547 ✓
LogLoss M1 · + Forma (validación) 0.987603 0.987603 ✓
LogLoss M2 · + Tiros (validación) 0.980718 0.980718 ✓
LogLoss M3 · + Tiros a puerta (validación) 0.982319 0.982319 ✓
LogLoss M4 · Completo (validación) 0.978612 0.978612 ✓
LogLoss Mercado · Apertura (validación) 0.970552 0.970552 ✓
LogLoss M0 · Base (prueba) 1.033076 1.033076 ✓
LogLoss M1 · + Forma (prueba) 1.034699 1.034699 ✓
LogLoss M2 · + Tiros (prueba) 1.037331 1.037331 ✓
LogLoss M3 · + Tiros a puerta (prueba) 1.033868 1.033868 ✓
LogLoss M4 · Completo (prueba) 1.036739 1.036739 ✓
LogLoss Mercado · Apertura (prueba) 1.020000 1.020000 ✓
Ejemplo Arsenal–Man City: λ Arsenal (M0) 1.538 1.538 ✓
Ejemplo Arsenal–Man City: λ Man City (M0) 1.266 1.266 ✓
Ejemplo Arsenal–Man City: P(victoria Arsenal) M0 0.4365 0.4365 ✓
Ejemplo Arsenal–Man City: P(empate) M0 0.2500 0.2500 ✓
Ejemplo Arsenal–Man City: P(victoria Man City) M0 0.3135 0.3135 ✓

Cómo reproducirlo. Código, datos e instrucciones están en github.com/pitirringo/futbol-apuestas. Basta con instalar las dependencias de Dashboard-o-pagina/requirements.txt y ejecutar quarto render Dashboard-o-pagina. GitHub Actions hace exactamente eso en una máquina limpia con cada git push y publica el resultado en GitHub Pages; esta tabla confirma que las cifras se reproducen ahí.

Término Significado
1X2 Los tres resultados posibles: 1 = gana el local, X = empate, 2 = gana el visitante
Cuota decimal Pago por unidad apostada si se acierta; una cuota de 2.50 implica una probabilidad bruta de 1/2.50 = 40 %
Cuotas de apertura y de cierre “Apertura” es el nombre que usa el proyecto para las cuotas promedio (AvgH, AvgD, AvgA) que Football-Data registra el viernes por la tarde (fin de semana) o el martes (entre semana). Las de cierre (AvgCH…) son las últimas antes del partido
Probabilidad implícita Probabilidad que se deduce de las cuotas tras retirar el margen de la casa
Margen Exceso sobre 100 % de la suma de probabilidades brutas; es la ganancia esperada de la casa de apuestas
Elo Puntuación de fuerza relativa; la diferencia entre dos equipos predice el resultado esperado
Regresión de Poisson Modelo para conteos (goles) cuya media depende de variables explicativas mediante una función logarítmica
Skellam Distribución de la diferencia entre dos conteos de Poisson independientes; da P(local), P(empate) y P(visitante)
Shrinkage Acercar un promedio con pocos datos a una referencia más estable
LogLoss Error de un pronóstico probabilístico; menor es mejor
Calibración Un pronóstico está calibrado si lo que predice con 70 % ocurre 70 % de las veces
Bootstrap Remuestrear los partidos con reemplazo para medir la incertidumbre de una métrica

Proyecto final del Módulo 8, Comunicación de resultados. Diplomado de Introducción Analítica a la Ciencia de Datos.

  • Castillo Rodríguez Daniel Arturo
  • Castillo Santiago Erika Isabel
  • Garduño Gutiérrez César Emiliano
  • Gómez Mendoza Maximiliano
  • Martínez Vega Eduardo
  • Zacateco Tello María Fernanda

Datos: Football-Data.co.uk · Código: Python (pandas, statsmodels, scipy, scikit-learn) · Tablero: Quarto + Plotly + Observable JS, publicado con GitHub Actions en GitHub Pages.