Modelación Bayesiana Jerárquica en Fútbol

De modelos estáticos a un enfoque dinámico

Danna L. Cruz-Reyes

\[ \newcommand{\pasto}[1]{\color{red}{#1}} \newcommand{\millos}[1]{\color{blue}{#1}} \]

¿Qué es la Estadística Bayesiana?

La estadística clásica estima parámetros.

La estadística Bayesiana modela incertidumbre.

El corazón del enfoque Bayesiano

\[ \text{Posterior} \propto \text{Verosimilitud} \times \text{Prior} \]

\[ p(\theta \mid y) \propto p(y \mid \theta) p(\theta) \]

Interpretación

Antes de ver los datos → tenemos creencias.

Observamos los datos → actualizamos.

Después de ver los datos → obtenemos la distribución posterior.

¿Qué significa realmente?

Los parámetros no son números fijos.

Son variables aleatorias.

La incertidumbre es parte del modelo.

Aplicado al fútbol ⚽

El ataque no es un número fijo.

La defensa no es un número fijo.

Son procesos latentes que evolucionan en el tiempo.

El punto de partida

Datos originales descargados

Los datos provienen del registro histórico de partidos \((2021- 2023-I)\).

Cada fila corresponde a un encuentro.

Estructura inicial

head(df_raw)
# A tibble: 6 × 9
  Round                  Wk    Day   Date  Time                local       Score Away  Attendance
  <chr>                  <chr> <chr> <chr> <chr>               <chr>      <chr> <chr> <chr>     
1 Apertura — First stage 1     Wed   44951 0.63194444444444442 Unión Mag… 2–1   Atlé… 1         
2 Apertura — First stage 1     Wed   44951 0.72222222222222221 Águilas D… 1–1   Juni… 2         
3 Apertura — First stage 1     Tue   44950 0.83333333333333337 Bucaraman… 0–0   Envi… 1         
4 Apertura — First stage 1     Thu   44952 0.66666666666666663 Boyacá Ch… 2–0   Alia… 1         
5 Apertura — First stage 1     Thu   44952 0.75694444444444442 Deportes … 2–1   Amér… 17        
6 Apertura — First stage 1     Fri   44953 0.72222222222222221 Jaguares … 2–2   Sant… 2         

Proceso de transformación

Se realizaron las siguientes operaciones:

  • Conversión de fecha al formato calendario.
  • Separación del marcador en goles de local y visitante. *Número de goles anotados por cada equipo:

goles_local

goles_visitante

Identificación numérica de los equipos:

id_local

id_visitante

Unidad de análisis

Cada fila representa:

Un partido oficial de liga profesional colombiana.

Variables fundamentales para el modelo:

  • Goles del equipo local

  • Goles del equipo visitante

  • Identidad de ambos equipos

  • Temporada

Estructura estadística del problema

  • Variable respuesta: conteos (número de goles).

  • Distribución natural: Poisson.

  • Dependencia estructural: equipo local vs equipo visitante.

  • Jerarquía: equipos comparten distribución común de habilidades.

Modelo básico

\[ Y_{g,L}\sim \text{Poisson}(\theta_{g,L}),\qquad Y_{g,V}\sim \text{Poisson}(\theta_{g,V}) \]

\[ \log \theta_{g,L} = \text{local} + att_{L(g)} + def_{V(g)} \]

\[ \log \theta_{g,V} = att_{V(g)} + def_{L(g)} \]

Modelo básico

\[ Y_{g,L}\sim \text{Poisson}(\theta_{g,L}),\qquad Y_{g,V}\sim \text{Poisson}(\theta_{g,V}) \]

\[ \log \theta_{g,L} = \text{local} + att_{L(g)} + def_{V(g)} \]

\[ \log \theta_{g,V} = att_{V(g)} + def_{L(g)} \]

Modelo básico

\[ Y_{g,L}\sim \text{Poisson}(\theta_{g,L}),\qquad Y_{g,V}\sim \text{Poisson}(\theta_{g,V}) \]

\[ \log \theta_{g,V} = att_{V(g)} + def_{L(g)} \]

\[ \log \theta_{g,L} = \bbox[yellow]{\text{local}} + att_{L(g)} + def_{V(g)} \]

\(\bbox[yellow]{\text{local}}\) es la ventaja promedio de jugar en casa (en escala log).

Si \(\bbox[yellow]{\text{local}}>0\), el local tiende a anotar más que en cancha neutral.

La intensidad de goles del local depende de la ventaja de local, del ataque del equipo local y de la “debilidad defensiva” del visitante.

Modelo básico

\[ Y_{g,L}\sim \text{Poisson}(\theta_{g,L}),\qquad Y_{g,V}\sim \text{Poisson}(\theta_{g,V}) \]

\[ \log \theta_{g,L} = \text{local} + att_{L(g)} + def_{V(g)} \]

\[ \log \theta_{g,V} = att_{V(g)} + def_{L(g)} \]

Modelo básico

\[ Y_{g,L}\sim \text{Poisson}(\theta_{g,L}),\qquad Y_{g,V}\sim \text{Poisson}(\theta_{g,V}) \]

\[ \log \theta_{g,L} = \text{local} + att_{L(g)} + def_{V(g)} \]

\[ \log \theta_{g,V} = att_{V(g)} + def_{L(g)} \]

La intensidad de goles del visitante depende de su ataque y de la “debilidad defensiva” del local.

¿Qué significan \(L(g)\) y \(V(g)\)?

\[ \log \theta_{g,L} = \text{local} + att_{L(g)} + def_{V(g)} \] \[ \log \theta_{g,V} = att_{V(g)} + def_{L(g)} \]

  • \(L(g)\): índice del equipo local en el partido (g).
  • \(V(g)\): índice del equipo visitante en el partido (g).

Pasto vs Millonarios

Partido \(g = 87\)

Deportivo Pasto (local) Millonarios (visitante)

\[ 0 \;-\; 1 \]

Pasto vs Millonarios

  • \(L(87)=5\)Pasto
  • \(V(87)=11\)Millonarios

Intensidad del equipo local

\[ \pasto{\log \theta_{87,L}} = \]

\[ \pasto{\log \theta_{87,L}} = \text{local} \]

\[ \pasto{\log \theta_{87,L}} = \text{local} + \pasto{att_{5}} \]

\[ \pasto{\log \theta_{87,L}} = \text{local} + \pasto{att_{5}} + \millos{def_{11}} \]

  • \(\pasto{att_5}\) = ataque de Pasto
  • \(\millos{def_{11}}\) = defensa de Millonarios

Intensidad del equipo visitante

\[ \millos{\log \theta_{87,V}} = \millos{att_{11}} + \pasto{def_{5}} \]

Supongamos:

\[ \millos{att_{11}} = 0.35 \qquad \pasto{def_{5}} = -0.40 \]

\[ \log \theta_{87,V} = 0.35 - 0.40 = -0.05 \]

\[ \theta_{87,V} = \exp(-0.05) \approx 0.95 \]

Interpretación:

La intensidad esperada de gol de Millonarios es aproximadamente 0.95 goles.

Si \(Y_{87,V} \sim \text{Poisson}(0.95)\)

\[ P(Y_{87,V}=1) = 0.95 e^{-0.95} \approx 0.36 \]

¿Cómo interpretar ataque y defensa?

Recordemos:

\[ \log \theta_{g,L} = \text{local} + att_{L(g)} + def_{V(g)} \]

🔴 Ataque positivo
→ aumenta la intensidad de gol del equipo.

🔵 Defensa negativa
→ reduce la intensidad de gol del rival.

📌 Importante:

  • Defensa negativa = buena defensa
  • Defensa positiva = mala defensa

¿Cómo interpretar ataque y defensa?

El modelo combina:

Capacidad ofensiva
+ Debilidad defensiva del rival

El gol esperado es un equilibrio entre quién ataca y quién defiende.

Resultados – Modelo básico

Posterior summary

Parámetro Media IC 90%
local 0.33 (0.22 , 0.44)
σ_att 0.087 (0.01 , 0.18)
σ_def 0.086 (0.01 , 0.17)
σ_u 0.075 (0.006 , 0.18)

Todos los \(\hat R \approx 1\)

Buen ESS → cadenas bien mezcladas.

Ventaja de localía

\[ \text{local_adv} = 0.33 \]

\[ \exp(0.33) \approx 1.39 \]

Interpretación:

El equipo local anota en promedio 39% más goles que si jugara en cancha neutral.

Variabilidad entre equipos

\[ \sigma_{att} = 0.087 \]

\[ \sigma_{def} = 0.086 \]

Ambos muy similares.

No hay diferencias extremas entre equipos (en el modelo básico).

⚠️ Aquí empieza el tema del shrinkage.

¿Qué significa σ pequeño?

Si

\[ att_t \sim \mathcal{N}(0, \sigma_{att}^2)\,\,\,\sigma_{att} = 0.087 \]

Entonces el 95% de ataques están aprox en: \((-0.17, 0.17)\)

En escala de goles:

\[ \exp(0.17) \approx 1.19 \]

Diferencias moderadas entre equipos.

Primer mensaje del modelo

El modelo básico dice:

  • Existe ventaja de localía clara.
  • Los equipos no son tan distintos entre sí.
  • La liga está relativamente equilibrada.

Pero… ¿Esto es real o es shrinkage excesivo?

Ataque vs Defensa (Modelo básico)

Lectura del plano Ataque–Defensa

Pregunta crítica

¿La liga es realmente tan homogénea?

¿O el modelo está suavizando diferencias reales?

¿Qué falla aquí?

Este modelo asume:

  • Ataque/defensa constantes durante toda la temporada
  • Misma “forma” en agosto que en abril
  • No rachas, no cambios tácticos, no lesiones acumuladas

Diagnóstico: buena estructura promedio, mala dinámica.

2) HT / robustificación

Objetivo:

  • reducir sensibilidad a extremos

  • estabilizar estimación sin “aplastar” equipos fuertes/débiles

Ejemplos: priors más robustas, colas pesadas (t), varianzas separadas más realistas.

Modelo jerárquico Poisson-lognormal

\[ Y_{g,L}\sim \text{Poisson}(\theta_{g,L}),\qquad Y_{g,V}\sim \text{Poisson}(\theta_{g,V}) \]

\(\log \theta_{g,L} = \text{local} + att_{L(g)} + def_{V(g)}\) : efectos fijos

\(\log \theta_{g,V} = att_{V(g)} + def_{L(g)}\) : efectos fijos

\(\log \theta_{g,L} = \text{local} + att_{L(g)} + def_{V(g)} + u_g\) : efecto aleatorio

\(\log \theta_{g,V} = att_{V(g)} + def_{L(g)}+ u_g\) : efecto aleatorio

Intensidad de gol (escala log)

\[ Y_{g,L}\sim \text{Poisson}(\theta_{g,L}),\qquad Y_{g,V}\sim \text{Poisson}(\theta_{g,V}) \]

\[ \log \theta_{g,L} = \text{local} + att_{L(g)} + def_{V(g)} + u_g \]

\[ \log \theta_{g,V} = att_{V(g)} + def_{L(g)} + u_g \]

\(u_g\): efecto específico del partido (captura intensidad compartida)

El término (u_g) induce correlación entre goles local y visitante sin usar Poisson bivariada.

Priors robustas (anti-overshrinkage)

\[ att^{std}_t \sim t_3(0,1) \] \[ def^{std}_t \sim t_3(0,1) \]

Centrada en 0 Escala 1 Solo 3 grados de libertad (Var=3)

✔ Permite valores extremos ✔ Reduce overshrinkage ✔ No aplasta equipos muy fuertes

El modelo normal puro tiende a sobre-encoger (overshrinkage), como discuten Baio & Blangiardo

Efecto compartido del partido

\[ u_g \sim \mathcal{N}(0,\sigma_u^2) \]

Captura:

  • Ritmo del partido

  • Clima

  • Árbitro

  • Intensidad táctica

Efecto compartido del partido

\[ u_g \sim \mathcal{N}(0,\sigma_u^2) \]

Induce correlación entre goles local y visitante

Ataque vs Defensa (Modelo básico)

Ataque vs Defensa (Modelo básico)

El fútbol no es estacionario.

El fútbol no es estacionario.

Es un proceso que cambia con el tiempo.

El fútbol no es estacionario.
Es un proceso que cambia con el tiempo.

Por eso, los modelos estáticos se quedan cortos.

4️⃣ Modelo Dinámico RW1

\[ Y_{g,L}\sim \text{Poisson}(\theta_{g,L}),\qquad Y_{g,V}\sim \text{Poisson}(\theta_{g,V}) \]

\(\log \theta_{g,L} = \text{local} + att_{L(g)} + def_{V(g)}\) : Parámetros fijos

Estados latentes dependientes del tiempo.

El modelo dinámico

Ahora definimos:

\[ att_{t,k} \]

\[ def_{t,k} \]

donde:

  • ( t ) = equipo
  • ( k ) = tiempo (fecha, ronda o torneo)

Nivel 1 — Likelihood

Para cada partido ( g ):

\[ Y_{g,L}\sim \text{Poisson}(\theta_{g,L}),\qquad Y_{g,V}\sim \text{Poisson}(\theta_{g,V}) \]

con:

\[ \log \lambda_{g,L} = \alpha + local + att_{L(g),k(g)} + def_{V(g),k(g)} \]

\[ \log \lambda_{g,V}= \alpha + att_{V(g),k(g)} + def_{L(g),k(g)} \]

Nivel 2 — Estado inicial

Para cada equipo:

\[ att_{t,1} \sim Normal(0, \sigma_{att0}^2) \]

\[ def_{t,1} \sim Normal(0, \sigma_{def0}^2) \]

con restricción:

\[ \sum_t att_{t,1} = 0 \,\,\,\, \sum_t def_{t,1} = 0 \]

Nivel 3 — Evolución temporal (Random Walk 1)

Para ( k ):

\[ att_{t,k}= att_{t,k-1} + \epsilon_{t,k} \]

\[ \epsilon_{t,k} \sim Normal(0, \sigma_{att_rw}^2) \]

\[ def_{t,k}= def_{t,k-1} + \xi_{t,k} \]

\[ \xi_{t,k} \sim Normal(0, \sigma_{def_rw}^2) \]

¿Qué significa esto?

El mejor predictor del ataque mañana es el ataque hoy.

El cambio es suave.

No hay regresión a la media.

Es un proceso tipo caminata aleatoria.

Nivel 4 — Parámetros g,Lobales

\[ \alpha \sim Normal(0,1.5^2) \]

\[ local \sim Normal(0,0.7^2) \]

\[ \sigma_{att0} \sim Exponential(1) \]

\[ \sigma_{def0} \sim Exponential(1) \]

\[ \sigma_{att_rw} \sim Exponential(2) \]

\[ \sigma_{def_rw} \sim Exponential(2) \]

¿Qué cambia en la posterior?

En el modelo estático tenemos: \(p(att_t \mid Y)\)

Un solo ataque por equipo.

\(p(att_{t,k} \mid Y)\) para cada equipo y cada tiempo: La distribución posterior del estado latente dado toda la temporada.

Plano Ataque vs Defensa (Dinámico)

Conclusión

  • El fútbol puede modelarse como proceso estocástico dinámico.

  • El enfoque Bayesiano permite cuantificar incertidumbre real.

  • La evolución ataque–defensa revela estructura latente.

Referencias

Baio, G., & Blangiardo, M. (2010). Bayesian hierarchical model for the prediction of football results. Journal of Applied Statistics, 37(2), 253–264. https://doi.org/10.1080/02664760802684177

Dixon, M. J., & Coles, S. G. (1997). Modelling association football scores and inefficiencies in the football betting market. Journal of the Royal Statistical Society: Series C (Applied Statistics), 46(2), 265–280.

Gelman, A., Carlin, J., Stern, H., Dunson, D., Vehtari, A., & Rubin, D. (2013). Bayesian data analysis (3rd ed.). CRC Press.

Referencias

Stan Development Team. (2023). Stan modeling language users guide and reference manual.

Vehtari, A., Gelman, A., & Gabry, J. (2017). Practical Bayesian model evaluation using leave-one-out cross-validation and WAIC. Statistics and Computing, 27(5), 1413–1432.

Más contenido aquí 👇

🌐 https://dannacruz.github.io/bayesiana/