Documentación de modelos
Ficha de modelos predictivos
Qué hace cada modelo, qué datos usa y cómo interpretar sus métricas.
Modelos registrados
9
9 con datos en la tabla
Predicciones evaluables
107.017
115.784 registros historicos ·
15.976 partidos base
Mejor acierto
Ensemble selectivo
76,77%
Última predicción
24/08/2026 08:51
Según `porcentajes_victoria.calculado_en`
Tabla general
9 modelos registrados. Pulsa un modelo para abrir su ficha técnica y sus datos actuales.
Todos
Vista general
01
Elo básico
02
Reg. logística + Elo
03
Naive Bayes + Elo
04
Naive Bayes + stats
05
Ensemble jugadores
06
Ensemble calibrado
07
Ensemble selectivo
08
Comité especialistas
09
Modelo margen
| Modelo | Tipo | Objetivo | Evaluables | Cobertura | Acierto | Última | |
|---|---|---|---|---|---|---|---|
| Elo básico 01_elo_basico | Elo | Crear una probabilidad base usando fuerza historica de equipos. | 15.927 49 neutras | 100,00% útil 99,69% | 62,55% | 24/08/2026 08:26 | Ver |
| Reg. logística + Elo 02_regresion_logistica_elo | Regresión logística | Mejorar Elo aprendiendo pesos estadisticos sobre variables dinamicas. | 12.976 3.000 sin pred. histórica | 81,22% útil 100,00% | 63,98% | 24/08/2026 08:26 | Ver |
| Naive Bayes + Elo 03_naive_bayes_elo | Naive Bayes | Probar un clasificador probabilistico simple con señales Elo. | 12.976 3.000 sin pred. histórica | 81,22% útil 100,00% | 62,48% | 24/08/2026 08:26 | Ver |
| Naive Bayes + stats 04_naive_bayes_stats | Naive Bayes + stats | Añadir estadisticas recientes de equipo al enfoque Naive Bayes. | 12.976 3.000 sin pred. histórica | 81,22% útil 100,00% | 62,57% | 24/08/2026 08:26 | Ver |
| Ensemble jugadores 05_ensemble_jugadores | Ensemble | Combinar Elo, forma de equipo y perfiles rolling de jugadores. | 12.975 1 neutras 3.000 sin pred. histórica | 81,22% útil 99,99% | 63,53% | 24/08/2026 08:29 | Ver |
| Ensemble calibrado 06_ensemble_calibrado | Ensemble calibrado | Mejorar la calibracion de probabilidades del ensemble. | 11.976 4.000 sin pred. histórica | 74,96% útil 100,00% | 63,83% | 24/08/2026 08:33 | Ver |
| Ensemble selectivo 07_ensemble_selectivo | Ensemble selectivo | Subir el porcentaje de acierto seleccionando solo predicciones de alta confianza. | 3.259 8.717 neutras 4.000 sin pred. histórica | 74,96% útil 27,21% | 76,77% | 24/08/2026 08:39 | Ver |
| Comité especialistas 08_comite_especialistas | Comité de especialistas | Mejorar el acierto usando un experto distinto según el tipo de partido. | 11.976 4.000 sin pred. histórica | 74,96% útil 100,00% | 63,37% | 24/08/2026 08:48 | Ver |
| Modelo margen 09_modelo_margen_puntos | Modelo de margen | Predecir diferencia de puntos y convertirla en probabilidad de victoria. | 11.976 4.000 sin pred. histórica | 74,96% útil 100,00% | 65,03% | 24/08/2026 08:51 | Ver |
Ensemble selectivo
07_ensemble_selectivo
Qué hace
Modelo selectivo: no intenta pronosticar todos los partidos como apuesta fuerte. Parte del 05, añade mercado cuando hay cuotas y aprende un umbral de confianza; si no lo supera escribe 50/50.
Resumen de datos que usa
- Features completas del 05
- Cuotas moneyline, spread y total si existen
- Probabilidad implícita del mercado
- Diferencia mercado vs Elo
- Umbral mínimo de confianza
Idea central
- Nace para mejorar el porcentaje de acierto sin obligarse a apostar todos los partidos.
- Calcula una probabilidad cruda y mide la confianza del ganador como
max(prob_local, prob_visitante). - Si la confianza no alcanza el umbral aprendido, reemplaza la predicción por 50/50.
- Los 50/50 quedan fuera del ranking de acierto evaluable porque no hay favorito claro.
Features heredadas del 05
- Elo previo local/visitante y diferenciales.
- Descanso, back-to-back y contexto de calendario.
- Forma rolling de equipo a 10 partidos.
- Perfiles rolling de jugadores, top 8 y profundidad.
- Plantillas actuales y exclusión de lesionados para futuros.
Features de cuotas
odds_available: indica si el partido tiene cuota válida.moneyline_localymoneyline_visitante.market_prob_localymarket_prob_visitante, normalizadas quitando overround.market_prob_diff,market_favorite_local,market_confidenceymarket_overround.spread_local,spread_visitanteytotal_puntoscuando existen.elo_prob_local_proxy,diff_market_elo_probyabs_diff_market_elo_probpara comparar mercado contra Elo.
Selección de umbral
- Prueba umbrales de confianza de 0.50 a 0.90.
- Exige cobertura mínima configurable, actualmente 25%.
- Optimiza acierto seleccionado con una pequeña prima por cobertura para no quedarse con muy pocos partidos.
- En producción guarda el umbral dentro del bundle
ensemble_selectivo.pkl.
Candidatos entrenados
- Regresión logística selectiva.
- HistGradientBoosting selectivo.
- ExtraTrees selectivo.
- RandomForest selectivo.
- Selecciona por rendimiento en calibración de predicciones seleccionadas.
Cómo leer sus números
- Acierto global al 0.5 mide el modelo crudo en todos los partidos.
- Acierto seleccionado mide solo los partidos que superan el umbral.
- Cobertura seleccionada indica qué porcentaje de partidos se atreve a pronosticar.
- No es justo compararlo con el 05 solo por acierto si no se mira también cobertura.
Riesgos de contaminación
- Las cuotas históricas solo son válidas si representan una cuota conocida antes del partido.
- Si se cargan cuotas posteriores o cierre de mercado sin timestamp prepartido, el modelo puede estar viendo información futura.
- La feature
odds_availableayuda a no eliminar partidos sin cuota, pero no arregla una cuota contaminada. - El backtest walk-forward reduce contaminación de entrenamiento, pero depende de que los datos fuente estén fechados correctamente.
Validación resumida
Backtest walk-forward: entrena, calibra el umbral y prueba por ventanas temporales.
Salida resumida
Menos predicciones, pero con mayor acierto en las seleccionadas.
Riesgo o lectura resumida
No debe compararse por cobertura con modelos que predicen todo. Las cuotas historicas solo son limpias si proceden de snapshots prepartido.
Tablas implicadas
- Todas las del 05
- cuota_partidos
- porcentajes_victoria
Ficheros y responsabilidad
-
01_python/03_modelos/07_ensemble_selectivo/modeling.py
Features de cuotas, candidatos y lógica selectiva. -
01_python/03_modelos/07_ensemble_selectivo/01_train.py
Entrena el 07 y selecciona umbral de confianza. -
01_python/03_modelos/07_ensemble_selectivo/03_backtest.py
Backtest walk-forward OOF y escritura de predicciones 50/50 cuando no selecciona. -
01_python/03_modelos/07_ensemble_selectivo/02_apply_future.py
Aplica el 07 a futuros con cuotas y lesiones.
Features técnicas del JSON de entrenamiento
Numéricas (121)
diff_eloabs_diff_elorest_localrest_visitantediff_restb2b_localb2b_visitanteplayers_player_known_count_localplayers_player_known_count_visitantediff_players_player_known_countplayers_player_roster_count_localplayers_player_roster_count_visitantediff_players_player_roster_countplayers_player_top8_minutes_localplayers_player_top8_minutes_visitantediff_players_player_top8_minutesplayers_player_top8_value_localplayers_player_top8_value_visitantediff_players_player_top8_valueplayers_player_top8_points_localplayers_player_top8_points_visitantediff_players_player_top8_pointsplayers_player_top8_reb_localplayers_player_top8_reb_visitantediff_players_player_top8_rebplayers_player_top8_ast_localplayers_player_top8_ast_visitantediff_players_player_top8_astplayers_player_top8_stocks_localplayers_player_top8_stocks_visitantediff_players_player_top8_stocksplayers_player_top8_tov_localplayers_player_top8_tov_visitantediff_players_player_top8_tovplayers_player_top8_ts_localplayers_player_top8_ts_visitantediff_players_player_top8_tsplayers_player_top8_efg_localplayers_player_top8_efg_visitantediff_players_player_top8_efgplayers_player_top8_usage_localplayers_player_top8_usage_visitantediff_players_player_top8_usageplayers_player_top8_net_localplayers_player_top8_net_visitantediff_players_player_top8_netplayers_player_top8_pm_localplayers_player_top8_pm_visitantediff_players_player_top8_pmplayers_player_top8_pie_localplayers_player_top8_pie_visitantediff_players_player_top8_pieplayers_player_depth_value_localplayers_player_depth_value_visitantediff_players_player_depth_valueplayers_player_depth_minutes_localplayers_player_depth_minutes_visitantediff_players_player_depth_minutesteam_win_rate_10_localteam_win_rate_10_visitantediff_team_win_rate_10team_margin_10_localteam_margin_10_visitantediff_team_margin_10team_points_for_10_localteam_points_for_10_visitantediff_team_points_for_10team_points_against_10_localteam_points_against_10_visitantediff_team_points_against_10team_team_fg_pct_10_localteam_team_fg_pct_10_visitantediff_team_team_fg_pct_10team_team_tp_pct_10_localteam_team_tp_pct_10_visitantediff_team_team_tp_pct_10team_team_ft_pct_10_localteam_team_ft_pct_10_visitantediff_team_team_ft_pct_10team_team_reb_10_localteam_team_reb_10_visitantediff_team_team_reb_10team_team_ast_10_localteam_team_ast_10_visitantediff_team_team_ast_10team_team_tov_10_localteam_team_tov_10_visitantediff_team_team_tov_10team_team_net_rating_10_localteam_team_net_rating_10_visitantediff_team_team_net_rating_10team_team_efg_10_localteam_team_efg_10_visitantediff_team_team_efg_10team_team_ts_10_localteam_team_ts_10_visitantediff_team_team_ts_10team_team_pace_10_localteam_team_pace_10_visitantediff_team_team_pace_10team_team_possessions_10_localteam_team_possessions_10_visitantediff_team_team_possessions_10team_team_pie_10_localteam_team_pie_10_visitantediff_team_team_pie_10odds_availablemoneyline_localmoneyline_visitantemarket_prob_localmarket_prob_visitantemarket_prob_diffmarket_favorite_localmarket_confidencemarket_overroundspread_localspread_visitantetotal_puntoselo_prob_local_proxydiff_market_elo_probabs_diff_market_elo_prob
Categóricas (4)
tipo_partidoliga_idequipo_local_idequipo_visitante_id
Acierto
76,77%
Evaluables
3.259
Aciertos
2.502
Fallos
757
Cobertura histórica
74,96%
Cobertura útil
27,21%
Neutras 50/50
8.717
Sin pred. histórica
4.000
Omitidos OOF
4.000
Temporadas
21
Ligas
3
Periodo
03/12/2019 01:00
22/05/2026 15:00
22/05/2026 15:00
Última predicción
24/08/2026 08:39
Métricas de entrenamiento
Modelo JSON
07_ensemble_selectivo
Candidato seleccionado
logistic_selectiva
Total dataset
15.976
Train
10.864
Calibración
1.917
Test
3.195
Nombre candidato
logistic_selectiva
Accuracy calibración @0.5
66,04%
Umbral confianza calibración
0.76
Seleccionadas calibración
499
Cobertura calibración
26,03%
Acierto seleccionado calibración
82,77%
Accuracy test global @0.5
66,79%
Umbral confianza test
0.76
Seleccionadas test
846
Cobertura test
26,48%
Acierto seleccionado test
81,21%
Brier test
0,2112
LogLoss test
0,6098
ROC AUC test
0,7125
Train producción
14.059
Calibración producción
1.917
Umbral producción
0.76
Calibración desde
2025-06-11 04:00:00
Calibración hasta
2026-06-14 00:30:00
Partidos con cuotas
5.500
Cobertura cuotas
34,43%
Cuotas en test
2.278
Walk-forward / OOF
Modelo OOF
07_ensemble_selectivo
Candidato OOF
logistic_selectiva
Dataset total
15.976
Partidos backtest
11.976
Sin predicción OOF
4.000
Folds
10
Min train
3.000
Tamaño calibración
1.000
Tamaño fold
1.200
OOF accuracy global @0.5
63,66%
OOF Brier global
0,2230
OOF LogLoss global
0,6369
OOF ROC AUC global
0,6770
OOF seleccionadas
3.259
OOF cobertura seleccionada
27,21%
OOF acierto seleccionado
76,77%
OOF Brier seleccionadas
0,1775