Stats made simple

What every number on this site actually means

If you've stared at xGF% or NHLe and thought "what is this," you're in the right place. This site is supposed to be where the argument finally has receipts. That only works if the numbers make sense to the people doing the arguing.

Standings

Standings come down to one number: points. The way teams earn those points is the part that throws people off.

Win in regulation? 2 points. Win in overtime or shootout? Still 2 points. Lose in regulation? Nothing. Lose in OT or shootout? 1 point. That's the loser point, and it's why a team's record looks like 40-25-12. 40 wins, 25 regulation losses, 12 OT/shootout losses, 92 points (40×2 + 12×1). Two teams can play the same number of games. One has more wins. The other is ahead in the standings. That happens because of the loser point. P% (points percentage) is the cleaner read: the share of available points a team has actually banked.

Big DIFF (goals for minus goals against) is one of the most predictive numbers in the standings. A team at +40 is usually a real contender. A team at -40 is usually playing for the lottery, even if some shootout luck has them above the line right now. The gap between record and DIFF tells you signal vs noise.

The rest of the columns:

  • GF / GA: goals scored, goals allowed. DIFF is the difference.
  • HOME / AWAY / L10: record splits. L10 (last ten) is the read on current form. A team that started 2-7 but went 8-2 in their last ten is a different team than the one that opened the season.
  • STRK: current streak. W4 means won the last 4. L2 means lost the last 2.
  • RW / ROW: regulation wins, or wins in regulation plus OT but not shootout. The NHL uses these as tiebreakers when teams finish tied on points. Translation: winning before the gimmick counts for more.

Skater stats

The basics first:

  • Goals (G). Pucks the player put in the net.
  • Assists (A). Passes that led to a teammate's goal. The pass right before the goal is the primary, the pass before that is the secondary. Both worth the same.
  • Points (P). Goals + assists. The single number you'll see most. 80 points in a season is a real top-six forward. 100+ is a star. 120+ is in the MVP conversation.
  • Points per game (P/GP). Exactly what it sounds like, and the right number to compare two guys who've played different amounts of games. 0.7 is solid. 1.0 is elite. 1.4+ is generational.

Now the two skater stats that look simple but lie to you.

Plus/Minus (+/−). On the ice, your team scores at even strength, +1. On for a goal against, -1. Sounds clean. It isn't. A great defenseman on a tanking team has a brutal +/-. A mediocre forward on Colorado looks like a star. The number is mostly about your team and your linemates. Treat +/- as a vibe check, not a verdict.

Shooting % (Shot %). The fraction of a player's shots that become goals. League average is 9-10%. Someone at 18% over a long stretch is either an elite finisher or about to come back to earth. Someone at 4% with normal shot quality is probably about to score. Hot streak or signal? Shot % alone won't tell you. xG will.

The big shift in modern hockey: shot quality matters more than shot count. The xG section below is the upgrade. Instead of "200 shots, 18 goals," you get "200 shots worth 22 goals on average, scored 18, so this guy is slightly under-finishing."

TOI / GP (time on ice per game). Average minutes played per night. The fastest tell on what role a coach trusts a player with. A forward at 20+ min/GP is a true top-6 workhorse. 16-19 is middle-6 / Selke territory. Under 12 is fourth-line minutes. For defensemen the bar is higher: 22+ is top-pair, 18-21 is top-4, under 16 is bottom-pair.

Primary points. Goals plus primary assists only (the pass right before the goal), dropping secondary assists out of the count. Why it matters: secondary assists are noisier and credit-y, the breakout pass from the D or the bank off the boards. Primary points strip them out so the number reflects direct goal involvement. A guy with 60 points and 50 primary points is genuinely driving offense. A guy with 60 points and 30 primary is riding linemates.

5v5 splits. Many of the rate stats on this site filter to 5-on-5 play only. That means no power play, no penalty kill, no empty net, no 4-on-4 OT. Just regular full-strength hockey. Why? Power-play opportunities are unequally distributed (your team draws penalties, the coach picks the unit) and that noise washes out real on-ice impact. 5v5 strips it back to the part of the game everyone gets equal reps in. When you see "P (5v5)" or "TOI/GP (5v5)" on a player page, that's the filter.

Special teams

Power play and penalty kill swing more games than people realize. A great PP can drag a mediocre 5-on-5 team into the playoffs. A leaky PK can sink a great one.

PP% (power play percentage). The share of power play opportunities where a team scored. League average sits around 21%. 25%+ is a real weapon, 30%+ is elite. Under 17% is a problem worth talking about every intermission.

PK% (penalty kill percentage). The share of times shorthanded where a team did not get scored on. League average is around 79%. 82%+ is solid, 85%+ is elite. Anything under 75% and the team has a structural issue down the middle.

Faceoff %. The share of faceoffs a center wins. League average is 50% (because every win is somebody's loss). 54%+ over a season is real top-six C territory. Over 58% is best-in-class. Faceoffs decide possession off every whistle: penalty kills, offensive zone draws, defensive zone draws after icings. A 5-point swing per night across 60 faceoffs is three extra possessions a game.

When you see PP% and PK% on the Tale of the Tape comparison cards, the swing usually tells the story. A team with an elite PP and a porous PK is going to win every shootout-style game and lose every grind. The opposite team will lose every track meet and grind out the wins.

Goalie stats

Two numbers on every goalie page.

Save % (SV%). Out of every shot on net, what fraction the goalie stopped. .910 is roughly league average. .920+ is starter-tier. .925+ is elite. Anything north of .930 over a real sample and you're in Vezina territory.

GAA (goals against average). Goals allowed per 60 minutes. Lower is better. Under 2.50 is starter-tier these days, under 2.30 is great.

Both numbers can lie. A goalie behind a porous defense gets sprayed with Grade A chances every night and his SV% craters. A goalie behind a structured team faces perimeter wristers and looks like a wall. Same goalie, different team, different career. That's why we built GSAx.

GSAx (Goals Saved Above Expected). For every shot a goalie faced, the HighDanger model figures out how often an average NHL goalie would have saved it. Then we add it all up. Did this goalie save more than expected, or less? +15 GSAx over a season means he saved 15 goals his team would have given up with an average guy in net. +25 and up is Vezina-conversation territory. Negative numbers mean the opposite.

GSAx (Playoffs). The same calculation, but restricted to playoff games. We split this out because playoff GSAx is a smaller, higher-leverage sample. A goalie at +5 GSAx over a 14-game playoff run is doing what +25 looks like over a full regular season, because every shot in the postseason carries more weight. Andersen's +14.7 through two rounds is the kind of number that decides a Stanley Cup. Dobeš at +11.5 is right behind him.

xG and High Danger

xG is short for expected goals. The idea is simple. Every shot has a probability of going in.

A wraparound from behind the net? Basically nothing. 1%. A clean wrister from the slot? Closer to 15%. A tip-in off a cross-ice pass in the crease? Pushing 30%. Add the probabilities up across every shot in a game and you get xG.

So when a team has 3.2 xG, the chances they generated were worth about 3 goals on average. If they scored 1, they got snake-bitten or the goalie stood on his head. If they scored 5, they finished beautifully or got hot. Same chances, different scoreboard.

This is the upgrade on raw shot count. A team that creates 4 xG a game and scores 2 is hitting line drives right at people. They'll come back. A team scoring 4 on 1.5 xG is dropping bloop singles. They'll cool off. xG tells you which one is real.

High Danger chances (HDC). The site's namesake. A high-danger chance is the top tier of shot quality: a puck struck from the inner slot, the area between the faceoff dots and below the top of the circles. The kind of shot a goalie has to make a real save on. We pay attention to HDC because they convert at roughly 15-20%, compared to ~3% for shots from the perimeter. A team generating 12 HDC a game is creating real offense. A team generating 4 is shooting from the parking lot. The xG model weights every shot by quality, so HDC are doing most of the work behind any team's xG number.

The flavors of xG you'll see on this site:

  • ixG. Individual expected goals. Just this player's own shots. The question it answers: based on the shots he took, how many goals should he have scored? Way above ixG = elite finisher. Way below = unlucky, or just can't finish.
  • Finishing (G - ixG). Exactly that subtraction. Pastrnak, Ovechkin, MacKinnon live in the positive. Guys who fire pucks at the goalie's chest live in the negative.
  • xGF%. The most important one. While this player is on the ice 5-on-5, what share of the dangerous chances belong to his team. 50% is break-even. 55%+ is play-driver. 60%+ is rare air. Below 45% and you're getting outplayed every time you're out there. This is the modern version of plus-minus, except it actually works.
  • xGF/60 and xGA/60. Per-60-minute rates of expected goals for and against while this player is on the ice. The pace numbers. A 5v5 forward at 3.0 xGF/60 is driving a top line. At 1.5 xGA/60 on the defensive side, the line he plays on is suffocating teams. These two numbers together tell you whether a player is winning the game when he's out there, separately from how often his team takes shifts.
  • xShots. The number of shots the model expected the player or team to take, based on the actual shots they took weighted by quality. Useful in playoff samples where a guy might have 32 SOG but 22 xShots, meaning a lot of his shots were the easy ones the goalie sees coming. Or the other direction: 20 SOG but 26 xShots means he's getting to the dangerous spots even if the volume is modest.

NHLe (comparing players across leagues)

Hockey is played at a lot of different levels and 100 points in one of them is not 100 points in another.

The NHL is the hardest. KHL in Russia is a little easier. AHL (the NHL's main minor league) is meaningfully easier. Junior leagues like the OHL where most NHL players spent ages 16-19 are easier than that. So a 100-point OHL kid and a 50-point NHL veteran are not playing the same sport.

NHLe (NHL Equivalency) is the translation factor. Every league has a known multiplier for converting production in that league into "what would he have done in the NHL." 100 OHL points × 0.30 = 30 NHLe points. A 100-point junior kid would project to a 30-point NHL rookie if dropped straight in. 60 AHL points × 0.60 = 36 NHLe points. Now you can stack the two against each other.

This is what powers the Organization strength bars on every team page. NHL roster + drafted prospects in juniors and college and Europe, all converted to one common scale, then averaged by position group. Apples to apples.

The factors HighDanger uses (blended from published estimates):

League factor table (click to expand)
LeagueFactor
NHL1.00
KHL (Russia)0.83
SHL (Sweden)0.78
AHL0.60
Liiga (Finland)0.55
Czech Extraliga0.55
Swiss NL0.55
Allsvenskan (Sweden 2nd)0.45
DEL (Germany)0.40
NCAA (US college)0.31
OHL0.30
WHL0.27
QMJHL0.27
USHL (US juniors)0.20
ECHL0.18

You'll see NHLe used on team pages in the Organization strength bars. That's how we average out forwards/defensemen across the NHL roster + drafted prospects in junior leagues / college / Europe to get one comparable depth number per team.

Player page features

Every player has their own page with a few HighDanger-specific labels and visualizations. Here's what they all mean.

Archetype label

Each skater gets a colored label that captures their role. We compute it from points per game, time on ice, penalty minutes, and career games played. The forward labels go (best to baseline):

  • Elite Scorer (red). 0.80+ PPG with 25+ goals. The 30-goal threats: MacKinnon, Pastrnak, Geekie types.
  • Top-6 Playmaker (orange). 0.75+ PPG with an assist-heavy mix. The setup men.
  • Top-6 Forward (amber). 0.55+ PPG, or 0.45+ PPG playing 16+ min/GP. Selke-type two-way center types live here too.
  • Bottom-6 Forward (blue). 0.25+ PPG. Honest middle-of-the-lineup forward.
  • Depth Forward (neutral). Below 0.25 PPG. Energy line, AHL call-up, plug-and-play.
  • Rookie (neutral). True first-year NHLer, or a player with under 50 career NHL games. We call out rookies separately so a 17-game cameo doesn't get crowned as anything bigger than it is.
  • Enforcer / Agitator (red). 120+ PIM. Self-explanatory.

For defensemen the floors are different because defenders score less:

  • Elite Offensive D (orange). 0.75+ PPG. Hutson, Makar, Fox tier.
  • Top Pair (amber). 0.45+ PPG with 18:30+ TOI. Both the production and the minutes have to be there.
  • Top 4 (blue). 0.25+ PPG with 17:30+ TOI.
  • Shutdown D (emerald). 19:30+ TOI with under 0.40 PPG. The Niskanen / Slavin / Chatfield archetype: heavy minutes, defensive specialist, lets the partner activate.
  • Bottom Pair / Depth Pair (neutral). Third-pair role.
  • Enforcer D (red). 120+ PIM.

Goalies get a simple split: Starter (40+ GP) or Backup.

The labels are deliberately blunt. A guy on his third call-up of the year, playing 9 minutes a night on the fourth line, gets "Depth Forward," even if his PPG is technically Top-6 territory over that tiny sample. Career games and time on ice are the guardrails that keep small samples from inflating roles.

Career stage

A second label that captures where the player is in his career arc:

  • Rookie. First NHL season ever, regardless of age.
  • Emerging. Second or third season, still on an upward curve.
  • Prime. Ages 24-30 with established NHL production. The peak window.
  • Veteran. 31+ and still playing meaningful minutes.
  • Glory Days. The career arc panel showing each completed season tagged with which stage it belonged to.

Trajectory projection

On every player chart you'll see a solid line for completed seasons and a dotted line for future projection. The projection isn't a guess. It's the player's own production curve, smoothed and aged forward using a standard NHL age curve (forwards peak around 24-26 and decline after 30, defensemen peak slightly later, goalies have a flatter curve into their mid-30s).

Rate stats (P/GP, SV%, GAA) project differently from counting stats (G, A, P, Wins). Counting stats get a small year-over-year haircut to reflect that nobody plays 82 games forever. Rate stats don't get the haircut. We age them with a gentler curve, so a goalie's SV% projection doesn't crash to .830 the year after a Vezina-caliber season. GAA is inverted because lower is better.

A 26-year-old top-6 forward coming off a 70-point year will project to roughly 65-72 next year, declining gently from there. The projection assumes the player stays healthy and stays in his role. It's a baseline, not a prediction. If you see the dotted line crater, it's usually age catching up. If it stays flat past 32, the model is reading career-long durability.

Shotmap and heatmap

Two visualizations on every player page, and they tell different stories.

Shotmap (skaters). A rink diagram with every shot the player took plotted as a dot. Goals are flagged with 🚨. The pattern tells you the player's style: clustered in the slot (a finisher), spread across the points (a power-play QB), heavy down the wall (a wing). Match the pattern against the goals and you can see whether the player is converting from where they shoot or relying on a few hot spots.

Heatmap (goalies). The inverse: a rink diagram showing where the goalie has been shot at, colored by frequency. Dark concentrations in the slot mean the team in front is giving up high-danger chances. A heatmap that lights up the perimeter and stays dim in the slot means the team plays a structured defensive game and the goalie's job is easier than the raw SV% would suggest.

Percentiles

On the Compare page you'll see bars labeled things like "Goals: 89th" or "+/-: 55th". Those are percentile ranks. They're answering the same question we yell at the TV about: is this guy actually good or just on a hot streak?

89th means he's done better than 89% of the comparable players this season. Top 11% of the league at his position. 50th is exactly average. 1st is bottom of the league. 99th means nobody at his position has done better.

A defenseman with 60 points is having a year. A forward with 60 points is fine but nothing special. The percentile bars compare each player only against others at the same position so you're not stacking apples against oranges. Forward vs forward, D vs D, goalie vs goalie.

To strip out single-game flukes, the pool only includes skaters and goalies with 10+ games this season. We used to set this at 20+ for skaters but dropped it: real role players and call-ups have stories worth showing at 10-19 games, and the cohort is still big enough to keep the percentiles meaningful. Color: green is 75th+ (elite), amber is 50th-74th (above average), grey is below the median.

Standings tier pills

Each team gets a colored badge on the standings. Quick read on whether they're making the playoffs. The NHL takes the top 3 in each division automatically, then 2 more wild card spots per conference from whoever has the best remaining records. So:

  • Cup (green). Top 3 in their division. Locked into a playoff spot if the season ended today. Cup is on the table.
  • PO (green). Currently in a wild card spot. Still in, just lower seed.
  • Bubble (amber). Within striking distance of the wild card. Math is alive, they need to win.
  • Out (grey). Too far back. Probably playing for the lottery.

Quick cheat sheet

If you just want the abbreviation → meaning lookup:

Show all abbreviations
GPGames played
W / L / OTWins / regulation losses / overtime + shootout losses
PTSStandings points (2 per W, 1 per OT loss)
P%Points percentage: share of available points won
RW / ROWRegulation wins / regulation + OT wins (NHL tiebreakers)
GF / GA / DIFFGoals for / against / differential
L10Record over the last 10 games
STRKCurrent win or loss streak (W4, L2, etc.)
G / A / PGoals / assists / points
P/GPPoints per game
Primary PGoals plus primary assists only (no secondary)
TOI / GPTime on ice per game (minutes)
5v5Filtered to 5-on-5 even-strength play only
+/−On-ice goal differential at even strength
PIMPenalty minutes
Shot %Goals divided by shots
FO %Faceoff win percentage
PP %Power play conversion rate
PK %Penalty kill success rate
SV%Goalie save percentage
GAAGoals against per 60 minutes (lower is better)
SOShutouts (games allowing zero goals)
xGExpected goals: sum of shot probabilities
ixGA skater's own expected goals (their shots)
xShotsQuality-weighted shot count from the xG model
G − ixGFinishing: actual goals minus expected
xGF%Share of on-ice expected goals (5v5). 50% = even.
xGF/60Expected goals for, per 60 on-ice minutes
xGA/60Expected goals against, per 60 on-ice minutes
HDCHigh-danger chances: shots from the inner slot
GSAxGoalie's goals saved above expected (regular season)
GSAx (PO)Goals saved above expected, playoffs only
NHLeA player's production translated into NHL-equivalent points

Missing a stat or want a clearer explanation? Hockeyops@highdanger.com.