Welcome to another edition of the Hockey Handbook series! In this article I want to introduce you to Corsi and Fenwick, the original “advanced stats”. Hockey analytics have evolved since their infancy but these stats are still commonly referenced today. In addition to being original, Corsi and Fenwick are also easy to understand. This makes them a great choice if you are just getting your feet wet with analytics.
The title of this article includes a third item: on-ice stats. The phrase “on-ice stats” may be a bit misleading, because “on-ice” is in fact not a type of stat, but instead a method of contextualizing and utilizing stats. This may sound confusing, but some examples using on-ice Corsi will make everything crystal clear, I promise. Let’s jump in.
What are Corsi and Fenwick?
Despite the tendency of the hockey community to refer to Corsi and Fenwick as “advanced stats” they are very simple concepts. Corsi is nothing more than another name for shot attempts. NHL.com defines shot attempts (Corsi) as: any time a player tries to shoot the puck. So, any shot on goal, blocked shot or missed shot is classified as a shot attempt. The name Corsi was given to the stat by a hockey blogger because he liked Jim Corsi’s mustache (Jim was the goalie coach of the Buffalo Sabres at the time).

Fenwick is Corsi without the blocked shots. So only missed shots or shots on goal are counted as a Fenwick shot. Compared to Corsi, Fenwick is barely used – its claim to fame these days is being the category of shot attempts used in most Expected Goals (xG) models. The NHL tracks more data per each Fenwick shot attempts than they do per Corsi shot attempt and that has led most modelers to limit their xG models to only include Fenwick. I will discuss xG and Fenwick a lot elsewhere, but for the rest of this piece we will focus solely on Corsi. However, all the concepts we will discuss with respect to Corsi can also be applied to Fenwick.
Ok great – we have a facial-hair inspired name for shot attempts. Why? Good question. What inspired someone to rename shot attempts and classify them as an “advanced stat”? The answer is frequency. There are more shot attempts in a hockey game than there are shots, and there are a hell of a lot more shot attempts than there are goals. The pioneers of Corsi recognized this and thought that maybe shot attempts would be a better indicator of a teams’ skater’s skill than the actual goals-based result of the game. Play-driving ability is more accurately measured by the number of opportunities created rather than the amount of goals scored. On the surface this concept probably feels intuitive – we’ve all watched a sporting event where one team heavily out-chanced their opponent but ended up losing. We still typically view the losers as the better team and say they “got unlucky”.
So, do our feelings about Corsi match reality? Are players that “out-Corsi” the opposition typically more successful over larger sample sizes than just a single game? Will Auston Matthews ever regain his 2023-24 form? Are my parents proud of me? Later in this very article I will attempt to answer these questions – but first, we need to discuss the types of Corsi data that is collected and common methods of manipulating that data.
Individual Corsi
The first concept we will briefly touch on is the rawest form of corsi data – an individual skater’s Corsi. The formal name of this stat is individual Corsi or individual Corsi For. Individual Corsi For is exactly what it sounds like: a specific player’s personal shot attempts.
Individual Corsi For isn’t a very commonly referenced stat – mainstream hockey types are much more likely to reference a player’s shot total and/or rate (rate on a per game played or per 60 basis) as opposed to their Corsi number. On the other hand, analytics nerds might reference a player’s individual Corsi when discussing their performance, but in my experience, most prefer individual expected goals (which you can learn about here).
While individual Corsi doesn’t see much use these days, on-ice Corsi (and on-ice stats in general) does. Let’s get to the good stuff.
On-Ice Corsi
I’m getting tired of using the clunky “that/a player” phrasing so I’m going to make up an imaginary player who’s name I can use instead. I’ll call him Freddy.
A shot attempt made by Freddy or one of his teammates while he is on the ice is counted as an on-ice Corsi For (CF) for Freddy. Conversely, a shot attempt made by the opposing team while Freddy is on the ice is counted as an on-ice Corsi Against (CA). This concept, “on-ice” is how Corsi is used 99% of the time.
On-ice CF allows us to assess Freddy’s shot attempt generating/possession driving ability and compare him to his teammates and the rest of the league. On-ice CA lets us assess how Freddy impacts his team’s rate of giving up shot attempts. In general, on-ice Corsi gives us an idea of how well Freddy drives play, with the obvious caveat that it is a far from perfect measure given Freddy’s linemates and opponents (among other things) are also affecting the game play.
As the use of the “on-ice version” of Corsi accounts for the vast majority of applications, the prefix is typically dropped, for brevity. Freddy’s on-ice CF is typically referred to as his CF and his on-ice CA is analogously called CA. I will adopt this convention for the remainder of this article.
As I’ve alluded to already, on-ice stats are not perfect, unbiased representations of a player’s ability, but they are a step towards that ideal. An example of a stat that isolates performance further than on-ice stats is relative on-ice stats – they compare a players performance to the performance of their team without that player on the ice. A further step past relative stats is Regularized Adjusted Plus Minus (RAPM) which is a more advanced modelling technique that accounts for teammates, score effects and more.
Corsi Differential
When we know Freddy’s CF and CA we can calculate his Corsi Differential which is his CF minus his CA. This is like the calculation of plus/minus – except that it’s useful – because in the case of Corsi the sample size is much larger and goaltending talent does not confound the results.
Anyways, let’s get back to the Corsi Differential talk. Corsi Differential is an unrefined form of on-ice Corsi. Not quite raw, but certainly not a succulent and juicy medium rare. Corsi Differential is rarely used in player evaluation because it cannot be used to compare players who have played a different number of games. Imagine Freddy had a +1 on-ice corsi differential every game over a 20-game stretch – that’s a +20 Corsi differential.
Now, imagine one of Freddy’s teammates, Frida, was injured to start the season and has only played in 4 games. In those 4 games Frida had a Corsi Differential of +5, +3, +8, and +4: that’s also a +20 Corsi differential. Obviously presenting only the raw Corsi Differential is misleading; the game-by-game breakdown clearly indicates that when Frida is on the ice the team is out chancing the opponent at a much higher rate than when Freddy is on the ice.
The comparison improves when we use rate stats. This means we normalize the stat to be “per 60 minutes” or “per game played (GP)”. You can read in detail about how we calculate rate stats here, but briefly, per 60 stats correct for a player’s total time on ice and per GP stats correct for the amount of games an individual player has played. In the context of this example, we can quickly calculate that Freddy has a Corsi/GP of +1 and Frida has a Corsi/GP of +5.
That’s nice, isn’t it? Utilizing rate stats we see that when Frida is on the ice the team is generating a lot more shot attempts vs. the opponent than when Freddy is on the ice.
Alright, just for fun, let’s look at some real world numbers! Here are the Corsi Differential per 60 leaders in the NHL over the past 5 seasons.

If you’ve been a fan of the NHL for the past 5-10 years the top of the list won’t surprise you. In the 2021-22 season Patrice Bergeron won the Selke trophy as the league’s best two-way forward (the Selke is supposed to be a defense only award but it is not treated that way by the voters), and his Corsi Differential per 60 indicates that the win was well deserved.
Seven of the top ten players with top-10 Corsi Differential seasons in the past 10 years play for the Carolina Hurricanes. The Hurricanes are a very analytically-forward team, and by looking at historical Corsi data they discovered that teams that take more shot attempts start scoring more goals. I guess that they took this information and implemented it on the ice. This may not be the best strategy – the high number of shot attempts that good teams take may be a side-effect of how good they are, not the core reason they are good. The Hurricanes may be sacrificing quality while chasing quantity.
Because the Hurricanes dominate the leaderboard I included a second list with their players filtered out. Bergeron and Marchand (21-22), Weegar and Backlund (22-23), and Ekholm and Bouchard (23-24) are all teammate pairs who played a lot of time together. This alludes to the inherent bias in on-ice stats for players who are on the ice a lot together. On-ice stats – despite their obvious utility – are unable to provide an unbiased estimate of a players impact by themselves. Brad Marchand was a great player in his own right, but deeper analysis (that we won’t be getting into today) suggests that while he had a positive impact on Corsi Differential, it wasn’t in the same realm as Bergeron. We will discuss “extensions” of on-ice stats that are intended to minimize this bias in future articles.
The Holy Grail: On-ice Corsi For Percentage
Corsi For Percentage (CF%) is defined as CF divided by the sum of CF and CA. It is the percentage of total shot attempts that are taken by Freddy’s team while he is on the ice. CF% is far and away the most common form of on-ice Corsi used in practice. It provides essentially the same information as Corsi Differential per 60, but in a percentage form instead of in absolute form. Remember Freddy’s 20-game stretch from earlier during which he had a Corsi of +20? Over that time he recorded a CF of 80 and a CA of 60. So, Freddy’s CF% is 80/(60+80) = 60%.
CF% is widely used because of how easy it is to interpret. A CF% above 50% indicates Freddy’s team out-chances the opposition when he is on the ice. If his CF% was below 50% his team would be the one getting out-chanced. Typically NHL player CF%s fall in the range of 40-60%. If a player is on either side of this range they are especially good or especially bad. In general, anything above 55% is considered very good and anything below 45% is considered very bad.
Now – finally – let’s answer the question we had about Corsi from the very beginning: is it useful? Pretty important question. Imagine me writing all this and it turns out that everything I was saying is a bunch of garbage. I’d have to call it something like “The Toronto Sun”, or “12 Rules for Life”. Anyways, even though the idea that out-chancing (or out-Corsiing) your opponent is a good thing feels intuitive – intuition isn’t evidence! So, let’s do some evidence-based analysis and answer this question: Are players that “out-Corsi” their opposition more successful in the long run?
How do we begin to answer this question? The logical place to start is to formalize our definition of “successful”. Hockey players “succeed” if their team scores more than the opponents team, so let’s define “successful” as having a high On-ice Goals For Percentage. Goals For Percentage (GF%) is analogous to CF%, except Goals For (GF) and Goals Against (GA) replace CF and CA in the calculation. If Freddy has a GF% above 50% it means his team outscores the opposition while he is on the ice. Higher GF% = greater success.
Alright, with our definition for success in hand we will proceed with the analysis. We are going to look at the past 14 pairs of seasons, where a pair of seasons is defined as a single season and the one immediately following it. For each pair we calculate the Pearson correlation coefficient (PCC) between GF% in year 1 (Y1) and year 2 (Y2) and CF% in Y1 to GF% in Y2 for all forwards who played at least 300 minutes in both seasons. The PCC can range between -1 to 1 and measures correlation between variables. A value of 1 implies perfect correlation, a value of 0 implies no correlation and a value of -1 implies perfect negative correlation. By comparing the value of the PCC for GF% Y1 and GF% Y2 to the PCC value for CF% Y1 and GF% Y2 we can determine which metric, GF% or CF%, is more predictive of future GF%. Is it past success (GF%) or past possession (CF%)? The plot below compares the two PCC values for the past 14 pairs of seasons.

For 12 of the past 14 seasons CF% has been a better predictor of future success than GF%. Thus, we can conclude that in general CF% is worth our time – it predicts future goalscoring better than past goalscoring does. However, there is a caveat. The predictive power of CF% seems to be declining sharply since the 22-23 season, and last year GF% was a much better predictor of success than CF% was. This is an area that warrants investigation – perhaps teams are focusing more on quality over quantity? It could also just be a weird anomaly and we could find CF% is back to predicting success better than GF% next season. I will do a deeper investigation into this trend soon.
Team-level On-ice Stats
On-ice CF% and Corsi Differential (and all other on-ice stats) are frequently applied at the team level in addition to the player level. Rather than using individual players CF and CA in the calculation the team’s Corsi numbers are used. We will talk more about on-ice stats at the team level in the future – I just wanted to acknowledge their existence briefly before wrapping this one up.
Wrap Up
I hope you enjoyed this introduction to Corsi, Fenwick (remember that?) and on-ice stats! If you’re going to take away only one thing from this article, let it be the concept of on-ice stats. On-ice stats are widely used and a core building block of many other analyses, such as relative to teammates and RAPM. Many different stats can be viewed through the on-ice lens, such as:
- Save Percentage
- Corsi and Fenwick (duh)
- Expected Goals
- Shots
- Goals
- Scoring Chances
- Shooting Percentage
Click HERE to browse through other Hockey Handbook entries.


Leave a Reply