Motion-blurred skater in a Calgary Flames sweater
Breakdown · CGY at ANA

Flames hold off the Ducks

The verdict · earned

The Flames earned it — the game and the expected-goals battle both.

CGY 5 · ANA 3
◆ By the ModelJul 12, 10:22 AMxG: xgboost-0.758Edited for clarityDrafted from NHL play-by-play by Backcheck's model, worded for clarity by an AI editor that may not change a number. Nobody at Backcheck was at the rink. How this works

The Flames survived a lopsided shot chart to beat the Ducks 5–3, converting their limited chances while Anaheim squandered offensive volume into a losing margin.

Anaheim fired 39 shots and controlled 66% of shot attempts, yet scored only three goals. Calgary generated just 20 shots but buried five. The discrepancy reflected shot quality: Calgary's attempts carried 0.109 expected goals per shot, nearly double Anaheim's 0.060. When one team takes two-thirds of the chances and still loses, it's not playing better—it's playing more and scoring worse.

D. Cooley (CGY) saved 1.83 goals above his expected performance on 36 saves, stealing the game. V. Husso (ANA) posted a 0.789 save percentage, overperforming his expected by 1.34, but it wasn't enough to mask the underlying offensive failure. Anaheim underperformed its expected goals by 1.83 runs—a telling collapse.

The high-danger tally painted a starker picture. Calgary generated 11 dangerous chances to Anaheim's six, a 2-to-1 ratio that foreshadowed the scoreline. The Ducks created 10 rebound opportunities and converted just one, crashing the net without finish.

Where Anaheim found success, it came from structure. The Ducks scored twice from rush situations on 34 chances—a lethal conversion rate. Calgary, by contrast, scored five times from 24 rush attempts, dominating the transition game.

M. Frost's wrist shot from the slot in the third period proved the turning point, extending Calgary's lead and closing out the upset. Frost added another goal in 15:32 of ice time. J. Farabee chipped in a goal and assist in 15:42, while M. Gridin posted a goal and an assist in 14:02.

This was Calgary suppressing a volume-shooting opponent through concentrated danger and goaltending. Anaheim's lesson: volume without precision is expensive.

The breakdown in twelve frames

Swipe it

Every number is from this page
Final · Apr 4
CGY
5
ANA
3

Flames hold off the Ducks

Chances 5.3 – 4.8Did they deserve it? →
Did they deserve it?

The Flames earned this one.

Expected goals · chance value
CGY
5.34
ANA
4.83
53% of the chances48%

The board read CGY 5, ANA 3. The chances read CGY 5.3, ANA 4.8.

Our xG model · NHL play-by-play · all situations
Luck check
CGY
−0.3
goals above expected
CGY5.34 expected · 5 scored
Expected
Scored
ANA4.83 expected · 3 scored
Expected
Scored

The Ducks left 1.8 goals on the table against what their chances were worth.

PDO = sh% + sv% · drifts to 1.000 over a season
Every goal, in order
  1. P1 10:11ANAB. Sennecke0–1
  2. P1 13:24CGYJ. Farabee1–1
  3. P2 01:20CGYR. Strome2–1
  4. P2 07:49CGYM. Gridin3–1
  5. P2 18:44CGYM. Frost4–1
  6. P3 07:49ANAL. Carlsson4–2
  7. P3 09:51ANAM. McTavishPP4–3
+1 more on the full breakdown
NHL play-by-play · chance value from our xG model
Where the shots came from
CGY
35 shots
5
Final
99 shots
ANA
64 shots
3
CGY attackANA attack
CGY ANA Goal
35
shots · 5 in
64
shots · 3 in
Every unblocked shot · press play to replay it
Chances by danger
CGYANA
4 / 11
4.38 xG
High danger
1 / 6
1.30 xG
1 / 6
0.53 xG
Medium
2 / 23
2.75 xG
0 / 32
0.42 xG
Low
0 / 52
0.78 xG

The Flames buried 4 of 11 high-danger looks.

Danger tiers by our xG model · high ≥ 20% chance
In the net
A
D. Cooley
+1.8
CGY · 36/39
B+
V. Husso
+1.3
ANA · 15/19
The numbers, checked
BACKCHECK

Flames hold off the Ducks

A model, not a newsroom. Every number on these frames comes from the NHL's play-by-play and our own models. Nothing was watched, guessed or heard from anyone.

Read the full breakdown
backcheckreport.com
01 / 08 · Final
Every goal, in order

How it happened

NHL play-by-play
1stshots 6–16
  1. 10:11ANAB. Sennecke(J. LaCombe, J. Trouba)0–1
  2. 13:24CGYJ. Farabee(M. Gridin, K. Bahl)1–1
2ndshots 9–10
  1. 01:20CGYR. Strome(M. Pospisil, V. Olofsson)2–1
  2. 07:49CGYM. Gridin(J. Farabee, H. Brzustewicz)3–1
  3. 18:44CGYM. Frost(O. Maatta, B. Coleman)4–1
3rdshots 5–13
  1. 07:49ANAL. Carlsson4–2
  2. 09:51ANAM. McTavishpower play(A. Killorn)4–3
  3. 18:49CGYM. Frostempty net(M. Coronato)5–3

score reads CGY–ANA

Source · NHL play-by-play (api-web.nhle.com)
Process vs result

The numbers

XGBoost xG · NHL play-by-play
5.34
CGY chances
Goals their shots were worth
−0.3
Finishing
Goals below what those chances were worth
1.065
CGY puck luck
Above 1.000 — the bounces went their way
37.7%
Shot attempts
Under half — they were outshot
Split by club

Who controlled the game

5.34Expected goals4.83
CGY 53% of the chance quality
20Shots on goal39
11High-danger chances6
49All attempts (Corsi)81
Adjusted for score: CGY 35% · ANA 66%
Faceoffs · ANA won50%off50%neu31%def
Source · NHL play-by-play · XGBoost xG
How the game was won

The danger ladder

shotsgoalsexpected
High dangerslot & crease
CGY4 / 11 · 4.38 xG
ANA1 / 6 · 1.30 xG
Medium dangermid-range
CGY1 / 6 · 0.53 xG
ANA2 / 23 · 2.75 xG
Low dangerperimeter & point
CGY0 / 32 · 0.42 xG
ANA0 / 52 · 0.78 xG

ANA went 0-for-52 from low danger on 0.78 expected goals — 0.8 left on the table.

Source · Backcheck xG model · NHL play-by-play
The luck layer

Finishing vs expected

expectedactual
CGY
5 G · 5.34 xG · -0.3
ANA
3 G · 4.83 xG · -1.8
0123456

CGY finished -0.3 against expected, ANA -1.8.

Source · Backcheck xG model
Shot types · rush and rebound chancesopen +
What they shot — and what went in

Shot diet

goalsshots
CGY
SNAP1/12
WRIST3/10
TIP IN0/9
SLAP0/1
BACKHAND1/3
DEFLECTED0/0
OTHER0/14
ANA
SNAP1/27
WRIST1/13
TIP IN0/4
SLAP0/12
BACKHAND1/7
DEFLECTED0/1
OTHER0/17
CGY
ANA
Off the rush
5 G on 24
3.30 xG
2 G on 34
2.66 xG
Off rebounds
0 G on 2
0.34 xG
1 G on 10
1.43 xG

Snap shots carried the volume: CGY went 1-for-12, ANA 1-for-27. CGY scored 5 of theirs off the rush.

Source · Backcheck xG model · NHL shot types
New to these numbers?

Two things happened in this game: who created the better chances, and who put the puck in the net. They are not the same thing, and this page separates them on purpose.

The one to watch is expected goals— the best single read on who deserved to win. When it disagrees with the scoreboard, that disagreement is usually the story. Nothing here is a projection; every figure is computed from this game's play-by-play. Full glossary →

xG
Expected goals. Every shot scored by how often that exact look goes in. 2.5 xG means the chances were worth about two and a half goals.
HD
High-danger chances — shots from the slot and the crease, where shots actually become goals.
Corsi
Every shot attempt, including the ones that missed or got blocked. A rough read on who had the puck.
Adj.
Score-adjusted. Teams that trail shoot more and teams that lead sit back, so this corrects the attempt count for the scoreboard.
GSAx
Goals saved above expected. A positive number means the goalie stopped more than an average goalie would have on those shots.
PDO
Shooting % plus save % — a luck gauge. It sits near 1.000 over a season, so a game far from it usually means the bounces decided it.
Shot by shot

In the net

Graded on goals saved above expected
D. Cooley
CGY · 36/39 · .923
+1.8
saved above expected
A
the night
By dangerG/attxGsaved
High danger1/61.3+0.3
Medium2/232.8+0.8
Low0/520.8+0.8

A+ ≥ +2.5 saved above expected · A ≥ +1.5 · B+ ≥ +0.75 · B ≥ +0.25 · C ≥ −0.25 · D ≥ −0.75 · F below −1.5

V. Husso
ANA · 15/19 · .789
+1.3
saved above expected
B+
the night
By dangerG/attxGsaved
High danger4/114.4+0.4
Medium1/60.5-0.5
Low0/320.4+0.4

A+ ≥ +2.5 saved above expected · A ≥ +1.5 · B+ ≥ +0.75 · B ≥ +0.25 · C ≥ −0.25 · D ≥ −0.75 · F below −1.5

99 shots · press play to watch the game back

Where the shots came from

NHL play-by-play coordinates
CGY
35 shots
5
Final
99 shots
ANA
64 shots
3
CGY attackANA attack
CGY ANA Goal

Each club shoots toward its own end — CGY left, ANA right — the way you would watch it. A dot's size is how dangerous the look was, from distance and angle; it is a proxy for shot quality, not the xG model the article is written from. Hover a dot for the shooter and the clock.

Ranked from the box score

Three stars

Points first
Three stars · computed, not voted
J. Farabee
#86 · L · CGY
1 G · 1 A · 2 SOG · 15:42 on ice · +2
M. Frost
#16 · C · CGY
2 G · 0 A · 5 SOG · 15:32 on ice · +4
M. Gridin
#92 · R · CGY
1 G · 1 A · 3 SOG · 14:02 on ice · +2
Ranked from the box score — points first · Backcheck
What the model said beforehand

Before the game

Written Sat, Apr 4
Open the pre-game read
Written from the numbers

The read

Edited for clarity
◆ By the ModelJul 12, 10:21 AMEdited for clarityDrafted from NHL play-by-play by Backcheck's model, worded for clarity by an AI editor that may not change a number. Nobody at Backcheck was at the rink. How this works

The model projects a 2.5 to 2.9 game favoring Anaheim, with the Ducks at 57% win probability.

Anaheim owns the underlying play. The Ducks drive 52.0% xG% to Calgary's 47.0%, and control territory at 52.0% Corsi% versus 49.0%—a territorial tilt the model already recognizes. The gap is modest but directional: Anaheim generates chances, Calgary allows them.

Both teams are running cold on PDO, which creates the regression story. Calgary sits at 0.985 and Anaheim at 0.981—below-neutral luck for both, due for a positive swing. Which team's luck breaks first determines the outcome. Here, the Ducks' superior underlying metrics suggest they'll emerge better.

Calgary's weakness is acute. Over their last 10, the Flames sit -5 in goal differential, and their attack leans on a narrow core. Blake Coleman generates the most danger at 0.89 xG per 60 with 16 goals, 12 assists, and 2 high-danger goals, converting at 11.4%. Matt Coronato carries 0.80 xG per 60 with only a 6.6% shooting rate—a sign that negative regression could deepen before positive regression arrives.

Anaheim's depth is less top-heavy. Cutter Gauthier leads with 25 goals and 16 assists on 0.99 xG per 60, while Beckett Sennecke matches his underlying volume at 1.03 xG per 60 with 20 goals, 19 assists, and 8 high-danger goals. Sennecke's 13.5% shooting rate suggests durability, not fluky conversion. Both drive and convert at elite rates.

The goaltending angle tilts Anaheim's way. D. Wolf is on a back-to-back—look for a backup start or a tired starter, either way giving the Ducks an opening.

The Flames defense leaks opportunities early and often. The Ducks take them. This isn't a flashy mismatch; it's a model recognizing that elite underlying play plus regression tailwinds plus depth advantage compounds. At 57%, the Ducks are the lean.

What the model said beforehand

The model's lean

ANA 57%
57%
ANA
Model favorite
43%
57%
CGY50ANA

ANA by 14 points of win probability — a modest lean. Projected score CGY 2.5–2.9 ANA; 18% chance it's tied after 60.

Source · Backcheck Poisson projection · season scoring rates
Season rates · 5v5

Tale of the tape

NHL stats API · our xG
CGY← edge
edge →ANA
47.0%52.0%
49.0%52.0%
2.362.80
2.662.59
1.762.09
2.152.32
0.9850.981

ANA holds 5 of 6 process categories — and the luck row (0.985 vs 0.981) says CGY has been getting the bounces, which tends not to last.

Source · NHL stats API + our xG · 5v5
Form · Last 10
CGY
5-4-1
-5 GD · 1d rest
ANA
5-3-2
+1 GD · 2d rest
0.985
CGY PDO
Luck gauge · drifts to 1.000
0.981
ANA PDO
Luck gauge · drifts to 1.000
What decides it

Keys to the game

Where the edges live
  • The Ducks own the underlying play — 52.0% 5v5 xG vs 47.0%.
  • The Ducks drive Corsi at 52.0% — expect territorial tilt.
Regression watch
  • The Ducks' PDO is 0.981 — running cold, due for positive regression.
  • The Flames' PDO is 0.985 — running cold, due for positive regression.
Things to watch
  • The Ducks own the underlying play — 52.0% 5v5 xG vs 47.0%.
  • The Ducks drive Corsi at 52.0% — expect territorial tilt.
  • D. Wolf is on a back-to-back — watch for a backup start or a tired starter.
  • The Flames are underwater at -5 goal differential over their last 10.
  • The Ducks' PDO is 0.981 — running cold, due for positive regression.
Last game's lineup · confirmed at warm-up

Lineups

NHL box score
CGY
Expected in goal
D. Wolf
back-to-back.824 last start
Backup Dustin Wolf · -1.8 GSAx this season
Back-to-back: the backup often gets this one. Treat the starter as unconfirmed.

No completed game on file for this club yet.

ANA
Expected in goal
L. Dostal
2 days rest.810 last start
Backup Lukas Dostal · -2.9 GSAx this season

No completed game on file for this club yet.

Lineups are the players who dressed in each club's last game, with their minutes; clubs confirm tonight's at warm-up. Every player this preview names was in that lineup.

Computed danger · scouting

Players to watch

NHL stats API · our xG
CGY
Blake Coleman16G 12A
0.89 xG/60 · 2 HD · 11.4% sh
Matt Coronato10G 16A
0.80 xG/60 · 0 HD · 6.6% sh
ANA
Beckett Sennecke20G 19A
1.03 xG/60 · 8 HD · 13.5% sh
Cutter Gauthier25G 16A
0.99 xG/60 · 2 HD · 12.9% sh
Keep going

Where to next