Situational & deployment metrics
The context layer: shot quality, on-ice luck, and who a player lines up against and with - measured with real reliability floors, and honest about being descriptive rather than predictive.
What this layer measures
The headline metrics tell you how good a player is; this layer tells you the circumstances behind those numbers. It captures the quality of the chances a player generates, the on-ice luck riding along with their results, and the strength of the opponents and linemates they share the ice with. None of it replaces the value metrics - it explains them, so a strong season in sheltered minutes reads differently from the same season against the league's best.
Shot quality
Shot quality is expected goals per unblocked shot: whether a player manufactures dangerous looks or merely piles up volume. It runs on the same home-grown expected-goals model documented on the xG page, aggregated to the shooter. A related tier label sorts players into elite, average, or below-average shot creators by their high-danger chance volume, ranked within position and season.
It is computed over a full season's shots, with a minimum of 200 unblocked shots before we publish a reading, so the number reflects a stable shooting profile rather than a hot fortnight. That floor is deliberately strict, not cosmetic: the average even-strength player-season carries well under 200 unblocked shots, so the threshold genuinely gates out the small samples it is meant to catch rather than passing everyone through.
PDO (on-ice luck)
PDO is on-ice shooting percentage plus on-ice save percentage, and at 5v5 it sits close to 100 across the league - it is only published for 5v5, where that centering holds. A reading far from 100 is mostly luck, and luck regresses: we flag readings of 104 and up as likely to cool off and 97 and below as due to bounce back. The thresholds are not arbitrary round numbers; they are set where the historical regression actually shows up in the data, which we can demonstrate directly below.
Zone starts, and the two eras behind them
A player's shot-attempt share is partly a gift from his coach. Start a shift in the offensive zone and the puck is already there, so shot attempts follow before the player has done anything; start in the defensive zone and the reverse is true. Where we publish a shot-control read, we correct for that: the shot-attempt half of the metric is adjusted for how much a player's zone-start mix departed from an even split, using a coefficient fit within team-seasons so it isolates the deployment effect rather than the difference between good and bad teams. The chance-quality half is left alone, because the same distortion does not carry into it.
That correction can only run where the underlying data exists, and it does not exist for the whole of our history. On-ice zone-start deployment data begins in 2020-21. For 2019-20 and every earlier season we hold the zone-start share at an even split, which means the adjustment has nothing to bite on and the metric is displayed without it. The practical consequence is worth stating plainly: comparing two players within the same season is unaffected in either era, because both rows were computed the same way. Comparing an adjusted post-2020 season against an unadjusted 2019-20 or earlier season is not like-for-like, and we do not want you to read it as one. Every place on the site that shows one of these numbers for a pre-2020-21 season says so at the point of use.
We chose to show the unadjusted earlier seasons rather than hide them or estimate the missing deployment. Withholding a decade of shot-control history because one input starts late would cost more than it protects, and inventing a zone-start share for seasons that never recorded one would be the kind of plausible-looking fill we refuse elsewhere. So the earlier seasons are published for what they are - a raw shot-control read - and labelled as such.
5v5 Shot-Control Index
This is the one metric on the site built directly on the zone-start adjustment above, so it belongs here rather than with the headline value metrics. It asks a narrow question: when this player is on the ice at five-on-five, does play tilt toward the other team's net relative to what his own team does without him? Two things go into the answer. The first is his share of shot attempts, corrected for zone starts exactly as described above, so a player who is fed offensive-zone draws does not get credit for the head start. The second is his share of the expected goals, which is the same question asked about chance quality rather than chance volume.
Chance quality carries the larger share of the weight - a little under two-thirds of it, against a little over a third for raw attempts. That split is deliberate and it is the honest ordering: a shot attempt from the point is not worth what a look from the slot is worth, so a metric that weighted them equally would reward the player who shoots from anywhere. Both halves are measured against the player's own team rather than the league, because the question is what he adds to the team he actually plays for.
What it is not: a verdict on how good a player is. It measures one dimension. An elite finisher who scores most of his goals on the power play can rate poorly here and still be worth every dollar, and a defensive centre who never scores can legitimately sit at the top. We publish it as a shot-control reading and we name it that way on purpose, rather than dressing it up as a general judgment about who drives play and who is carried.
The era limit is the same one described above, and it bites harder here. The index needs five-on-five expected goals, which our model produces from 2020-21 onward. For every season before that we do not estimate it, do not substitute a league-average stand-in, and do not print a zero - those seasons carry an explicit 'unrated' label saying the underlying data does not exist. A zero would read as 'this player was exactly average', which is a claim we have no basis for.
Quality of competition & teammates
QoC and QoT summarize the strength of the players a skater shares the ice with at 5v5 - the time-weighted average career impact rating of their opponents (competition) and their linemates (teammates). This is the context that keeps raw results honest: strong numbers against heavy competition mean more than the same numbers against depth lines. Because a rating built on too few minutes is noise, QoC and QoT are published only above a reliability floor of roughly 500 even-strength seconds, and any player below it is withheld and flagged rather than shown at face value.
How it stays honest
Two disciplines keep this layer trustworthy. First, every metric carries a real minimum-sample floor - 200 unblocked shots for shot quality, ~500 even-strength seconds for QoC/QoT - enforced in the data, not just described in the copy, so short samples are withheld rather than published thin. Second, PDO's regression thresholds are validated against the historical data rather than asserted, and QoC/QoT were explicitly tested as prediction features before we decided how to present them.
The PDO check is the clearest illustration. Season-to-season PDO barely persists at all (year-over-year correlation ≈ 0.06), which is exactly what you'd expect if it were mostly luck. When we split players by the published thresholds and look at what their PDO did the following season, the high and low buckets snap back hard toward 100 while the middle band stays flat - so the 104 / 97 cuts really do bracket the regime where regression is large and directional.
| Prior-season PDO bucket | Players | Next-season change |
|---|---|---|
| 104 and up (mean 107.6) | 381 | −8.0 points |
| 97 to 104 (middle band) | 9,648 | −0.4 points (flat) |
| 97 and below (mean 93.8) | 953 | +5.4 points |
The floors are just as concrete. Of 5,645 player-seasons in the deployment-context table, 5,575 clear the ~500-second reliability bar and are served; the 70 that fall below it are all withheld behind a low-confidence flag. Shot quality is gated the same way: only a minority of player-seasons carry the 200-plus unblocked shots we require, so the floor is a genuine reliability bar rather than one most rows trivially clear.
| Reliability gate | Floor | Coverage |
|---|---|---|
| QoC / QoT (5v5) | ~500 EV seconds | 5,575 of 5,645 served; 70 withheld & flagged |
| Shot quality | 200 unblocked shots | minority of player-seasons qualify (avg well under 200) |
| PDO | 5v5 only | mean 99.6 across 14,115 player-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.