Model · fxg-3

fxG

fitba's team-match expected goals: open-play shot zones, shots on target and penalties, fitted to provider xG. It carries an 80% model range for the estimate and a separate 80% goals range for the same chances. It is not provider xG, not a shot-level location model and not a result prediction.

Season overview → Method → Results and fixtures →

Model card

Calibration gate passed

pass

What it does

Estimates open-play expected goals from the selected specification shot-zone volume plus on-target:

fxG = max(0, 0.092 × inside-box shots + 0.000 × outside-box shots + 0.106 × shots on target) + 0.76 × penalties

The coefficients are fitted to 2026-27 Premiership provider xG. Penalties are counted separately at 0.76 xG each and removed from the open-play counts. The 80% model range is the uncertainty in this estimate.

What it does not do

It does not see shot distance, angle, body part, defensive pressure, goalkeeper position or post-shot placement. It does not adjust for opponent or game state. It is a team-match estimate, not a shot-level xG model, not xGOT and not provider xG. It does not predict results or rank players.

Fit

60 matches / 119 team rows; 2026-27 sco:premiership. Features: open_play_insidebox, open_play_outsidebox, open_play_sot. Bootstrap: 2000/2000 draws, clustered by match.

Evaluation

  • Validation season: 2026-27
  • Method: leave_one_match_out
  • Matches with provider xG: 60
  • Team-match rows: 119
  • Bias: -0.014
  • MAE: 0.391
  • Calibration slope: 0.96
  • R²: 0.61
  • Model-range coverage: 0.824
  • Goals-range coverage: 0.958 (a discrete range can cover more than its nominal level)
Candidate specifications; the selected model is the gate-eligible candidate with the lowest MAE, with a simplicity and penalty tie-break.
SpecMAEBiasSlopeGate
A0.412-0.0070.972pass
C0.412-0.0070.972pass
D0.391-0.0140.96pass
E0.477-0.0010.966pass
Z0.411-0.010.956pass

Transfer check: 26 matches / 52 team rows in 2025-26 from api_football; MAE 0.339, bias -0.165, slope 1.12. Informational transfer check: 2025-26 and API-Football provider xG against a model fitted to 2026-27 football-data xG. It crosses season and provider and is never used for tuning.

Leave-one-match-out calibration to 2026-27 provider xG. This is an in-season calibration, not an out-of-season holdout; the model is not a location xG and does not predict results.

Uncertainty

Two ranges, two questions

80% model range

How uncertain is the fxG estimate? The range is the 10th–90th percentile of match-clustered bootstrap predictions plus the leave-one-match-out residual pool. It is the uncertainty in the number, not a prediction of the score.

80% goals range

How many goals would the same chances produce? Open-play goals use a binomial (beta-binomial when dispersion is above one) and penalties use a separate binomial at 0.76. Aggregate distributions are convolved, so the width grows with the square root of the number of matches. Per-match intervals are never summed.

Goals dispersion: 1. Bootstrap: 2000 valid draws from 2000, seed 20261022. The ranges are descriptive and are not confidence intervals for team quality.

fxG

Expected goals, with a model range and a goals range

experimental
fxG aggregates with an 80% model range, an 80% goals range and goals.
ScopeMatchesfxG80% model rangexG per shotGoals80% goals rangeGoals − fxG
2019-203035.9733.39–39.830.1304029–43+4.03
2020-213843.6240.26–48.610.1013636–51-7.62
2021-223848.4845.01–53.650.0964140–57-7.48
2022-233845.1642.47–50.560.1035637–53+10.84
2023-243849.8845.82–54.780.1074842–58-1.88
2024-253844.9841.38–49.860.0984837–53+3.02
2025-263842.0338.87–47.090.0984034–50-2.03
2026-27910.578.93–12.570.097107–14-0.57
Era267320.69311.89–341.360.103319300–342-1.69
Last 101011.069.41–13.240.094127–15+0.94

Scottish Premiership only. Cup and European fxG is published on each match page and is not added to these league aggregates. Totals over the scope; divide by matches for a per-match figure. The 80% model range is the uncertainty in the fxG estimate. The 80% goals range is the spread of goals the same chances would produce; it is not a confidence interval for team quality and it is not a result prediction. Per-match intervals are never added together. fxG is a team-match estimate from shots, shot zones and penalties; it is not provider xG, and provider xG is never blended into it. Current-season shot counts use API-Football; historical league shots use football-data. Goals − fxG uses the final score, including own goals; own goals are not part of the shot model.

Finishing

Goals minus fxG, and how unusual it is

Era: 319 goals from 320.69 fxG, a difference of -1.69, within the 80% goals range. The result is descriptive: one season is a small sample, finishing overperformance usually regresses, and style changes the chance profile without changing the model.

Last 10 league matches: 12 goals from 11.06 fxG, +0.94, within the 80% goals range. This is not a verdict on finishing skill.

Style

Volume and chance quality are different profiles

  • Shots: 3111 in 267 matches; shots on target: 1019.
  • xG per shot: 0.103. A volume side can take many lower-quality shots; a selective side can take fewer better ones. Neither is better in isolation.
  • Penalties: 33 attempts, counted separately.

A low block can concede volume while limiting quality; a high press can force low-quality shots or create high-quality turnovers. fxG does not adjust for style, opponent or game state. Read xG per shot with shot volume, not instead of it.

Coverage

What the record can support

  • Played fixtures: 367
  • Fixtures with fxG: 292
  • Fixtures with provider xG: 47
  • Fixtures missing team stats: 75

fxG needs shots on target. Missing provider team statistics are shown as unavailable, not zero.

Provider xG

A separate model, never blended

Provider xG is carried where the feed supplies it: football-data.co.uk 2026-27 SC0 and API-Football where returned. It is a different model, uses shot locations and its own training data, and its decimals are not comparable across providers. It is never averaged with fxG.

There is no xGOT or post-shot xG in this record: goalmouth trajectory is not available. Missing provider values are unavailable, not zero.

Provenance

How this page is sourced

Data as of 27 Oct 2026

Dataset 2026-10-27T12:06:31+00:00-c598315. Sources and coverage are listed below; the page keeps its own source and uncertainty labels.

Definitions: analysis.summary · matches.document · xg.document · xg.goals-minus · xg.goals-range · xg.model-range · xg.per-shot

Corrections and changes are recorded on Corrections and contact.

Cite this page

fxG analysis. Dataset 2026-10-27T12:06:31+00:00-c598315, as of 2026-10-27T12:06:31+00:00. Sources: football-data.co.uk; API-Football; computed. Definitions: analysis.summary; matches.document; xg.document; xg.goals-minus; xg.goals-range; xg.model-range; xg.per-shot.