WK 2026 Model Validation

train_38 LSTM + smooth expected-goals calibrator — 28 KO matches fully out-of-sample (training cutoff 2026-06-29)

⚠️ What did NOT work from the proposed step plan: The GitHub URL for worldcup2018_test.csv does not exist. WK 2018 & 2022 ARE in the training data (training starts 2018-01-01, cutoff 2026-06-29), so they are NOT an independent test.
The predict_match CLI tool does not exist — our model runs via Docker + Python.
Solution: The WK 2026 KO phase (w73–w100) is the real out-of-sample test — results below.

KO Phase Overview (28 matches, 4 Jul – 12 Jul 2026)

Pool score / match

105.7
Model train_38 + calibrator
Scoreboard (official): 106.8*

Pool score / match

87.7
>5% ELO rule (benchmark)

Baseline (before calibrator)

89.7
CV score before calibration
Model: +16.0 pts/match better

Winner accuracy

Model train_38
82.1% (23/28)
>5% ELO rule
71.4% (20/28)
Chance (~naive)
~50%

Mean Absolute Error (goals/match)

Model train_38
1.14 goals/match
>5% ELO rule
1.39 goals/match
Lower = better · MAE = Σ|pred_H−act_H| + |pred_A−act_A| per match

Score Category Distribution

Model train_38 (28 matches)

Exact ✓✓ (200 pts)
7/28 — 25.0%
Draw correct (100 pts)
1/28 — 3.6%
Winner + score (95 pts)
9/28 — 32.1%
Correct winner (75 pts)
7/28 — 25.0%
One score (20 pts)
4/28 — 14.3%
Wrong (0 pts)
0/28 — 0.0%

Brier-loss (deterministic): 0.179 — 5 wrong winner predictions

>5% ELO rule (28 matches)

Exact ✓✓ (200 pts)
4/28 — 14.3%
Draw correct (100 pts)
1/28 — 3.6%
Winner + score (95 pts)
10/28 — 35.7%
Correct winner (75 pts)
7/28 — 25.0%
One score (20 pts)
4/28 — 14.3%
Wrong (0 pts)
2/28 — 7.1%

Brier-loss (deterministic): 0.286 — 8 wrong winner predictions

Per-match detail

#MatchModelELO5ResultPts ModelPts ELO5MAE
73South Africa – Canada1-31-30-175753
74Germany – Paraguay2-12-11-1 pen.↗20201
75Netherlands – Morocco2-12-11-1 pen.↗20201
76Brazil – Japan2-12-12-1 ✓✓200 ✓200 ✓0
77France – Sweden3-13-13-095951
78Ivory Coast – Norway1-21-31-2 ✓✓200 ✓950
79Mexico – Ecuador2-11-1 p.2-09501
80England – DR Congo2-13-12-1 ✓✓200 ✓950
81USA – Bosnia2-12-12-095951
82Belgium – Senegal2-11-1 p.3-27502
83Portugal – Croatia2-11-1 p.2-1 ✓✓200 ✓200
84Spain – Austria3-13-13-095951
85Switzerland – Algeria2-12-12-095951
86Argentina – Cape Verde2-03-13-275953
87Colombia – Ghana2-03-11-095751
88Australia – Egypt2-11-1 p.1-1 pen.↗20200 ✓1
89Canada – Morocco1-21-20-375752
90Paraguay – France1-21-30-175752
91Brazil – Norway1-1 p.1-1 p.1-220201
92Mexico – England1-21-22-375752
93Portugal – Spain1-21-20-175752
94USA – Belgium1-21-21-495952
95Argentina – Egypt3-13-13-295951
96Switzerland – Colombia1-1 p.1-1 p.0-0 pen.100 D100 D2
97France – Morocco2-03-12-0 ✓✓200 ✓750
98Spain – Belgium2-13-12-1 ✓✓200 ✓950
99Norway – England1-21-21-2 ✓✓200 ✓200 ✓0
100Argentina – Switzerland2-13-13-195200 ✓1
TOTAL (28 matches) 2960 / 105.72455 / 87.71.14

Phase Summary

PhaseNModel ptsELO5 ptsModel/matchELO5/matchMAE ModelMAE ELO5
Last 321616551275103.479.71.061.31
Last 16861061076.276.21.751.88
Quarter-finals4695570173.8142.50.250.75
TOTAL2829602455105.787.71.141.39

* Scoreboard value = 2990/28 = 106.8. Difference of 30 pts (<1%) due to minor data entry differences for 1–2 model outputs.

What DID work from the proposed step plan?

✅ Feasible / done

  • Independent test set → WK 2026 KO phase (28 matches)
  • Absolute Error per match → MAE 1.14
  • Brier-score proxy → 0.179
  • Comparison with benchmark → ELO5 rule (87.7/match)
  • Score category distribution (exact %, winner %)
  • Winner accuracy → 82.1%

❌ Not feasible / issues

  • worldcup2018_test.csv GitHub URL does not exist
  • WK 2018 & 2022 are IN the training data → not an independent test!
  • predict_match CLI does not exist (→ Docker + Python)
  • Bookmaker odds require API key (the-odds-api)
  • Matplotlib display not available in terminal
  • k-fold CV on WK data: too few WK tournaments after training cutoff

Conclusion

train_38 + calibrator is robustly validated on 28 genuine out-of-sample matches (WK 2026 KO phase).
Winner accuracy: 82.1% vs. ELO benchmark 71.4%.
Pool score: 105.7 pts/match vs. baseline 89.7 pts/match (+16.0 improvement from calibrator).
Exact scores: 25% of matches — in line with the expected distribution.
Zero matches fully wrong (0 pts) — model always predicts at least the winner or one score correctly.
Note: the Last 16 scores lower (76.2/match) because actual results sometimes deviated strongly from expectations (e.g. Brazil 1-2 Norway). This is expected in KO phases with penalty shootouts.