Expected goals betting: xG models for football bets to predict GG and NG markets

Article Image

Why expected goals (xG) should shape your GG and NG betting decisions

You already know that raw scores and past results can mislead when you’re backing both teams to score (GG) or no goals (NG) markets. Expected goals (xG) strips away noise by evaluating the quality of chances rather than outcomes. That matters because a team can look prolific yet create low-probability chances, while another can be unlucky but generate high-quality opportunities — and those differences drive true scoring potential over time.

Using xG for betting helps you shift from reactive guessing to a probabilistic approach. Instead of assuming “Team A scores often,” you assess the likelihood both teams will score in a specific match given shot locations, shot types, defensive pressure, and other contextual variables. That probabilistic view is exactly what betting markets price — and where you can find value.

How xG models estimate scoring probabilities for GG and NG markets

What an xG model actually measures

xG models assign a probability to every shot: the chance that a particular attempt becomes a goal. You should understand that this is not a prediction of whether any single shot will become a goal, but an expected value: if 100 identical shots were taken, roughly xG*100 would be goals. Key variables typically include:

  • Shot location and angle — central, close-range shots have higher xG.
  • Shot type — headers usually carry lower xG than shots with the foot.
  • Assist type and buildup — fast breaks or crosses change conversion likelihood.
  • Defensive pressure and number of defenders between shot and goal.
  • Game context — counter attacks, set pieces, and goalkeeper positioning.

Turning xG outputs into GG and NG probabilities

To estimate the probability of both teams scoring, you combine each side’s expected goals for the match and convert those into probability distributions over goals. Common approaches include:

  • Poisson or negative binomial models that treat goals as independent events driven by mean xG values.
  • Simulating match outcomes by sampling from distributions conditioned on xG for each team, producing empirical probabilities for “both teams to score” and “no goals”.
  • Adjusting for correlation: shots and goals are not perfectly independent between teams, so you may include covariance terms or use bivariate models when you expect game states to influence both sides (for example, a red card or a very defensive strategy).

When you convert model-derived probabilities into implied odds, compare them to bookmaker prices to spot discrepancies. If your model estimates a 65% chance for GG and the book offers odds that imply 55%, you may have identified value — provided your model and inputs are robust.

In the next section you’ll see a simple, practical xG model implementation, the data you need, and how to calibrate it so your GG/NG probability estimates are realistic and actionable.

Article Image

Implementing a simple xG-based GG/NG model: data and workflow

Start with the right data: shot-event logs (each shot’s x and y coordinates), shot metadata (body part, assist type, situation — open play/set piece/counter), match context (home/away, minute, red cards), and season-level team-strength metrics (Elo, points per game, or aggregated xG-for/xG-against). If you can access pre-computed xG values per shot from providers, you can skip training a shot-level model and focus on match aggregation; otherwise train a logistic regression or gradient-boosted model to output shot xG using those features.

A minimal workflow that gets you actionable GG/NG probabilities:
– Produce match-level expected goals: sum all shot xG for each team to get xG_home and xG_away.
– Convert xG means to goal distributions. Start with Poisson: treat goals as Poisson-distributed with means xG_home and xG_away. If you prefer simulation, sample from Poisson(xG_home) and Poisson(xG_away) many times to build empirical probabilities.
– Estimate GG and NG probabilities from the simulated distribution: GG = proportion of sims with home_goals > 0 and away_goals > 0; NG = proportion where home_goals + away_goals = 0.
– Adjust for match-specific modifiers before simulating: home advantage multiplier, team form (recent xG-per-match), key absences (scale xG down for a missing top striker), and expected tactics (if a team is ultra-defensive, reduce their attacking xG).

Keep the pipeline modular so you can swap Poisson for alternative distributions and easily inject pre-match information (lineups, weather). Log all inputs so you can later explain why a model favored GG or NG in a given fixture.

Calibrating, validating, and handling dependence between teams

No model is useful without calibration and backtesting. Basic checks:
– Calibration: compare predicted goal probabilities against observed frequencies (e.g., matches where model predicts 20% chance of 0-0 should occur ~20% of the time). Use calibration plots and Brier score or log-loss to quantify reliability.
– Backtesting: run bets against historical bookmaker prices to compute expected value, hit rate, and ROI. Test across leagues and time-windows to avoid look-ahead bias.

Two important refinements often overlooked:
– Overdispersion: goals can be more variable than Poisson assumes (variance > mean). If residuals show overdispersion, switch to a negative binomial or mixture model to better model tail events (multiple goals).
– Dependence between teams: Poisson assumes independence, but match states create correlation (a red card or late chasing raises both teams’ shot rates). Options to handle this:
– Bivariate Poisson: adds a shared lambda term to introduce positive covariance.
– Copula or conditional simulation: simulate correlated goal counts using rank correlation estimated from historical matches.
– Heuristic state adjustment: model likelihood of increased scoring after events (e.g., if a team concedes and is expected to chase, increase both teams’ scoring rates for the remainder of the match).

Finally, always convert model probabilities to fair odds and then compare to market odds adjusted for bookmakers’ margin (vig). Only place bets where model-implied edge remains after vig and you have validated the model’s historical profitability. Regularly re-calibrate — teams evolve during a season, and a model that was well-tuned in August may drift by March if formations or personnel change.

Article Image

Practical checklist before placing GG/NG bets

  • Confirm starting lineups and any last-minute absences — missing strikers or goalkeepers can materially change xG expectations.
  • Compare your model’s implied odds to market odds after removing the bookmaker margin; target a clear edge (e.g., >= 5% differential) before staking.
  • Apply match-specific modifiers: weather, pitch quality, expected tactics (pressing vs. low block), and potential red-card risk.
  • Prefer leagues and competitions where your data coverage and model calibration are strongest; exotic or low-data leagues often produce noisy xG estimates.
  • Use conservative staking (flat stakes or Kelly fraction) while you backtest live performance; record all bets and reasons to enable later analysis.
  • Recalibrate models regularly and track performance metrics (ROI, Brier score, calibration plots) rather than relying on short-term win/loss runs.

How to keep improving your xG-driven bets

Treat your xG pipeline as a living system: log inputs, track where predictions deviate from reality, and iterate. Expand features gradually (pressing metrics, expected lineup rotations, fatigue indicators) and evaluate whether each addition improves calibration and profitability. When you find consistent edges, scale up slowly and keep strict risk controls; if edges disappear, pause and diagnose rather than increasing stake out of confidence.

Putting it into practice

Successful use of xG for GG and NG betting is a process, not a one-off trick. Focus on disciplined testing, transparent record-keeping, and continuous refinement. For additional data sources and methodological discussion, explore resources like StatsBomb to deepen your understanding of event-level data and advanced metrics.

Frequently Asked Questions

Can xG tell me the exact scoreline for a match?

No — xG estimates expected goals and helps produce probability distributions over possible scorelines, but it cannot predict a single exact result with certainty. Use xG to derive probabilities (and implied odds) for ranges of outcomes rather than treating it as a deterministic score predictor.

Is Poisson good enough for estimating GG and NG markets?

Poisson is a useful baseline because it converts mean xG into goal probabilities simply. However, it assumes independence and equidispersion; many competitions show overdispersion and match-state dependence. Consider negative binomial, bivariate Poisson, or simulation with state adjustments if Poisson residuals indicate systematic misfit.

How do I know when my model’s GG/NG edge is real and not overfitting?

Backtest on out-of-sample matches, across different seasons and leagues, and use metrics like Brier score, calibration plots, and historical ROI after bookmaker margin. A real edge should persist across time windows and not rely on a tiny number of special fixtures; if performance collapses out-of-sample, simplify or re-calibrate to avoid overfitting.