Hockey Ops Lab

Model methodology

Regular season Data provided by MoneyPuck.com

Transparent by design

How the Copilot Score works

The current score is a descriptive season model, not a future prediction. It converts MoneyPuck season statistics into position-specific percentiles, combines those percentiles with published weights, and reduces the influence of small samples.

Scale 1-99

Higher scores indicate stronger season impact within the player's model.

Comparison pool Qualified players

Skaters and goalies are ranked separately against workload-qualified peers.

Small samples Regressed to 50

Scores move away from league average only as a player accumulates minutes.

Sample quality

What counts as qualified?

Both requirements must be met. Qualification controls the percentile population, not access to the player.

ModelGamesMinutesHow unqualified players are handled
Skater10+200+ Retained, marked as a small sample, ranked against qualified skaters, and regressed toward 50.
Goalie10+300+ Retained, marked as a small sample, ranked against qualified goalies, and regressed toward 50.

Calculation

From a statistic to a score

  1. Load season totals. Use each player's MoneyPuck regular-season row where situation equals all.
  2. Calculate rates. Convert counting statistics to per-60 rates where usage needs to be normalized.
  3. Build qualified pools. Create separate skater and goalie comparison populations using the thresholds above.
  4. Assign percentiles. Rank each component from 1 to 99 against its qualified population. Ties use the upper edge of the tied group.
  5. Apply weights. Combine the component percentiles into a raw skater or goalie score.
  6. Apply reliability. Pull the raw score toward 50 when the player has a smaller minute sample.
Final score round(50 + (raw score - 50) * reliability)

Player profiles show this audit trail directly. Weighted points equal component percentile * component weight, and all weighted points sum to the raw blend before reliability is applied.

Winning impact

How Observed WAR v0 works

Observed WAR estimates past regular-season value above a replacement-level player. It is an explainable baseline for the future predictive model, not a forecast.

  1. Set replacement levels. Forwards and defensemen use season-specific 20th-percentile positive rates and 80th-percentile expected-goals-against rates. Finishing is centered at zero goals above expected. Goalies use the 20th percentile of GSAx per 60.
  2. Estimate goals above replacement. Skaters receive 5-on-5 offense and defense, power-play, penalty-kill, finishing, and penalty components. Goaltenders use goals saved above expected relative to replacement.
  3. Adjust for sample reliability. Skater components grow to full weight at 500 minutes and special-teams components at 150 minutes. Goalies use a continuous 1,200-minute prior because single-season shot-stopping is more volatile.
  4. Convert goals to wins. Each season uses twice the league-average goals per team-game as its goals-per-win conversion.
  5. Allocate team value. Players who changed teams are divided by their game-level ice-time share with each club.
Observed WAR goals above replacement / (2 * league goals per team-game)

The model is validated by comparing team-allocated player GAR with team goal differential. This is an in-sample descriptive check and should not be interpreted as predictive accuracy.

5v5 offense
On-ice expected goals for relative to replacement, divided among the five skaters.
5v5 defense
Expected goals against prevented relative to replacement, divided among the five skaters.
Special teams
Power-play creation and penalty-kill suppression relative to role-specific replacement rates.
Finishing
Individual goals above expected, centered at zero and regressed using the player's individual xG opportunities plus a 25-xG prior.
Penalties
Penalty differential translated with the season's average power-play expected-goal value.
Goaltending
Goals saved above expected relative to a replacement goalie's rate.

Skater model

Skater components and weights

All component values are converted to qualified-skater percentiles before weighting.

ComponentUnderlying calculationWeight
ScoringPoints per 60 = points * 60 / minutes28%
Chance creationIndividual expected goals per 6018%
PossessionOn-ice expected-goal share24%
xG differential(On-ice xG for - on-ice xG against) * 60 / minutes15%
Finishing(Goals - individual expected goals) * 60 / minutes8%
UsageTotal minutes played7%
Total100%
Skater reliability min(minutes / 500, 1)

Goalie model

Goalie components and weights

Goalies are ranked only against the qualified-goalie population.

ComponentUnderlying calculationWeight
GSAx rate(Expected goals against - goals against) * 60 / minutes35%
Save ability(Shots on goal - goals against) / shots on goal25%
High-danger(High-danger shots - high-danger goals) / high-danger shots20%
WorkloadShots on goal faced * 60 / minutes10%
DurabilityGames played10%
Total100%
Goalie reliability min(minutes / 900, 1)

Team model

How the Team Score works

Every player on the season roster contributes, with minutes played determining influence within each position group.

ComponentCalculationWeight
Skater impactMinute-weighted average Copilot Score for every skater on the team roster75%
GoaltendingMinute-weighted average Copilot Score for every goalie on the team roster25%
Total100%
Team score round(skater score * 0.75 + goalie score * 0.25)

A brief call-up remains visible on the roster but receives less influence than a full-season player because the group averages are weighted by minutes.

Offense
Minute-weighted average of skater scoring percentiles.
Possession
Minute-weighted average of skater expected-goal-share percentiles.
Star power
Average Copilot Score of the five highest-scoring players on the roster.
Depth
Share of total roster minutes supplied by players with a Copilot Score of at least 50.
Qualified share
Percentage of rostered players meeting the skater or goalie qualification threshold.
Roster size
Every player with a MoneyPuck season-summary row for that team.

Line combinations

How the lineup view is assembled

The team page shows observed 5-on-5 season usage from MoneyPuck, not a projected lineup for the next game.

Forward lines
Combinations are sorted by shared 5-on-5 ice time. The highest-usage trio is selected, then the process continues without reusing a selected player.
Defense pairs
The same non-overlapping selection is applied to two-player defensive pairings.
Goaltenders
Starter and backup labels reflect season minutes played, not an official game-day announcement.
Other contributors
Every player on the season roster who is not selected into a primary combination, including call-ups, traded players, depth skaters, and additional goalies.

Because these are season-to-date combinations, the view can lag current injuries, transactions, or coaching changes. Official NHL roster data does not publish forward-line and defense-pair assignments.

Glossary

Statistics shown on player cards

xG share
The percentage of total on-ice expected goals belonging to the player's team.
Points / 60
Goals plus assists normalized to 60 minutes of ice time.
GSAx
Expected goals against minus actual goals allowed. Positive values indicate goals prevented above expectation.
GSAx / 60
Goals saved above expected normalized to 60 minutes.
Save percentage
The share of shots on goal stopped by the goalie.
Percentile
A 1-99 ranking within the position-specific qualified population.

Interpretation

What this score does not claim