Problem
An evaluation against closing lines that were not closing lines.
An audit found that most of the stored "closing lines" had been captured after puck drop, in-play. The first season’s over/under evaluation was contaminated.
Moneyline, goal-margin and total forecasts from a stacked ensemble trained walk-forward over 17 seasons, with shot-quality data and projected goalies as features. Odds are stored as a pre-game time series enforced by a database constraint, after an audit found most stored closing lines were taken in-play. Model changes pass a hash-locked, six-gate pre-registration. Live for the 2026-27 season.
An evaluation against closing lines that were not closing lines.
An audit found that most of the stored "closing lines" had been captured after puck drop, in-play. The first season’s over/under evaluation was contaminated.
Keep odds as a pre-game time series the database enforces, and lock the evaluation.
Odds are stored as a time series with a database constraint that refuses any row after the start. Model changes pass a hash-locked, six-gate pre-registration before they can be promoted. The ensemble is trained walk-forward over 17 seasons with shot-quality data and projected goalies as features.
Brier 0.247 on a locked 2025-26 check of 1,394 games (Brier: how close the probabilities landed; 0.25 is a coin flip, lower is better).
55.7% accuracy on the same check. A candidate weighting scheme that failed the gates was not promoted. A historical evaluation on that set only, not a claim about current results. Live for the 2026-27 season on sharps.gg.