Corsi, Fenwick, and the shot quality revolution
For a sport that has never been short on tradition, hockey moved through its analytics revolution remarkably quickly. The transition from "shots on goal" as the canonical possession proxy to "Corsi" and "Fenwick" took less than a decade, and the transition from those metrics to expected goals took less than another. In 2010 a hockey general manager who talked about Corsi sounded like a weirdo. In 2020 he sounded like the only kind of general manager the league had. The metrics changed because the underlying question — what is a team actually doing well, and what is just random — turned out to have a much sharper answer than anyone had previously believed.
What Corsi measured and why
Corsi, named for goaltending coach Jim Corsi though actually popularized by hockey analyst Tim Barnes writing as Vic Ferrari, is the count of all shot attempts a team produces at five-on-five — shots on goal, shots that missed the net, and shots that were blocked, all summed up — minus the same total against. The number sounds primitive. The reason it caught on is that, in the early 2010s, public hockey researchers showed it was a better predictor of future team success than any traditional possession stat, including shots on goal alone.
The insight underneath was straightforward. Hockey is a sport with extreme short-term variance. Goals happen on a tiny fraction of shot attempts; on any given night, the team that had more high-percentage looks can lose because a bouncing puck went in at the other end. Over twenty games, that variance partially smooths out. Over eighty games, it smooths out more. And the underlying skill that the variance was washing in and out of view was, more or less, the team's ability to take and prevent shot attempts. Corsi was a noisy but high-signal approximation of that skill.
It also turned out to be the best public stat for predicting regression. Teams with high Corsi differentials and low actual goal differentials tended to improve their goal differential the following year. Teams with the opposite — low Corsi, high goal differential — tended to decline. Front offices started using Corsi as a leading indicator for whether a hot team was for real or just lucky. Most of the time it was lucky.
What Fenwick added
Fenwick was a refinement. It's Corsi minus blocked shots, on the theory that blocking a shot is itself a defensive skill and crediting the shooting team for an attempt that the defense successfully prevented from reaching the net was the wrong accounting. The empirical question of whether Fenwick predicts better than Corsi was always close — both correlate with future success roughly equally well — but Fenwick has theoretical appeal and remains widely used.
Both stats share the same fundamental flaw: they treat a shot from the slot the same as a shot from the blue line, a prime-scoring-chance one-timer the same as a desperation point shot in the final ten seconds of a power play. Hockey is a sport where shot location matters enormously to conversion rate, and where the rate of conversion of a given shot type is much more stable than the rate of conversion of all shots lumped together. The next obvious refinement was to weight each shot by how often shots from that location and type actually go in.
Expected goals takes over
Expected goals, or xG, does exactly that. Every shot attempt is multiplied by a model-estimated probability that a league-average shot from that location, of that type, with that game state and shooter handedness, would have produced a goal. The model is trained on historical play-by-play data. The output is a number, in fractional goals, that tells you roughly how many goals a team's shot attempts should have produced.
The public xG models have been refined steadily since the mid-2010s and now incorporate features like the previous shot on the same possession (rebounds convert more often than first-touch shots), the shooter's handedness relative to the rink side, and game state (power play, even strength, empty net). They produce a per-game xG number for each team that tracks much more closely with goals than Corsi or Fenwick do. Across a full season, team xG and team actual goals diverge less than a few percent for most teams. The teams where they diverge more are usually either riding hot goaltending (over their xG-against suggests) or being failed by their goalies (under their xG-for suggests).
For player evaluation, xG is now the standard. A player whose on-ice xG percentage is consistently above 55% is having a meaningful positive impact on his team's shot quality balance. Above 60% is elite. Below 45% is, accounting for usage and opponent quality, a real drag. The public versions of these numbers are imperfect — they don't fully account for the strength of the linemates and opponents — but they produce a much more accurate ranking than goals or assists.
What xG doesn't capture
Shot quality, in the deepest sense. A wrist shot from the slot with a defender's stick in the lane is a different shot from the same wrist shot with no defender within five feet, and xG models that don't see defender position score them identically. The public xG models, with one or two exceptions, don't fully see defender position; they approximate it through proxies, and the approximation is looser than the front-office versions that have access to full tracking data.
Goaltender quality also distorts the picture. xG-against is a measurement of the shot quality faced; it does not adjust for the goaltender's skill. A team that allows below-average xG against and gets above-average goaltending will look like a defensive juggernaut by goal-prevention metrics and like roughly an average defensive team by xG. The truth is somewhere in between, and the public models leave it to the analyst to do the disentangling.
And the models can't see decision-making between shots. Possessions that end in zero shots — turnovers in the offensive zone, lost defensive zone face-offs, broken plays at the blue line — produce zero xG for or against, but they change the chance state of the game. The next generation of public hockey analytics is trying to model possession-level expected goals, and that work is genuinely hard. The publicly available numbers are still mostly shot-based.
The line from here
Corsi was the first stat that taught hockey fans to think about possession over results. Fenwick was the first refinement. Expected goals was the first model. The next wave, partly visible already in the more sophisticated public datasets, is full-possession value — expected goals added per shift, accounting for entries, exits, turnovers, and defensive zone events. The league's front offices have most of this in production internally. The public versions are five years behind, which is roughly the standard lag between front-office innovation and public sabermetric coverage.
The bigger takeaway, beyond the specific stats, is that hockey turned out to be a much more measurable game than the sport's reputation suggested. The popular framing of hockey as the most random major sport — "the puck takes funny bounces" — was partly a function of the metrics that had been available to evaluate it. With better metrics, the randomness shrinks. The puck still bounces. But more of the season-long signal can be extracted from the noise than anyone believed was possible in 2009.
Corsi will probably stop being a household name in the next decade, the way "wins above replacement" gradually replaced "batting average against" in baseball discourse. The stats that replace it will be more accurate and harder to explain. The cycle is familiar. It just runs faster in hockey, because hockey's analytics community is smaller and more nimble than baseball's, and the league moved on the early insights faster.