xG model calibration
NHL · 2025-26 held out · how the model works
What is being tested
A model trained on 2022-23 to 2024-25 (xg-nhl-v2-20261110-63987919) scored every 2025-26 shot without having seen any of them. Those predictions are what this page checks. The live model (xg-nhl-v2-20261110-976284ae) is the same recipe retrained on 2023-24 to 2025-26; it has no unseen season yet, so these numbers stand for the recipe.
Log loss and Brier score measure how far the predicted chances were from what happened (lower is better). AUC is how often a goal had a higher xG than a non-goal (0.5 is a coin toss).
Predicted against actual, 2025-26
Shots sorted by xG and cut into ten equal groups. A well-calibrated model sits on the diagonal: shots it calls 10% chances go in about 10% of the time. Points under the line mean the model expected more goals than were scored.
| Group | Shots | xG range | Predicted | Scored |
|---|---|---|---|---|
| 1 | 11,932 | 0.1% to 0.9% | 0.5% | 0.3% |
| 2 | 11,932 | 0.9% to 1.6% | 1.2% | 1.0% |
| 3 | 11,932 | 1.6% to 2.3% | 1.9% | 1.8% |
| 4 | 11,932 | 2.3% to 3.3% | 2.8% | 2.7% |
| 5 | 11,932 | 3.3% to 4.7% | 4.0% | 3.8% |
| 6 | 11,932 | 4.7% to 6.6% | 5.6% | 5.4% |
| 7 | 11,932 | 6.6% to 8.8% | 7.6% | 7.4% |
| 8 | 11,932 | 8.8% to 11.8% | 10.2% | 10.4% |
| 9 | 11,932 | 11.8% to 16.7% | 14.0% | 13.7% |
| 10 | 11,931 | 16.8% to 96.4% | 27.1% | 25.4% |
By manpower, 2025-26
| Situation | Shots | Goals | xG | xG vs goals | Log loss | AUC |
|---|---|---|---|---|---|---|
| Even strength | 98,247 | 6,136 | 6,376 | +3.9% | 0.2005 | 0.786 |
| Power play | 17,347 | 1,695 | 1,828 | +7.8% | 0.2970 | 0.690 |
| Shorthanded | 2,657 | 188 | 186 | −0.9% | 0.1991 | 0.844 |
| Into an empty net | 1,068 | 547 | 563 | +2.9% | 0.5468 | 0.781 |
Shots at an empty net go in about half the time, so their log loss is not comparable with the other rows.
Season by season
Each season scored by a model trained only on earlier seasons. The first 3 were used to choose the settings, which flatters them slightly; 2025-26 played no part in any choice. The last column is a model trained on every earlier season with no recency weighting, for comparison.
| Season | Role | Log loss | Unweighted, all seasons |
|---|---|---|---|
| 2022-23 | chose settings | 0.2257 | 0.2282 |
| 2023-24 | chose settings | 0.2179 | 0.2258 |
| 2024-25 | chose settings | 0.2119 | 0.2238 |
| 2025-26 | held out | 0.2176 | – |
Against MoneyPuck, 2025-26
We matched our 2025-26 shots to MoneyPuck’s published shot file by game, game clock and outcome, and scored both models on the shots that matched one to one: 118,225 of 119,319 (99.1%).
| Model | Log loss, matched shots |
|---|---|
| The Daily Goal Horn | 0.2185 |
| MoneyPuck | 0.2222 |
| Difference (ours minus theirs) | −0.0037 (95% interval −0.0050 to −0.0024) |
The interval comes from resampling 1,394 games. Our release bar is a difference no worse than +0.01 on at least 90% of shots; this model met it. MoneyPuck’s values are as published; we do not know whether its model had already seen 2025-26, which would favour it.