GPH Analytics
Methodology
How performance and consistency are measured, and how the numbers are checked

Two goalies can finish a season with the same save percentage and be completely different to rely on: one gives you a solid game almost every night, the other alternates between stealing games and losing them. This dashboard separates those two things. Performance is how many goals a goalie saves compared with what an average goalie would allow on the same shots. Consistency is how tightly their game-to-game results cluster around their own level.

The data
  • Game-by-game goalie logs from MoneyPuck.com, regular season only, all game situations (5-on-5, power play, penalty kill).
  • Expected goals against (xGA) is MoneyPuck's estimate of how many goals an average goalie would allow on the shots faced, based on shot location, angle, type, rebounds, rushes and game state.
  • Updated every morning after MoneyPuck processes the previous night's games, then checked against NHL.com's official stats before it's published (see accuracy checks).
How the numbers are built
  1. 1
    Goals saved above expected, per game
    GSAx = xGA − GA
    Positive means the goalie allowed fewer goals than the shots deserved.
  2. 2
    Performance μ (shrunk average GSAx per game)
    μ = Σ(wᵢ · GSAxᵢ) / (1/τ² + Σwᵢ), wᵢ = 1 / xGAᵢ
    A weighted average of the goalie's GSAx, pulled toward zero. Games with heavy shot quality get less weight because their outcomes are noisier. The pull, set by τ² (how much true talent varies between goalies, estimated from the whole league each season), is strong with a handful of games and fades as games pile up. That stops a goalie with three lucky starts from topping the chart.
  3. 3
    Standardize each game
    zᵢ = (GSAxᵢ − μ) / √xGAᵢ
    How far each game landed from the goalie's own norm, scaled by how much randomness that workload carries. Goals behave roughly like a count with standard deviation √xGA, so a bad night against 4.0 xGA is less surprising than the same result against 1.5 xGA.
  4. 4
    Volatility
    volatility = 1.4826 × median(|zᵢ − median(z)|)
    A robust spread of the z-scores (the median absolute deviation, scaled to match a standard deviation). Using medians means a single 7-goal blowout doesn't define a season.
  5. 5
    Consistency score (0–100)
    consistency = 100 × e^(−0.7 × volatility)
    Volatility
    0.25
    0.5
    0.75
    1
    1.5
    2
    Score
    84
    70
    59
    50
    35
    25
    For scale: a perfectly average goalie whose game-to-game results were pure luck would score about 50 (typically 47–55 over a 50-game season). Higher is more predictable than luck alone; lower means bigger swings. Goalies with a single game get no score, since one game has no spread.
  6. 6
    Boom and bust games
    A bust is a game with z ≤ −2 (think 6 goals on 2.5 xGA) and a boom is z ≥ +2. Because a goalie can't allow fewer than zero goals, booms need something like a shutout against heavy pressure, so they're rare: luck alone produces about 1 boom per 1,000 games but about 4 busts per 100. Boom/bust rates are the share of a goalie's games in each.
  7. 7
    Career trends
    Each season with at least 5 games is scored on its own. Career consistency is the average across seasons weighted by games played, and the trend is the slope of a games-weighted line through those seasons (needs 3+ seasons).
Reading the season chart
Left/right of the vertical line: performance μ below or above zero. Above/below the horizontal line: more or less consistent than the median goalie shown.
Limited but Steady — Performance μ below zero, but steadier night to night than the median goalie shown.
Elite + Steady — Positive μ (saving more than expected) and steadier than the median goalie shown.
Limited + Volatile — Performance μ below zero, with bigger game-to-game swings than the median goalie shown.
Elite but Volatile — Positive μ, but bigger game-to-game swings than the median goalie shown.

Consistency is relative to a goalie's own level, so a reliably below-average goalie can rate as steady. Read the two axes together.

Accuracy checks
Run automatically every time new games are published. If a serious problem turns up, the update is held back and the site keeps the last good data.
Limitations
  • Expected goals can't see everything (screens, pre-shot passing, defensive breakdowns), so some team effects remain in a goalie's numbers.
  • Small samples are noisy. Use the min-games filter, especially early in a season.
  • The data is only as complete as MoneyPuck's. Any game missing upstream is listed in the accuracy checks above.
  • Playoff games are not included.