NHL Projection Model
How Fairline's NHL model works: a Poisson goal-rate framework with goalie Marcels, special teams, home ice and rest adjustments, and the markets it prices.
Updated Sep 2026 · Part of the models series
Statistical estimates, not betting advice. Past results do not predict future results. 21+. Call or text 1-800-MY-RESET (1-800-697-3738).
Why does the model use a Poisson distribution?
Hockey scoring fits the Poisson distribution well. Goals are relatively rare events (teams average around 3.05 per game), they arrive roughly independently throughout the game, and the variance-to-mean ratio of NHL goal totals sits close to 1.0, which is exactly what Poisson assumes. That lets the model compute each team's expected scoring rate (lambda) and generate a full 11x11 score matrix with one clean probability for every possible scoreline.
Hockey has a structural quirk: 5-on-5 play, power plays, and the goaltender all contribute to scoring in different ways. The model handles this by building each team's lambda multiplicatively: a 5v5 expected-goals base rate (the most predictive team-level metric in hockey), scaled by the opposing goaltender's quality, with special-teams goals added on top. Flat situational adjustments for home ice, back-to-back fatigue, and travel are applied after that. The starting goaltender is the single highest-leverage variable, capable of swinging win probability by 3-5 percentage points on its own, so the model invests heavily in goalie projection.
How does the model project a team's goals?
It multiplies the league average rate of regulation goals outside the power play by the team's attack strength, by how leaky the opponent's defense is, and by a multiplier for the goalie that team has to beat. Power-play goals, from the team's power play matched against the opponent's penalty kill, and flat adjustments for home ice, rest and travel are added on top. The result is one expected regulation goal count per team, which the Poisson distribution turns into a probability for every scoreline.
x Goalie_Mult + Matched_PP_Goals + Situational_Adj
Each team's lambda represents their expected goals for the game. The two lambdas are fed into the Poisson PMF to produce a regulation scoreline matrix. Every tied regulation score then receives one deciding goal, split using a 54% home OT win rate, and the resulting final-score distribution prices the moneyline, the puck line and every total.
Do the factors add up, or multiply?
The two team-strength factors and the goalie multiply. Special teams and the situational adjustments add. That split is deliberate: 5v5 expected goals sets the base rate because it is the steadiest signal in hockey, while a hot power play or a back-to-back is worth a fixed number of goals rather than a percentage of everything else.
The model is multiplicative, not a weighted average of factor scores. Each team's 5v5 attack and defense strength (its xGF/60 and xGA/60 measured against the league average) multiply against the opponent's and the league scoring rate, and the opposing goalie's quality then scales that base rate up or down. Matched power-play goals and flat situational adjustments (home ice, rest, travel) are added on top. 5v5 expected goals sets the base because it is the most stable and predictive even-strength signal in hockey; goaltending enters as a direct multiplier because it is the single highest-leverage variable that changes nightly.
Team strength itself is a genuine weighted blend of season-long form and a recent-games window, so a hot or cold stretch moves the number without letting a small sample take over.
| Parameter | Value | |
|---|---|---|
| Season-long form | 70% weight | Full-season 5v5 xG rates; the stable anchor |
| Recent form | 30% weight | Last 17 games (captures streaks and mid-season shifts) |
How does the model project a goalie?
It blends four seasons of the goalie's save percentage with declining weight, adds phantom shots at the league average to pull an extreme number back toward the middle, then blends that baseline with his recent starts on game day. Save percentage needs thousands of shots to settle, which is why the projection reaches back that far.
Goalie save percentage is notoriously noisy, requiring thousands of shots to stabilize. The model uses a "Hockey Marcels" projection system that blends multiple seasons of data with declining weights, then regresses toward the league average by adding 8000 phantom shots at league-average SV%. On game day, the Marcel baseline is blended with the goalie's recent starts to capture current form.
| Parameter | Value | |
|---|---|---|
| Current season | 100% weight | Full season data at face value |
| Prior season | 60% weight | Most recent historical context |
| Two seasons ago | 50% weight | Useful for injury-return seasons |
| Three seasons ago | 30% weight | Small but stabilizing contribution |
| Regression shots | 8000 | Phantom shots at league-avg SV% to pull extremes toward mean |
| Game-day: recent starts | 10% | Last 12 starts (captures hot/cold streaks) |
| Game-day: baseline | 90% | Multi-year Marcel projection; the stable anchor |
What are home ice and a back-to-back worth?
Both are flat goal adjustments on the expected goal count, not percentages. The home team gains goals, a team playing the second night of a back-to-back loses them, and Colorado and Vegas carry extra venue adjustments when their matchup conditions apply. The table below gives each number.
Home ice and schedule context enter the projection as goal-rate adjustments. The home team receives a modest lambda increase, while a team playing the second game of a back-to-back receives a scoring penalty. Colorado and Vegas add the venue-specific goal adjustments shown below when their matchup conditions apply.
| Parameter | Value | |
|---|---|---|
| Home ice goals | +0.175 | Added to the home team's lambda |
| Colorado altitude | +0.05 extra goals | Thin air at 5,280 ft; visitors tire faster |
| Vegas bonus | +0.03 extra goals | Sustained strong home record vs non-Pacific teams |
| B2B goals penalty | -0.175 | Fatigue reduces expected scoring |
How do the power play and the penalty kill enter the projection?
As a goal count added to each team's expected goals. The model matches each team's power-play conversion rate and expected opportunities against the opponent's penalty kill, and adds the resulting power-play goals to the attacking team. A strong penalty kill lowers the opponent's expected goals, never its own. Expected goals on the power play stay a diagnostic and never touch the projection.
Power-play goals use the attacking team's conversion rate and opportunities averaged with the defending team's kill rate and opportunities allowed. MoneyPuck xG remains a sustainability diagnostic in the data layer, but it does not change the lambda calculation.
| Parameter | Value | |
|---|---|---|
| League PP% | 21% | Average power play conversion rate |
| League PK% | 79% | Average penalty kill success rate |
What league averages anchor the numbers?
A team's attack strength is its 5v5 expected goals per 60 minutes divided by the league average, so a ratio above 1.0 means it generates more chances than a typical team. The goalie multiplier works off the league average save percentage the same way. These anchors refresh through the season.
These league-wide averages enter the model math. A team's attack strength is its 5v5 xG/60 divided by the league average. A ratio above 1.0 means it generates more scoring chances than typical.
| Parameter | Value | |
|---|---|---|
| Goals per game | 3.05 | Updated weekly; anchors all lambda calculations |
| 5v5 xG/60 | 2.485 | Expected goals per 60 min of even-strength play |
| SV% | .9 | League-average save percentage |
Internal observation gate
NHL model-versus-price observations are paused pending a redesign validation window (decision made 2026-07). Fair odds and the market board remain available as neutral references. The section below describes the internal tracking policy that would apply after validation.
What happens when the model and the sportsbook disagree?
Fairline writes an internal observation row and shows you nothing new. A row is recorded when the model's fair odds and a book price differ by a flat 3%, and those rows feed calibration and closing-line research. They are never presented to you as a bet to place.
Fairline records an internal observation whenever the model's fair odds differ from the sportsbook's price by a flat 3%, the same threshold for every market. Each row carries a one-unit research weight for calibration and closing-line tracking. These observations are not surfaced as bets.
Command-line reference. The standalone model runner also includes a quarter-Kelly staking calculator with per-market EV thresholds (below). These are an offline reference and do not drive any user-facing surface. The internal measurement record uses the flat 3% threshold and one-unit research weight described above.
| Parameter | Value | |
|---|---|---|
| Moneyline | 3.0% | |
| Puck Line | 3.5% | |
| Total | 2.5% | |
| Team Total | 2.5% | |
| Player Prop | 4.0% |
Which NHL markets does the model price?
It prices the moneyline, the puck line, the game total and both team totals. All four are read off the same scoreline matrix, so they can never contradict each other. Fairline flags no NHL value on any of them while the pause described above holds.
The NHL model produces fair odds for the four markets below. Hockey's low-scoring profile makes totals the most efficient market and puck line the most volatile, since a single empty-netter in the final minute can flip a puck line bet.
Moneyline
BOS -140 / TOR +120Straight pick on who wins the game in regulation, overtime, or shootout. The starting goalie is the single highest-leverage input, and a save-percentage swing of 0.010 can shift a moneyline by 10-15 cents. Avoid betting any game where the starting goalie is still listed as TBD.
Puck Line (-1.5)
BOS -1.5 +155 / TOR +1.5 -175A 1.5-goal spread in a sport that averages ~6 goals per game, effectively asking whether the favorite wins by multiple goals. Empty-net situations (down a goal in the final minute, pulling the goalie) make the puck line swingy. The model requires a larger edge here (highest threshold of any NHL market).
Game Total (Over/Under)
O 6.0 -115 / U 6.0 -105Combined regulation + OT goals. The model's strongest edges here come from goalie-vs-goalie matchups the market has underreacted to. A true backup starting against a low-SV% team moves the total noticeably. Half-lines (5.5, 6.5) are preferred over 6.0 to eliminate pushes.
Team Totals
BOS O 3.5 -110 / BOS U 3.5 -110A single team's goal total. Useful for plays that isolate one side's offense (hot power play vs. suppressed PK opponent) without needing a view on the opposing team. Also used when the model has a confident read on one team's scoring while the opposing pace signal is ambiguous.
Is there a published NHL backtest?
Not yet. An 82-game season gives less data than baseball's 162, and goaltending swings results hard enough that a walk-forward replay is a substantial project on its own. Until those numbers exist, the graded record below is what there is to check.
A published full-season backtest for NHL is still in progress. Hockey's lower-sample signal (82 games vs 162) combined with the central, high-variance role of goaltending makes walk-forward backtesting a substantial project. Until those numbers are published, the Ledger tab on Transparency is the audit trail. It shows every graded internal observation from live pipeline runs with CLV and P&L attached, graded forward as games settle.
When should you not trust this model?
Trust it least when the starting goalie is still listed as TBD, in the first week of a season, and through trade deadline week. Trust it most once the morning skate confirms both goalies and both teams have 30 or more games on the year. The two lists below give the full version.
NHL's reliability depends almost entirely on goalie and rest information being accurate at the time of the projection.
- Games with confirmed starting goalies (morning skate reports)
- Mid-season matchups where both teams have 30+ games of data
- Non-B2B scenarios with normal rest (1-2 days off)
- Games between teams whose special-teams units are stabilized
- Goalie TBD at pipeline run time (a surprise backup swings the number)
- First week of the season (no current-year sample)
- Trade deadline week, when rosters change faster than the model re-rates
- Teams mid-coaching-change, where system shifts can take 5-10 games to show up
- Playoff games (the model is regular-season calibrated)
Where can I read the goalie side in more detail?
The goalie is the largest single input on this page. How does the starting goalie change fair moneyline odds works the multiplier through one matchup, from save percentage to a fair price.
Sources
The parameter values on this page are rendered from the running system and refresh periodically; when a weight or threshold changes, this page reflects it automatically.