Methodology

How IceChaser calculates NHL playoff probabilities

Version 2.0 · Calibrated over 3 seasons (2022–25) · Brier Score: 0.061

Overview

IceChaser estimates NHL playoff probabilities using Elo-rated Monte Carlo simulation. Every remaining regular-season game is simulated 100,000 times using win probabilities derived from each team's Elo rating. The fraction of simulations in which a team qualifies for the playoffs is their playoff probability.

Data Sources

All data comes from the NHL public API (api-web.nhle.com) in real time:

Elo Rating System

Each team carries an Elo rating tracking their strength over the season. Ratings start at 1500 and update after every game.

Calibrated Parameters

ParameterValueMeaning
K-factor10How much a single game moves ratings. Low = stable, high = reactive.
Home bonus100Elo points added to home team before computing win probability.
OT discount0.50OT/SO wins move ratings at 50% of a regulation win.
Initial rating1500All teams start here at season open.

Rating Update Formula

expected = 1 / (1 + 10^((opponent_elo - team_elo - home_bonus) / 400))
k = K_FACTOR × (OT_DISCOUNT if overtime else 1.0)
new_elo = old_elo + k × (actual_result - expected)

Why These Values

Win Probability Model

P(home wins) = 1 / (1 + 10^((away_elo - home_elo - 100) / 400))
# Clipped to [0.25, 0.75] to prevent extreme probabilities.

Overtime

Each game has a 24% probability of going to overtime (NHL historical average). If OT occurs, the winner gets 2 points and the loser gets 1 point. The OT winner is determined by coin flip — no significant home advantage in OT empirically.

OutcomeHome ptsAway pts
Home wins regulation20
Away wins regulation02
Home wins OT/SO21
Away wins OT/SO12

Playoff Qualification Rules

After simulating all remaining games, playoff qualification follows the official NHL format:

  1. Top 3 teams per division qualify (ranked by points, tiebroken by regulation wins)
  2. Next 2 teams per conference qualify as wildcards
  3. 8 per conference, 16 total

Simulation Architecture

Single-Pass Design

One 100,000-simulation pass produces everything:

There is no separate base sim, no Rust binary, no redundant computation. One pass, all outputs.

Performance

ComponentTime
NHL API fetch~2s
Elo rating update~1s
100k vectorized sim + scenarios + What If~30–45s
Tomorrow's scenarios~15s
Total end-to-end< 60 seconds

Calibration Results

Tested against 3 historical seasons at 5 checkpoints each (30, 20, 15, 10, 5 games remaining). Brier Score: 0.061 (0.0 = perfect, 0.25 = random coin flip).

By Games Remaining

CheckpointBrier (all)Brier (bubble 10–90%)
~5 games left0.0350.145
~10 games left0.0370.139
~15 games left0.0530.171
~20 games left0.0780.210
~30 games left0.1130.230

Known Limitations

  1. No game-context factors: Injuries, back-to-backs, goalie matchups, and motivation are not modeled.
  2. Fixed OT rate: 24% applied uniformly. Defensive matchups go to OT more often.
  3. Independence assumption: Each game simulated independently. No fatigue/momentum effects.
  4. Noise at extremes: Teams below 0.5% should be read as "essentially eliminated," not precisely calibrated.
  5. No pre-season carryover: Elo starts fresh at 1500 each October.

Comparison

ModelBasisCalibratedBrier
IceChaser v2Elo (K=10, HB=100)✅ 3 seasons0.061
IceChaser v1Points pace ratio0.063
Random baseline50/50N/A0.250

Future Improvements