Own-baseline finishing variance
Finishing skill measured against each player's own history, so a hot season reads as hot for that player, not merely above the league average - and shrunk hard, because finishing barely repeats itself year to year.
Why we use the player's own baseline
Comparing a player's finishing to the league average mislabels a career sniper as 'lucky' every year and a career grinder as 'unlucky' every year. We instead ask a narrower, fairer question: is this player finishing above or below their own established norm, given the quality of the chances they actually took? Every shot is first valued by our home-grown expected-goals model, so a season's finishing is measured as goals scored versus what those specific looks were worth. The signal is deviation from that player, not from everyone else.
That baseline is the player's own career track record, drawn only from seasons in which they shot enough to matter. We require at least three such qualifying seasons before a career baseline is trusted; players who clear that bar carry, on average, nearly seven qualifying seasons of history behind their number. A season is then read against that personal norm rather than against a league-wide constant.
Stabilizing small samples
A single season of shooting is genuinely noisy, so each player's reading is pulled toward a neutral expectation, gently for players with a heavy shot volume and more firmly for those with few. The pull is strongest where the sample is thinnest and fades as the evidence accumulates, so a hot ten-game stretch is not allowed to masquerade as a talent. The result is a conservative, stable estimate of how a season's finishing compares to the player's own baseline rather than to a small-sample fluke. We treat any season with fewer than 200 unblocked shots as too thin to stand on its own and flag it as low-sample. How firmly we pull also depends on position, because a defenseman's shots carry far less expected-goal weight than a forward's, so the same shot count is a thinner sample for him.
How much does one season count? Less than it looks. At the shot volume a typical ranked forward reaches in a season, only a minority of his published number is treated as his own - the rest is the neutral expectation he is being pulled toward. A season has to be unusually heavy in shots before the balance tips and the number becomes mostly his. That is not a hedge; it is what the repeatability of finishing, measured on our own data, says a season is worth.
This is also why a great finisher's down year reads as mid-pack rather than as a collapse. The ranking is of this season against this season's field, and the shrinkage pulls every season toward neutral in proportion to how thin it is. A career sniper who shoots cold for one year therefore lands near the middle of the pack, not at the bottom: the season's evidence is not strong enough to overturn neutral, and the season ranking does not borrow his prior years to prop him up either. Read the season percentile as what this season's shooting supports, and read the own-baseline comparison above it for how it sits against his history.
For forwards with enough history we also publish a career finishing percentile beside the season one. It pools a player's qualifying seasons to date, leaning on recent seasons more than older ones, and ranks that pooled reading against the other forwards with comparable history this season. This is the number that says what the season one cannot: a proven finisher coming off a cold year reads mid-pack for the season and near the top for the career, and both are true. We only publish the career reading once it has at least three qualifying seasons behind it, because that is the history at which we could show, out of sample, that it predicts the next season's shooting better than the season reading alone and that it claims no more skill than actually repeats. Defensemen do not get either reading, for the reason below.
Why we do not publish this for defensemen
We rank forwards on finishing and we do not rank defensemen at all - their finishing reads n/a everywhere on the site, including for subscribers. This is a measurement limit, not a paywall. When we tested how repeatable finishing is by splitting each player's own season in half and checking whether the two halves agree, forwards showed a real if modest signal at every shot volume. Defensemen did not: their halves agreed no better than they would if finishing were pure chance, and at the volumes a defenseman actually reaches in a season the entire spread in their finishing is explained by the randomness of which shots go in. Publishing a ranking anyway had a concrete cost - defensemen were a fifth of the ranked players but nearly half of everyone we were showing in the top tier of finishers, which is what noise looks like when you sort by it. We would rather show nothing than sell a ranking we cannot stand behind.
What we show for defensemen instead: the shot profile
Finishing is not the only thing a shot carries. When we went looking for any quantity in the finishing family that does repeat for defensemen, one did, and clearly: the expected-goal value of the attempts they take. A defenseman who gets his even-strength attempts from close to the net this season is, to a striking degree, the same defenseman who does it next season - the two halves of a season agree about two-thirds of the time, where for finishing they agreed no better than chance. So the defenseman's card carries a shot profile in place of a finishing number: Point shooter, Mixed, or Net-front, describing where his even-strength attempts come from relative to other defensemen that season, with the within-season percentile behind the label. For defensemen this row replaces the card's all-strength shot-quality percentile, which had no attempt floor and no shrinkage; one instrument, and the better-measured one.
Be clear about what this is and what it is not. It is a description of shot selection: the location and quality of the looks a defenseman takes, valued by the same expected-goals model we use everywhere else, averaged over his even-strength attempts and shrunk toward the league defenseman average when his attempt count is thin. It needs at least 100 even-strength attempts in a season before we label it, a bar roughly seven in ten regular defensemen clear. It is not finishing: it says nothing about whether those attempts went in, and a Net-front defenseman is not a better shooter than a Point shooter - he takes different shots. It is not a skill grade either. The label is this season's profile; about half of defensemen keep the same label the following year, which is well above chance but well short of a fixed trait, so we say 'this season's shot profile' and mean it. And the underlying number - expected goals per attempt - is a model output we do not publish at any tier; the label and the percentile are the conclusions drawn from it, and conclusions are what we show for free.
From finishing to buy-low / sell-high
A player finishing below their own norm with no injury to explain it is a regression-up (buy-low) candidate; one finishing well above their norm is a regression-down (sell-high) candidate. Injury context is the gate that separates a temporary dip from genuine decline, and that gate is exactly what powers the buy-low / sell-high board.
How the numbers hold up
Finishing is one of the least stable quantities in hockey, and that instability is the entire reason to shrink it. In our data, a player's raw finishing in one season correlates with the next at just 0.27, far weaker than raw shooting percentage's 0.63 season-to-season persistence. A number that barely repeats itself is a number you should not take at face value, which is why the shrinkage exists: it compresses each season's extreme reading toward a neutral 1.0 in proportion to how little evidence stands behind it.
You can see that compression directly. Across qualified player-seasons, shrinkage narrows the spread of finishing readings and pulls the outliers in from both tails, without erasing the real signal underneath, an internal check confirms the shrunk finishing still tracks a season's raw shooting percentage.
| Measure | Raw finishing | After shrinkage |
|---|---|---|
| Year-over-year self-correlation | 0.269 | (shrinkage target) |
| Spread across seasons (std. dev.) | 0.258 | 0.216 |
| Full range of readings | 0.21 - 2.16 | 0.36 - 1.99 |
| Average distance from neutral (1.0) | 0.207 | 0.173 |
The mart covers 15,178 player-seasons across 2,923 players and 17 seasons, from 2009-10 through 2025-26. Of those, 2,899 clear the 200-shot floor and are treated as in-scope; the remaining rows are carried but flagged low-sample. Among qualified seasons, shot counts run from the 200-shot floor up to nearly 600 in a single year, and 4,311 rows carry a full career baseline drawn from three or more qualifying seasons.
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.