Contraste de las predicciones de los dos modelos contra los resultados reales de los 72 partidos de la fase de grupos. Los modelos predijeron los 48 partidos jugados del 18 al 27 de junio (los 24 del 11-17 de junio ya estaban jugados antes del primer refresh). Actualizado al 28 de junio — fase de grupos completa.
@vega-lite
{"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "width": "container", "height": 280, "background": "transparent",
"data": {"values": [
{"fecha": "18 jun", "modelo": "XGBoost", "pct": 75.0},
{"fecha": "18 jun", "modelo": "Bayesiano", "pct": 75.0},
{"fecha": "19 jun", "modelo": "XGBoost", "pct": 50.0},
{"fecha": "19 jun", "modelo": "Bayesiano", "pct": 50.0},
{"fecha": "20 jun", "modelo": "XGBoost", "pct": 75.0},
{"fecha": "20 jun", "modelo": "Bayesiano", "pct": 75.0},
{"fecha": "21 jun", "modelo": "XGBoost", "pct": 50.0},
{"fecha": "21 jun", "modelo": "Bayesiano", "pct": 50.0},
{"fecha": "22 jun", "modelo": "XGBoost", "pct": 75.0},
{"fecha": "22 jun", "modelo": "Bayesiano", "pct": 100.0},
{"fecha": "23 jun", "modelo": "XGBoost", "pct": 75.0},
{"fecha": "23 jun", "modelo": "Bayesiano", "pct": 75.0},
{"fecha": "24 jun", "modelo": "XGBoost", "pct": 50.0},
{"fecha": "24 jun", "modelo": "Bayesiano", "pct": 66.7},
{"fecha": "25 jun", "modelo": "XGBoost", "pct": 33.3},
{"fecha": "25 jun", "modelo": "Bayesiano", "pct": 33.3},
{"fecha": "26 jun", "modelo": "XGBoost", "pct": 66.7},
{"fecha": "26 jun", "modelo": "Bayesiano", "pct": 83.3},
{"fecha": "27 jun", "modelo": "XGBoost", "pct": 66.7},
{"fecha": "27 jun", "modelo": "Bayesiano", "pct": 50.0}
]},
"mark": {"type": "line", "point": true},
"encoding": {
"x": {"field": "fecha", "type": "nominal", "title": null, "axis": {"labelColor": "#d4d4c8", "labelAngle": -30}},
"y": {"field": "pct", "type": "quantitative", "title": "Aciertos (%)", "scale": {"domain": [0, 105]}, "axis": {"labelColor": "#d4d4c8", "titleColor": "#d4d4c8", "gridColor": "#2a2a26"}},
"color": {"field": "modelo", "scale": {"range": ["#7dd3fc", "#86efac"]}, "legend": {"labelColor": "#d4d4c8", "titleColor": "#d4d4c8"}},
"tooltip": [{"field": "fecha", "title": "Jornada"}, {"field": "modelo"}, {"field": "pct", "title": "%", "format": ".1f"}]
},
"config": {"view": {"stroke": null}, "background": "transparent", "axis": {"domainColor": "#2a2a26"}}}
El 25 de junio fue el día más difícil: jornadas decisivas de los grupos D, E y F con empates y eliminaciones por diferencia de gol que los modelos no anticiparon. El 22 de junio fue el mejor día del bayesiano: acertó los 4 partidos (incluyendo Noruega, donde el XGBoost falló).
✅ = pick correcto · ❌ = fallo · — = sin predicción disponible (partidos previos al primer refresh del modelo)
Los 24 partidos del 11-17 de junio (Jornada 1 y parte de la J2) se jugaron antes de que el pipeline de refresh fuera activado en esta sesión de seguimiento. Las predicciones del 18 al 27 de junio provienen del modelo XGBoost (pesos fijados pre-torneo, estado dinámico Elo/forma actualizado partido a partido) y del bayesiano jerárquico (reentrenado después de cada bloque de resultados con ~20 s de NUTS en CPU). El pick es el resultado con mayor probabilidad según cada modelo.