The Daily Goal Horn
Advertisement

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.

Shots119,319
Goals8,566
xG8,952+4.5% vs goals
Log loss0.2176base rate 0.2582
AUC0.787
Brier0.0593

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.

0.2%0.2%0.5%0.5%1%1%2%2%5%5%10%10%20%20%50%50%perfect calibrationPredicted chance of a goal (mean xG in the group)Share that went inGroup 1 of 10 (11,932 shots, xG 0.1% to 0.9%): predicted 0.5%, scored 0.3%Group 2 of 10 (11,932 shots, xG 0.9% to 1.6%): predicted 1.2%, scored 1.0%Group 3 of 10 (11,932 shots, xG 1.6% to 2.3%): predicted 1.9%, scored 1.8%Group 4 of 10 (11,932 shots, xG 2.3% to 3.3%): predicted 2.8%, scored 2.7%Group 5 of 10 (11,932 shots, xG 3.3% to 4.7%): predicted 4.0%, scored 3.8%Group 6 of 10 (11,932 shots, xG 4.7% to 6.6%): predicted 5.6%, scored 5.4%Group 7 of 10 (11,932 shots, xG 6.6% to 8.8%): predicted 7.6%, scored 7.4%Group 8 of 10 (11,932 shots, xG 8.8% to 11.8%): predicted 10.2%, scored 10.4%Group 9 of 10 (11,932 shots, xG 11.8% to 16.7%): predicted 14.0%, scored 13.7%Group 10 of 10 (11,931 shots, xG 16.8% to 96.4%): predicted 27.1%, scored 25.4%
Log scale on both axes. Hover or focus a point for its numbers; all of them are in the table below.
Calibration by tenth of predicted xG, 2025-26
GroupShotsxG rangePredictedScored
111,9320.1% to 0.9%0.5%0.3%
211,9320.9% to 1.6%1.2%1.0%
311,9321.6% to 2.3%1.9%1.8%
411,9322.3% to 3.3%2.8%2.7%
511,9323.3% to 4.7%4.0%3.8%
611,9324.7% to 6.6%5.6%5.4%
711,9326.6% to 8.8%7.6%7.4%
811,9328.8% to 11.8%10.2%10.4%
911,93211.8% to 16.7%14.0%13.7%
1011,93116.8% to 96.4%27.1%25.4%

By manpower, 2025-26

SituationShotsGoalsxGxG vs goalsLog lossAUC
Even strength98,2476,1366,376+3.9%0.20050.786
Power play17,3471,6951,828+7.8%0.29700.690
Shorthanded2,657188186−0.9%0.19910.844
Into an empty net1,068547563+2.9%0.54680.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.

SeasonRoleLog lossUnweighted, all seasons
2022-23chose settings0.22570.2282
2023-24chose settings0.21790.2258
2024-25chose settings0.21190.2238
2025-26held out0.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%).

ModelLog loss, matched shots
The Daily Goal Horn0.2185
MoneyPuck0.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.