BetMath Hub

xG Model vs Market

The ultimate edge finder. Input your Expected Goals (xG) estimates and compare against real bookmaker odds. Find mispriced 1X2 markets using Poisson-simulated fair probabilities.

Model Home
49.0% → 2.04
Model Draw
24.9% → 4.02
Model Away
26.2% → 3.82
Market Overround
4.1%
OutcomeModel ProbMarket ProbEdgeFair OddsMarket OddsVerdict
Home Win49.0%51.9%-3.0%2.041.85pass
Draw24.9%21.4%+3.5%4.023.60BET
Away Win26.2%26.7%-0.5%3.824.50pass

Best Value: DRAW

Edge: +3.5% vs market — Fair odds 4.02 vs offered 3.60. Modest edge. Half-Kelly recommended.

Over 2.5: 50.6%
BTTS: 53.2%

How Edge Detection Works

1. Poisson Simulation

Your xG inputs feed a Poisson model: P(h:a) = Poisson(h, λH) × Poisson(a, λA). Aggregate across all scorelines to get 1X2, Over/Under, and BTTS probabilities.

2. Strip Market Overround

Bookmaker odds include vig. We strip it proportionally: true implied prob = (1/odds) / Σ(1/odds). This gives fair market probabilities for comparison.

3. Edge = Model − Market

Positive edge = your model thinks the outcome is more likely than the market. Edge > 3% is typically actionable with proper Kelly sizing. Edge < 0% = no bet.

From Expected Goals to Win Probabilities

Expected goals (xG) measures chance quality. Every shot is assigned a probability of scoring based on how historically similar attempts fared — distance and angle to goal, body part, assist type, whether it followed a cross, a through-ball or a rebound, and how much pressure the shooter was under. A penalty is worth roughly 0.76 xG; a hopeful 30-yard strike might be 0.03. Summing shot values gives a team's xG for a match or a season: a measure of the chances it created, cleansed of finishing luck.

To turn xG into betting prices, treat each team's expected goals as the λ of a Poisson process. P(k goals) = e−λ × λk / k! gives each team's goal distribution; multiplying home and away probabilities builds a full score matrix, and summing the cells where home > away, home = away and home < away yields 1X2 probabilities — plus Over/Under and BTTS from the same matrix. This page runs exactly that calculation (see the Poisson calculator for the raw matrix) and then compares your model's fair odds against the bookmaker's vig-stripped prices to surface edges.

The statistical reason xG beats raw goals is regression to the mean. Goals are rare, high-variance events: over a 10-match sample, actual goal tallies swing wildly around the underlying chance quality, while xG stabilises much faster. A team that has scored 9 goals from 15.0 xG is finishing 0.6 goals per game below expectation — finishing rates that extreme rarely persist, and scoring usually drifts back toward the chances being created. The same logic applies defensively: a side conceding far fewer goals than its xG against is usually riding hot goalkeeping, not an impenetrable back line. Markets that lean on recent results systematically over-react to hot and cold finishing streaks; an xG-based model fades those streaks automatically.

xG has real limits. Providers train different models on different data, so Opta, Understat and StatsBomb can disagree noticeably on the same match — pick one source and stay consistent. Single-match xG is contaminated by game state: a team chasing a deficit shoots more, inflating its number. And xG only counts shots, so a dominant side that fails to turn possession into attempts registers nothing. Use per-match xG rates over the last 10–15 games, adjusted for venue and opponent, as your λ inputs — and remember the market builds from the same public data, so your edge comes from better adjustments, not from the raw feed.

xG → Probability Formulas

Per shot:
  xG = P(goal | distance, angle, body part,
          assist type, pressure, ...)

Team λ for a match:
  λ ≈ avg xG for (last 10–15 games)
      × opponent defensive factor
      × home/away factor

Poisson conversion:
  P(k goals) = e^(−λ) × λᵏ / k!
  P(h, a)    = P_H(h) × P_A(a)

1X2 from the score matrix:
  Home win = Σ P(h,a) where h > a
  Draw     = Σ P(h,a) where h = a
  Away win = Σ P(h,a) where h < a

Fair odds = 1 / probability

Worked Examples

xG → 1X2 — λH 1.6, λA 1.1

The Poisson matrix gives Home 49.0% (fair 2.04), Draw 24.9% (fair 4.02), Away 26.2% (fair 3.82). If a bookmaker offers 4.20 on the away side, model EV is 4.20 × 0.262 − 1 ≈ +10% — a bet, provided you trust your λ estimates more than the market's.

Regression Trade

A side has scored 9 goals from 15.0 xG in 10 matches — 0.90 actual vs 1.50 expected per game. If chance creation holds, scoring should regress up toward ~1.5 per game. A market still pricing them off 0.9 goals per game will offer inflated odds on their team totals, overs and wins — the classic xG value window.

Frequently Asked Questions

What does xG actually measure?

Expected goals assigns each shot the probability that an average player scores it, estimated from thousands of historically similar attempts (distance, angle, body part, assist type, pressure). Team xG is the sum of its shots' values. It measures the quality and volume of chances created — not the final score, which mixes chance creation with volatile finishing.

How do I convert xG into win probabilities?

Use each team's expected goals as the λ parameter of a Poisson distribution, compute P(k goals) for k = 0, 1, 2…, multiply home and away probabilities into a score matrix, then sum the cells: home win where h > a, draw where h = a, away win where h < a. Fair odds are 1 divided by each probability.

Why do xG numbers differ between providers?

Each provider trains its own model on its own tracking data with different features — StatsBomb includes freeze-frame defender positions, for instance, while simpler models do not — so the same shot can rate differently. Differences of a few tenths of xG per match are normal. Consistency matters more than the choice: build your λ inputs from one source.

What is regression to the mean in xG analysis?

Finishing far above or below chance quality is mostly unsustainable variance. Teams scoring well beyond their xG tend to cool off; teams underperforming their xG tend to recover. Because odds markets partially price recent results, xG over- and under-performers are a systematic place to look for value — fade the streak, back the underlying numbers.

Can I use xG for markets other than 1X2?

Yes. The same Poisson score matrix built from your λ inputs prices Over/Under totals (sum the cells where h + a exceeds the line), BTTS (both teams score at least once), correct scores (individual cells) and Asian handicap lines (cells grouped by winning margin). One pair of good λ estimates prices an entire match card.

Does an xG model edge guarantee a profitable bet?

No. Bookmakers and sharp bettors use the same public xG data, so a naive model mostly rediscovers the market price. Your edge is only as good as your λ estimates — opponent, venue, rotation and motivation adjustments — and it must exceed the margin. Validate any model by tracking closing line value over a large sample of bets.

Related Tools & Guides