xG (expected goals) is one of the most widely cited metrics in modern football analytics. The concept is simple: every shot is assigned a probability of becoming a goal, based on factors like distance, angle, body part, defenders in front. Sum the probabilities and you get an xG total — the number of goals a team "should have" scored.
What's much less discussed is what to do with the gap between xG and actual goals. That gap is what we display in our xG vs Actual Goals stats page, and it's worth a careful read.
Three explanations for a gap
Skill / clinical finishing
The most flattering explanation: a team's strikers convert chances better than the average finisher. They take the same shot a typical player would, but they're better at putting it in. Real Madrid's recent forwards have generally outperformed xG year over year, which the model suggests is a real skill effect.
Luck
The least flattering explanation: random variance. xG models are calibrated against tens of thousands of shots, but in a 5-month sample of 30–40 matches, randomness still dominates. A team with +5 over xG might just be having a hot run that will revert.
Set-piece specialism or tactical edge
An intermediate explanation: a team is unusually effective at a category of shot that the xG model under-rates. A free-kick specialist on roster might consistently convert from positions where the average chance is rated low. Or a coaching staff that dominates set-pieces might generate fewer total chances but score on more of them.
Reading the table
On our table, "Diff" is Goals − xG. Positive means overperforming, negative means underperforming. The general rules of thumb:
- Diff between -2 and +2: normal range. No signal either way.
- +3 to +5: mildly overperforming. Could be skill, could be a hot streak.
- +6 or more: meaningfully overperforming. A team that has "finishing edge" or that the market hasn't yet adjusted for.
- -3 to -5: underperforming. The team is creating chances at a high level but not converting. Often a buy signal — the goals tend to come.
- -6 or worse: a problem. Strikers in form-slump, or a tactical setup that maximises bad shots.
Common pitfalls
Don't normalize per match for low samples
A team that's played 10 matches with +3 xG diff isn't "+0.3 per match" — it's "+3 with high variance". Always look at total Goals vs total xG, not the per-match ratio, until the sample is at least 20 matches.
Don't use xG to evaluate one match
A single match's xG vs goals is too noisy to draw a conclusion from. Use the rolling 10-match window or season aggregate, not the in-match xG.
xG models differ between providers
Different data providers use different xG models. Our xG values come from match-event scraping where the source provides them, and may not match a specific competing source exactly. The relative ranking is more reliable than the absolute value.
Why this matters for live odds
The live betting market typically prices an in-game Over/Under line based on the score and pace. But it's slower to react to xG accumulating without goals. A team trailing 0:1 with an xG of 1.7 vs 0.4 has a higher next-goal probability than the score alone suggests — markets sometimes underprice this. Watching the gap can produce edge.
Combining with Powerd
Our Powerd metric is independent of xG. Combining the two gives stronger signal than either alone:
- High Powerd + positive xG diff = consistent strong team
- High Powerd + negative xG diff = elite team in a slump (interesting buy signal)
- Low Powerd + positive xG diff = lucky run (interesting sell signal)
- Low Powerd + negative xG diff = both metrics agree on weakness
The four-way matrix above is one of the more useful frameworks we've seen for cross-validating a team's true level.