MATH vs. VIBES / data / ep-02

EP 02 — World Cup

Every international football match since 1872, plus the ratings our bracket engine actually runs on. Take it, break it, prove us wrong.

The raw input is the community-maintained international football results dataset (martj42/international_results): 49,477 full internationals from the first ever match (Scotland 0–0 England, 1872) onward, with date, teams, score, tournament, venue, and a neutral-ground flag. On top of it we publish everything our EP 02 engine derives: the Elo-enriched training table, the running Elo snapshot, and the attack/defense ratings that power the bracket machine.

This is the exact snapshot the episode's engine was built on (played matches through 2026-06-21, mid group stage — later fixtures appear with null scores). For results updated after every matchday, grab the live results.csv from the upstream repo.

Download

results.parquetall matches 1872–2026 · 0.4 MB results.csvsame, as CSV · 3.6 MB enriched.parquet2008+ w/ pre-match Elo · 0.15 MB current-elo.jsonrunning Elo, all teams · 19 KB current-ad.jsonattack/defense ratings · 47 KB calibration_truth.jsonW/D/L truth by Elo gap · 4 KB

What's in each file

results — one row per match: date, home_team, away_team, home_score, away_score, tournament, city, country, neutral.

enriched — every match since 2008 with the pre-match Elo of both sides (eh, ea) and the result — the apples-to-apples table every model in the episode was trained and tested on.

current-elo — the running eloratings.net-style Elo for every national team, as of the snapshot.

current-ad — the champion engine: per-team attack/defense log-rate ratings feeding two Poisson scoring rates (lambda = exp(mu + home + scale·(att − def_opp))). Out-of-sample log-loss 0.8703 vs 0.8783 for the Elo-gap baseline.

calibration_truth — empirical win/draw/loss and goal rates bucketed by Elo gap. The ground truth every model gets graded against.

Query it in one line

DuckDB reads parquet straight off the URL, no download needed. How often does the higher-Elo side 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;

Or in Python with pandas:

import pandas as pd
df = pd.read_parquet("https://data.mathvsvibes.com/wc/results.parquet")

Source and license

Original source: martj42/international_results, released under CC0 1.0 (public domain dedication). Our repack and derived ratings are offered as-is under the same terms; a link back to the upstream repo is appreciated. Covers full internationals only — no Olympic sides, no youth or B teams.

The episode drops soon — this data is your head start. Found something that breaks our bracket? Bring receipts: drop them in the comments on YouTube.