Methods, evidence, limits

How the numbers are made.

A source-backed reference for editors checking how the forecast was fitted, what information it could see, how the tournament was simulated, and how the published record was scored.

FIG. 01 The model

A scoreline model, judged out of sample

The machinery matters; the decisions about what not to add matter just as much.

The forecast begins with a Bayesian scoreline model in the Dixon–Coles family, fitted with ADVI variational inference on 49k+ international results. Team attack and defence priors are anchored to point-in-time Elo strength, and host advantage is represented explicitly.

Additions are configuration-gated and must prove that switching them off restores the previous behavior byte for byte. Adoption is decided from pre-registered, held-out evidence. A negative result is published as a result, not hidden as a failed experiment. The full record is in the repository’s empirical decision log.

Model decisions recorded in the project README.
Candidate Verdict Evidence
Elo-anchored strength prior (k=0.6) Adopted Held-out RPS, n=2,111.
Host advantage (host_k=1.4) Adopted MLE on n=873 finals-tier host games; 95% CI [1.18, 1.64].
Altitude covariate No lift Committed altitude report.
Club-Elo squad anchor (k_squad) No lift Pooled support 0.0% on 113 held-out tournament matches.
Friendly tier down-weighting No lift Flat RPS across the weight grid.
Scoreline tails in mismatches Open finding Top-decile ratios 0.73–0.87; correction specified, not shipped. Committed tails report.

FIG. 02 Point-in-time discipline

The model cannot learn tomorrow’s result today

Point-in-time is a storage rule, a training rule, and a testable invariant.

Results live in a bitemporal store: one clock records when an event was valid, and another records when the system actually observed it. A read at a cutoff exposes a row only when both clocks say it was knowable then.

All downstream features and fits use the same cutoff. Training data is strictly before it—date < cutoff_day—and later corrections cannot silently rewrite an earlier forecast.

“a canary that cannot fail is treated as a bug.” README · How it works
  • observed_at <= cutoff Was the information in the system by then?
  • valid_as_of <= cutoff Did the information describe a state valid by then?
  • positive control Each leakage canary is paired with an injected leak that must trip it, proving the alarm is capable of failing.

FIG. 03 The tournament simulation

The bracket is simulated, not approximated away

The scoreline posterior is carried through the actual competition shape.

Each published tournament forecast aggregates 20,000 seeded Monte Carlo draws. Every draw samples match scorelines, ranks the groups, assigns the qualifying third-placed teams, and resolves the real 48-team bracket through the final. Results already known at the cutoff are fixed; only the future is simulated.

The simulator is format-aware. The frozen WC-2026 path uses the FIFA tiebreak order and bracket assignment; the AC-2027 format supplies its own AFC tiebreak order, advancement shape, hosts, and assignment table. The rules are encoded from the official regulations described in the committed tournament-format document.

The same document records the deliberate approximations: seeded stand-ins are used for criteria such as cards, drawing of lots, and the applicable penalty tail when the source data cannot model them directly. Those limits are part of the method, not implementation details left out of the claim.

FIG. 04 Scoring

A probability forecast gets a probability score

The scorecard reports both forecast quality and the simpler question of whether the most likely outcome happened.

RPS, or ranked probability score, evaluates the probability assigned across the three ordered outcomes—home win, draw, away win—rather than treating the forecast as a single pick. Lower is better. Because the full distribution is scored, it punishes confident wrongness more heavily than a cautious miss.

A modal hit means the outcome with the model’s highest 1X2 probability was the outcome that occurred. In the committed scorecard, knockout scores include extra time; a match decided by a shootout is scored as a draw.

Group stage 46/72

modal hits · mean RPS 0.157

All knockout 25/32

modal hits · mean RPS 0.153

Read the full committed scorecard

DISCLOSURE — not a figure

What it does not claim

Over the full 104-match replay, the model and a plain Elo baseline are statistically tied—0.1561 against 0.1557. It was ahead through the group stage as played live—0.157 against 0.163—and the two converged across the knockouts. Both numbers are published because a forecaster that only reports its good window is not a forecaster.

It has no demonstrated edge against sharp betting markets. The project’s own audit records a tie there too. Nothing here is betting advice, and nothing on this site is sold as one.

Read the committed headroom audit

FIG. 05 Reproducibility

The evidence is committed with the code

A rerun should either reproduce the state or explain exactly why its inputs differ.

Posterior fits and tournament simulations use content-addressed caches: their keys incorporate the inputs that can change an output, so a changed configuration, dataset, bracket, seed, or code state becomes a clean cache miss rather than a stale result.

Golden-hash oracle

The frozen WC-2026 path is checked against committed hashes from a seeded real-bracket simulation, not inferred from a generally green suite.

Approximately 900 tests

The suite includes leakage canaries with positive controls, model and simulation checks, and publication guards.

Open repository

Source, configurations, specifications, diagnostics, negative findings, and the final scorecard are available for inspection.