How the Model Works
Every probability on this site comes from the same source: a Dixon-Coles calibrated Poisson model. Here is exactly how it works, what the numbers mean, and where the model is weakest.
1. Poisson Goal Scoring
Goals in football follow a Poisson distribution — they arrive at a roughly constant rate, independently of each other. If we expect a team to score an average of λ goals, the probability of scoring exactly k goals is:
We calculate a separate λ for each team (home xG, away xG) and convolve the two distributions to get a full probability grid of every possible scoreline from 0-0 to 5-5. From that grid we can read off 1X2 probabilities, over/under lines, BTTS, Asian handicap — every market you see.
2. Dixon-Coles Correction
The standard Poisson model over-predicts 0-0 and 1-0 scorelines relative to real football data. Dixon & Coles (1997) introduced a correction factor ρ that adjusts the joint probability of low-scoring results:
τ(1,0) = 1 + ρ · λ_A
τ(0,1) = 1 + ρ · λ_H
τ(1,1) = 1 − ρ
We use a dynamic ρ = −0.38 × balance, where balance is the ratio of the weaker team’s expected goals to the stronger team’s (0 to 1). Balanced matches get a strong negative correction — shifting probability mass into 0-0 and 1-1, where cautious, evenly-matched tournament games actually finish — while one-sided matches get almost none. Recalibrated against WC 2026 group-stage results, which showed far more low-score draws in competitive fixtures than a fixed ρ predicted.
3. Attack & Defense Strength Ratings
Each team gets an attack rating and a defense rating derived from their goals scored and conceded per game relative to the tournament average. A rating of 1.0 is exactly average.
defense = (GA per game) / (tournament avg goals per game)
λ_home = attack_H × defense_A × avg_goals
λ_away = attack_A × defense_H × avg_goals
A high attack rating means a team scores more than average. A high defense rating means they concede more than average (so a low defense rating = good defense). The expected goals for each team is then their attack strength times the opponent’s defensive weakness times the baseline tournament scoring rate.
| Team | GP | GF | GA | Attack ↑ | Defense ↓ | xG Proj (vs avg) |
|---|---|---|---|---|---|---|
| Germany | 3 | 10 | 4 | 2.23 | 0.89 | 2.23 – 0.80 |
| Netherlands | 3 | 10 | 4 | 2.23 | 0.89 | 2.23 – 0.80 |
| France | 3 | 10 | 2 | 2.23 | 0.45 | 2.23 – 0.40 |
| Canada | 3 | 8 | 3 | 1.79 | 0.67 | 1.79 – 0.60 |
| United States | 3 | 8 | 4 | 1.79 | 0.89 | 1.79 – 0.80 |
| Norway | 3 | 8 | 7 | 1.79 | 1.56 | 1.79 – 1.41 |
| Senegal | 3 | 8 | 6 | 1.79 | 1.34 | 1.79 – 1.21 |
| Argentina | 3 | 8 | 1 | 1.79 | 0.22 | 1.79 – 0.20 |
| Switzerland | 3 | 7 | 3 | 1.56 | 0.67 | 1.56 – 0.60 |
| Brazil | 3 | 7 | 1 | 1.56 | 0.22 | 1.56 – 0.20 |
| Sweden | 3 | 7 | 7 | 1.56 | 1.56 | 1.56 – 1.41 |
| Japan | 3 | 7 | 3 | 1.56 | 0.67 | 1.56 – 0.60 |
| Mexico | 3 | 6 | 0 | 1.34 | 0.00 | 1.34 – 0.00 |
| Morocco | 3 | 6 | 3 | 1.34 | 0.67 | 1.34 – 0.60 |
| Belgium | 3 | 6 | 2 | 1.34 | 0.45 | 1.34 – 0.40 |
| Austria | 3 | 6 | 6 | 1.34 | 1.34 | 1.34 – 1.21 |
| Portugal | 3 | 6 | 1 | 1.34 | 0.22 | 1.34 – 0.20 |
| England | 3 | 6 | 2 | 1.34 | 0.45 | 1.34 – 0.40 |
| Bosnia-Herzegovina | 3 | 5 | 6 | 1.12 | 1.34 | 1.12 – 1.21 |
| Egypt | 3 | 5 | 3 | 1.12 | 0.67 | 1.12 – 0.60 |
| Spain | 3 | 5 | 0 | 1.12 | 0.00 | 1.12 – 0.00 |
| Algeria | 3 | 5 | 7 | 1.12 | 1.56 | 1.12 – 1.41 |
| Croatia | 3 | 5 | 5 | 1.12 | 1.12 | 1.12 – 1.00 |
| Ivory Coast | 3 | 4 | 2 | 0.89 | 0.45 | 0.89 – 0.40 |
| New Zealand | 3 | 4 | 10 | 0.89 | 2.23 | 0.89 – 2.01 |
| Colombia | 3 | 4 | 1 | 0.89 | 0.22 | 0.89 – 0.20 |
| Congo DR | 3 | 4 | 3 | 0.89 | 0.67 | 0.89 – 0.60 |
| Türkiye | 3 | 3 | 5 | 0.67 | 1.12 | 0.67 – 1.00 |
| Iran | 3 | 3 | 3 | 0.67 | 0.67 | 0.67 – 0.60 |
| Uruguay | 3 | 3 | 4 | 0.67 | 0.89 | 0.67 – 0.80 |
| Jordan | 3 | 3 | 8 | 0.67 | 1.79 | 0.67 – 1.61 |
| Czechia | 3 | 2 | 6 | 0.45 | 1.34 | 0.45 – 1.21 |
| South Korea | 3 | 2 | 3 | 0.45 | 0.67 | 0.45 – 0.60 |
| South Africa | 3 | 2 | 3 | 0.45 | 0.67 | 0.45 – 0.60 |
| Qatar | 3 | 2 | 10 | 0.45 | 2.23 | 0.45 – 2.01 |
| Haiti | 3 | 2 | 8 | 0.45 | 1.79 | 0.45 – 1.61 |
| Paraguay | 3 | 2 | 4 | 0.45 | 0.89 | 0.45 – 0.80 |
| Australia | 3 | 2 | 2 | 0.45 | 0.45 | 0.45 – 0.40 |
| Ecuador | 3 | 2 | 2 | 0.45 | 0.45 | 0.45 – 0.40 |
| Tunisia | 3 | 2 | 12 | 0.45 | 2.68 | 0.45 – 2.41 |
| Cape Verde | 3 | 2 | 2 | 0.45 | 0.45 | 0.45 – 0.40 |
| Uzbekistan | 3 | 2 | 11 | 0.45 | 2.46 | 0.45 – 2.21 |
| Ghana | 3 | 2 | 2 | 0.45 | 0.45 | 0.45 – 0.40 |
| Scotland | 3 | 1 | 4 | 0.22 | 0.89 | 0.22 – 0.80 |
| Curaçao | 3 | 1 | 9 | 0.22 | 2.01 | 0.22 – 1.81 |
| Saudi Arabia | 3 | 1 | 5 | 0.22 | 1.12 | 0.22 – 1.00 |
| Iraq | 3 | 1 | 12 | 0.22 | 2.68 | 0.22 – 2.41 |
| Panama | 3 | 0 | 4 | 0.00 | 0.89 | 0.00 – 0.80 |
Attack ↑ = higher is better · Defense ↓ = lower is better · refreshes every 5 min from ESPN
4. Closing Line Value (CLV)
CLV is the gold standard metric for evaluating betting skill. It measures whether your price was better than the closing market price — which, after removing vig, represents the sharpest collective estimate of true probability.
De-vig: implied(home) = (1/homeOdds) / (1/homeOdds + 1/drawOdds + 1/awayOdds)
Positive CLV means the model found value the market hadn’t fully priced in at closing. Sustained positive CLV across a large sample is the strongest evidence of genuine edge. Negative CLV means the market was sharper than the model on that outcome.
5. Kelly Staking & Bankroll Simulation
The Kelly Criterion tells you the optimal fraction of your bankroll to bet to maximise long-run growth, given your perceived edge:
We use ¼ Kelly (25% of the full Kelly fraction) for all simulations and recommendations. Full Kelly is theoretically optimal but very volatile — most professional bettors use half or quarter Kelly to reduce variance while retaining most of the growth benefit. We also cap any single bet at 5% of bankroll.
6. Where the Model Is Weakest
- Early group stage: strength ratings based on 1-2 games are very noisy
- Knockout rounds: single-elimination changes incentives; tournament fatigue matters
- Injuries & suspensions: the model doesn’t read team news; market prices often do
- Penalties: all markets exclude knockout penalty shootouts; these are ~50/50 regardless
- Home advantage: not modelled (no true “home” team at a neutral tournament)
- Weather & altitude: we display altitude badges but don’t adjust λ values for them