New to these reports? Start here
- Dotted-underlined words have a plain-English definition — hover or tap them. Every term is also on the glossary page.
- "Null" means we found nothing, not that something broke. Most reports here are negative results, on purpose — knowing an idea doesn't work is the point.
- Two questions get asked separately. First, is the effect real? Second, is it already priced into the betting odds? An effect can be completely real and still useless to bet on.
- A "calibration" row is a self-check. It runs the same method on something already known to be true. If that fails, the whole report is unreliable — so it's reported alongside the findings.
- If a confidence interval includes zero, the real effect might be nothing at all, so no claim gets made.
Starting goalie vs the market (2026-10-21)
Question: does knowing who starts in goal beat the college hockey moneyline?
Script: goalie_starter_market.py. Results are in goalie_starter_market_results.json and goalie_starter_market_secondary.json (--secondary).
The definitions were fixed in the script docstring before any priced-game result was looked at: - Starter: the goalie with the most minutes. - Quality: career goals saved above average per shot, shrunk with K=1000 shots, scaled to goals per game. - Delta: the starter's quality minus the quality of the team's usual goalie that season.
Results
Step 1: all games 2020+, walk-forwardwalk-forwardEvaluating week by week using only what was knowable before each week, mimicking how the model would actually have been used at the time. against a point-in-time EloElo ratingA rating system, originally from chess, that moves a team up or down based on results and the strength of the opponent. (4,892 games) - Usual goalie starts 72% of the time. - Delta SD is 0.105 goals per game, so the coefficient (~0.6 logit per goal) means about 1.5pp of win probability. - Log-loss gain by season: 2022 −0.0002, 2023 +0.0002, 2024 +0.0013 (CI clear of 0), 2025 −0.0003, 2026 +0.0014 (n=89). Weak.
Step 2: priced games, last pre-puck quote, coefficient frozen from earlier seasons (n=234) - Market log losslog lossA score for probability forecasts that punishes confident wrong answers harshly. Lower is better. 0.6142, market + goalie 0.6126. - Gain +0.0016, CI [−0.0028, +0.0060]. - Gain on the 105 games where an unusual starter played: +0.0035, CI [−0.006, +0.014]. - This is an UPPER BOUND, because it uses the actual starter, who isn't known until puck drop.
Train/test split on priced games only (fit 2025-26 n=150, test 2026-27 n=84) - Gain −0.0073, CI [−0.033, +0.017]. - With 150 games the fit moves the market coefficient to 1.40, which is overfitting. - Fitting on all games and testing on priced games is the better use of the data.
Step 3: predicting the starter from pre-game info - Right 74.2% of the time, vs 72.3% for "the usual goalie starts". - Rotation history adds almost nothing.
Secondary test (added after seeing the above, so weaker evidence): flag = "a non-usual goalie starts" - Walk-forward results are mixed. - Against the market: −0.0077, CI [−0.016, +0.001]. - On the 86 flagged games: −0.021.
Verdict
Even knowing the actual starter, which is an advantage we couldn't have when betting, doesn't beat the market by a measurable amount.
The quality gaps between a team's goalies are small once backups' small samples are regressed. The cost of a goalie rotation measured in goalie_rotation.py (−5.8pp) doesn't carry over to the market: the line already accounts for it, or the rotation is part of what the market expects.
Don't build a live starting-goalie feed for betting. Revisit only if quotes closer to puck drop show the market reacting to starters (our DK quotes are ~6h out).