BetsPlug

Learn

Expected Goals (xG) Explained

How shot-quality modelling replaced scoreline analysis in modern football

Unknown block type "undefined", specify a component for it in the `components.types` option

Where xG comes from

Unknown block type "undefined", specify a component for it in the `components.types` option

Why pundits hate it (and why they're wrong)

Unknown block type "undefined", specify a component for it in the `components.types` option

From xG to match prediction

Unknown block type "undefined", specify a component for it in the `components.types` option

Common xG mistakes

Unknown block type "undefined", specify a component for it in the `components.types` option

Frequently asked

How is xG different from 'shots on target'?

Shots on target counts each attempt equally - a tap-in and a hopeful 30-yard effort both register as 1. xG weights each shot by its probability of becoming a goal, so a tap-in might add 0.9 xG while the long shot adds 0.03 xG.

Can xG predict which team wins?

Not on its own, but feed two teams' rolling xG numbers into a Poisson goal model and you get a probability distribution over every scoreline - including 1X2 probabilities. That's exactly what BetsPlug's Poisson head does.

Which xG provider does BetsPlug use?

We source from the football-data.org feed, cross-checked against OpenLigaDB for leagues where both are available. Matches with large divergences get flagged for manual review.

Why do some matches have 'wrong' xG results?

Short-run variance. A team can have 2.5 xG and lose 0-1 because finishing is probabilistic. Over a full season (~38 matches) actual goals track xG closely, but any individual match can diverge substantially.

Does xG account for penalties?

Most providers do - a standard penalty is assigned 0.76 xG (the historical conversion rate). BetsPlug splits penalty xG from open-play xG internally so post-match xG totals reflect the real shot-quality picture.

Keep reading