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.
Model card
Calibration gate passed
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 × penaltiesThe 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)
| Spec | MAE | Bias | Slope | Gate |
|---|---|---|---|---|
| A | 0.412 | -0.007 | 0.972 | pass |
| C | 0.412 | -0.007 | 0.972 | pass |
| D | 0.391 | -0.014 | 0.96 | pass |
| E | 0.477 | -0.001 | 0.966 | pass |
| Z | 0.411 | -0.01 | 0.956 | pass |
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
| Scope | Matches | fxG | 80% model range | xG per shot | Goals | 80% goals range | Goals − fxG |
|---|---|---|---|---|---|---|---|
| 2019-20 | 30 | 35.97 | 33.39–39.83 | 0.130 | 40 | 29–43 | +4.03 |
| 2020-21 | 38 | 43.62 | 40.26–48.61 | 0.101 | 36 | 36–51 | -7.62 |
| 2021-22 | 38 | 48.48 | 45.01–53.65 | 0.096 | 41 | 40–57 | -7.48 |
| 2022-23 | 38 | 45.16 | 42.47–50.56 | 0.103 | 56 | 37–53 | +10.84 |
| 2023-24 | 38 | 49.88 | 45.82–54.78 | 0.107 | 48 | 42–58 | -1.88 |
| 2024-25 | 38 | 44.98 | 41.38–49.86 | 0.098 | 48 | 37–53 | +3.02 |
| 2025-26 | 38 | 42.03 | 38.87–47.09 | 0.098 | 40 | 34–50 | -2.03 |
| 2026-27 | 9 | 10.57 | 8.93–12.57 | 0.097 | 10 | 7–14 | -0.57 |
| Era | 267 | 320.69 | 311.89–341.36 | 0.103 | 319 | 300–342 | -1.69 |
| Last 10 | 10 | 11.06 | 9.41–13.24 | 0.094 | 12 | 7–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
Dataset 2026-10-27T12:06:31+00:00-c598315. Sources and coverage are listed below; the page keeps its own source and uncertainty labels.
- League team match stats · football_data_uk · active
- Event-derived Aberdeen stats · api_football · active
- fitba expected goals · computed; fallback football_data_uk, api_football · experimental
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.