Loading...
Loading...
PuckCast predicts game-level win probabilities for every NHL matchup. Here is exactly how it works, what it considers, and where it falls short.
TL;DR
A logistic regression model (C=0.01) processes 158 features across 16 NHL seasons to produce a win probability for each game. The model is validated using 5-fold walk-forward testing across 6,560 games, meaning it only ever "sees" past data when predicting future games. Check the performance page for the full track record.
For every scheduled NHL game, PuckCast outputs a win probability for each team. Not a score prediction, not a point spread. A calibrated probability between 0% and 100% that reflects how likely each side is to win in regulation, overtime, or a shootout. These probabilities power the daily picks on the predictions page.
PuckCast v2.0 Lens uses a single logistic regression with C=0.01 regularization. We tested ensemble approaches (gradient boosting, temperature calibration), but the simpler model generalized better. The edge comes from feature engineering, not model complexity.
Linear, stable, and well-calibrated. It finds the strongest signal in the data without overfitting to noise. With ~6,500 games of training data, simpler models outperform more complex architectures because hockey outcomes are driven by steady team-level trends.
More complexity does not always mean more accuracy. We tested gradient boosting ensembles and temperature calibration, but they did not generalize as well. The real edge is in the 158 engineered features: multiple Elo variants, rest/fatigue detection, and rolling performance windows at multiple timescales.
Every prediction is built from 158 input features, computed from rolling windows of recent games. Here is what the model considers.
Win rates, goal differentials, expected goals, and scoring trends across multiple rolling windows (3, 5, 10, 20 games). Captures both short-term momentum and longer-term quality.
Starter save percentage, goals saved above expected, recent workload, and quality start rates. Goaltending is the single most volatile factor in hockey, so the model tracks it carefully.
Power play and penalty kill efficiency at multiple time horizons. Special teams can swing a game, and the model weighs recent form more heavily than season-long averages.
Days of rest, back-to-back flags, home/away splits, travel distance, and time zone changes. Fatigue is real. Teams on the second night of a back-to-back are measurably worse.
Expected goals for and against, high-danger chance rates, shooting percentage relative to expected, and PDO. These features separate teams earning their results from those riding luck.
The model trains on 16 NHL seasons of game data. That is roughly 20,000+ regular season games, each with full play-by-play records. More data means the model can learn patterns that hold up across different eras, rule changes, and styles of play.
Validation uses walk-forward testing: the model is trained on past seasons and tested on the next season it has never seen. This is repeated across five temporal folds, covering 6,560 test games. It is the most honest way to evaluate a prediction model because it mirrors real-world conditions where you only have historical data at prediction time.
By the numbers
Transparency matters. Here are the blind spots. The model works with pre-game information only, so anything that happens after puck drop or outside the box score is invisible to it.
If a star player gets hurt during warmups or early in a game, the model has no way to adjust. Predictions reflect the expected lineup at the time they are generated.
Unexpected lineup decisions, emergency call-ups, or last-minute goalie changes happen regularly. The model relies on recent team-level trends, not the specific roster sheet for tonight.
Rivalry games, playoff elimination scenarios, trade deadline distractions, a coach on the hot seat. These things affect outcomes, but they are nearly impossible to quantify from historical data alone.
In walk-forward validation across 6,560 games, the model achieved 60.90% accuracy. During the 2025-26 season, live accuracy sits around 56.4% overall. No model can predict every game, but consistent edge over coin-flip odds adds up over a full season.
We tested ensemble approaches and gradient boosting, but a single logistic regression with C=0.01 regularization generalized better on ~6,500 games of training data. The edge comes from feature engineering -- 158 features covering multiple Elo variants, rest/fatigue detection, and rolling performance windows -- not model complexity.
The model retrains weekly (Monday mornings) to incorporate the latest game data. Daily predictions use fresh stats pulled that morning, so the features are always current even between retraining cycles.
The model generates probabilities for any NHL matchup, including playoffs. However, playoff hockey is a different beast: smaller sample sizes, adjusted strategies, and heightened intensity mean regular-season patterns don't always carry over. Take playoff predictions with an extra grain of caution.