How the model works
The math in plain English. The code is private, but every idea behind a number on this site is explained here.
The unit: pSPAR
pSPAR is standings points above replacement. Goals are converted to standings points with a mapping that accounts for game state and score effects. Every tool on the site (projections, contract value, the simulator) runs on pSPAR.
Player ratings
OVR is a display rating converted from pSPAR, centred separately for forwards and defensemen. It is a quick-glance number. For the full picture, look at pSPAR itself.
Projections
Eight years forward, with year-by-year pSPAR and a range around it. The model combines the chance a player is still in the league with position-specific aging curves. The range widens with age and uncertainty: a 33-year-old fourth-liner gets a much wider band than a 22-year-old top-six forward.
Contract value
Fair value is a replacement-level salary plus a price per pSPAR, fit on 5,638 historical contracts. Future prices scale with expected cap growth. The chance a deal pays off uses the spread left over from that fit, with year-to-year correlation set to 0.70, because treating each year as independent badly understates the risk.
Backtest
A second run is trained without the most recent season, then used to grade pre-season projections against what actually happened.
Terms
- pSPAR
- Standings points above replacement.
- OVR
- A display rating converted from pSPAR. The best players sit around 100.
- AAV
- Average annual value of a contract (the cap hit).
- AFP
- The model's own projected contract for a player, used as an alternative to the signed deal on Cards.
- VORP
- Value over replacement player: how much a player is worth above what you could get at replacement level in your league (Fantasy).
- xG
- Expected goals, from our own shot model.
- RA-GSAx
- A goalie's goals saved above expected, with rebound shots removed from the expectation (Games).
More detail is in the blog, where methodology posts go through the assumptions case by case.