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:

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:

The four-way matrix above is one of the more useful frameworks we've seen for cross-validating a team's true level.