Engine Overview
Hockey is the hardest major sport to model. The combination of low scoring (average 6.2 total goals per game), high randomness (puck bounces, deflections, screened shots), and binary goaltending outcomes (save or goal) creates a sport where variance dominates signal. Most hockey models fail because they treat goals as the primary unit of analysis. Goals are too rare and too random to build reliable predictions from.
The V19.1 Pinnacle engine takes a different approach. Instead of modeling goals directly, we model the process that generates goals: shot generation, shot quality, and save probability. By simulating thousands of shots with realistic expected goals (xG) values, we let goals emerge naturally from the underlying shot process. This produces probability distributions that account for hockey's inherent randomness rather than pretending it does not exist.
How the NHL Simulation Works
1. MoneyPuck Expected Goals (xG) Integration
MoneyPuck is one of the most respected public analytics sources in hockey, and their expected goals model is the foundation of our shot quality assessment. Each shot in the simulation is assigned an xG value based on MoneyPuck's Fenwick Shot Value (FSV) model, which accounts for shot location, shot type, game state, rush vs. set play, and rebound status.
Rather than using a single team-level xG rate, we model shot generation at the zone level. Shots from the slot carry higher xG than shots from the point. Shots on the rush carry higher xG than shots during sustained zone pressure. This granularity means that a team generating 35 shots from the perimeter will have a different expected goal total than a team generating 25 shots from the inner slot, even though the raw shot count favors the first team.
2. Real Danger Zone Modeling
The ice surface is divided into distinct danger zones based on empirical goal-scoring rates. High-danger areas (the slot, the crease, the net-front) produce goals at 2 to 5 times the rate of low-danger areas (the point, the half-wall, the corner). The simulation models each team's tendency to generate and suppress shots in each zone, creating matchup-specific shot quality profiles.
A team that excels at generating high-danger chances but faces a goalie who specializes in close-range saves will have a different simulation outcome than a team that generates volume from the perimeter against a goalie who struggles with traffic. These interactions are captured at the zone level and resolved shot by shot.
3. Per-Zone Goalie Modeling
Goaltending is the single largest source of variance in hockey outcomes. A goalie having a .940 night can turn a 4-3 game into a 1-0 shutout. Traditional models use a single save percentage per goalie, which fails to capture the reality that goalies have zone-specific strengths and weaknesses.
The V19.1 engine models each goalie's save probability by zone. Some goalies are elite at close-range saves but average from distance. Others have excellent glove-side coverage but are vulnerable blocker-side low. By matching each simulated shot's zone and type against the specific goalie's zone-specific save rates, the simulation produces more realistic goal distributions.
Goalie performance also includes form modifiers. A goalie on a hot streak (high save percentage over recent starts) receives a slight positive modifier. A goalie returning from injury or coming off a poor stretch receives a negative modifier. These modifiers are small (typically 0.5 to 1.5% save percentage adjustment) but meaningful in a sport where margins are thin.
4. The FOLLOW/FADE Hybrid Strategy
This is the feature that most differentiates our NHL model from competitors. Through extensive backtesting, we discovered that raw simulation outputs have systematic biases in specific contexts. Away team picks, large underdogs, and high-edge situations all have historically negative expected value when followed blindly. The FOLLOW/FADE system corrects for these biases.
| Signal | Conditions | Action | Rationale |
|---|---|---|---|
| FOLLOW | Home picks, low edge (<15%) | Keep the pick | Home picks with moderate edges have the best historical ATS performance. The model's uncertainty is a feature, not a bug. |
| FADE | Away picks, underdogs, high edge (18%+) | Reverse the pick | High-edge away picks are consistently overconfident. Fading these picks has been profitable over 500+ game samples. |
| SKIP | Mixed signals, heavy favorites | No bet | When FOLLOW and FADE signals conflict, the expected value is near zero. Better to skip than to force a bet. |
The FOLLOW/FADE system is not a manual override. It is a data-driven signal layer that sits on top of the simulation and applies rules learned from historical performance. Without it, the NHL model loses money. With it, the model produces consistent positive ROI. This was one of the most important discoveries in our engine development process.
5. Possession Chains and Shot Sequencing
Hockey goals do not happen in isolation. They follow sequences: a zone entry, a cycle play, a shot, a rebound, a second shot. The simulation models these possession chains rather than treating each shot as an independent event. This means that teams with strong cycling games (sustained zone pressure, multiple shot attempts per possession) generate realistic goal-scoring sequences, including the dangerous rebound and second-chance opportunities that box scores miss.
6. Per-Player Shooting Profiles
Each skater in the simulation has an individual shooting profile derived from their season statistics. A sniper like a top-line winger will have higher shot accuracy and higher xG per attempt than a fourth-line grinder. When these players are on the ice (modeled via time-on-ice distributions), the team's shot quality changes accordingly.
Power play and penalty kill units receive separate treatment. The PP1 unit (typically featuring the team's best offensive weapons) generates shots at a higher rate and from more dangerous locations than the PP2 unit. Penalty kill units have their own shot suppression profiles. Special teams performance is a major driver of NHL outcomes, and the simulation models it explicitly rather than blending it into even-strength metrics.
Data Sources
- MoneyPuck — Fenwick Shot Value (FSV) xG model, Corsi data, zone-specific shot maps, and player-level individual expected goals (ixG)
- ESPN API — Real-time schedules, scores, rosters, and injury reports
- NHL Stats API — Official game data, power play and penalty kill rates, goaltender statistics
- The Odds API — Real-time moneyline, puck line, and total odds from multiple sportsbooks
Bayesian Shrinkage and Market Blend
Raw simulation probabilities for NHL games tend to be overconfident. If the model says a team has a 68% chance to win, the true probability is typically closer to 60%. This is a known problem in sports modeling called calibration error, and it is especially severe in hockey due to high variance.
We apply two corrections. First, Bayesian shrinkage pulls all probabilities 15% toward 50%, reducing overconfidence in strong predictions while preserving the directional signal. Second, a market blend incorporates closing odds from sharp sportsbooks. The market is not always right, but it is rarely completely wrong. Blending model and market probabilities produces better-calibrated edges than either source alone.
NHL Performance
Why xG-Based Simulation Beats Traditional Hockey Models
Traditional hockey models fall into two categories: Elo-based power ratings and regression models trained on box scores. Both have fundamental limitations.
Elo ratings update based on game results. A team that wins a game they dominated and a team that wins a game on a lucky bounce receive similar Elo adjustments. Over a full season, this averages out somewhat, but hockey seasons are short (82 games per team) and the signal-to-noise ratio is low. Elo models are slow to identify teams that are playing better or worse than their record suggests.
Regression models use box score stats (goals, shots, power play percentage) as inputs. The problem is that these stats are themselves noisy. A team's shooting percentage fluctuates wildly over 10-game windows, and building predictions on noisy inputs produces noisy outputs. Additionally, regression models cannot easily incorporate goalie matchup information, since the goalie changes game to game.
xG-based simulation solves both problems. Shot quality (xG) is a more stable measure of team quality than goals or shooting percentage. And the simulation framework naturally accommodates goalie-specific information, since each simulated shot is resolved against the starting goalie's save probabilities. The result is a model that identifies team quality faster and produces better-calibrated probabilities than either Elo or regression approaches.
Explore Other Models
NBA Model
Possession MC V5.0.2 — possession-by-possession simulation with Beta shooting distributions and 13-player rosters.
CBB Model
Savant Ultra v5.0.1 — 5-on-5 player simulation with EvanMiya BPR ratings and regime calibration.
NFL Model
Elite V1.1 Pinnacle — EPA metrics with CDF edge calculation and drive sequencing.
Soccer Model
V16.3 PBP — FBref xG, isotonic calibration, formation analysis, and BTTS modeling.
MLB Model
Elite Matchup V4.2 — count-state simulation, catcher framing, bullpen fatigue, and park factors.
LoL Model
Championship v2.1 — 5-layer Glicko-2 with market blend and patch-aware meta analysis.