Kuningas BettingKUNINGAS BETTING
← Articles
Deep diveSep 20

My xG vs the supercomputer: what Opta can't see

Opta's xG weighs 35+ factors — and four things still slip through: penalties, chances without a shot, tight offsides, and game state. Here's how I read xG differently.

The supercomputer and the human

Opta's xG 2.0 takes into account more than 35 contextual factors — shooter position, goalkeeper position, defensive pressure, shot clarity. It's a genuine supercomputer and I'm not arguing with it: a model trained on thousands of shots is more consistent than any human, it doesn't get tired and it doesn't get emotional.

But a model has one fundamental limit: it rates shots. Football is much bigger than shots. I've been building my own xG model for years and I've concluded that four things make the biggest difference: penalties, chances without a shot, razor-thin offsides, and game state.

A penalty isn't a penalty

Opta gives every penalty a flat value of 0.79 (StatsBomb 0.78, Wyscout 0.76) — the historical conversion rate, since the shot itself is always the same: a stationary ball, 12 yards, little variation. As a shot, that's right.

But for me xG exists to measure a team's performance, not a single shot. Two penalties can come from completely different places. An accidental handball off a cross into the box is almost a matter of luck. A last-man foul that stops a certain goal, on the other hand, is the result of the team creating a real chance. The first doesn't reflect how the team played; the second does.

So I don't automatically give a penalty the same value — I judge the situation: how did it come about? That way what enters my xG is what the team actually created, not what the referee awarded.

The chance where no shot is taken

By definition xG is tied to a shot: no shot, no xG. Now think of a perfectly weighted through-ball across the six-yard box where the striker is one stride from touching it. Or a cross that beats everyone and reaches the striker at the far post, who can't get there. These are often exactly the situations that come out of a well-working move, and they're genuine big chances — yet in the xG table their value is zero.

A team that creates such situations systematically looks worse in the data than it really is. This is where a human who watches the game is ahead of the model.

When the moment dies on a razor-thin offside

Take a situation where a team breaks the defensive line with a perfectly timed run, but the flag goes up for a very tight offside. In the model there's nothing: no shot was taken or the goal doesn't count, so xG is zero. Yet the team did exactly what it's supposed to do — got behind the defence, played the right pass, timed the run. No table takes that into account.

In betting, that can be a valuable signal. One such moment is chance — a centimetre on the line. But if there are several in one match, it shows the team consistently finds the space behind the defence, and that's a good sign of performance the numbers don't show. Matches where xG underrates a team are exactly where the market can be wrong.

Game state changes everything

The same xG isn't worth the same at every moment of a match. Three examples of how I'd adjust it:

A trailing team's xG could carry a smaller multiplier (say 0.75×). They have to equalise, they take risks, shoot more and often from worse positions while the opponent sits deep — the same xG is “cheaper” here.

An underdog's xG could carry a larger multiplier (say 1.25×). xG doesn't measure underdogs' chances fairly: in reality they sometimes get more than half of a match, but the model rates their chances by average-team standards and underrates them.

A leading team's xG could also carry a larger multiplier. They have no specific motivation to score more, so every chance they do create is a stronger sign of their real level. It depends on the match, of course.

Why this matters to a bettor

The market — live too — reacts to the score and to public xG. If public xG says team A had 2.1 xG vs B's 0.6 but half of it came while trailing in the last 20 minutes, the real gap is smaller than the number suggests. And vice versa: if a leading team created little but every chance was top quality, that's a stronger signal than the number lets on.

Those are exactly the spots I look for — where my read diverges from public xG — because that's where the price can be wrong.

Honestly: the limits

The 0.75× and 1.25× multipliers are examples of my thinking, not laboratory-calibrated constants. To really work they'd need testing: does adjusted xG predict the next match's result better than raw xG? The supercomputer's edge is consistency and scale; mine is context it can't see. The best result comes from combining them: the model gives the base, I add the situation.

And these are just examples. Once you start thinking, you find more and more of these situations — a red card, a lineup after an injury, a match where one team has nothing left to play for. Every such nuance is a place where context beats the raw number.

Sources

Opta Analyst, “What Is Expected Goals (xG)?”; Stats Perform, “Expected Goals (xG): The Football Metric Changing Analysis, Betting, and Fan Engagement”; Jobs in Football, “What Is The xG Of A Penalty?”. The multipliers and the treatment of penalties are the author's own methodology, not Opta's or other data providers'.

Betting tips, analysis and strategies straight to your pocket — completely free.

Join on Telegram