Methodology
What the model does, what it knows, and what it doesn't.
1. Data
Every regular-season and playoff box score since 2015-16 (team and player lines, including who did not play and why) from the open-source sportsdataverse hoopR data releases; current rosters and daily availability from the official NBA injury report and ESPN's public feeds. Full list and licences on Data sources.
2. Player impact
For each player we keep time-decayed totals of his box-score production per 100 possessions on the floor (points, shot attempts, free throws, threes, rebounds, assists, steals, blocks, turnovers, fouls) plus his on-court scoring margin and on/off margin. Small samples are shrunk toward a replacement-level player. Old evidence fades with a roughly 300-day time constant, so last season still matters in October and matters less by March.
3. Team strength = who is actually playing
For a given game we take the players on the roster, weight each by his chance of playing (injury-report status and recent missed games, with rates learned from past reports — a Questionable player counts for roughly half his minutes, Doubtful almost none), project their minutes from recent usage, scale the rotation to 240 minutes, and add up minutes × player rates. Trades and signings flow through automatically because players carry their numbers with them. A second, team-level component — opponent-adjusted offensive and defensive rating with a preseason prior regressed halfway to the league mean — captures system and coaching effects, and gains weight as the season's sample grows.
4. Situational factors
- Home court (estimated from recent seasons; zero on neutral floors such as NBA Cup Las Vegas games and international games)
- Rest days, back-to-backs, three games in four nights and games in the last seven days for both teams
- Travel distance since the previous game and time zones crossed (east and west)
- Altitude for visitors in Denver and Salt Lake City
5. From ratings to projections
A regularised linear model converts the differences between the two sides into a projected margin; a second one turns pace, efficiency and shot-profile totals into a projected total, anchored to the current league scoring environment. The win probability is the chance a normal distribution around the projected margin ends above zero, with its spread (about 11.8 points) fitted by maximum likelihood — which is what makes the probabilities calibrated.
6. Validation
Walk-forward: every projection uses only games played on earlier dates, coefficients for a test season are fit only on earlier seasons, and settings were chosen using 2016-2022 seasons before the 2022-23 to 2025-26 test seasons were scored. Result: 67.8% straight-up over 4,923 games, margin error 10.66 points, Brier 0.207. See the backtest and the live track record.
7. Model, market and blend
Game pages also show neutral market data (spreads, totals and moneylines from US books, Pinnacle when available, and the Kalshi exchange), with the bookmaker margin removed, and a blended projection that combines the model with the market using weights fit walk-forward. The backtest shows all three side by side: closing lines are sharper than the model alone; against opening lines the blend is best.
8. Limits
- Late scratches after the last pipeline run are not reflected.
- The backtest estimates who plays exactly as the live model does: from the official NBA injury report posted before each game (Out / Doubtful / Questionable / Probable) and how many games each player has just missed, weighting each player by his chance of playing learned from earlier games only. Late scratches after the report are missed, as they are live. Without any availability information the backtest accuracy drops to 66.3%; with each game's actual lineup (hindsight, impossible live) it would be 67.3%.
- Box scores describe defence poorly; on/off margin helps but is noisy.
- Rookies start from a generic prior until they play.
9. Our number vs the book on every game card
Each game card shows our projected margin and total next to one sportsbook line: DraftKings when it has one, otherwise the consensus (median across books), otherwise the first book we have — always named, with its source and time. After the final we say who covered, whether the total went over or under, and whose number was closer. It is shown for comparison only; there are no sportsbook links.
Worked example: a 69% favourite is a team projected to win by 6. It should lose about one game in three.
Projections are statistical estimates for entertainment and analysis only. Nothing here guarantees any result.