How our models work
Different hockey questions, different prediction tasks. Here's what each model estimates, what goes into it, and how to read the result.
Which team is more likely to win?
The game model estimates a team's chance of winning a matchup. XGBoost combines many decision trees to learn relationships between historical matchup features and game outcomes.
What goes into it?
Team performance history and matchup context are transformed into model inputs. The exact inputs and preprocessing depend on the selected model version. The site lets you compare published game model versions; V3 is being developed separately.
How to read it
A 60% prediction favors that team, but still leaves a 40% chance for its opponent. It is a win probability, not a projected score or a guarantee. Whether probabilities match observed win rates over many games is a separate question from how often the favored team wins.
A betting edge also depends on the sportsbook's price. Being the more likely winner alone does not establish value.
Game model performance Explore game predictionsHow likely was this attempt to score?
The xG model gives each included attempt a scoring probability. An attempt worth 0.20 xG has an estimated 20% chance of becoming a goal. Add the probabilities to measure the chances created by a player or team.
What goes into it?
Shot location, distance and angle, shot type, game situation and the available event context. V1 uses a saved training-fitted preprocessing pipeline and a frozen XGBoost model, with training starting in the 2023–24 season. Scoring historical or new games does not retrain it.
What is included?
Regular-season goals, saved shots and missed attempts with a goalie in net. Empty-net attempts, blocked shots and shootouts are excluded. We show coverage so unscored games are never silently treated as zero xG.
How to read the comparisons
Team xG difference is xG created minus xG conceded. Player goals above xG is included goals minus individual xG. Goalie goals saved above expected (GSAx) is xG faced minus goals allowed on included attempts; positive values mean fewer goals allowed than expected. These describe played games and can differ from full boxscore goal totals.
How do we measure quality?
Log loss, Brier score and calibration test the probabilities. Summed xG versus actual goals checks the totals. A constant training-goal-rate baseline gives us a simple comparison. Saved development results are labeled separately from games played after V1 was frozen.
xG model performanceExplore advanced dataWho is likely to start in net?
This model scores each eligible goalie for an upcoming team-game. It predicts who will start, rather than how well that goalie will play or whether the team will win.
What goes into it?
Previous starts and appearances, days since the last start, consecutive starts, prior start share, team workload, home or away status, and previous save-percentage history. The rolling save percentage uses five actual appearances, carrying that history across backup games.
The saved pipeline fills missing inputs using training-set medians and missing-data indicators. A goalie with limited history can still be considered.
From model score to expected starter
Current NHL goalie rosters supply the candidates, with manual additions and availability exclusions. Eligible candidates' raw scores are normalized to total 100% for each team. The highest share becomes the expected starter.
For example, raw scores of 0.60 and 0.40 become shares of 60% and 40%. Raw scores of 0.60 and 0.20 become shares of 75% and 25%. The displayed percentage depends on the other eligible goalies too.
Expected starter does not mean confirmed starter. A sole candidate is labeled “Only eligible candidate.” Failed roster retrieval or an empty eligible list produces an unavailable prediction.
Timing and uncertainty
Predictions cover today and tomorrow using available completed history. An intervening scheduled game is flagged because its goalie usage and result are not yet known. Update times and stale labels help you judge freshness.
How it is evaluated
Training, validation, and testing use chronological date groups. Settings are selected using validation log loss; the test set is held out from selection. Probability metrics and team-game starter selection are compared with a simple baseline: choose the goalie with the highest prior start share.
Find upcoming matchups Goalie model performanceWhat scoring rate might a player produce?
Separate models project goals, assists, and points per game for a season. These are season-level rate projections, rather than probabilities of scoring in an individual game.
What goes into them?
Historical scoring and shooting rates, playing time and usage, other season statistics, age, and player background. The saved 2026–27 models use Elastic Net regression, which learns weighted relationships while limiting overly large feature weights.
How to read the projections
A projection of 0.75 points per game describes an expected scoring rate. Multiplying by an assumed number of games gives an illustrative total, not a guarantee of playing that many games. Injuries, lineup roles, trades, and opportunity can change the actual result.
Because goals, assists, and points have separate models, their projections need not add up exactly. Errors are measured against actual player production; mean absolute error describes the typical size of a prediction error.
Player projections Player model performanceWhat the SHAP bars explain
On matchup pages, the goalie chart shows the five strongest influences on the selected goalie's raw starter score, ranked by absolute SHAP contribution.
- Positive influence raises the score relative to the model's baseline.
- Negative influence lowers it.
- Longer bars mean stronger effects within that goalie's displayed factors.
The signed values are contributions in log-odds, not percentage-point changes to the displayed starter share. Missing-input indicator contributions are grouped with their corresponding feature. The five displayed factors are only part of the full explanation.
SHAP explains the model's calculation. It does not prove that a feature caused the coach's decision, and exclusions or other candidates can change the normalized share independently.
Judge predictions over time
Historical results help assess model performance, but they do not guarantee future accuracy. Data freshness, limited history, changes in team roles, and changing hockey conditions all affect predictions.
Keep the task in mind: game models predict winners, goalie models predict starters, and player models project scoring rates. Their metrics answer different questions and should not be compared as if they were the same result.
How our data works