Predicting the 2026 World Cup with a Goal-Arrival Generator
I have been building a World Cup forecasting pipeline around one object: a predictive distribution over final scores. Win-draw-loss probabilities, exact-score tips, knockout paths, and the total-goals forecast are then derived from that same distribution instead of being estimated as separate problems.
The current version is described in a non-peer-reviewed working paper. The model is a state-dependent goal-arrival generator. Goals are treated as jumps in a continuous-time score state; the transition law at full time gives a joint distribution over scorelines. For the 2026 forecast I combine the event-time generator with a calibrated random-forest layer using historical log-score weights, then use modal scorelines as the public score forecasts.
The forecast below is a freeze candidate dated June 8, 2026. It uses historical international matches available up to June 7, a football-ranking.com strength snapshot from June 4, and no player or lineup covariates. The total-goals side forecast excludes shootout goals and in-match penalty goals.
Headline Predictions
| Target | Prediction |
|---|---|
| Champion | France |
| Runner-up | Argentina |
| Final | France - Argentina, 1-1, France advances by model-implied win probability |
| Third place | Spain |
| Total goals | 259 |
| Total-goals 10th-90th percentile range | 239-279 |
Method In Brief
The generator estimates goal-arrival intensities as functions of team strength, current score state, and match timing. It then propagates those intensities into score probabilities. For each fixture, the forecast stores both result-class probabilities and exact-score probabilities. A stacked model recalibrates win-draw-loss masses with weights 0.65 on the event-time generator and 0.35 on a calibrated random forest, while retaining a coherent final-score distribution for score and tournament calculations.
This matters because the forecast target changes the evaluation. A model can be good at win-draw-loss probabilities and less good at exact scores; betting-market prices can dominate close-to-kickoff probabilities while being a different information set than a strict pre-tournament forecast. The working paper therefore treats the forecast object, information set, and scoring rule as part of the method.
Group-stage score predictions
| Date | Group | Match | Prediction |
|---|---|---|---|
| 2026-06-11 | A | Mexico - South Africa | 1-0 |
| 2026-06-11 | A | South Korea - Czechia | 1-0 |
| 2026-06-12 | B | Canada - Bosnia & Herzegovina | 1-1 |
| 2026-06-12 | D | United States - Paraguay | 1-0 |
| 2026-06-13 | B | Qatar - Switzerland | 1-1 |
| 2026-06-13 | C | Brazil - Morocco | 1-1 |
| 2026-06-13 | E | Ivory Coast - Ecuador | 1-1 |
| 2026-06-13 | C | Haiti - Scotland | 1-1 |
| 2026-06-13 | F | Sweden - Tunisia | 1-1 |
| 2026-06-14 | D | Australia - Türkiye | 1-1 |
| 2026-06-14 | E | Germany - Curaçao | 3-0 |
| 2026-06-14 | F | Netherlands - Japan | 1-1 |
| 2026-06-15 | H | Spain - Cape Verde | 3-0 |
| 2026-06-15 | G | Belgium - Egypt | 1-0 |
| 2026-06-15 | H | Saudi Arabia - Uruguay | 1-1 |
| 2026-06-15 | G | Iran - New Zealand | 2-0 |
| 2026-06-15 | J | Argentina - Algeria | 2-0 |
| 2026-06-16 | J | Austria - Jordan | 2-0 |
| 2026-06-16 | K | Portugal - DR Congo | 2-0 |
| 2026-06-16 | I | France - Senegal | 2-0 |
| 2026-06-16 | L | England - Croatia | 1-0 |
| 2026-06-16 | I | Iraq - Norway | 1-1 |
| 2026-06-16 | L | Ghana - Panama | 1-1 |
| 2026-06-16 | K | Uzbekistan - Colombia | 1-1 |
| 2026-06-18 | A | Czechia - South Africa | 1-1 |
| 2026-06-18 | B | Switzerland - Bosnia & Herzegovina | 2-0 |
| 2026-06-18 | B | Canada - Qatar | 1-1 |
| 2026-06-18 | A | Mexico - South Korea | 1-1 |
| 2026-06-19 | D | United States - Australia | 1-1 |
| 2026-06-19 | C | Scotland - Morocco | 1-1 |
| 2026-06-19 | E | Ecuador - Curaçao | 2-0 |
| 2026-06-19 | C | Brazil - Haiti | 3-0 |
| 2026-06-19 | D | Türkiye - Paraguay | 0-1 |
| 2026-06-20 | F | Netherlands - Sweden | 2-0 |
| 2026-06-20 | E | Germany - Ivory Coast | 2-0 |
| 2026-06-20 | F | Tunisia - Japan | 0-1 |
| 2026-06-20 | G | New Zealand - Egypt | 0-2 |
| 2026-06-21 | H | Spain - Saudi Arabia | 3-0 |
| 2026-06-21 | G | Belgium - Iran | 1-1 |
| 2026-06-21 | H | Uruguay - Cape Verde | 2-0 |
| 2026-06-22 | J | Argentina - Austria | 2-0 |
| 2026-06-22 | I | France - Iraq | 3-0 |
| 2026-06-22 | L | Panama - Croatia | 1-1 |
| 2026-06-22 | I | Norway - Senegal | 1-1 |
| 2026-06-22 | K | Colombia - DR Congo | 2-0 |
| 2026-06-23 | K | Portugal - Uzbekistan | 2-0 |
| 2026-06-23 | L | England - Ghana | 3-0 |
| 2026-06-23 | J | Jordan - Algeria | 1-1 |
| 2026-06-24 | B | Switzerland - Canada | 1-1 |
| 2026-06-24 | B | Bosnia & Herzegovina - Qatar | 1-1 |
| 2026-06-24 | C | Scotland - Brazil | 0-2 |
| 2026-06-24 | C | Morocco - Haiti | 2-0 |
| 2026-06-24 | F | Japan - Sweden | 1-0 |
| 2026-06-24 | F | Tunisia - Netherlands | 0-2 |
| 2026-06-24 | A | Czechia - Mexico | 1-1 |
| 2026-06-24 | A | South Africa - South Korea | 1-1 |
| 2026-06-24 | D | Türkiye - United States | 1-1 |
| 2026-06-24 | D | Paraguay - Australia | 1-1 |
| 2026-06-25 | E | Ecuador - Germany | 1-1 |
| 2026-06-25 | E | Curaçao - Ivory Coast | 1-1 |
| 2026-06-25 | H | Cape Verde - Saudi Arabia | 1-1 |
| 2026-06-25 | H | Uruguay - Spain | 1-1 |
| 2026-06-26 | G | Egypt - Iran | 1-1 |
| 2026-06-26 | G | New Zealand - Belgium | 0-2 |
| 2026-06-26 | I | Norway - France | 0-2 |
| 2026-06-26 | I | Senegal - Iraq | 2-0 |
| 2026-06-26 | K | Colombia - Portugal | 1-1 |
| 2026-06-26 | K | DR Congo - Uzbekistan | 1-1 |
| 2026-06-26 | J | Algeria - Austria | 1-1 |
| 2026-06-26 | J | Jordan - Argentina | 0-3 |
| 2026-06-27 | L | Panama - England | 0-2 |
| 2026-06-27 | L | Croatia - Ghana | 2-0 |
Knockout path predictions
| Match | Stage | Fixture | Prediction | Advances |
|---|---|---|---|---|
| 73 | Round of 32 | South Korea - Canada | 1-1 | South Korea |
| 74 | Round of 32 | Germany - Australia | 2-0 | Germany |
| 75 | Round of 32 | Netherlands - Morocco | 1-0 | Netherlands |
| 76 | Round of 32 | Brazil - Japan | 2-0 | Brazil |
| 77 | Round of 32 | France - Egypt | 2-0 | France |
| 78 | Round of 32 | Ecuador - Senegal | 1-1 | Senegal |
| 79 | Round of 32 | Mexico - Ivory Coast | 1-1 | Mexico |
| 80 | Round of 32 | England - Norway | 2-0 | England |
| 81 | Round of 32 | United States - Qatar | 1-0 | United States |
| 82 | Round of 32 | Belgium - Czechia | 2-0 | Belgium |
| 83 | Round of 32 | Colombia - Croatia | 1-1 | Colombia |
| 84 | Round of 32 | Spain - Austria | 2-0 | Spain |
| 85 | Round of 32 | Switzerland - Algeria | 1-0 | Switzerland |
| 86 | Round of 32 | Argentina - Uruguay | 2-0 | Argentina |
| 87 | Round of 32 | Portugal - Panama | 2-0 | Portugal |
| 88 | Round of 32 | Paraguay - Iran | 1-1 | Iran |
| 89 | Round of 16 | Germany - France | 1-1 | France |
| 90 | Round of 16 | South Korea - Netherlands | 1-1 | Netherlands |
| 91 | Round of 16 | Brazil - Senegal | 2-0 | Brazil |
| 92 | Round of 16 | Mexico - England | 1-1 | England |
| 93 | Round of 16 | Colombia - Spain | 1-1 | Spain |
| 94 | Round of 16 | United States - Belgium | 1-1 | Belgium |
| 95 | Round of 16 | Argentina - Iran | 2-0 | Argentina |
| 96 | Round of 16 | Switzerland - Portugal | 1-1 | Portugal |
| 97 | Quarter-final | France - Netherlands | 1-1 | France |
| 98 | Quarter-final | Spain - Belgium | 1-0 | Spain |
| 99 | Quarter-final | Brazil - England | 1-1 | Brazil |
| 100 | Quarter-final | Argentina - Portugal | 1-1 | Argentina |
| 101 | Semi-final | France - Spain | 1-1 | France |
| 102 | Semi-final | Brazil - Argentina | 1-1 | Argentina |
| 103 | Third-place play-off | Spain - Brazil | 1-0 | Spain |
| 104 | Final | France - Argentina | 1-1 | France |