Advanced Stats in Hockey: A DJLR Guide

The sports world is collecting more data now than it ever has. That’s true across every league — NBA, NFL, MLS, and yes, the NHL. Teams are using it too (some more than others, shoutout to the Seattle Kraken specifically) as they strive to find any extra competitive edge to use in their quest for a championship. Some of the newer statistics that have come out during the sports analytics revolution can be quite confusing at first — especially if they have a name that has no connection to what it’s measuring or a name that’s been backronym’d to hell.

But the good news is that many of the most common ones aren’t nearly as weird or scary or math-y as their name might suggest. Today, we’ll break down the basic meaning of some core “advanced” stats cropping up in the NHL and the hockey world in general, with the hope that you’ll be able to understand the chart in the header of this article by the time you finish reading.

The Basics


Abbreviations: CF, CA

In short: Shot attempts

Typical Range: The team average this year is about 45 per game at 5-on5

In long: But wait, hasn’t the NHL tracked shots since the 60’s? Yes, yes they have, but until recently the only shots anyone cared to talk about were the shots on goal. Corsi instead measures the total shot attempts, regardless of whether or not the puck made it on net. About a quarter of all shot attempts in the NHL are blocked, and another quarter just miss the net entirely. By including these, we get a larger sample size to help us decide which team spent more time in the offensive zone in a given game or season.


Abbreviations: FF, FA

In short: Unblocked shot attempts

Typical Range: The team average this year is about 33 per game at 5-on-5

In long: Fenwick is another shot attempt stat that carries a weird name, though at least this one comes from Matt Fenwick, who first suggested that using unblocked shots was a better measure of offensive skill than all shot attempts. Similar to Corsi, Fenwick includes shots that missed the net, but excludes shots that were blocked by the defense.

Expected Goals

Abbreviations: xG, xGF, xGA

In short: The likelihood that a given shot will go in the net, based on factors like shot location and game situation

Typical Range: Any given shot will have a value between 0 and 1. Adding them all up over the course of a game typically gets you to a value similar to the actual goals scored in that game.

In long: The thing about shot attempts is that some are far more likely to go in the net than others. Thanks to more than a decade’s worth of tracked shots from the NHL, several people have built their own mathematical models which assign the probability of any given shot becoming a goal. There are a fair few models, which you can read about in depth if you so desire, but you absolutely do not need to know the inner workings of them in order to utilize what they’re saying. If a game finished with team A scoring 3.4 expected goals while team B scored 2.1 expected goals, that’s telling us that team A had more high-quality scoring chances than team B, and knowing nothing else about the actual goals scored, we’d expect that team A won the game.

If you do decide you want to know more about the nuances of different expected goals models, check out my talk at the 2022 Seattle Hockey Analytics Conference.

Player & Team Stats

Corsi, Fenwick, and xG For percentages

Abbreviations: CF%, FF%, xGF%

In Short: The number of shots taken for a specific team relative to the total shots taken between both teams on the ice.

Typical Range: Generally somewhere between 40% and 60% over the course of a season. Anything over 50% is good, below 50% is bad.

In long: The handiest thing about these statistics is that there’s a very simple baseline, and it holds true for all three stats at both the team level and the player level: you want to be above 50%. These stats attempt to quantify how much of a given game (or season) went in favor of one team. A team with a 55.0 CF% in a given game took 55.0% of the total shot attempts in that game. An example:

In the game between the Seattle Kraken and the Winnipeg Jets on December 18th, the Kraken took 63 total shot attempts and the Jets took 37. Combining those, there were exactly 100 shots taken in this game, a nice round number that conveniently makes the math here much easier. Since the Kraken took 63 of those shots, we take 63/100 to get 0.63, or 63% — and that’s their CF% for the night. It’s similar to plus/minus, but instead of an absolute difference (like 63 shots for – 37 against = +26) it’s a ratio, which helps keep high-octane, back-and-forth games with a ton of scoring chances on the same level as slower, defensive battles with fewer scoring chances.

When it comes to player-level versions, these refer to the percentage of the total shots in favor for the player’s team while said player was on the ice. For example, in that same Kraken-Jets game from above, Seattle took 16 shots with Matty Beniers on the ice, while the Jets only took 7, for a total of 23 shot attempts with Beniers on the ice. To calculate Matty B’s CF% for the night, we take 16/23 to get .696, or 69.6% — a very nice night for a very nice rookie.

This same calculation can be done with only unblocked shots (Fenwick) to get a player’s FF%, and with expected goals as well to get a player’s xGF%.

Goals Saved Above Expectation

Abbreviation: GSAx

In short: The difference between a goalie’s actual goals allowed and the total expected goals he’s faced.

Typical Range: Generally between -30 and +30 over the course of a season. This is a cumulative stat, so more minutes played tends to lead toward larger values. Positive numbers are good, negative are bad.

In long: The calculation for this one is pretty straightforward: it’s the total number of expected goals a goalie faces minus the number of actual goals they allow. For example: as of this writing, Martin Jones has faced 570 shots that total 58.8 expected goals against, per Natural Stat Trick. He’s allowed 64 goals on the year. Taking 58.8 xGA – 64 GA gets us -5.2 GSAx, indicating that he’s been slightly below average over the course of this season. That’s not to say he hasn’t had his moments — over the first three weeks of November, he allowed only 12 goals on 23.2 xGA, for a GSAx of +11.2.


While the NHL itself doesn’t publicly track all of these statistics, there are quite a few other fantastic websites with this information and more. One thing to keep in mind is that each of these websites does use its own expected goals model, so the xG numbers specifically can be a bit different from site to site — though over the course of the year, they’re all similar enough in their predictions as to give around the same totals as each other.

These are the most commonly used resources for game and season-long statistics. Hopefully any weird abbreviations you see in future analysis pieces will look familiar now, if they weren’t before. And if there’s any that still don’t make sense, please let us know!