Motion-blurred skater in a St. Louis Blues sweater
Breakdown · STL at CGY

Blues hold off the Flames

The verdict · stolen

The Blues stole one. They lost the expected-goals battle 3.30–3.91 and won anyway.

STL 4 · CGY 2
◆ By the ModelJun 16, 2:22 PMxG: 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

St. Louis stole this one. Calgary controlled the underlying metrics—expected goals 3.91 to 3.30, shot attempts at 51% of the total—yet lost 4–2. The difference: goaltending gulf and finish variance.

J. Hofer turned in the performance that decided the night. He saved 1.91 goals above expected, posting a 0.931 save percentage on 29 shots. D. Wolf, his counterpart, surrendered 0.70 more goals than anticipated, finishing at 0.857. Hofer's margin and Wolf's underperformance account for nearly the entire 2-goal final gap.

Calgary squandered 1.91 goals' worth of expected performance. They generated 5 high-danger chances and converted none. The Flames were efficient on the rush—2 goals on 32 chances—but their offense couldn't capitalize elsewhere. They crashed the net effectively, creating 3 rebound opportunities with no payoff.

St. Louis was nearly as profligate: 0 for 6 on high-danger chances. Yet they found their efficiency through the same rush game, scoring twice on 19 chances, a conversion rate that punished Calgary's mistakes. Pius Suter's tip-in from the slot (P3, 13:33) was the turning point.

The Flames will rue this as a squandered advantage in play quality. Calgary dominated possession and shot attempts, controlled the expected-goals share, and still left with nothing. For St. Louis, goaltending and opportunism conquered better process—exactly the recipe for stealing a game that the underlying numbers say should've gone the other way.

The breakdown in twelve frames

Swipe it

Every number is from this page
Final · Oct 11
STL
4
CGY
2

Blues hold off the Flames

Chances 3.3 – 3.9Did they deserve it? →
Did they deserve it?

The Flames deserved better.

Expected goals · chance value
STL
3.30
CGY
3.91
46% of the chances54%

The board read STL 4, CGY 2. The chances read STL 3.3, CGY 3.9.

Our xG model · NHL play-by-play · all situations
Luck check
STL
+0.7
goals above expected
STL3.30 expected · 4 scored
Expected
Scored
CGY3.91 expected · 2 scored
Expected
Scored

The Flames left 1.9 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 14:49CGYM. CoronatoPP0–1
  2. P2 12:41STLJ. Neighbours1–1
  3. P2 14:25STLR. ThomasPP2–1
  4. P2 14:57CGYM. Coronato2–2
  5. P3 11:07STLJ. Neighbours3–2
  6. P3 13:33STLP. Suter4–2
NHL play-by-play · chance value from our xG model
Where the shots came from
STL
35 shots
4
Final
84 shots
CGY
49 shots
2
STL attackCGY attack
STL CGY Goal
35
shots · 4 in
49
shots · 2 in
Every unblocked shot · press play to replay it
Chances by danger
STLCGY
0 / 6
1.40 xG
High danger
0 / 5
1.17 xG
4 / 14
1.56 xG
Medium
2 / 19
2.09 xG
0 / 37
0.34 xG
Low
0 / 42
0.65 xG

The Flames went 0 for 5 from the slot.

Danger tiers by our xG model · high ≥ 20% chance
In the net
A
J. Hofer
+1.9
STL · 27/29
D
D. Wolf
−0.7
CGY · 24/28
The numbers, checked
BACKCHECK

Blues hold off the Flames

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 4–9
  1. 14:49CGYM. Coronatopower play(J. Farabee, N. Kadri)0–1
2ndshots 12–14
  1. 12:41STLJ. Neighbours(R. Thomas, P. Buchnevich)1–1
  2. 14:25STLR. Thomaspower play(J. Snuggerud, J. Faulk)2–1
  3. 14:57CGYM. Coronato(K. Bahl)2–2
3rdshots 12–6
  1. 11:07STLJ. Neighbours(C. Parayko, C. Fowler)3–2
  2. 13:33STLP. Suter(T. Tucker, N. Walker)4–2

score reads STL–CGY

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

The numbers

XGBoost xG · NHL play-by-play
3.30
STL chances
Goals their shots were worth
+0.7
Finishing
Goals above what those chances were worth
1.040
STL puck luck
Above 1.000 — the bounces went their way
46.3%
Shot attempts
Under half — they were outshot
Split by club

Who controlled the game

3.30Expected goals3.91
CGY 54% of the chance quality
28Shots on goal29
6High-danger chances5
57All attempts (Corsi)66
Adjusted for score: STL 47% · CGY 53%
Faceoffs · CGY won46%off44%neu32%def
Source · NHL play-by-play · XGBoost xG
How the game was won

The danger ladder

shotsgoalsexpected
High dangerslot & crease
STL0 / 6 · 1.40 xG
CGY0 / 5 · 1.17 xG
Medium dangermid-range
STL4 / 14 · 1.56 xG
CGY2 / 19 · 2.09 xG
Low dangerperimeter & point
STL0 / 37 · 0.34 xG
CGY0 / 42 · 0.65 xG

STL went 4-for-14 from medium danger on 1.56 expected goals — 2.4 above expected.

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

Finishing vs expected

expectedactual
STL
4 G · 3.30 xG · +0.7
CGY
2 G · 3.91 xG · -1.9
012345

STL finished +0.7 against expected, CGY -1.9.

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

Shot diet

goalsshots
STL
WRIST1/15
TIP IN2/5
SLAP0/7
SNAP0/2
BACKHAND1/3
WRAP AROUND0/1
POKE0/1
BAT0/1
OTHER0/22
CGY
WRIST2/27
TIP IN0/7
SLAP0/3
SNAP0/7
BACKHAND0/4
WRAP AROUND0/1
POKE0/0
BAT0/0
OTHER0/17
STL
CGY
Off the rush
2 G on 19
2.21 xG
2 G on 32
2.69 xG
Off rebounds
0 G on 4
0.68 xG
0 G on 3
0.53 xG

Wrist shots carried the volume: STL went 1-for-15, CGY 2-for-27. STL scored 2 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
J. Hofer
STL · 27/29 · .931
+1.9
saved above expected
A
the night
By dangerG/attxGsaved
High danger0/51.2+1.2
Medium2/192.1+0.1
Low0/420.7+0.7

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

D. Wolf
CGY · 24/28 · .857
-0.7
saved above expected
D
the night
By dangerG/attxGsaved
High danger0/61.4+1.4
Medium4/141.6-2.4
Low0/370.3+0.3

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

84 shots · press play to watch the game back

Where the shots came from

NHL play-by-play coordinates
STL
35 shots
4
Final
84 shots
CGY
49 shots
2
STL attackCGY attack
STL CGY Goal

Each club shoots toward its own end — STL left, CGY 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
R. Thomas
#18 · C · —
1 G · 1 A · 1 SOG · 21:00 on ice · +2
M. Coronato
#27 · R · —
2 G · 0 A · 4 SOG · 18:27 on ice · +1
J. Neighbours
#63 · L · —
2 G · 0 A · 3 SOG · 14:44 on ice · +2
Ranked from the box score — points first · Backcheck
What the model said beforehand

Before the game

Written Sat, Oct 11
Open the pre-game read
Written from the numbers

The read

Edited for clarity
◆ By the ModelSep 22, 12:37 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

Even money. The model projects a 3.0–3.0 game with the Flames at 50% win probability. St. Louis and Calgary are matched in the underlying play that predicts outcomes: Blues 48.7% xG, Flames 46.5%, a two-point margin that vanishes in a single contest.

Shot volume tells a different story. Calgary leads 49.2% Corsi to St. Louis's 48.3%, driving possession but failing to translate it into higher-quality chances. Both teams are generating and suppressing at nearly identical rates.

The separation emerges in execution. Jimmy Snuggerud anchors St. Louis's attack—0.86 xG/60, 15 goals, 2 HD goals—converting at 11.9%, well above average. Dylan Holloway matches his pace at 0.82 xG/60 while shooting 10.8%. Blake Coleman powers Calgary with 16 goals on 0.89 xG/60, a rate-to-output gap suggesting positive regression; he's also banked 2 HD goals. Matt Coronato is undershooting at 6.6%, limiting his 0.80 xG/60 to just 10 goals.

St. Louis sits at a perfect 1.000 PDO—skill and luck aligned. Calgary's 0.984 is running cold, a predictable reversion point if underlying play sustains. The shutdown assignments are direct: Calgary must contain Snuggerud's elite volume; St. Louis must manage Coleman's 0.89 xG/60 and 2 HD goals.

Defensively, the liability is split. Snuggerud is on ice for 2.75 xGA/60 with 44 high-danger shots against him this season—St. Louis's defensive weak link, which Calgary will attack. Matt Coronato is Calgary's corresponding vulnerability.

Two teams separated by thousandths in underlying metrics and inches in scoring luck. The model saw even money. So should you.

Season rates in this preview are from 2025-26 — this season's sample isn't live yet.

What the model said beforehand

The model's lean

CGY 50%
50%
CGY
Model favorite
50%
50%
STL50CGY

CGY by 0 points of win probability — effectively a coin flip. Projected score STL 3.0–3.0 CGY; 17% 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
STL← edge
edge →CGY
48.7%46.5%
48.3%49.2%
2.802.85
2.953.28
2.802.54
3.103.12
1.0000.984

STL holds 4 of 6 process categories — and the luck row (1.000 vs 0.984) says STL has been getting the bounces, which tends not to last.

Source · NHL stats API + our xG · 5v5
Form · No games yet
STL
0-0-0
+0 GD · 0d rest
CGY
0-0-0
+0 GD · 0d rest
1.000
STL PDO
Luck gauge · drifts to 1.000
0.984
CGY PDO
Luck gauge · drifts to 1.000
What decides it

Keys to the game

TACTICALCGY

Shutdown Assignment: Flames

Key matchup: Neutralize Jimmy Snuggerud (15G, 0.86 xG/60, 2 HD goals)

Key matchup: Neutralize Jimmy Snuggerud (15G, 0.86 xG/60, 2 HD goals)

TACTICALSTL

Shutdown Assignment: Blues

Key matchup: Neutralize Blake Coleman (16G, 0.89 xG/60, 2 HD goals)

Key matchup: Neutralize Blake Coleman (16G, 0.89 xG/60, 2 HD goals)

WARNINGSTL

Exploitable minutes: Jimmy Snuggerud

Jimmy Snuggerud is on ice for 2.75 xGA/60 and 44 high-danger shots against this season.

Hunt matchups against Jimmy Snuggerud's shifts with the top line.

WARNINGCGY

Exploitable minutes: Matt Coronato

Matt Coronato is on ice for 3.06 xGA/60 and 58 high-danger shots against this season.

Hunt matchups against Matt Coronato's shifts with the top line.

Regression watch
  • The Flames' PDO is 0.984 — running cold, due for positive regression.
Things to watch
  • The Flames' PDO is 0.984 — running cold, due for positive regression.
Computed danger · scouting

Players to watch

NHL stats API · our xG
STL
Jimmy Snuggerud15G 22A
0.86 xG/60 · 2 HD · 11.9% sh
Dylan Holloway13G 24A
0.82 xG/60 · 1 HD · 10.8% sh
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
Keep going

Where to next