Methodology
How the model works
The math is in plain English here. The R code is private, but every concept that drives a number on this site is explained below.
The unit: SPAR
Standings Points Above Replacement. Goals are converted to standings points using a context-aware mapping that respects game state and score effects. SPAR is what every downstream tool — projections, contract value, simulator — actually consumes.
Player ratings
OVR is a 0–100 normalization of pSPAR with separate centering for forwards and defensemen. It's a quick-glance number, not the model's final word — for that, look at SPAR itself.
Projections
Eight years forward, with year-by-year SPAR and variance. Built on a survival model (probability a player is still in the league) plus position-specific aging curves. Variance widens with age and uncertainty — the projection for a 33-year-old fourth-liner has a very different confidence band than a 22-year-old top-six forward.
Contract value
Market value is replacement-level salary plus a slope per SPAR, fit on 5,638 historical contracts. Future-year cap growth scales prices forward. The probability a contract delivers positive value uses the residual variance from the fit, with year-to-year correlation set to 0.70 — independent years badly underestimate risk.
Lookback / projection audit
A second model run trained without the most recent season, used to grade pre-season projections against what actually happened. The projection audit page shows where the model has been right, where it's been wrong, and how confident those rights and wrongs have been.
More detail in the blog — methodology posts dig into the assumptions and trade-offs case by case.