How this is calculated
Every number on this site comes from one model, built for this team and run against sixteen seasons of play-by-play. Here is what it does, how it is checked, and where it is weakest.
What a rating is
A player's rating is a percentile out of 100. It answers one question: of every NHL player at his position, what share is he better than? A rating of 82 means he graded above 82% of them.
Ratings are positional. A defenseman is measured against defensemen, a forward against forwards, a goaltender against goaltenders. The three jobs produce value in different amounts, and ranking a shutdown defenseman against a first-line winger would tell you about the positions rather than the players. It also means a 70 and a 70 in different rows are not the same quantity of wins.
Percentiles lead because they cannot go stale. A threshold like “two and a half wins is an MVP season” holds until the model is refit or scoring changes; a percentile re-ranks itself every time the pipeline runs.
What the tiers mean
| Rating | Tier |
|---|---|
| 90+ | Elite |
| 75+ | Top of the roster |
| 60+ | Middle of the roster |
| 40+ | Everyday NHLer |
| 20+ | Depth |
| under 20 | Below replacement |
Wins above replacement
Underneath every rating is WAR — how many wins a player added compared with a replacement-level player, meaning someone freely available to any team at any time. Not an average player: a spare. A team made entirely of them would win about 23 games in an 82-game season.
Contributions are measured in goals first, then converted to wins. That rate is not assumed — it comes from regressing team wins against team goal differential, which is simply what the standings say a goal is worth.
It is also not a constant. A goal was worth less in the high-scoring years than in the dead-puck ones, so the rate is refitted for every season from a five-year window centered on it. Across the sixteen seasons here it runs from 5.2 to 6.2 goals per win. Using one number for all of them would quietly misprice an entire era.
Goaltenders are included on the same scale, so a goalie's WAR can be added to a skater's and a team's total means something.
Game grades
Season WAR does not divide into single games. It rests on season ice time against a season replacement level, and neither means anything across one night. So games use a separate measure.
Each skater's grade averages three pillars:
- Production — goals, assists, shots and blocks, as rates against fixed benchmarks
- Offense — chances generated while on the ice, with power-play work blended in by ice time
- Defense — chances suppressed, with penalty-kill work blended in
Offense and defense are adjusted twice: for deployment, because a player starting most shifts in his own end faces a harder task, and for minutes, because twenty minutes against top opposition is worth more than eight in soft spots.
Even-strength grades rank within the game. A 1-0 rock fight and an 8-6 track meet produce different chance totals for everyone on the ice, so each skater is compared with the roughly 36 who dressed that night rather than a league-wide standard. Special teams and production rank against a season-wide distribution instead, because one game gives a player four power-play minutes and that is too little to rank against nine other men.
Short shifts are quieted rather than discarded. A twenty-second penalty kill happened and should count, but a rate measured on twenty seconds is mostly noise, so a score is pulled toward neutral in proportion to how little time backs it.
The result maps onto thirteen letters from F to A+, in equal steps. Roughly one game in five hundred earns an A+.
Team grades
A team's grade is not the average of its players'. Scoring is concentrated — in a four-goal game perhaps eight players touch the scoresheet and ten do not — so averaging individual production answers “how productive was the average Sabre” rather than “did the team score.” Team production is computed once, from team totals: goals carry it, shot and block volume nudge it either way.
On-ice play is stretched onto a team-achievable range. A team cannot finish last the way one player can — half the ice belongs to it by definition — so a thoroughly dominated team still averages near the 25th percentile. Left unadjusted, the bottom of the scale would be unreachable however badly a team played.
One consequence worth stating plainly: a team can be shut out and still grade well. If Buffalo out-chances an opponent all night and loses 2-0 to a hot goaltender, the grade says the process was good and the result was not. That is the honest read, and it is the number most likely to start an argument.
Goaltenders
Goaltenders are measured on goals saved above expected — the difference between what a goalie allowed and what an average goalie would have allowed on the same shots, given where they came from and how they were taken.
Their game grade uses an absolute scale rather than a percentile: stopping what you were expected to stop is average and grades around a C+, three goals better than expected is an A+, three worse is an F. Absolute rather than relative, because a goaltender's job has a fixed standard in any era. It also handles short outings for free — a backup who faces six shots in relief has a necessarily small number and lands near neutral, which is the right answer.
Isolating a player from his teammates
This is the hardest problem in hockey analytics and the part of the model most worth explaining.
Raw on-ice numbers describe what happened while a player was out there — which includes his linemates, his opposition, and his coach's choices. A fourth-line winger who spends the season beside two excellent players will post excellent on-ice numbers. Anything built directly on those numbers credits him for work he did not do.
So the model does not use them. Every season is broken into roughly 180,000 stints— stretches of play with the same ten skaters on the ice — and a ridge regression solves for each player's individual effect on chances created and chances allowed, with everyone else on the ice accounted for at the same time. Roughly 940 players are solved simultaneously per season.
How hard that regression smooths is a real choice, and it is made once rather than per season. Cross-validation turned out to be almost indifferent — moving the smoothing across a 79-fold range changed prediction error by 0.16% — so it cannot settle the question. What does settle it is asking which setting produces ratings that still describe a player after he changes teams: measured on 145 players who moved, the best setting scores 0.363 where a much looser one scores 0.315.
Fixing it also means a player's rating is comparable across seasons. Refitting the smoothing each year makes the scale move underneath the numbers, so a 70 in one season is not a 70 in another for reasons that have nothing to do with the player.
What comes out is an estimate of what a player himself does to the run of play, which is what the value components are built from.
The eight components
A skater's value is built from eight pieces, which add to his total exactly:
- Even-strength offense — chances created
- Even-strength defense — chances suppressed
- Power-play offense and defense
- Shorthanded offense and defense
- Penalties — minors drawn against minors taken
- Finishing — goals scored against chances taken
Special teams are weighted by what the situation is for: a power-play shift counts 90% on offense and 10% on defense, and a penalty kill is the reverse. On most pages those six are shown as four, with each special-teams pair combined, because the two halves of a shift are rarely interesting apart.
The penalties component values a drawn minor at roughly a fifth of a goal — the difference between two minutes of power play and two minutes of even strength, counting both what your team gains and what the opposition loses. Only minor penalties count, both directions. A fighting major or a misconduct gives nobody a power play, so it costs nothing and earns nothing; charging a player for a fight would invent a cost that does not exist.
Finishing is the gap between the goals a player actually scored and what his shots were worth. A shooter who turns 20 expected goals into 28 did something the chance model did not see, and crediting him for it is the difference between measuring shot generation and measuring scoring.
It is scaled so the league nets to exactly zero each season. That is not cosmetic: the expected-goals model ran three to five per cent rich in the early 2010s, and without the correction every player in those years would look like a poor finisher for reasons belonging to the model rather than to them. Forcing the league to zero makes finishing what it should be — a comparison against a player's own contemporaries.
Calibration
Three numbers in this model could be chosen freely, and all three are solved against Buffalo's own league rather than picked.
Replacement level is set so that the value of every player in the league, added up, matches the wins the league actually produced above a replacement baseline. The scaleis set so that adding up a team's players reproduces that team's goal differential — because that is what a team of those players did. Goals per win comes from the standings of the seasons around it, as described above.
Both are recomputed for every season rather than fixed once. Scoring rates, roster sizes and the amount of separation between players all move, and a constant chosen in one year silently misdescribes another.
The test is simple enough to state: sum a team's players and the total should track that team's goal differential one-for-one. In 2025-26 it does, at a slope of 0.99 and a correlation of 0.95.
Why some ratings are blank
A rating needs enough ice time to mean anything. Even strength requires 240 minutes in a season; power play and penalty kill require 30. Below that the page shows a dash rather than a number built on too few shifts.
This is why a forward who takes four power-play minutes has no power-play rating. It is not missing data — it is an accurate description of how he is used.
It also means the comparison group changes by situation, and the site says so on every component. In a typical season about 250 defensemen qualify at even strength and only 98 on the power play. So a defenseman rated 70 on the power play is 70th percentile among the roughly three per team who actually run one — a much tougher field than his even-strength rating is measured against. Reading those two numbers as comparable is the most common mistake this page exists to prevent.
Archetypes
Value tells you how much a player is worth. It does not tell you what kind of player he is, and those are different questions — two forwards can rate 78 while playing nothing alike.
So each player is also scored on twelve attributes — shooting volume, finishing, playmaking, play-driving, defensive suppression, blocks, hits, fighting, penalties drawn, and special-teams and faceoff usage — each a percentile against his own position in his own season. Those feed seven archetypes for forwards and seven for defensemen: Sniper, Playmaker, Power Forward, Two-Way Forward, Volume Shooter, Energy Grinder, Enforcer; Two-Way, Offensive Creator, Shutdown, Physical, Stay-At-Home, Shooter, Enforcer.
Play-driving is isolated, not on-ice. It comes from the same regression that produces the value components, so a depth forward who spent the year beside a star does not inherit his results. An earlier version used raw on-ice share and graded exactly that player as an elite driver.
Two archetypes need a rule rather than a ranking. Enforcer is gated on actually fighting — at least twice, at a rate above a fixed threshold — because inferring it from the absence of skill labelled a tenth of the league. With the rule, the archetype declines from 7.8% of forwards in 2010-11 to 1.6% in 2025-26, which is roughly what happened to fighting. Balanced means no archetype separated at all, and it is split by level: a player strong at everything is Complete, a player notable at nothing is Balanced.
A player with under a hundred minutes gets attribute scores but no archetype. A shape needs enough hockey behind it to be a shape.
Line chemistry
Start with the uncomfortable number: a line's own results are barely half signal.Split each unit's games into odd and even halves and correlate the two, and forward lines score 0.35, defense pairs 0.43 — full-sample reliabilities near 0.52 and 0.60 even for units with 300 shared minutes. Half of what a single line's record says is luck.
That is the whole argument for doing this by archetype. A combination assessed from dozens of structurally similar lines carries more information than any one line's own season does.
Every forward trio and defense pair since 2010-11 — about 178,000 of them — is grouped by what it is made of, weighted toward recent seasons, and shrunk toward league average when the sample is thin. A structure seen four times reports something close to average, because four lines cannot say more than that. Nothing is discarded for being rare; it is quieted in proportion to how rare it is.
The grade is a blend, not a lookup. A player sitting between two archetypes is counted as both, in proportion, so three players can span eight possible structures and the grade is the average across them. Two lines that would look identical on labels alone can score differently, which is the point.
The number is checkable: structure predicts line success at 0.257 where average player quality predicts it at 0.233, and structure keeps 0.155 of that after quality is removed. It is not a talent measure wearing a different hat.
Deployment is reported separately rather than folded in. Zone starts and quality of competition together explain about 3% of line success — real, and much smaller than most people assume. The adjusted figure sits beside the raw one instead of replacing it.
What this does not do
Every model has edges, and pretending otherwise is how people stop trusting them.
- Team totals still run slightly wide. Summed across a roster, the model spreads teams about 2% further apart than a comparable public model does. That is down from roughly 15% before the September 2026 recalibration, and it is now small enough that it should not change how any single team reads.
- A line's own record is about half luck.Even with 300 shared minutes, roughly half the variation in what a line produced is noise. Chemistry grades are built from structure across sixteen seasons precisely because a single line's results cannot carry that weight — but it also means no grade here predicts what one particular line will do next month.
- Archetypes are labels, and labels simplify. Two players sharing an archetype are alike in the twelve things measured here and may differ in things that are not measured at all.
- Fifty-seven games from 2024-25 are missing. The NHL never published shift data for them and it has not appeared since. That is about 4% of that season, and it makes 2024-25 slightly noisier than the years either side of it.
- No projections. Nothing here forecasts future performance. The aging work behind that is real but not calibrated to a standard worth publishing.
- Zone entries, exits and passing are not tracked. Those come from manual tracking or private data. What a player does between whistles that never becomes a shot attempt is largely invisible here.
- Single games are noisy. A grade describes sixty minutes, not how good someone is. Twenty games of grades say far more than one.
- Expected goals are a model, not a fact. They estimate how often a shot from a given place and situation goes in, and everything built on them inherits their error.
- Small samples are quieted, not fixed. A player with sixty shorthanded minutes gets a rating that is technically valid and thinly supported. The site marks these; it cannot make them reliable.
Sources
Everything is built from the NHL's public play-by-play and shift data, back to the 2010-11 season. Expected goals, the isolation model, replacement level, percentiles and grades are all computed here rather than taken from anywhere else — which is why the numbers on this site will not always match another site's, and why the differences are explainable.
Model version v2.1, September 2026 — eight components, an era-calibrated goals-per-win rate, isolated play-driving, and the archetype and chemistry layers. When the model changes, every historical number is recomputed so the archive stays internally consistent.
Something here look wrong? That is a fair thing to say out loud, and worth saying — a model nobody argues with is a model nobody is reading. Start with the ratings, or rebuild the lineup.