What Shot-Based Metrics Actually Measure
Three seasons ago I placed a moneyline bet on a team riding a seven-game winning streak. Their record looked bulletproof. Their underlying shot data told a completely different story — they were being outshot in every period and surviving on a scorching 11% shooting percentage that no club sustains for long. That bet lost, and the lesson stuck: wins lie, shots don’t.
Shot-based metrics strip away the noise of bounces, hot streaks and empty-net goals. They measure what a team actually does with the puck — how often it generates attempts, how often it concedes them, and how dangerous those attempts are. In a sport where a single deflection can decide a match, volume and quality of chances are far more reliable predictors than the scoreboard alone.
The three metrics that matter most for bettors are Corsi, Fenwick and expected goals. Each builds on the last, adding a layer of precision. A Corsi For percentage above 52% is considered very strong; push past 55% over a full season and you are looking at a top-five team in the NHL. Last season, eight of the ten clubs with the best CF% reached the playoffs. That is not a coincidence — it is a signal the betting market still underweights.
Understanding these numbers does not require a statistics degree. It requires knowing what each one counts, where it falls short, and how to fold it into a pre-match routine before you open your bookmaker’s app.

Corsi — Every Shot Attempt Counts
I remember the first time I pulled up a Corsi chart for a mid-table NHL side and realised they were generating 58 shot attempts per sixty minutes while their opponents managed 47. The team sat tenth in the standings, the bookmakers priced them accordingly, and I spent the next month printing money on their moneyline. That is the power of Corsi in a nutshell.

Corsi counts every shot attempt a team produces or allows at even strength — goals, saves, misses and blocked shots all go into the tally. The raw number matters less than the ratio. Corsi For percentage divides a team’s attempts by total attempts while both sides are at five-on-five. A figure above 50% means the team is directing play; below 50% means it is chasing the puck.
Why even strength only? Power plays and penalty kills distort possession. A team that takes eight penalties a game will have inflated Corsi Against numbers that say nothing about its five-on-five quality. Filtering to even strength isolates the genuine balance of play.
For betting purposes, I focus on three-game and ten-game rolling Corsi averages rather than single-game snapshots. A single match can produce outlier numbers — a team protecting a two-goal lead in the third will concede attempts by design. Over ten games, those swings wash out and the true possession picture emerges. When a club’s Corsi stays above 53% across a ten-game window and the bookmaker’s moneyline still reflects their mediocre win-loss record, there is usually value sitting on the table.
The limitation is obvious: Corsi treats a harmless wrist shot from the blue line the same as a one-timer from the slot. That is where Fenwick and expected goals step in.
Fenwick — Filtering Out the Noise of Blocked Shots
Blocked shots are a strange animal. A shot that gets blocked never tested the goaltender, never had a realistic chance of scoring, yet Corsi counts it the same as a Grade A chance from the crease. Fenwick removes blocked shots from the equation, keeping only shots on goal and missed shots.
The practical difference between Corsi and Fenwick is usually small — a percentage point or two for most teams. Where it becomes meaningful is when you are evaluating a side that either blocks an extraordinary number of shots or faces opponents who do. A team like a defensive-first club that clogs passing lanes and throws bodies in front of pucks will have a worse Corsi Against than its Fenwick Against, because many of those “attempts” against never got through. Fenwick paints a cleaner picture of how much genuine danger a team faces.

I use Fenwick as a cross-check rather than a replacement for Corsi. If both metrics agree — say, CF% and FF% are both above 53% — I have high confidence the team is genuinely controlling play. If they diverge significantly, it tells me something specific is happening with shot-blocking that deserves a closer look before I commit money.
Neither metric, though, tells you anything about where those shots come from. A team can generate 60 Fenwick events per game, but if most of them are low-danger perimeter shots, the goaltender yawns through the evening. That gap is exactly what expected goals fills.
Expected Goals and Shot Quality
Expected goals changed the way I build my pre-match models. The concept is borrowed from football analytics: every unblocked shot is assigned a probability of becoming a goal based on location, shot type, whether it came off a rush, a rebound, or a set play, and the game state at the time. Sum those probabilities across a match and you get the xG — the number of goals a team “deserved” based on the quality of its chances.
A team outscoring its xG by a wide margin is riding luck. A team underperforming its xG is due for positive regression. As one analytics piece put it, when a club carries a PDO significantly above 1.000, its high win rate is often unsustainable, especially if shot quality and possession metrics do not match the output. That insight has been the single most profitable filter in my betting toolkit.

Where Corsi and Fenwick are freely available on sites like Natural Stat Trick and Hockey Reference, xG models vary by provider. Some weight shot location more heavily; others factor in pre-shot movement or passing sequences. I do not obsess over which model is “right” — I pick one and stay consistent so I am comparing like with like across games and seasons.
The betting application is straightforward. When a team’s xG For sits well above its actual goals scored over a ten-game stretch, I look for moneyline value on that side. When xG Against is significantly lower than actual goals conceded, the market is likely overreacting to a poor run of results that the underlying data does not support. The edge is temporary — regression closes it — so speed matters.
Applying Possession Metrics to Pre-Match Analysis
Every morning during the NHL season I run through the same routine before the bookmakers’ lines sharpen. I pull up the evening’s matchups and check three things for each team: ten-game rolling CF%, Fenwick close percentage (score-adjusted, to account for game-state effects), and xG differential per sixty minutes. The whole process takes fifteen minutes.

What I am looking for is disagreement between the analytics and the price. If Team A has a CF% of 54%, an xGF/60 in the top ten leaguewide, but sits at +130 on the moneyline because it lost three of its last four — that is a classic value spot. The losses were likely driven by poor shooting luck or goaltending variance, and the metrics suggest the team is playing well enough to win more often than the odds imply.
I also cross-reference possession data with broader NHL betting strategy factors like schedule density and goalie confirmation. Corsi tells me the team controls play; the schedule tells me whether fatigue will erode that control tonight. Neither data point alone is sufficient, but together they build a case strong enough to stake on.
One trap to avoid: treating these metrics as gospel for small samples. A two-game road trip can produce wild Corsi swings that mean nothing. I never act on fewer than five games of data, and I weight the most recent ten games more heavily than season-long averages because rosters change, coaches adjust systems, and injuries reshape lineups. The numbers are a compass, not a GPS — they point you in the right direction, but you still need to read the terrain.
