Final verdict · tournament complete
The market finished ahead — narrowly — and the model was even in the knockouts
This log is frozen: the tournament ended 2026-07-19. Over the full 100-match sample the vig-free market out-scored the model on mean log-loss, 0.854 to 0.889 — a real but narrow gap that sits at the edge of statistical significance. In the 32 knockout games the two were dead even. Match by match the market took most of the duels (64 to 36, the profile of an underdog-backer: frequent small losses, occasional bigger wins). The full story — where the gap came from, and what xWDL says — is in the tournament review.
Mean hard log-loss over the 100 odds-matched matches · market 0.854 vs model 0.889 (p ≈ 0.06) · knockouts 0.896 vs 0.894
Matches scored
100
Model Brier (mean)
0.530
lower is better · 0–2 scale
Market Brier (mean)
0.506
vig-free consensus baseline
Cumulative log edge
−3.545
Σ(log market − log model) · >0 = model ahead
Running accuracy
How the race unfolded, match by match.
3-outcome Brier, running mean · model: lineup-conditioned capture · market: vig-free median of EU books · n = 100
Per-match edge
Where the model beat the book, match by match.
bar = Brier(market) − Brier(model) · positive (moss) = model closer to the result
Performance log
Every scored match, in full.
| Fixture | Score | Model p(act) | Mkt p(act) | Brier M | Brier K |
|---|---|---|---|---|---|
| Spain 0–0 Argentina | draw | 31% | 32% | 0.713 | 0.708 |
| France 4–6 England | away | 32% | 22% | 0.692 | 0.958 |
| England 1–2 Argentina | away | 34% | 31% | 0.646 | 0.704 |
| France 0–2 Spain | away | 32% | 30% | 0.694 | 0.727 |
| Argentina 1–1 Switzerland | draw | 27% | 27% | 0.878 | 0.872 |
| Norway 1–1 England | draw | 28% | 25% | 0.826 | 0.896 |
| Spain 2–1 Belgium | home | 51% | 59% | 0.364 | 0.255 |
| France 2–0 Morocco | home | 58% | 61% | 0.268 | 0.237 |
| Switzerland 0–0 Colombia | draw | 31% | 32% | 0.711 | 0.714 |
| Argentina 3–2 Egypt | home | 76% | 72% | 0.090 | 0.124 |
| United States 1–4 Belgium dog call ✓ | away | 48% | 33% | 0.412 | 0.669 |
| Portugal 0–1 Spain | away | 45% | 49% | 0.454 | 0.391 |
| Mexico 2–3 England | away | 58% | 38% | 0.271 | 0.585 |
| Brazil 1–2 Norway | away | 21% | 20% | 0.972 | 0.989 |
| Paraguay 0–1 France | away | 70% | 80% | 0.139 | 0.063 |
| Canada 0–3 Morocco | away | 47% | 52% | 0.415 | 0.345 |
| Colombia 1–0 Ghana | home | 69% | 67% | 0.151 | 0.167 |
| Argentina 1–1 Cape Verde | draw | 9% | 11% | 1.596 | 1.501 |
| Australia 1–1 Egypt | draw | 31% | 33% | 0.725 | 0.676 |
| Switzerland 2–0 Algeria | home | 46% | 49% | 0.435 | 0.399 |
| Portugal 2–1 Croatia | home | 46% | 57% | 0.446 | 0.287 |
| Spain 3–0 Austria | home | 61% | 74% | 0.237 | 0.107 |
| United States 2–0 Bosnia and Herzegovina | home | 53% | 71% | 0.332 | 0.130 |
| Belgium 2–2 Senegal | draw | 30% | 28% | 0.759 | 0.791 |
| England 2–1 DR Congo | home | 72% | 75% | 0.122 | 0.104 |
| Mexico 2–0 Ecuador | home | 36% | 43% | 0.620 | 0.495 |
| France 3–0 Sweden | home | 70% | 74% | 0.138 | 0.100 |
| Ivory Coast 1–2 Norway | away | 43% | 45% | 0.488 | 0.458 |
| Netherlands 1–1 Morocco | draw | 29% | 31% | 0.780 | 0.717 |
| Germany 1–1 Paraguay | draw | 27% | 18% | 0.868 | 1.202 |
| Brazil 2–1 Japan | home | 51% | 54% | 0.357 | 0.327 |
| South Africa 0–1 Canada | away | 58% | 53% | 0.270 | 0.330 |
| Jordan 1–3 Argentina | away | 86% | 84% | 0.033 | 0.039 |
| Algeria 3–3 Austria dog call ✗ | draw | 30% | 46% | 0.754 | 0.433 |
| DR Congo 3–1 Uzbekistan | home | 40% | 58% | 0.544 | 0.273 |
| Colombia 0–0 Portugal | draw | 31% | 24% | 0.737 | 0.889 |
| Panama 0–2 England | away | 78% | 84% | 0.075 | 0.041 |
| Croatia 2–1 Ghana | home | 66% | 53% | 0.178 | 0.339 |
| New Zealand 1–5 Belgium | away | 75% | 81% | 0.102 | 0.055 |
| Egypt 1–1 Iran | draw | 31% | 36% | 0.713 | 0.625 |
| Turkey 3–2 United States dog call ✓ | home | 36% | 28% | 0.617 | 0.816 |
| Paraguay 0–0 Australia | draw | 30% | 41% | 0.745 | 0.536 |
| Tunisia 1–3 Netherlands | away | 77% | 87% | 0.085 | 0.026 |
| Japan 1–1 Sweden | draw | 30% | 28% | 0.748 | 0.780 |
| Ecuador 2–1 Germany | home | 20% | 20% | 0.979 | 1.038 |
| Curaçao 0–2 Ivory Coast | away | 66% | 82% | 0.181 | 0.051 |
| South Africa 1–0 South Korea | home | 18% | 17% | 1.032 | 1.087 |
| Czech Republic 0–3 Mexico | away | 47% | 54% | 0.417 | 0.316 |
| Scotland 0–3 Brazil | away | 56% | 73% | 0.299 | 0.109 |
| Morocco 4–2 Haiti | home | 69% | 79% | 0.155 | 0.067 |
| Switzerland 2–1 Canada | home | 44% | 38% | 0.463 | 0.569 |
| Bosnia and Herzegovina 3–1 Qatar | home | 56% | 70% | 0.299 | 0.138 |
| Colombia 1–0 DR Congo | home | 58% | 62% | 0.275 | 0.217 |
| Panama 0–1 Croatia | away | 62% | 66% | 0.224 | 0.174 |
| England 0–0 Ghana | draw | 14% | 13% | 1.399 | 1.426 |
| Portugal 5–0 Uzbekistan | home | 68% | 84% | 0.159 | 0.040 |
| Jordan 1–2 Algeria | away | 56% | 64% | 0.297 | 0.200 |
| Norway 3–2 Senegal | home | 40% | 42% | 0.546 | 0.513 |
| France 3–0 Iraq | home | 86% | 90% | 0.031 | 0.017 |
| Argentina 2–0 Austria | home | 57% | 66% | 0.285 | 0.177 |
| New Zealand 1–3 Egypt | away | 51% | 61% | 0.370 | 0.228 |
| Uruguay 2–2 Cape Verde | draw | 23% | 21% | 1.034 | 1.104 |
| Belgium 0–0 Iran | draw | 26% | 20% | 0.913 | 1.121 |
| Spain 4–0 Saudi Arabia | home | 85% | 88% | 0.039 | 0.023 |
| Tunisia 0–4 Japan | away | 63% | 67% | 0.214 | 0.168 |
| Ecuador 0–0 Curaçao | draw | 20% | 11% | 1.175 | 1.473 |
| Germany 2–1 Ivory Coast | home | 50% | 67% | 0.371 | 0.161 |
| Netherlands 5–1 Sweden | home | 57% | 57% | 0.284 | 0.279 |
| Turkey 0–1 Paraguay | away | 25% | 24% | 0.852 | 0.874 |
| Brazil 3–0 Haiti | home | 78% | 87% | 0.081 | 0.026 |
| Scotland 0–1 Morocco | away | 38% | 58% | 0.571 | 0.269 |
| United States 2–0 Australia | home | 47% | 59% | 0.428 | 0.253 |
| Mexico 1–0 South Korea | home | 48% | 47% | 0.414 | 0.423 |
| Canada 6–0 Qatar | home | 73% | 74% | 0.113 | 0.102 |
| Switzerland 4–1 Bosnia and Herzegovina | home | 56% | 61% | 0.290 | 0.225 |
| Czech Republic 1–1 South Africa | draw | 27% | 27% | 0.870 | 0.844 |
| Uzbekistan 1–3 Colombia | away | 61% | 70% | 0.232 | 0.140 |
| Ghana 1–0 Panama dog call ✗ | home | 27% | 41% | 0.814 | 0.529 |
| England 4–2 Croatia | home | 46% | 57% | 0.433 | 0.285 |
| Portugal 1–1 DR Congo | draw | 23% | 17% | 1.039 | 1.254 |
| Austria 3–1 Jordan | home | 64% | 69% | 0.202 | 0.147 |
| Argentina 3–0 Algeria | home | 65% | 64% | 0.186 | 0.202 |
| Iraq 1–4 Norway | away | 71% | 79% | 0.130 | 0.068 |
| France 3–1 Senegal | home | 54% | 66% | 0.315 | 0.180 |
| Iran 2–2 New Zealand | draw | 29% | 27% | 0.797 | 0.855 |
| Saudi Arabia 1–1 Uruguay | draw | 22% | 22% | 1.086 | 1.065 |
| Belgium 1–1 Egypt | draw | 27% | 23% | 0.891 | 1.003 |
| Spain 0–0 Cape Verde | draw | 10% | 7% | 1.560 | 1.695 |
| Sweden 5–1 Tunisia | home | 46% | 51% | 0.441 | 0.369 |
| Ivory Coast 1–0 Ecuador | home | 25% | 28% | 0.850 | 0.771 |
| Netherlands 2–2 Japan | draw | 30% | 28% | 0.753 | 0.795 |
| Germany 7–1 Curaçao | home | 81% | 93% | 0.062 | 0.007 |
| Australia 2–0 Turkey | home | 15% | 18% | 1.136 | 1.046 |
| Haiti 0–1 Scotland | away | 59% | 63% | 0.257 | 0.208 |
| Brazil 1–1 Morocco | draw | 29% | 25% | 0.791 | 0.916 |
| Qatar 1–1 Switzerland | draw | 14% | 13% | 1.406 | 1.406 |
| United States 4–1 Paraguay dog call ✗ | home | 34% | 46% | 0.656 | 0.435 |
| Canada 1–1 Bosnia and Herzegovina | draw | 28% | 27% | 0.833 | 0.842 |
| South Korea 2–1 Czech Republic dog call ✗ | home | 28% | 37% | 0.770 | 0.602 |
| Mexico 2–0 South Africa | home | 71% | 68% | 0.134 | 0.162 |
p(actual) = probability either side assigned to the realised outcome · shootout matches score as draws (90-minute probabilities)