Skip to content
Selected work

World Cup 2026 Analytics

Match modelling and tournament simulation

Per-match predictions can't answer the question people actually ask: who wins the whole tournament?

Context
Data & ML
Stack
Python · XGBoost · xG modelling · Monte Carlo · DRF · React

The problem

A single match prediction says very little about a tournament. Knockout structure means one upset early cascades through every downstream fixture, so per-match accuracy doesn't answer the question people actually ask: who is likely to win the whole thing?

What I built

An XGBoost model over expected-goals features predicts individual fixtures, then Monte Carlo simulation replays the full bracket thousands of times to turn those per-match probabilities into tournament-level outcomes. Served through a Django REST Framework API with a React front end.

How it fits together

  1. Match historyexpected-goals features per fixture
  2. XGBoostprobability for one match
  3. Monte Carlothe full bracket, replayed thousands of times
  4. Tournament oddswho is actually likely to lift it
  5. DRF + Reactserved through an API to the front end
Pipeline: expected-goals features drawn from match history train an XGBoost model that predicts a single fixture, Monte Carlo simulation replays the whole bracket thousands of times to turn those per-match probabilities into tournament-level odds, and the result is served through a Django REST Framework API to a React front end.