Attack–defense Poisson model fit on every completed match, with expected goals from ESPN’s match data. The blended rating (70% xG / 30% goals) and its shrinkage were chosen by 10-fold cross-validation, not by hand.
Everything is in log-goals. To get a scoreline: λA = μ · exp(attA − defB) is A’s expected goals per 90′ against B, where μ = 1.17 is the league-average rate (an average attack against an average defense). Feed both λs into independent Poissons for full score probabilities.
Example — Argentina v Japan: λARG = 1.17·e(+0.46 − 0.19) ≈ 1.54, λJPN = 1.17·e(−0.04 − 0.53) ≈ 0.66. Rules of thumb: +0.69 of total rating ≈ outscores an average side 2:1; a 0.10 gap ≈ 55/45 on any single goal.
Attack is goals created above average; defense is goals prevented (higher = better for both). Total = attack + defense. The goals-only and xG-only columns are separate fits with their own CV-tuned shrinkage (τ=0.5 vs τ=1.0 — held-out data trusts raw scorelines less, so it shrinks them harder).
| Team | GP | Blend rating | Total | Att | Def | Goals-only | xG-only | |
|---|---|---|---|---|---|---|---|---|
| 1 | 7 | +1.54 | +0.49 | +1.05 | +1.21 #1 | +1.61 #1 | ||
| 2 | 7 | +1.08 | +0.57 | +0.51 | +0.95 #2 | +1.08 #3 | ||
| 3 | 7 | +0.99 | +0.46 | +0.53 | +0.78 #3 | +1.10 #2 | ||
| 4 | 5 | +0.84 | +0.54 | +0.30 | +0.57 #7 | +0.94 #4 | ||
| 5 | 7 | +0.66 | +0.38 | +0.28 | +0.57 #6 | +0.67 #8 | ||
| 6 | 5 | +0.64 | +0.05 | +0.59 | +0.42 #11 | +0.72 #6 | ||
| 7 | 5 | +0.59 | +0.26 | +0.33 | +0.65 #4 | +0.56 #10 | ||
| 8 | 4 | +0.55 | +0.54 | +0.01 | +0.25 #17 | +0.70 #7 | ||
| 9 | 6 | +0.54 | +0.37 | +0.17 | +0.63 #5 | +0.41 #14 | ||
| 10 | 5 | +0.50 | +0.32 | +0.18 | +0.16 #19 | +0.75 #5 | ||
| 11 | 6 | +0.47 | +0.42 | +0.05 | +0.31 #14 | +0.54 #11 | ||
| 12 | 6 | +0.45 | +0.19 | +0.26 | +0.32 #13 | +0.53 #12 | ||
| 13 | 6 | +0.44 | +0.19 | +0.25 | +0.47 #9 | +0.40 #15 | ||
| 14 | 4 | +0.42 | +0.42 | -0.00 | +0.36 #12 | +0.52 #13 | ||
| 15 | 5 | +0.40 | +0.20 | +0.20 | +0.51 #8 | +0.33 #17 | ||
| 16 | 3 | +0.39 | +0.20 | +0.18 | +0.00 #26 | +0.60 #9 | ||
| 17 | 4 | +0.29 | +0.15 | +0.14 | +0.46 #10 | +0.12 #21 | ||
| 18 | 3 | +0.16 | +0.41 | -0.24 | -0.21 #32 | +0.31 #19 | ||
| 19 | 4 | +0.15 | -0.04 | +0.19 | +0.25 #16 | +0.06 #23 | ||
| 20 | 4 | +0.14 | -0.09 | +0.23 | -0.21 #33 | +0.37 #16 | ||
| 21 | 4 | +0.13 | -0.03 | +0.16 | +0.01 #24 | +0.21 #20 | ||
| 22 | 3 | +0.13 | -0.02 | +0.15 | -0.13 #29 | +0.32 #18 | ||
| 23 | 5 | +0.10 | +0.25 | -0.15 | +0.25 #15 | -0.02 #24 | ||
| 24 | 4 | +0.06 | -0.01 | +0.07 | +0.08 #21 | +0.10 #22 | ||
| 25 | 3 | -0.03 | -0.11 | +0.08 | +0.03 #23 | -0.12 #26 | ||
| 26 | 4 | -0.05 | -0.07 | +0.03 | +0.13 #20 | -0.17 #27 | ||
| 27 | 5 | -0.05 | +0.08 | -0.13 | +0.21 #18 | -0.26 #30 | ||
| 28 | 4 | -0.15 | -0.44 | +0.29 | +0.04 #22 | -0.28 #31 | ||
| 29 | 4 | -0.15 | +0.09 | -0.24 | -0.13 #28 | -0.17 #28 | ||
| 30 | 4 | -0.17 | +0.01 | -0.18 | -0.31 #35 | -0.06 #25 | ||
| 31 | 4 | -0.21 | +0.09 | -0.30 | +0.00 #25 | -0.36 #32 | ||
| 32 | 4 | -0.26 | -0.37 | +0.12 | -0.21 #34 | -0.20 #29 | ||
| 33 | 4 | -0.28 | -0.42 | +0.14 | -0.06 #27 | -0.41 #33 | ||
| 34 | 4 | -0.38 | -0.01 | -0.37 | -0.19 #31 | -0.53 #36 | ||
| 35 | 5 | -0.49 | -0.67 | +0.18 | -0.14 #30 | -0.72 #43 | ||
| 36 | 4 | -0.50 | -0.43 | -0.07 | -0.33 #36 | -0.60 #38 | ||
| 37 | 3 | -0.52 | -0.15 | -0.37 | -0.45 #39 | -0.47 #34 | ||
| 38 | 3 | -0.52 | -0.38 | -0.13 | -0.37 #38 | -0.59 #37 | ||
| 39 | 3 | -0.52 | -0.30 | -0.21 | -0.36 #37 | -0.52 #35 | ||
| 40 | 3 | -0.59 | -0.49 | -0.10 | -0.49 #41 | -0.61 #39 | ||
| 41 | 3 | -0.61 | -0.30 | -0.31 | -0.49 #42 | -0.66 #41 | ||
| 42 | 3 | -0.62 | -0.06 | -0.56 | -0.46 #40 | -0.77 #45 | ||
| 43 | 3 | -0.69 | -0.29 | -0.40 | -0.60 #43 | -0.70 #42 | ||
| 44 | 3 | -0.79 | -0.39 | -0.40 | -0.91 #47 | -0.65 #40 | ||
| 45 | 3 | -0.82 | -0.23 | -0.59 | -0.88 #45 | -0.73 #44 | ||
| 46 | 3 | -1.06 | -0.34 | -0.72 | -0.87 #44 | -1.07 #46 | ||
| 47 | 3 | -1.09 | -0.46 | -0.63 | -0.89 #46 | -1.08 #47 | ||
| 48 | 3 | -1.12 | -0.55 | -0.57 | -0.94 #48 | -1.21 #48 |