The World Cup 2026 record, match by match

All 104 matches, 2026-06-11 to 2026-07-19. Graded from the committed record — every figure on this page is computed from per_match.csv, not typed in.

We predicted every match of the 2026 World Cup before it was played, published each prediction in a public repository, and graded all 104 of them afterwards. This page is the whole record: the hits, the misses, and the two findings that made the model worse rather than better.

The headline numbers

MetricThe model Coin flipHistorical base rates
Outcome accuracy (W/D/L)59.6% 33.3%
Brier score (lower is better)0.5406 0.6667 0.6513
Exact scorelines 12 of 104 (11.5%)
Log loss0.9102 1.0986

Beating a coin flip is trivial; beating the historical base rates of football results is not. Both comparison columns are computed over the same 104 matches, so they are like-for-like.

By stage

StageMatches Outcome accuracyExact scores Brier
Group stage72 62.5%11.1% 0.5277
Knockouts (90 minutes)32 53.1%12.5% 0.5696

Finding one: retraining during the tournament made the model worse

We retrained after every matchday, weighting the tournament's own results four times more heavily than historical data. The intuition was obvious — use the newest information. Graded against the record, it was wrong.

ModelOutcome accuracy BrierExact scores
Frozen before the tournament 66.3% 0.5220 9.6%
Retrained after every matchday 59.6% 0.5406 11.5%

The version that never saw a single tournament result was 6.7 percentage points better across all 104 matches, and 15.6 points better in the knockouts — 68.8% against 53.1%. Three to seven matches per team is not enough data to update team strength; we were fitting to noise and calling it form. Walk-forward retraining has been dropped.

Finding two: the model could not imagine a well-organised underdog

Our confident predictions were not as good as their confidence implied. Predictions in the 90–100% band (6 of them) came in at 50.0%. A calibrated model's 90% predictions come in about 90% of the time.

Predicted probabilityPredictions Actually happened
0–10%358.6%
10–20%5311.3%
20–30%6418.8%
30–40%6435.9%
40–50%4158.5%
50–60%2065.0%
60–70%1353.8%
70–80%988.9%
80–90%771.4%
90–100%650.0%

Nearly all of the damage sat in one place: heavy favourites held to draws by sides that set up to defend. A Poisson goal model with a draw correction still assumes both teams are trying to score at their usual rate. That is the wrong assumption for a tournament with a 48-team field and a lot of underdogs happy to take a point.

The calls we got right when it was hard

The calls we got wrong while confident

Verify any of this yourself

Predictions were committed to a public repository before kick-off, so the timestamps are checkable independently of anything we say. The grading script reconstructs each prediction from the model parameters as they existed at least sixteen hours before the match — a walk-forward rebuild from git history, not a retrospective fit:

git clone https://github.com/nabeehshameem/fpl-optimiser
cd fpl-optimiser
python wc/retrospective/grade_retrospective.py

That regenerates per_match.csv and summary.txt, which are the only inputs to this page. If your numbers differ from the ones above, the numbers above are wrong.

What this record does and does not show. It shows that these predictions existed before the matches and how they scored. It does not show that the model will do as well on the next tournament — 104 matches is a small sample, and two of the model's weaknesses only became visible after the fact. The next public record is the 2026/27 Fantasy Premier League season, where every squad is committed before the deadline and graded afterwards on the same terms.

Every match

Two different predictions are graded here, and they can disagree. Top scoreline is the single most likely score. W/D/L call is the most likely outcome, which is every home-win scoreline added together against every draw and every away win. The most likely single score is often a draw while the most likely outcome is still a home win, because home victories are spread across many different scorelines.

That is why 5 matches below show a correct exact score next to a missed W/D/L call. Canada 1–1 Bosnia & Herzegovina is the clearest case: the top scoreline was 1–1, but the home win held 42% against the draw's 32%, so the outcome call was a home win. Both grades are shown rather than the flattering one.

Probabilities are home/draw/away at 90 minutes. Matches marked * went to extra time and are graded on the 90-minute result. Brier score is per match, lower being better.

#DateMatch Top scorelineActual H/D/A %W/D/L call ExactBrier
12026-06-11 Mexico v South Africa 1-0 2-0 56/28/16 H ✓ 0.300
22026-06-12 Canada v Bosnia & Herzegovina 1-1 1-1 42/32/26 H ✗ 0.714
32026-06-12 South Korea v Czechia 1-1 2-1 43/29/28 H ✓ 0.492
42026-06-13 USA v Paraguay 1-1 4-1 38/32/29 H ✓ 0.568
52026-06-13 Qatar v Switzerland 0-2 1-1 8/19/73 A ✗ 1.201
62026-06-13 Brazil v Morocco 0-0 1-1 27/38/35 D ✓ 0.589
72026-06-14 Haiti v Scotland 0-2 0-1 12/19/69 A ✓ 0.145
82026-06-14 Australia v Türkiye 1-1 2-0 29/30/41 A ✗ 0.766
92026-06-14 Germany v Curaçao 4-0 7-1 96/4/1 H ✓ 0.003
102026-06-14 Netherlands v Japan 1-1 2-2 36/32/32 H ✗ 0.696
112026-06-14 Côte d'Ivoire v Ecuador 0-0 1-0 27/34/39 A ✗ 0.797
122026-06-15 Sweden v Tunisia 1-1 5-1 32/28/40 A ✗ 0.705
132026-06-15 Spain v Cabo Verde 5-0 0-0 98/2/0 H ✗ 1.909
142026-06-15 Belgium v Egypt 1-0 1-1 55/30/16 H ✗ 0.814
152026-06-15 Saudi Arabia v Uruguay 0-1 1-1 13/28/59 A ✗ 0.888
162026-06-16 Iran v New Zealand 4-0 2-2 95/4/1 H ✗ 1.820
172026-06-16 France v Senegal 1-1 3-1 55/24/21 H ✓ 0.304
182026-06-16 Iraq v Norway 0-2 1-4 6/15/80 A ✓ 0.068
192026-06-17 Argentina v Algeria 1-0 3-0 50/32/18 H ✓ 0.388
202026-06-17 Austria v Jordan 3-0 3-1 86/10/4 H ✓ 0.031
212026-06-17 Portugal v DR Congo 1-0 1-1 52/31/18 H ✗ 0.781
222026-06-17 England v Croatia 2-0 4-2 67/22/11 H ✓ 0.165
232026-06-17 Ghana v Panama 1-1 1-0 45/28/27 H ✓ 0.454
242026-06-18 Uzbekistan v Colombia 0-2 1-3 8/18/74 A ✓ 0.103
252026-06-18 Czechia v South Africa 1-1 1-1 61/23/16 H ✗ 0.995
262026-06-18 Switzerland v Bosnia & Herzegovina 1-0 4-1 59/26/15 H ✓ 0.256
272026-06-18 Canada v Qatar 1-0 6-0 50/32/18 H ✓ 0.388
282026-06-19 Mexico v South Korea 1-0 1-0 51/32/17 H ✓ 0.373
292026-06-19 USA v Australia 1-1 2-0 35/30/36 A ✗ 0.644
302026-06-19 Scotland v Morocco 0-2 0-1 10/21/70 A ✓ 0.144
312026-06-20 Brazil v Haiti 3-0 3-0 87/9/4 H ✓ 0.026
322026-06-20 Türkiye v Paraguay 1-0 0-1 59/27/14 H ✗ 1.165
332026-06-20 Netherlands v Sweden 1-1 5-1 62/22/16 H ✓ 0.222
342026-06-20 Germany v Côte d'Ivoire 3-0 2-1 79/14/7 H ✓ 0.068
352026-06-21 Ecuador v Curaçao 3-0 0-0 91/7/2 H ✗ 1.697
362026-06-21 Tunisia v Japan 0-2 0-4 5/18/77 A ✓ 0.091
372026-06-21 Belgium v Iran 2-1 0-0 63/20/16 H ✗ 1.059
382026-06-21 Uruguay v Cabo Verde 2-0 2-2 81/15/4 H ✗ 1.385
392026-06-21 Spain v Saudi Arabia 3-0 4-0 90/8/2 H ✓ 0.017
402026-06-22 New Zealand v Egypt 0-2 1-3 6/16/78 A ✓ 0.080
412026-06-22 Argentina v Austria 1-0 2-0 54/30/16 H ✓ 0.333
422026-06-22 France v Iraq 2-0 3-0 76/16/7 H ✓ 0.088
432026-06-23 Norway v Senegal 1-1 3-2 56/26/18 H ✓ 0.299
442026-06-23 Jordan v Algeria 0-2 1-2 15/24/61 A ✓ 0.233
452026-06-23 Portugal v Uzbekistan 1-1 5-0 56/26/18 H ✓ 0.293
462026-06-23 England v Ghana 2-0 0-0 81/15/4 H ✗ 1.391
472026-06-23 Panama v Croatia 1-2 0-1 18/20/62 A ✓ 0.215
482026-06-24 Colombia v DR Congo 0-0 1-0 43/34/24 H ✓ 0.496
492026-06-24 Bosnia & Herzegovina v Qatar 1-0 3-1 55/30/15 H ✓ 0.321
502026-06-24 Switzerland v Canada 1-1 2-1 42/30/29 H ✓ 0.506
512026-06-24 Morocco v Haiti 2-0 4-2 86/12/3 H ✓ 0.034
522026-06-24 Scotland v Brazil 1-1 0-3 18/24/58 A ✓ 0.262
532026-06-25 South Africa v South Korea 0-1 1-0 12/27/61 A ✗ 1.216
542026-06-25 Czechia v Mexico 0-1 0-3 11/24/65 A ✓ 0.196
552026-06-25 Curaçao v Côte d'Ivoire 0-3 0-2 2/6/92 A ✓ 0.011
562026-06-25 Ecuador v Germany 0-2 2-1 14/24/62 A ✗ 1.179
572026-06-25 Japan v Sweden 2-0 1-1 63/24/13 H ✗ 0.995
582026-06-25 Tunisia v Netherlands 0-3 1-3 2/7/91 A ✓ 0.014
592026-06-26 Paraguay v Australia 0-0 0-0 20/39/41 A ✗ 0.582
602026-06-26 Türkiye v USA 1-1 3-2 29/37/34 D ✗ 0.753
612026-06-26 Senegal v Iraq 1-0 5-0 58/30/13 H ✓ 0.280
622026-06-26 Norway v France 1-1 1-4 38/27/35 H ✗ 0.634
632026-06-27 Cabo Verde v Saudi Arabia 1-1 0-0 31/41/28 D ✓ 0.518
642026-06-27 Uruguay v Spain 0-1 0-1 15/43/42 D ✗ 0.544
652026-06-27 New Zealand v Belgium 0-2 1-5 5/24/72 A ✓ 0.136
662026-06-27 Egypt v Iran 1-1 1-1 30/42/28 D ✓ 0.503
672026-06-27 Croatia v Ghana 1-1 2-1 28/44/28 D ✗ 0.789
682026-06-27 Panama v England 0-2 0-2 3/24/72 A ✓ 0.139
692026-06-27 DR Congo v Uzbekistan 0-0 3-1 40/47/13 D ✗ 0.596
702026-06-27 Colombia v Portugal 1-1 0-0 31/35/34 D ✓ 0.633
712026-06-28 Algeria v Austria 0-0 3-3 22/47/31 D ✓ 0.425
722026-06-28 Jordan v Argentina 0-3 1-3 1/18/81 A ✓ 0.068
732026-06-28 South Africa v Canada 0-1 0-1 12/40/48 A ✓ 0.439
742026-06-29 Brazil v Japan 0-0 2-1 27/45/28 D ✗ 0.809
752026-06-29 Germany v Paraguay 2-0 1-1 * 56/38/6 H ✗ 0.696
762026-06-30 Netherlands v Morocco 1-1 1-1 * 26/42/31 D ✓ 0.502
772026-06-30 Côte d'Ivoire v Norway 1-1 1-2 21/34/45 A ✓ 0.462
782026-06-30 France v Sweden 2-1 3-0 49/38/13 H ✓ 0.421
792026-07-01 Mexico v Ecuador 0-0 2-0 35/51/15 D ✗ 0.704
802026-07-01 England v DR Congo 1-0 2-1 41/52/8 D ✗ 0.620
812026-07-01 Belgium v Senegal 1-1 2-2 * 45/38/17 H ✗ 0.613
822026-07-02 USA v Bosnia & Herzegovina 2-0 2-0 49/41/10 H ✓ 0.444
832026-07-02 Spain v Austria 1-0 3-0 45/45/10 H ✓ 0.516
842026-07-02 Portugal v Croatia 1-1 2-1 45/34/21 H ✓ 0.469
852026-07-03 Switzerland v Algeria 1-1 2-0 43/38/19 H ✓ 0.505
862026-07-03 Australia v Egypt 0-0 1-1 * 28/48/24 D ✓ 0.402
872026-07-03 Argentina v Cabo Verde 2-0 1-1 * 62/35/4 H ✗ 0.805
882026-07-04 Colombia v Ghana 0-0 1-0 38/45/17 D ✗ 0.612
892026-07-04 Canada v Morocco 1-1 0-3 18/42/40 D ✗ 0.574
902026-07-04 Paraguay v France 0-2 0-1 8/40/52 A ✓ 0.389
912026-07-05 Brazil v Norway 2-1 1-2 47/31/22 H ✗ 0.917
922026-07-06 Mexico v England 0-0 2-3 23/40/37 D ✗ 0.616
932026-07-06 Portugal v Spain 1-1 0-1 20/33/47 A ✓ 0.429
942026-07-07 USA v Belgium 1-1 1-4 23/31/46 A ✓ 0.447
952026-07-07 Argentina v Egypt 1-0 3-2 55/31/14 H ✓ 0.318
962026-07-07 Switzerland v Colombia 1-1 0-0 * 27/34/39 A ✗ 0.667
972026-07-09 France v Morocco 1-1 2-0 32/37/31 D ✗ 0.702
982026-07-10 Spain v Belgium 1-1 2-1 38/36/25 H ✓ 0.581
992026-07-11 Norway v England 1-1 1-2 22/26/51 A ✓ 0.358
1002026-07-12 Argentina v Switzerland 1-1 3-1 49/33/18 H ✓ 0.399
1012026-07-14 France v Spain 1-1 0-2 29/38/33 D ✗ 0.679
1022026-07-15 England v Argentina 1-1 1-2 31/34/35 A ✓ 0.640
1032026-07-18 France v England 1-1 4-6 44/33/23 H ✗ 0.900
1042026-07-19 Spain v Argentina 0-0 0-0 * 44/39/17 H ✗ 0.595