How GEGENSTATS xG works

Our own expected-goals model, built in-house.

Expected goals (xG) is the chance a shot becomes a goal, judged from what the shot was — not whether it went in. A tap-in from six yards might be worth 0.6 xG; a speculative effort from 30 yards, 0.02. Add a team's shots together and you see how many goals their chances were worth.

Every xG figure on Gegenstats comes from our own model. For each shot it weighs:

  • Where the shot was taken: distance from goal and the angle the goal mouth gives the shooter
  • Foot or head, and which foot
  • How the chance came: open play, a corner, a set piece, a direct free kick
  • What happened just before: a pass, a cross, a through ball, a rebound, a dribble
  • Whether it was a second chance in the same attack, and the score at the time

It learned from 545,000 shots in the Premier League, La Liga, Bundesliga, Serie A and Ligue 1 since 2014/15 (shot data from Understat). Penalties are scored at their real conversion rate, 0.78. From each match's shots we also work out the win, draw and loss chances the chances were worth, and the expected points.

In the European cups, where we don't get detailed shot data, a second model reads each shot from the match commentary (“from the left side of the box”, “a through ball”) and the ball tracking. It learned from 432,000 shots described that way, so it knows how often a shot from each area really goes in. Those positions are still approximate, so treat cup xG as a guide.

How accurate it is

Tested on shots from 2025/26 onwards, which the models never saw: 54,675 league shots, and 4,631 cup shots for the cup model. Lower log loss and higher AUC are better; xG per goal near 1.00 means the totals match the goals actually scored.

ModelLog lossAUCxG per goal
GEGENSTATS xG0.2670.7881.06
Cup model (cup shots, from commentary)0.3130.7261.04
Distance and angle only0.2840.7491.07

Questions about a number? Get in touch.