Loading...
Loading...
A class project that refused to stay in the classroom.

22 · Buffalo, NY · MS Business Analytics, University at Buffalo
I started PuckCast for a sports analytics assignment. Pick a sport, build a model, see what happens. I picked hockey, got to about 59% accuracy, and thought that was actually pretty good for NHL games. So I kept going after the class ended.
More data, better features, five full seasons of validation. The model got sharper. I added a confidence grade from A+ down to C because not all picks are equal and pretending otherwise is how you lose trust fast. Then I built the site because a model sitting in a notebook doesn't do anything for anyone.
I'm still in school, still building this. I was at the Sabres 8-7 comeback against Tampa this year. No model predicts that, and that's why hockey is fun to try and predict.
Trust the model. Or don't. It's still right most nights.
The Model
Data
16 seasons of NHL game data
Features
158 inputs -- Elo, momentum, goalies, context
Training
Logistic regression, C=0.01
Validation
5-fold walk-forward on 6,560 games
Prediction
Automated daily picks
Results
60.9%
walk-forward accuracy
6,560
holdout games tested
+8.0
pts above baseline
0.658
log loss
Walk-forward validation across 5 temporal folds -- no data leakage, no lookahead bias.
Higher grade = more confident = historically more accurate.
FAQ
Fresh predictions go out every morning via automated GitHub Actions. The model pulls the latest stats from the NHL API and recalculates all 158 features before making picks for the day's slate.
No. PuckCast is an analytics platform. We don't sell picks, offer betting advice, or take a cut of anything. The predictions and data are free.
Yes. The full codebase — model training, feature engineering, and website — is on GitHub. You can inspect everything.
v2.0 Lens runs a single logistic regression with C=0.01 regularization. We tested ensemble approaches and gradient boosting, but the simpler model generalized better on ~6,500 games of training data. The edge comes from feature engineering (158 features including multiple Elo variants, rest/fatigue detection, and rolling performance windows), not model complexity.
The model is trained on past seasons and tested on future ones it's never seen -- no peeking. We use 5-fold walk-forward validation across 6,560 games, so the 60.90% accuracy reflects real predictive power, not overfitting to historical data.