Goals-minus-xG is football’s favourite way to crown a “clinical” finisher — and it is mostly a coin flip.
Simulate a league where every player finishes at exactly average skill and
67.6% of the real player-to-player spread in G − xG reproduces itself out of pure luck.
Shrink every real career through a Bayesian model and only a handful of elite shooters keep a provable
edge — led by Son Heung-min.
Fit on 73,272 non-penalty shots
·215 shooters with ≥ 100 career shots
· Understat, 2014–2025
·
01 The shrinkage machine
Every dot is a shooter’s career: left–right is how many non-penalty shots they have taken
(log scale), up–down is goals per xG — 1.00 means scoring exactly what the chances were worth.
Drag the slider (or press Shrink it) and watch every raw career get pulled toward the population mean of
0.96: thin samples travel far, huge samples barely move. That pull is empirical Bayes.
215 careers, from what happened to what to believe
Goals per xG (y) vs career non-penalty shots (x, log scale) · shrinkage target: population mean 0.96
Above average, P ≥ 95% (6 players)
Below average, P ≥ 95% (1 player)
Indistinguishable from average (208)
Source: Understat career shot logs, 2014–2025 · n = 73,272 non-penalty shots, 215 players · pipeline/model_bayes_finishing.py
The travel distances tell the story. Ruslan Malinovskiy sits at the very top of the raw chart —
1.71 goals per xG, 30 goals from just 17.5 xG —
but his 354 shots buy his record only a 25% say against the league prior,
so he lands at 1.12. Son Heung-min starts lower, at 1.33,
and finishes higher: 784 shots argue louder, and his posterior settles at
1.17 with 90% interval [1.07, 1.29].
Why the model is this brutal: conditional on chance quality, each shot is roughly a coin weighted at its xG. A striker
taking 100 shots at the corpus-average 0.13 xG carries
±3.4 goals of pure binomial noise per hundred shots — a “+5 over xG” season is barely
1.5σ. Simulate the whole league with zero finishing skill, 2,000 times over, and the
spread of G−xG per 100 shots comes out at SD 1.86 against the observed 2.26 —
luck is 67.6% of the variance. The “best finisher” in a completely skill-free league still beats
xG by +6.3 goals per 100 shots.
Luck’s share of G−xG variance
67.6%
2,000-run zero-skill simulation
Provably clinical
6 / 215
P(above average) ≥ 95%
Provably not
1 / 215
Calvert-Lewin · P(above avg) = 0.5%
Shots until data beats prior
441
learned τ = 0.142 · median career: 293
02 The honest leaderboard
Rank players by their posterior goals-per-xG and attach the uncertainty you are owed.
Only three careers — Son (interval floor 1.07), Kane (1.01) and
De Bruyne (1.01) — keep a 90% credible interval wholly above 1.00.
At the other end exactly one player is provably below average: Dominic Calvert-Lewin, raw
0.67, posterior 0.81.
Best and worst 15 finishers by posterior mean
Goals per xG · dot = posterior mean, whisker = 90% credible interval on true skill, open ring = raw career ratio — a noisy outcome, so it can legitimately sit outside the whisker
Posterior mean (above avg, P ≥ 95%)
Posterior mean (below avg, P ≥ 95%)
Posterior mean (uncertain)
90% credible interval
Source: Understat career shot logs, 2014–2025 · n = 73,272 shots, 215 players · pipeline/model_bayes_finishing.py
Read the whiskers, not the dots: Malinovskiy’s interval [0.94,
1.33] still straddles average — a spectacular record on a thin sample earns suspicion, not
certainty. Two things trip people up here. The whisker bounds a player’s true skill, not his raw ratio, so the
raw ring often sits outside it — that is the shrinkage doing its job, not an error. And “average” means the population
mean of 0.96 goals per xG (this corpus scores 4% under its Understat xG), so P(above avg) is the
posterior probability true skill clears 0.96 — not 1.00. That is how
Sesko can beat his xG by 5.6 goals yet earn only P = 80.5%:
174 shots buy his raw 1.18 a 28% say, leaving a
posterior of 1.01 [0.89, 1.14]. The full table
below is sortable; every number on this page survives without hovering anything.
All 215 qualified shooters (≥ 100 career non-penalty shots) — click a header to sort
#
Player
Team
League
Shots
Goals
Σ xG
Raw G/xG
Posterior
90% CI
P(above avg)
FSAA / 100
FSAA = finishing skill above average: extra goals per 100 corpus-average shots
versus an average finisher, computed from the posterior (shrunk) skill, not the raw record. Posterior and CI are on the
goals-per-xG ratio scale and describe true skill — the raw ratio is the outcome and can fall outside the CI.
“Average” everywhere is the population mean 0.96, not 1.00.
03 How many shots until we believe you?
The model learned that true finishing skill varies with SD τ = 0.142
log-odds — real, but small. That single number fixes the exchange rate between evidence and belief: a player’s own record
gets weight n / (n + 441), so it takes 441 non-penalty shots —
four-plus seasons of a starter’s volume — before the data outweighs the prior. The median career here is
293 shots. Only 51 of 215 players clear the bar.
Uncertainty shrinks slowly: the credible interval vs career shots
Width of the 90% credible interval, goals per xG (y) vs non-penalty career shots (x)
Theory: posterior CI width at the corpus shot mix
The 215 real careers (each player’s actual CI width)
Source: Understat career shot logs, 2014–2025 · n = 73,272 shots, 215 players · pipeline/model_bayes_finishing.py
At 100 shots — one good season — your record carries just 18.5% of the
verdict and the interval spans 0.27 goals per xG: consistent with anything from mediocre to elite.
At 500 shots the weight is 53.1% (width 0.20);
at 1,000, 69.4% (width 0.16). This is why raw
G−xG per 100 shots has a split-half reliability of only r = 0.20 — flip a season’s shots into two
random halves and one half barely predicts the other. Shrinkage lifts that to 0.25: better, still humble.1
Harry Kane owns the largest sample in the corpus — 1,469 shots,
251 goals, 222.4 xG — which earns his record a 75% say
and the tightest positive verdict: posterior 1.08 [1.01, 1.16].
Robert Lewandowski’s1,458 shots deliver the corpus’s most confident verdict of all,
and it is a shrug: raw 0.958, posterior 0.957. The model barely moves him
because there is nothing left to move — dead average, precisely measured.
The belief-o-meter
Give a hypothetical shooter a career length and see how the verdict splits between
their record and the league prior (τ = 0.142, half-weight at 441 shots).
Their record: 40%League prior: 60%
1 Fit separately by shot type, foot shots keep τ = 0.155
while the corpus’s 10,602 headers return τ = 0.000 — zero detectable
header-finishing skill. Understat xG also overrates headers for everyone: 0.839 goals per header xG
corpus-wide (μhead = -0.264).
04 Three careers, three verdicts
The same machine, pointed at three famous shot profiles: the mirage, the machine, and the proven exception.
The mirage
Ruslan Malinovskiy
30 goals from 17.5 xG across 354 shots
(2019–2025) — a raw 1.71 goals per xG, the highest in the corpus. But his average shot is worth
just 0.05 xG: long-range screamers, the noisiest diet in football. The posterior lands at
1.12 [0.94, 1.33] — probably good
(P = 95.7%), provably nothing. His record holds 25% of the say.
The machine
Erling Haaland
146 goals on 141.6 xG (651 shots): raw
1.03, posterior 1.00 [0.92, 1.09].
The most feared scorer alive is, per the model, a dead-average finisher. His edge is the diet, not the touch:
0.22 xG per shot — 1.6× the corpus mean of 0.13.
He doesn’t beat the chances; he gets better chances than anyone.
The proven exception
Dominic Calvert-Lewin
62 goals on 92.4 xG (518 shots): raw
0.67, posterior 0.81 [0.73, 0.90].
The one shooter in 215 who is below average with ≥ 95% certainty —
P(above average) = 0.5%, costing -2.1 goals per 100 average shots.
One mitigating fact: 39% of his shots are headers, the shot type where Understat xG runs
16% hot for everyone.
Mini-charts share one scale: goals per xG from 0.5 to 1.8 ·
ring = raw career ratio, dot + whisker = posterior mean with 90% credible interval · vertical rules mark the population mean
0.96 and 1.00 · Source: Understat, 2014–2025.