Projected WAR & production trajectory
Two forward-looking reads: a recency- and minutes-weighted projection of a player's current rate of impact, and an honest, skill-based label for whether their underlying game is developing, stable, or declining.
Projected WAR percentile
Rather than average a player's last few seasons equally, we lean toward the recent past and toward the minutes that actually carried weight. A player's most recent season counts for more than the one before it, and time on ice decides how much any season contributes, so a heavy workload speaks louder than a short cameo. The result is a single current rate of impact, expressed as GAR per 60 minutes, which we then percentile-rank within position group, comparing forwards to forwards and defensemen to defensemen. The projection answers how good a player is right now, as a read on current form rather than a restatement of one past year. It requires a minimum recent workload to qualify, and it is attached only to a player's latest qualifying season.
Production trajectory
Alongside the projection sits a plain-language label: developing, stable, or declining. It is driven by the change in a player's underlying skill from one season to the next, read through an age lens. A clear skill gain from a young player reads as developing; a clear skill drop from an older player already below average reads as declining; everything else is stable. Crucially, the label keys off skill, not raw point totals, because points can be propped up by luck long after the underlying game has started to erode.
How we keep it honest
We tested the label the skeptical way: does knowing a player is labeled 'declining' actually help predict that their production falls next season? On raw points per game, the answer is essentially no. Grouped by label, next-season points-per-game barely move, and the players we tag 'declining' actually saw their scoring tick up on average. That is not a failure of the label so much as a feature of hockey: counting stats are sticky, and luck props them up even as skill slips. So we do not present the trajectory label as a points forecast, and we say so plainly.
| Label | Next-season points-per-game change | Players tested |
|---|---|---|
| Declining | +0.024 (production actually rose) | 863 |
| Developing | -0.007 (roughly flat) | 1,415 |
| Stable | -0.004 (roughly flat) | 4,488 |
The trajectory label is one input into the sell-high flag below. Its companion, the buy-low flag, works differently — it is driven by finishing variance and injury context alone (a player finishing well below their own baseline, with no injury explaining the dip; see the finishing methodology page for how it is built) and does not use the trajectory label at all. We publish both flags' forward tests here, side by side, so the two reads can be compared on the same footing. Measured on the corrected, in-scope population, buy-low-flagged players saw their points-per-game rise the following season 65.4% of the time, with an average gain of 0.083 points per game — against a 42.7% improvement rate for in-scope players the flag did not select, a +22.7 percentage point lift. Both flags only fire on in-scope seasons, so a thin sample never triggers them.
| Buy-low flag population | Share that improved next season | Player-seasons |
|---|---|---|
| Flagged (in-scope) | 65.4% (mean gain +0.083 PPG) | 208 |
| Not flagged (in-scope baseline) | 42.7% | 2,174 |
Where the label earns its keep is as one input into the sell-high flag, our read on which strong seasons are unlikely to repeat. Measured on the corrected, in-scope population (only seasons with enough shot volume to trust the underlying skill read), flagged players declined the following season 77.6% of the time, with an average drop of 0.126 points per game. Restrict to players who also carried a known trajectory label and the hit rate rises to 79.5%. The flag itself is gated to in-scope seasons, so it never fires on a sample too thin to mean anything.
| Sell-high flag population | Share that declined next season | Player-seasons |
|---|---|---|
| All flagged (in-scope) | 77.6% (mean drop 0.126 PPG) | 98 |
| Flagged with known trajectory | 79.5% | 88 |
Validation figures reflect the data through 2025-26 and are recomputed each season. Head-to-head benchmark tests (log-loss, AUC, bootstrap intervals) are dated snapshots of a specific held-out season, labeled where they appear.