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.
results.csv from the
upstream repo.Download
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.