How the hockey model works
How a game is priced · Markets · Calibration · Data
How a game is priced
- Team strength: recent expected goals (xG) for and against, weighted toward recent games and blended with actual goals (Liiga before 2021-22: goals only, no xG published).
- Adjustments: team goaltending (goals saved above expected, GSAx), special teams (power play and penalty kill) and back-to-backs (B2B = played the day before).
- Regulation goals are modelled as Poisson with a tie multiplier fitted in the backtest; the overtime/shootout winner comes from the regulation win split, shrunk toward 50/50.
Markets
- 60-min 1X2 (regulation only) and moneyline incl. OT/shootout.
- Puck line −1.5, totals and team totals are final-score markets: the OT/SO goal is added to the winner, as bookmakers settle them.
- Buttons show Pinnacle prices when stored (one pull per league per day; Pinnacle has no Liiga puck line or totals), otherwise the model's fair odds. A green +% pill = model % at least 5% above Pinnacle's no-margin %.
Calibration and which markets are shown
- Walk-forward: every game is predicted only from games before it; each market is compared with a league-average baseline (same overtime logic, no team strength).
- Per market a calibration layer (Platt or isotonic, raw if neither helps) is fitted season by season using earlier seasons only. All % on cards, edges, sorts and the acca are the calibrated values.
- A market is offered only if it beats the baseline on both Brier and log-loss. Results: Hockey → Calibration; live results vs Pinnacle: Performance.
Data
- NHL: NHL official API · xG/Corsi by MoneyPuck.com (non-commercial use, credited).
- Liiga: Liiga.fi public API · shot-based model (no xG published).
- Pinnacle prices via The Odds API (separate US-sports key), stored from 27 Oct 2026. No historical bookmaker odds, so backtest ROI and CLV can't be measured.