PuckCast Edge
Betting edges, stake sizing, props priced against the line, fantasy tiers and the graded ledger. $14.99 a month in season, or $99 for the year.
PuckCast predicts game-level win probabilities for every NHL matchup. Here is exactly how it works, what it considers, and where it falls short.

Built and maintained by Noah Owsiany
Buffalo, NY · MS Business Analytics, University at Buffalo
TL;DR
A logistic regression model (C=0.02) processes 98 features across 16 NHL seasons to produce a win probability for each game. The model is validated using 6-fold walk-forward testing across 7,428 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 en95+trend uses a single logistic regression with C=0.02 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 98 input features, computed from rolling windows of recent games and season-long averages. Here is what the model considers, and what it does not.
Win rates, goal differentials, shots and faceoffs over rolling 3, 5 and 10-game windows, plus season-long averages. Captures both short-term momentum and longer-term quality.
Measured per team: a goaltending rating that moves after every game with goals allowed against what a league-average goalie would have allowed on the same shots. The model has no input for tonight's starter, so a surprise backup is not in the number.
Several Elo ratings that update after every game: overall strength, a fast-moving form rating, and a three-part rating for winning, scoring share and goaltending. Each carries into a new season at half strength, weighted by how much of the roster came back.
Days of rest, back-to-backs, games in the last three and six days, home and road splits, road-trip length and altitude. Teams on the second night of a back-to-back are measurably worse.
Expected goals, high-danger shots and their expected goals, rush goals, and the trend in each. These 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 six temporal folds, covering 7,428 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
Every figure below comes from the same certified walk-forward run (7,428 games) that powers the model health page, where the full tables and intervals live.
The grade is how far the model sat from a coin flip on that game. A higher grade should hit more often, and it does, with the interval showing how much sample is behind each row.
| Grade | Games | Share of slate | Hit rate | 95% interval |
|---|---|---|---|---|
| A | 877 | 12% | 75.7% | 72.8%–78.4% |
| B | 4,320 | 58% | 61.4% | 60.0%–62.8% |
| C | 2,231 | 30% | 53.4% | 51.3%–55.5% |
When the model says 62%, does it happen about 62% of the time? Points on the dashed line mean yes. 10 of 10 buckets contain their own prediction inside the interval. Bigger circles are buckets with more games.
Share of games landing in each grade. Most games are close calls, which is why the strongest grade is a minority of the slate.
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 7,428 games, the model achieved 60.70% accuracy. During the 2026-27 season, live accuracy sits at 60.4% over its first 235 graded games 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.02 regularization generalized better on ~6,500 games of training data. The edge comes from feature engineering -- 98 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.