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
154 inputs — Elo, momentum, goalies, context
Training
LogReg + gradient boosting ensemble
Calibration
Temperature scaled probabilities
Prediction
Automated daily picks
Results
62.0%
walk-forward accuracy
5,002
holdout games tested
+8.0
pts above baseline
0.658
log loss
Walk-forward validation across 4 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 154 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.
v1.8.2 runs a 70/30 blend of logistic regression and histogram gradient boosting. The logistic regression gives interpretable coefficients, the gradient boosting captures non-linear patterns. Both are temperature-calibrated before blending. More complexity doesn't always mean more accuracy — this combination outperformed deeper architectures in our testing.
The model is trained on past seasons and tested on future ones it's never seen — no peeking. We use 4 temporal folds across 16 seasons, so the 62% accuracy reflects real predictive power, not overfitting to historical data.