THE BENCH

Projections · Pre-game model
Analytics
pre-game GLM · no future data
Loading projections…

How the pre-game model works

Season-frozen GLM · Monte-Carlo projection · Honesty

The model

Stacked Poisson GLM. Each fixture becomes two rows (home-scoring, away-scoring) with shared attack/defence coefficients + a home indicator. Fitted with L2 ridge and exponential time weighting.

One model per season. We fit ONCE using every match strictly BEFORE the season's first game, then predict every game in that season. This keeps things honest — no future info leaks into past predictions.

Outputs: calibrated P(home win) and P(away win), regulation split, and pre-game expected goals for both teams.

Calibration

Raw model probabilities are refined with a Platt calibrator fit on the last 20% of the training window. This corrects systematic over/under-confidence.

The reliability chart on the main panel shows whether the model's stated probabilities match the empirical win-rate at each level.

Playoff projection

Monte-Carlo simulation, 2000 runs. At each playhead position: start from the current standings, simulate every remaining game using the pre-game outcome probabilities, allocate points per league rules, rank teams, count sims where this team finished inside the playoff cut.

Cut = top 10 for Liiga (of 15), top 16 for NHL (of 32).

Honesty: The simulation samples independently per game (no cross-team correlation, no injury adjustment). It's a snapshot — not a forecast the team can bet on.

Top factors

For each fixture we perturb one feature at a time to the league mean and re-predict. The difference in P(win) is that feature's contribution — labelled in percentage points (pp).

Restricted to ~10 features that historically dominate the decomposition: recent form (PPG L10), goal differential (GD L10), xG rates, PP/PK%, finishing luck, rank, and rest days.

What the model doesn't see

  • Injuries / lineup: no player-level pre-game data.
  • Travel and back-to-back beyond rest_days: ignored.
  • Officiating, referees: not modelled.
  • Motivation, tank scenarios: not visible in features.
  • OT/SO outcome tilt: 50/50 by default — see the analytics dashboard for the L5/L10 shootout skill signal.

The retrospective analytics dashboard (Analytics button, top right) shows what actually happened at team and player level, isolated from the score. This projections dashboard shows what the model expected — the delta between them is the news.