/ receipts / every-international-since-1872
Dataset · EP 02

Every international football match since 1872

49,477 full internationals — from Scotland 0–0 England in 1872 to the 2026 World Cup group stage — one row per match, free under CC0.

What it is

The raw input behind EP 02 is the community-maintained international football results dataset (martj42/international_results), released under CC0 1.0 — public domain, take it and do what you want. It covers full internationals only: no Olympic sides, no youth or B teams. Our snapshot is the exact one the episode's engine was built on — played matches through 2026-06-21, mid group stage, with later fixtures appearing as null scores. For results updated after every matchday, grab the live results.csv from the upstream repo.

What's actually in it

The core table, results (parquet 0.4 MB, CSV 3.6 MB), is one row per match: date, home_team, away_team, home_score, away_score, tournament, city, country, neutral. Everything else is what our engine derives from it: enriched — every match since 2008 with the pre-match Elo of both sides (eh, ea) and the result, the table every model in the episode was trained and tested on; current-elo — the running Elo for every national team; current-ad — per-team attack/defense log-rate ratings feeding two Poisson scoring rates; and calibration_truth — empirical win/draw/loss rates bucketed by Elo gap, the ground truth every model gets graded against.

What the show found in it

That attack/defense table is the episode's champion engine. Out of sample, its log-loss is 0.8703 against 0.8783 for the Elo-gap baseline — the margin that separates the math from the vibes when a semifinal is on the line. The full bracket machine it powers, and the match where it met the lucky hat, are on the episode receipts page.

Query it yourself

DuckDB reads parquet straight off the URL — no download needed. How often does the higher-Elo side actually win a decisive match?

SELECT round(100.0*avg(((eh > ea) = (result='H'))::int),1) AS fav_won_pct
FROM read_parquet('https://data.mathvsvibes.com/wc/enriched.parquet')
WHERE result <> 'D' AND neutral;
Download the data Upstream: martj42/international_results
This post covers just the headline dataset. The full file list — sizes, columns, and the Python one-liner — is on the warehouse page at /data/ep-02/. The rest of the blog lives at /receipts/.

Dataset post · dataset published 2026-07-08, posted 2026-08-06. The first match on record was a nil-nil draw. The dataset peaked early.