PickALeague.com
OCT3
FinalRegular seasonCHI3BUF4CHSN, MSG-BP3 05:19Regular seasonOTT3TOR2SNP3 02:28Regular seasonWSH1TBL2The Spot, MNMTP3 00:00Regular seasonCAR2PHI2CARNHL, HHN, NBCSPP3 10:31Regular seasonMTL3PIT5SNE, TVAS, SN-PITP3 03:42Regular seasonUTA4CBJ1CBJNHL, CBJHN, Utah16P3 02:14Regular seasonSEA1EDM2SNW, NHLN, Prime VideoP3 17:07Regular seasonNJD0NYI3MSGSN, MSGP2 02:13Regular seasonDAL1NSH2Prime Video, SCRIPPSP2 07:32Regular seasonBOS1MIN1MINNHL, Wild+, NESNP1 03:19Regular seasonSTL0COL2STLNHL, BN+, ALT10:00 p.m.Regular seasonCGY0-1-0VAN1-1-0SN, TVAS210:00 p.m.Regular seasonLAK0-1-0SJS1-0-0ABTV , NBCSCA
Full schedule

PickALeague WAR: how we calculate it

WAR — wins above replacement — answers a simple question: how many wins did a player add to his team, compared with a player it could have called up from the AHL for next to nothing? Here is the calculation, step by step, with the 2025-26 numbers.

The data

Everything starts from two files the NHL publishes for every game: the play-by-play — every shot with its location, every goal, every penalty, the game state — and the shift charts — who was on the ice, to the second. For 2025-26: 1,312 games, 111,099 unblocked shot attempts and 452,448 even-strength stints.

The season has 8,086 regular-season goals, shootouts excluded — the official count. The model sets aside 508 empty-net goals, where expected goals mean nothing, and works on 7,578 goals. That set is used everywhere after.

1Expected goals (xG)

Not all shots are equal. The expected-goals model gives every unblocked attempt its probability of becoming a goal, using a logistic regression on: distance and angle to the net; shot type; rebounds (a same-team attempt in the previous 3 seconds); rush chances (an event in the neutral or defensive zone in the previous 4 seconds); and power play or short-handed play.

xG = 1 / (1 + e^-(b0 + b1·distance + b2·angle + … ))

Across the 111,099 eligible unblocked attempts, xG sums to 7,598 against 7,578 actual goals on those same attempts, overall and on rebounds, rush chances and the power play, with an ROC area under the curve of 0.742. These figures are in-sample: measured on the shots the model was trained on.

The real test is out of sample: train on half the games, predict the other half, both ways. The model then expects 7,592 goals against 7,578, with an AUC of 0.741 — almost nothing is lost, the model is not memorizing. The published model is trained on the full season.

2Even strength: offense and defense (RAPM)

Every game is split into stints during which the same players are on the ice. Each stint yields two observations, one per team on offense:

xG for / 60 = intercept
              + Σ offense(players of the attacking team)
              + Σ defense(players of the defending team)
              + home ice
              + game state (4v4, 3v3)

Solving this for every player at once, weighted by stint length, is RAPM (regularized adjusted plus-minus). A ridge penalty λ pulls coefficients toward zero to tame players who are always together; λ is picked by five-fold cross-validation on games: λ = 48,000. The minimum is flat: any λ between 24,000 and 64,000 gives the same error within 0.01%, so the exact value matters little. Even strength is mostly 5v5, but also 4v4 and overtime 3v3, a far more open game. One variable per game state absorbs that pace, so a player used in overtime does not inherit 3v3 chances (relative to 5v5: 4v4 -0.05, 3v3 +1.49 xG per 60). Then to goals:

EV offense = offense coefficient × even-strength hours
EV defense = − defense coefficient × even-strength hours

Season intercept: 2.39 xG per 60; home-ice effect 0.12.

3Power play and penalty kill

Same method on stints where one team has more skaters, with game-state variables separating 5v4 (the reference) from 5v3 and 4v3. λ = 16,000, intercept 6.77 xG per 60 at 5v4, +8.69 at 5v3, +2.24 at 4v3.

4Shooting

Shooting = goals scored − expected goals of his shots

5Penalties

A power-play minute yields 0.1273 goals for the team with the advantage, against 0.0427 for a team at even strength.

Value of a minute = 0.1273 − 0.0427 = 0.0846 goals
Penalties = (minutes drawn − minutes taken) × 0.0846

An empirical value and a simplification: a power play ends at the first goal, and not all penalties are equal. Only minors and bench minors count; majors (often offsetting) and misconducts (no power play) are left out. The calculation keeps every decimal.

6Goalies

Goals saved above expected (GSAx) = expected goals against − goals allowed

7Replacement level

Inspired by hockeystats.com's approach, in simpler form — they set separate thresholds at even strength, on the power play and on the penalty kill; we use one threshold on total ice time: replacement players are forwards beyond 13th on their team, defensemen beyond 7th and goalies beyond 2nd in games played. Their output per hour (per shot faced for goalies) sets the replacement rate: forwards -0.188, defense -0.130 goals per hour; goalies -0.002 goals per shot.

Goals above replacement = goals above average − replacement rate × hours played

8From goals to wins

The Pythagorean formula links goals and wins: W% = GFx ÷ (GFx + GAx). Christopher Long estimated x = 2.022 on his own goal definition; since WAR drops empty-net goals, we re-estimate x on that same universe: over 524 team seasons from 2009-10 to 2025-26, the exponent that best predicts win percentage is x = 2.182 (mean error 3.55 percentage points, against 3.61 with 2.022). Around an average team scoring g goals per game, one more goal is worth x ÷ (4g) wins:

g = 7,578 goals ÷ 2,624 team games = 2.888
Goals per win = 4 × 2.888 ÷ 2.182 = 5.29
WAR = goals above replacement ÷ 5.29

Why 2.888 goals per game rather than the official 3.082? Because g counts the same goals as the rest of the model: no empty-net goals, which depend on score and clock more than on play. hockeystats.com likewise excludes empty-net and shootout goals.

A complete example

Nathan MacKinnon (COL), 2025-26
Even-strength offense+11.24
Even-strength defense-2.31
Power play+2.92
Penalty kill0.00
Shooting+10.88
Penalties+1.35
Goals above average24.08
Average → replacement gap+5.33
Goals above replacement (GAR)29.41
WAR = 29.41 ÷ 5.295.56

Each line is rounded to the hundredth and the totals are computed from those rounded values, so the arithmetic can be checked. The leaderboard keeps every decimal, hence a possible one-hundredth difference.

What WAR doesn't say

Sources

Method inspired by hockeystats.com and Evolving-Hockey. Data: NHL. Calculation: PickALeague, updated October 4, 2026.

← WAR leaderboard