The model at a glance
Every NHL skater is measured in Wins Above Replacement (WAR): how many wins he adds compared with the kind of player a team could call up or sign cheaply. WAR is the sum of six parts, each measured in goals and then converted to wins.
Goals become wins using a goals-per-win value calculated for each season (roughly five to six goals per win, depending on how much scoring there was league-wide). Goaltenders aren't part of this model; evaluating them is a different problem.
Even strength: separating a player from the people around him
The hardest part of evaluating a player is untangling him from his linemates, his opponents and his deployment. A third-liner who plays with elite centres looks good on the stat sheet; a shutdown defenseman who starts every shift in his own end against the other team's top line looks worse than he is.
To handle this, EV Offense and EV Defense come from a regularized adjusted plus-minus (RAPM) regression. Every even-strength shift in the league goes into one model: 5-on-5, 4-on-4 and 3-on-3, including overtime. The model credits or charges each player for the expected goals created while he was on the ice, after accounting for:
- Every teammate and every opponent on the ice for that shift
- Where the shift started (offensive, neutral or defensive zone)
- Score state, home ice, back-to-back games, and shifts coming straight off a power play or penalty kill
Each season starts from the player's estimate the season before, then updates based on what he did this year. That keeps a player's rating from swinging wildly on a small sample while still letting a real improvement or decline show up. How strongly the model leans on that starting point is tuned on held-out data, not set by hand.
Chances are measured with our own expected goals (xG) model: a machine-learning model built from 1.6 million unblocked NHL shot attempts that estimates the chance each shot becomes a goal. It looks at distance, angle, shot type, the shooter's handedness (off-wing shots), the play before the shot, rebounds and how far the angle changed, rush chances, the exact skaters on the ice (including empty nets), how long both teams' players have been on their shift, and the game situation.
Hockey changes, so each past season is scored by a model trained on the seasons around it, and this season's games by a model trained on the three most recent. Every shot is scored by a model that never saw it in training: across every shot since 2010-11 that comes to an AUC of 0.78, where 0.5 is a coin flip and 1.0 is perfect.
Where expected goals fall short, especially on defense
xG tells you what happened while a player was on the ice, not how well he defended.
EV Defense measures how many expected goals the other team generated while a player was on the ice, adjusted for everyone around him. That's useful, but it isn't the same thing as defending well, and anyone who has played the position knows the difference.
The act of defending is a series of small things: the gap you keep on the rush, the stick you get into a passing lane, winning the race to a dumped puck, the retrieval and first pass that ends the shift before a shot ever happens. xG only sees the end result, the shots that did or didn't get taken, and several things muddy that picture:
- It's shared credit. Five skaters and a system are on the ice for every shot against. A defenseman who shuts down his side can still be on the ice for chances his partner or the forwards gave up.
- The best defending often leaves no shot to measure. A clean retrieval and breakout prevents a chance from existing. There's nothing in the xG data to credit.
- Quantity isn't quality of defending. xG against counts how dangerous the shots were, not whether the defender forced a low-percentage play, took away the pass, or was beaten cleanly.
- It's noisy. In our data a player's defensive rating repeats from one season to the next far less than his offensive rating does. When we checked the model against real team results, defensive ratings were spread about twice as wide as the teams' actual goals-against supported, so we scale them down to match (more on that below).
This is exactly why our Player Reports don't stop at xG. For individual players we track the defending itself on video: takeaways, retrievals, puck losses, zone entries against, and breakouts. Then a former player writes up what it means.
Special teams, penalties and shooting
Power play and penalty kill
The same regression approach is applied to power-play and penalty-kill shifts, measuring how much each player drives chances for (PP) or limits chances against (PK) on the unit. On the player cards, a power-play or penalty-kill percentile is only shown for players with a real role on that unit (roughly a minute or more per game). A few end-of-penalty shifts shouldn't earn anyone a 96th-percentile penalty-kill ranking.
Penalties
Penalties drawn minus penalties taken, valued by what a power play is worth in goals. Drawing penalties is a real, repeatable skill; it's one of the reasons Connor McDavid rates the way he does.
Shooting
Goals scored minus the expected goals from that player's own shots. In a single season this is exactly what happened: if a player finished at a high rate, he gets full credit for it. Over several seasons we treat it more carefully, because finishing above expected repeats far less from year to year than driving play does (see 3-year talent).
What "replacement level" means
Zero WAR is a replacement-level player, the kind of depth player any team can find cheaply. We define that from real depth charts: forwards who rank below 13th on their own team in even-strength ice time, and defensemen below 7th. A player's WAR is how much better he is than that group.
Checked against real team results
This is one of the things that makes our model different. A model can look sensible player by player and still get the overall weights wrong, for example by giving defense too much or too little influence on total WAR. So we check it against reality: for every team-season, we add up what our model says each component was worth and compare it with what the team actually did.
If the model's even-strength offense is right, a team whose players add up to +20 goals of offense should actually have generated about +20 goals of offense. Where the model and reality disagreed, we rescaled that component so the two line up:
- EV Offense needed to be scaled up (the raw numbers undersold real team offense)
- EV Defense needed to be scaled down (the raw numbers were about twice as spread out as real goals against)
- Penalties needed to be scaled up to match real penalty differentials
The result is a model where every component contributes to WAR in proportion to what actually wins games, not what looks good in a regression.
One season vs. three: the talent rating
Every card has two sides: the season (exactly what a player did this year) and the 3-year rating (our best estimate of how good he actually is). The 3-year rating blends a player's last three seasons, and then accounts for how much evidence there is:
- Less evidence, more caution. A rookie with one great season has one season of evidence; a veteran has three. Each part of a player's rating is pulled toward average in proportion to how little we've seen of him, based on how repeatable that part of the game is in our data. Established players with three full seasons aren't affected, and a young player who keeps it up will climb as the evidence builds.
- Finishing is treated as partly luck. Driving play at even strength repeats strongly from season to season. Shooting above expected repeats much less (about 0.3 year to year for forwards, and barely at all for defensemen). So in the 3-year rating, shooting is regressed toward average for everyone, and a hot shooting stretch doesn't get treated as permanent skill.
The single-season numbers are never adjusted this way. If a player scored on 25% of his shots, his season card says so.
Goalies
Goalies are rated on goals saved above expected (GSAx): for every unblocked shot a goalie faced, our expected goals model says how likely an average goalie was to let it in. Add those up, subtract the goals he actually allowed, and you have how many goals he saved beyond an average goalie.
- Empty-net goals and shootouts are left out, so the rating only covers shots he actually faced in net during the game.
- Rebounds in the same scramble are counted as one chance, not several (a "flurry" adjustment), so a goalie isn't charged twice for one sequence.
- Every season is set so the league-average goalie is exactly 0.
- Goalie numbers swing a lot from season to season, so the 3-year rating leans on all three seasons and pulls small samples firmly toward average. How hard it pulls was chosen by testing which setting best predicts each goalie's next season.
- WAR compares a goalie with a replacement-level goalie (one outside the top two on a team), so it counts both how well and how much he plays. The Goalies tab opens sorted by GSAx, which is pure shot-stopping.
Checked against the public record, our goalie GSAx matches MoneyPuck's closely (0.90 correlation over 888 goalie-seasons since 2010-11), and each goalie's goals allowed line up with MoneyPuck's almost exactly (0.999), confirming every shot is credited to the right goalie.
Contract value
Market value is what NHL teams actually pay for a player's level of WAR, learned from real contracts:
- Every contract is converted to today's salary cap, so a deal signed under a $79.5M cap is compared fairly with one signed under $104M.
- Entry-level contracts are left out of the market line, because the CBA caps them at about $1M no matter how good the player is.
- The line is corrected for the fact that WAR is an estimate with some noise. Fitting a straight line against a noisy measure flattens it, which undervalues the best players.
- No player is valued above the league's maximum contract (20% of the cap) or below a replacement-level salary.
The difference between market value and actual cap hit is the player's contract surplus, which is what the A+ to F contract grade is based on.
Contract outlook. For every remaining season of a deal, we project the player's WAR from how thousands of NHL careers have aged since 2010-11, separately for forwards, defensemen and goalies. That includes the real chance of injury, decline or leaving the league. Each season is valued on that year's salary cap. Tested on past seasons, the projection beats assuming a player simply stays at his current level, at every horizon from one to five years out.
What's on the player cards
- Percentiles compare a player with every NHL player at his position (forwards or defensemen).
- Current teams: cards and team pages use each player's current roster, so off-season trades and signings show up right away. His stats still reflect what he did for the team he actually played for.
- Career arc shows WAR for every season since 2010-11 with his peak marked.
- The data refreshes as new games are played, and each card shows when it was last updated.
Player Reports
The WAR model on this site is built on NHL play-by-play and shift data, so it isn't used to grade amateur players. Custom Player Reports use an evaluation built for the player's own level: shot and zone maps, advanced analytics and percentiles against teammates, the defensive detail described above, and a written summary. They combine video review (using tools such as InStat and FloHockey) with the eye of someone who has played the game at a high level.