Resolve Research
nba methodology

NBA Methodology

Per-player Bayesian projections fit on possession-level data, pre-registered before each season opens and evaluated honestly when it closes.

Every change to the NBA model has to beat the previous version on data it hasn't seen yet — anything that looks great in training but doesn't carry forward gets cut. What you see is what survived: small honest improvements, not flashy in-sample wins.

Bayesian per-player projection + possession aggregator (Tier 1A) for game-level rollups

Each player has an aging curve fit to their archetype rather than the league average. Per-player season projections then aggregate into team-game predictions through a possession-level allocator (Tier 1A) rather than naive minute-share rollups — this keeps roles, usage shares, and pace consistent with the team's actual playing patterns.

Where the inputs come from

sources
NBA Stats, Basketball-Reference, play-by-play tracking-data-free
training
Multi-season fit; new season data rolls in after each game
holdout
Each new model version must beat its predecessor on held-out seasons before shipping

Out-of-sample performance

metric
Out-of-sample player-stat MAE + team-game Brier (per release notes)
value
Published per release

Calibration numbers are recorded per model version in the NBA release notes. We do not chase live-season improvements that don't survive cross-season holdout testing.

What controls the projection

Per-archetype aging
Aging curves fit by player role (slot-based), not one league-wide curve. Big men age differently than primary creators.
Possession allocator
Tier 1A possession aggregator distributes team possessions through real lineup usage rather than minutes-shares — keeps role consistency across rotations.
Pre-registration
Season-long projections are frozen at season open. In-season updates are noted with their date in release notes.
Veteran archetype prior
Returning vets get a stronger prior from their multi-year archetype than from any single season's noise.

Common questions

How do you handle injuries?
The published projection assumes baseline availability for the player. Day-of news that changes status (G/Q/Out) is not chased in the locked projection — that's what makes it honest to evaluate at season end. Live game prediction is a separate engine.
Why is your projection different from market consensus?
Most consensus projections blend multiple sources, including in-season smoothing that re-weights toward current results. We pre-register a single model and evaluate it against actuals — sometimes that means we're below market on a hot start or above market on a cold start.
Do you use tracking data?
No. The projection inputs are all publicly available — box scores, play-by-play, lineup data. We do not buy proprietary tracking-data feeds. The trade-off is real: we lose some signal, we keep the model fully auditable.
What's the difference between season and playoff projections?
Season projections refresh when the model re-ships (versioned). Playoff projections refresh daily during the postseason because matchup context (pace, defense, rest) shifts every series.
How do you project rookies?
Draft class is decomposed via a separate prospect-ranking engine (transfer operators from NCAA, international, G-League). First-year vets get heavy shrinkage toward archetype priors.