← Todos los artículos
· 2 min de lectura

Sports Performance Engine: predecir fútbol con datos StatsBomb y un ensemble LightGBM+XGBoost

El fútbol es ruidoso: gana el peor equipo más de lo que la gente cree. Con datos StatsBomb, features rolling y un ensemble LightGBM+XGBoost validado con TimeSeriesSplit, modelé rendimiento y resultados con explicabilidad SHAP.

#Machine Learning#Deportes#LightGBM#XGBoost#SHAP
Sports Performance Engine: predecir fútbol con datos StatsBomb y un ensemble LightGBM+XGBoost

El fútbol es uno de los deportes más difíciles de predecir: tiene pocos goles, mucho azar y un equipo inferior gana con sorprendente frecuencia. Eso lo convierte en un banco de pruebas honesto para el machine learning, porque no puedes esconderte detrás de métricas infladas.

Los datos: StatsBomb

Usé los datos abiertos de StatsBomb (vía statsbombpy), que van mucho más allá del marcador: eventos por partido, posición de cada acción, expected goals (xG), presiones, pases progresivos. Cuando faltaban datos, completé con un generador sintético calibrado de partidos de LaLiga y Champions, hasta unos 3.200 partidos analizados.

Feature engineering: el corazón del proyecto

El modelo no mira un partido aislado, sino la forma reciente de cada equipo. Construí features rolling: medias móviles de xG a favor y en contra, de presiones, de rendimiento, en ventanas de los últimos N partidos. Esto captura "este equipo llega en racha" sin que el modelo haga trampa mirando el futuro.

Validación: TimeSeriesSplit, no K-Fold

Este es el error más común en ML deportivo y financiero: usar validación cruzada aleatoria. Si entrenas con partidos de mayo y validas con partidos de enero, estás filtrando el futuro. Usé TimeSeriesSplit (división temporal 70/15/15), de modo que el modelo siempre se evalúa sobre partidos posteriores a los de entrenamiento.

El modelo: ensemble + Optuna

Combiné LightGBM y XGBoost en un ensemble —dos implementaciones de gradient boosting con sesgos ligeramente distintos cuyas predicciones promediadas generalizan mejor— con hiperparámetros buscados por Optuna (30+25 trials).

Resultados

Qué aprendí

Que un AUC de 0.71 honesto vale más que un 0.95 fruto de fugas de datos. La integridad de la validación temporal es lo que separa un modelo que funciona en producción de uno que solo brilla en el notebook.

Sobre este proyecto

Sports Performance Engine

Motor de análisis de rendimiento deportivo con LightGBM + XGBoost sobre datos StatsBomb. Predice resultados LaLiga y Champions, calcula xG, presiones e índice de rendimiento con SH...

Sigue leyendo