The 2026 World Cup is over. 104 games played, group stage through to the final. Time to look at how the model performed across the whole tournament, and, more importantly, what happens when you only bet where you have an edge.
The raw numbers
The model uses FIFA Elo ratings to generate fair win/draw/loss probabilities for every fixture. Across all 104 games, it correctly called the winner in 68 out of 104 matches, 65.4% accuracy.
If you had placed a flat £1 on the model's predicted winner in every game, you'd have staked £104 and finished £5.90 up, a +5.7% ROI.
Backing every pick scraped a small profit over a full tournament, better than the group stage managed on its own, but a +5.7% return on 104 bets is thin. This is exactly why win rates alone don't tell the full story.
Why the favourite trap costs you money
The model predicted heavy favourites in a lot of games. Argentina at 1.19, Spain at 1.19, Argentina at 1.20. When you're right, you earn pennies. When you're wrong, you lose your full stake.
The clearest examples came from the very top of the board. The model had Spain at 84% (Spain 0-0 Cape Verde Islands) and England at 83% (England 0-0 Ghana), and both were held by far lower-ranked opposition. That's football. Short-priced favourites carry asymmetric risk that no model can fully escape.
Filter to value and the picture changes
A value bet is simple: our model thinks the outcome is more likely than the market does. Concretely, our fair odds are shorter than the bookmaker's price, meaning Bet365 is offering more than the bet is worth.
Applying that filter to all 104 games left 36 value selections:
| Date | Match | Prediction | Result | Model | Market | Edge | P/L |
|------|-------|------------|--------|-------|--------|------|-----|
| 12 Jun | South Korea vs Czechia | HOME | ✓ | 2.11 | 2.70 | +27.7% | +1.70 |
| 13 Jun | USA vs Paraguay | HOME | ✓ | 1.77 | 2.05 | +15.6% | +1.05 |
| 14 Jun | Ivory Coast vs Ecuador | AWAY | ✗ | 2.28 | 2.50 | +9.9% | -1.00 |
| 16 Jun | Iran vs New Zealand | HOME | ✗ | 1.36 | 1.80 | +32.2% | -1.00 |
| 17 Jun | Argentina vs Algeria | HOME | ✓ | 1.43 | 1.50 | +5.3% | +0.50 |
| 17 Jun | Ghana vs Panama | AWAY | ✗ | 1.69 | 3.20 | +89.6% | -1.00 |
| 18 Jun | Switzerland vs Bosnia & Herzegovina | HOME | ✓ | 1.51 | 1.55 | +2.8% | +0.55 |
| 19 Jun | Scotland vs Morocco | AWAY | ✓ | 1.53 | 1.70 | +11.0% | +0.70 |
| 20 Jun | Netherlands vs Sweden | HOME | ✓ | 1.55 | 1.70 | +9.6% | +0.70 |
| 21 Jun | Uruguay vs Cape Verde Islands | HOME | ✗ | 1.43 | 1.44 | +0.7% | -1.00 |
| 22 Jun | New Zealand vs Egypt | AWAY | ✓ | 1.46 | 1.55 | +6.3% | +0.55 |
| 23 Jun | Norway vs Senegal | AWAY | ✗ | 1.91 | 3.10 | +62.1% | -1.00 |
| 24 Jun | Switzerland vs Canada | HOME | ✓ | 2.09 | 2.38 | +13.9% | +1.38 |
| 24 Jun | Bosnia & Herzegovina vs Qatar | AWAY | ✗ | 2.24 | 7.50 | +234.4% | -1.00 |
| 25 Jun | Czechia vs Mexico | AWAY | ✓ | 1.72 | 1.75 | +1.7% | +0.75 |
| 25 Jun | Japan vs Sweden | HOME | ✗ | 1.82 | 1.85 | +1.5% | -1.00 |
| 26 Jun | Paraguay vs Australia | AWAY | ✗ | 2.18 | 4.50 | +106.5% | -1.00 |
| 26 Jun | Norway vs France | AWAY | ✓ | 1.41 | 1.57 | +11.3% | +0.57 |
| 27 Jun | Uruguay vs Spain | AWAY | ✓ | 1.66 | 1.70 | +2.4% | +0.70 |
| 27 Jun | Cape Verde Islands vs Saudi Arabia | AWAY | ✗ | 2.32 | 2.70 | +16.3% | -1.00 |
| 27 Jun | Egypt vs Iran | AWAY | ✗ | 2.28 | 3.25 | +42.6% | -1.00 |
| 27 Jun | Croatia vs Ghana | HOME | ✓ | 1.33 | 1.91 | +43.9% | +0.91 |
| 28 Jun | Algeria vs Austria | AWAY | ✗ | 2.49 | 3.70 | +48.7% | -1.00 |
| 30 Jun | Netherlands vs Morocco | AWAY | ✗ | 2.69 | 3.20 | +19.0% | -1.00 |
| 1 Jul | Mexico vs Ecuador | HOME | ✓ | 2.10 | 2.20 | +4.8% | +1.20 |
| 3 Jul | Australia vs Egypt | HOME | ✗ | 2.56 | 3.50 | +36.7% | -1.00 |
| 4 Jul | Colombia vs Ghana | HOME | ✓ | 1.35 | 1.42 | +5.1% | +0.42 |
| 4 Jul | Canada vs Morocco | AWAY | ✓ | 1.68 | 1.80 | +7.3% | +0.80 |
| 5 Jul | Brazil vs Norway | HOME | ✗ | 1.64 | 1.80 | +9.7% | -1.00 |
| 6 Jul | Mexico vs England | AWAY | ✓ | 1.87 | 2.50 | +33.7% | +1.50 |
| 7 Jul | USA vs Belgium | AWAY | ✓ | 2.28 | 2.75 | +20.4% | +1.75 |
| 11 Jul | Norway vs England | AWAY | ✓ | 1.49 | 1.90 | +27.2% | +0.90 |
| 12 Jul | Argentina vs Switzerland | HOME | ✓ | 1.59 | 1.67 | +4.8% | +0.67 |
| 14 Jul | France vs Spain | AWAY | ✓ | 2.67 | 3.10 | +16.2% | +2.10 |
| 15 Jul | England vs Argentina | AWAY | ✓ | 2.33 | 3.00 | +28.7% | +2.00 |
| 19 Jul | Spain vs Argentina | AWAY | ✗ | 2.69 | 3.60 | +33.8% | -1.00 |
21 from 36 winners (58.3%). £36 staked. +£6.40 profit. ROI: +17.8%.
What the numbers mean
Filtering to value doesn't just improve ROI mechanically, it changes which games you're betting on. You stop backing 1.19 shots that return almost nothing when correct, and start focusing on games where the market is mispricing the probability.
The biggest edge calls were volatile: Bosnia & Herzegovina/Qatar (+234%) and Paraguay/Australia (+106%) both went against the model. Large edges don't appear often and they swing a small sample hard, but over time they should resolve in your favour. The wins that did land were the ones worth having: Spain at 3.10, Argentina at 3.00 and Belgium at 2.75.
The 65.4% accuracy across all 104 games tells you the underlying model is solid. The +17.8% ROI on value selections tells you the edge is real when you apply the filter. And the +5.7% on backing every pick tells you that betting without a price edge, no matter how good your model is, barely moves the needle.
The World Cup is done, but the model runs on 20+ leagues across Europe and the seasons are only a couple of weeks away. I'll be posting previews for each league and each team in them over the coming weeks, including data on new signings and their likely strengths in terms of stats they might hit.
There's going to be lots to go at and there will be plenty of opportunity to find an edge by using BetSignals. It's data you won't find anywhere else!