World Cup 2026 Analytics
Archived · final played 19 Jul 2026

World Cup 2026 Prediction Engine

An end-to-end analytics pipeline — Python ETL → Supabase → Next.js — that published Dixon–Coles model probabilities alongside live market odds for all 104 matches of the tournament. Now preserved as a project archive.

Experimental model. Shown alongside market odds for comparison only — not betting advice.

How the model did

Model (experimental)
Pick accuracy: 45/72 (63%)
Brier: 0.545
Market (de-vig)
Pick accuracy: 48/72 (67%)
Brier: 0.484

72 group-stage matches, scored with the frozen pre-tournament model (dc-v1.1) against Pinnacle de-vig. Pick accuracy = how often each side's most-likely 1X2 outcome matched the result; Brier = mean squared error of the full probabilities (lower is better).

See the full match-by-match track record

How it's built

Python ETL

Fail-loud ingestion + modelling jobs. Idempotent upserts, provenance on every row, raises rather than silently approximating.

Supabase (Postgres)

The single source of truth. The service key stays server-side only; the frontend is strictly read-only.

Next.js + Tailwind

App Router, bilingual with next-intl (zh-TW / en). Data flows through a server-side API with graceful empty states.

  • World Football Elo ratings feed a fitted Dixon–Coles Poisson model for 1X2, over/under and both-teams-to-score.
  • Monte Carlo simulations drive group advancement odds and, via FIFA's Annex C mapping, full-bracket knockout and champion odds.
  • Pinnacle odds are de-vigged into a fair-probability benchmark, powering a model-free EV / quarter-Kelly calculator.

Explore the site

Engineering highlights

  • Fail-loud ETL: mismatched team names, missing fields or count mismatches raise instead of silently approximating, and every job is an idempotent upsert with provenance.
  • Ran live through all 104 matches, with a scheduled recompute every 2 hours auto-ingesting results and re-predicting the next round.
  • Mid-tournament model refit (dc-v1.2) behind an anti-leakage validation gate — in-play Elo snapshots only, no look-ahead.
  • Bilingual UI with message-key parity enforced by tests, so the two locales can never drift out of sync.
  • Credentials stay server-side: the service key never reaches the browser, which only ever reads through a server API.

Data provenance

Odds and simulations are frozen at the final (19 Jul 2026); the site is preserved as an archive.

Elo as of
May 26, 2026
Final odds snapshot
Jul 19, 2026
Last simulation run
Jul 19, 2026