Bayesian Spatial Modeling for Evaluating Hockey Goaltending Performance
A goalie's save percentage answers a narrow question: what share of shots did they stop? It does not answer the question a general manager needs answered: did this goalie perform well given the shots they faced? A goalie behind a strong defense sees fewer dangerous chances and looks better than their true skill. A goalie facing a barrage of high-danger rebounds looks worse. The raw number conflates skill with the difficulty of the job, and it reports that conflation as a single confident figure with no sense of how much of it is noise.
The same problem shows up anywhere a team judges performance from a raw outcome rate: a sales rep's close rate without adjusting for lead quality, a campaign's conversion rate without adjusting for audience, a support agent's resolution time without adjusting for ticket complexity. Trusting the raw number rewards position over skill.
How do you separate shot difficulty from goalie skill?
One worked analysis of a full NHL season addressed this by building a spatial model of shot danger, then measuring each goalie against that model instead of against a league-wide average. The dataset covered shots from the 2023-2024 season: 121,670 raw shots across 99 goalies and 921 shooters, reduced after filtering out empty-net, power-play, and non-offensive-zone shots to 91,247 shots, a 75.0% retention rate.
The core idea: model the probability of a goal as a function of where the shot came from, using a Gaussian process. A Gaussian process learns a smooth surface over the ice rather than a single number: it estimates goal probability at every point in the offensive zone, plus how uncertain that estimate is, based on nearby observed shots. Points close together on the ice are assumed similarly dangerous; the model lets the data determine how fast that similarity decays with distance.
Fitting an exact Gaussian process to tens of thousands of shots is computationally expensive, so the analysis used a Hilbert Space Gaussian Process approximation, which projects the surface onto a finite set of basis functions to make the computation tractable at that scale.
What does the baseline model get wrong?
A location-only model has an obvious flaw: it treats the ice as stationary, meaning it assumes danger changes at the same rate at every distance from the net. That is not true near the net, where danger rises sharply over a short distance, compared to farther out, where it changes far more gradually. The analysis corrected for this with coordinate warping: transforming the input coordinates with an arcsinh (inverse hyperbolic sine) function of distance from the goal, using a 5-foot offset and a 20-foot scale parameter, so the model could vary its effective sensitivity to location faster near the net and more slowly farther out.
From there, the model added a rebound indicator, since a shot immediately following a rebound is a different kind of scoring chance than an unassisted shot from the same spot. Rather than adding a constant rebound bonus everywhere on the ice, the analysis modeled the rebound effect as its own spatial surface and combined it multiplicatively with the baseline danger surface, so a rebound in the slot, where baseline danger is already high, gets amplified more than a rebound from the corner.
Finally, the model added a hierarchical shooter effect: a per-shooter adjustment, estimated jointly across all shooters so that shooters with few recorded shots borrow statistical strength from the overall distribution rather than producing a noisy individual estimate. That hierarchical structure (modeling many related units together instead of one at a time) is the same discipline behind treating any small-sample group (a new sales territory, a newly launched product SKU) as informed by, but not identical to, the population it belongs to.
What is Goals Saved Above Expected?
Once the model estimates expected goal probability for every shot a goalie faced, it can compute Goals Saved Above Expected: the sum of expected goals across all shots faced, minus goals allowed. A positive value means the goalie prevented more goals than the model expected given shot quality; a negative value means they allowed more. Goals Saved Above Expected is one of the standard advanced hockey metrics for separating goalie performance from shot quality.
The distinguishing feature of the Bayesian version of this metric is not the point estimate. It is the interval around it. Because the underlying goal-probability model produces a full posterior distribution rather than a single number, the resulting Goals Saved Above Expected figure comes with a credible interval attached to every goalie's estimate, not just a ranked list. Reading that interval, not the point estimate alone, separates a meaningful performance signal from a plausible-looking coincidence.
In the original season-long analysis, several goalies with a negative point estimate had credible intervals that included zero, meaning the model's estimate of the shot difficulty those goalies faced was too uncertain to say with confidence that the negative point estimate reflected true underperformance rather than uncertainty in how dangerous their shots against were. That is not a modeling failure. It is correct behavior for a metric meant to prevent overconfident conclusions from small, noisy samples, and it is a more honest answer than a leaderboard position implies.
Why the uncertainty is the deliverable, not the ranking
It is tempting to read a model like this as a ranked list of goalies, the least useful thing to take from it. The original analysis frames itself as one worked example on one season of public shot data: a demonstration of a modeling approach, not a validated production rating system. Its goaltender rankings belong to that one analysis, not to any standardized industry benchmark.
What generalizes is the discipline: before trusting a raw outcome metric, ask what confounds it, model those confounds explicitly, and report the estimate as a range rather than a single number. That discipline is the same one Subconscious applies to causal action testing: a tested pricing change, message, or product variant is reported with a quantified effect and an uncertainty band, not a single confident number standing in for "this worked." A range that overlaps with "no effect" is treated as inconclusive rather than rounded up to a win.
Where this method stops
This kind of model estimates relative performance against expectation within one dataset and one modeling choice; it does not certify universal truth about a player's skill. The underlying danger surface's uncertainty is widest in ice regions with fewer, noisier shots; on the summed Goals Saved Above Expected metric, interval width instead grows with the number of shots a goalie faced, wider for high-volume starters than for rarely-used backups. That is a feature, not a limitation, of an approach designed to keep small samples from masquerading as strong signal. A production deployment would need cross-season validation, additional contextual variables such as team defensive quality, a goalie term so that each goalie's own shots do not inform the expected-goals baseline used to grade them, and sensitivity checks against alternative model specifications, none of which are attempted here.
The broader takeaway for any team deciding whether to act on a performance number: ask whether that number has been adjusted for the difficulty of the situation it was measured in, and ask whether it comes with a range or a single point. If the answer to either is no, treat the number as a starting hypothesis, not a decision. Subconscious's research program and replication leaderboard apply that same standard, quantified effects with visible uncertainty, to the commercial decisions a go-to-market team works through.