Sobre el proyecto
MMA Fight Prediction es un proyecto de investigación y servicio en Python que pronostica los ganadores de peleas de UFC, el método de victoria y el round de finalización. Combina un sistema de calificaciones Elo, un conjunto de gradient boosting (XGBoost), un conjunto de red neuronal multitarea y una combinación de peso igual de los dos que es el puntuador desplegado. Cada candidato es evaluado mediante una validación walk-forward de ventana en expansión entre 2018 y 2026, y el puntuador ganador se calibra con una temperatura ajustada en datos de retención después del promedio de la combinación.
Pipeline reproducible
El quickstart crea un entorno virtual, instala el paquete con extras de desarrollo y luego ejecuta cuatro scripts en orden: download_data.py (conjunto de datos de UFC de Kaggle en data/raw/), make_dataset.py (parquet limpio en data/processed/), build_ratings.py (ajuste y construcción de calificaciones Elo), seguido de pytest. Una aplicación Streamlit (streamlit run app.py) permite a un usuario elegir cualquier par de luchadores y devuelve la probabilidad de victoria con incertidumbre, tendencias de método y round de finalización, y un desglose de los factores contribuyentes más importantes. Un objetivo documentado es la reproducibilidad byte a byte de todo el pipeline.
Ingeniería de características y control de fugas
Las características se ensamblan a partir de bloques nombrados (base, external, trajectory, notice, context, opponent_adjusted) en src/mma/feature_blocks.py, produciendo una tabla de aproximadamente 11 000 peleas por 87 columnas. Las características se construyen dentro de acumuladores cronológicos de modo que cada valor sea estrictamente previo a la pelea, y se utiliza una prueba de invariancia por truncación para verificar que ninguna característica pueda ver el futuro. Los bloques se midieron frente a una barra de precisión pre‑registrada: uno (external, que cubre datos de carrera previa a UFC) la superó por sí mismo, mientras que los demás solo se incluyen como parte de la tabla sobre la que se puntúa la combinación, o no se incluyen en absoluto. El proyecto documenta una fuga de selección encontrada en las banderas de falta de datos por esquina, que se eliminó de ambas matrices de modelo mientras se mantuvo en la tabla para las slices de evaluación. Varias columnas se excluyen explícitamente de las entradas del modelo como guardias contra fugas, y un archivo lateral de provenance registra, por fila, si proviene de la fuente primaria o secundaria.
Fuentes de datos
Los registros se forman como la unión de un espejo mantenido de Kaggle (la fuente primaria, reconciliada) y la publicación CSV Greco1899/scrape_ufc_stats (usada estrictamente como datos, obtenida mediante HTTPS, sin código con licencia GPL vendado). En peleas superpuestas gana la fila primaria; la fusión está condicionada al acuerdo del ganador entre fuentes y es fail‑soft, degradándose a una construcción solo primaria con una advertencia. El repositorio informa de provenance, verificaciones de integridad y guardias de regresión alrededor de esta fusión.
Actualización automática y evaluación prospectiva
Una Acción de GitHub semanal refresca el conjunto de datos y reconstruye los artefactos, comprometendiéndolos automáticamente. Los eventos próximos de UFC se predicen y se comprometen a git antes de que ocurran y se califican después, proporcionando un historial prospectivo en lugar de solo reportes retrospectivos. Los informes de harness para bloques de características rechazados y los archivos de decisión de experimento pre‑registrado se comprometen bajo models/walkforward/, de modo que se conservan los resultados negativos.
El proyecto está escrito en Python (3.10+) y se publica bajo la licencia MIT. Los documentos de diseño y plan de fase se encuentran bajo docs/.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.