WC2026 Control Centre
Monte Carlo Simulation - ELO Ratings - ML Prediction
A full-stack World Cup 2026 prediction control centre that ingests international football data, rates every team with ELO, and simulates the 48-team tournament with Monte Carlo to produce match and progression probabilities.
Problem
Predicting one match is a classification problem. Predicting how a 48-team tournament unfolds is a simulation problem, and the two need different things from a model.
Approach
Rate every team with ELO on three horizons (full history, 10-year, 5-year), add form and head-to-head, and model fixture outcomes. Those probabilities then feed a Monte Carlo simulation of the full bracket, run thousands of times, to produce progression odds. MLflow tracks model versions; APScheduler keeps the ingestion current.
Trade-off
I chose logistic regression over XGBoost and an ensemble, despite the ensemble scoring marginally better on raw accuracy. Logistic regression gave better draw recall (30%) and better-calibrated probabilities, and calibration is what matters here: a small systematic bias compounds across thousands of simulations, while a fractional accuracy gain does not.
Architecture
Python/FastAPI backend hosted on Modal ingests free international results into MongoDB, computing full-history plus rolling 10-year and 5-year ELO ratings, team form, and head-to-head snapshots. A scikit-learn/XGBoost pipeline models fixture outcomes, feeding a Monte Carlo simulation of the full bracket, with MLflow for model tracking and APScheduler for refreshes, all surfaced through a React/TypeScript/Vite control-centre dashboard.
Results
Match and progression probabilities across the whole bracket, served from a Modal-hosted FastAPI backend into a React control centre. A reminder that the right model depends on how the output gets consumed, not on which one wins the leaderboard.
Highlights
- ELO engine (full / 10y / 5y)
- Monte Carlo tournament simulation
- Modal-hosted ingestion pipeline
Technologies
- React
- TypeScript
- Vite
- FastAPI
- MongoDB
- Modal
- Scikit-learn
- XGBoost
- MLflow
Screenshots



