Anyone who has watched enough hockey knows that there are moments that you just have to stand up for. These sweat-inducing, high-stakes moments where the next 10-30 seconds feels like the difference between getting ahead or falling behind are an essential part of the game.
But, do they actually exist in the numbers or is this simply a phenomenon that we as hockey fans have collectively constructed in our heads?
To answer this question, I built a pipeline that analyzes NHL play-by-play + boxscore + shift charts across 587 completed regular-season games with the goal of answering one simple question:
In the next 30 seconds, who is more likely to generate a shot attempt?
1) Defining Momentum As a Short-Horizon Probability
As much as it feels like a vibe, I need a more concrete definition of momentum. After reading a couple papers, I came up with this somewhat simplistic definition:
Momentum = the probability your team records a shot attempt in the next 30 seconds.
To do that, I broke the games into overlapping windows:
- Feature window: 30 seconds of "what just happened"
- Outcome window: the next 30 seconds
- Updated every 5 seconds (my estimation of a stride)
I calculated total shot attempts by summing: shots on goal + missed shots + blocked shots + goals.
This gives a continuously updating view of who is "tilting" play right now.
2) What Actions Reliably Change Outcomes in the next 30 seconds?
Once the windowing was built, I started asking causal questions: when X happens, how much does it change the odds we shoot next?
Here are the most salient effects I measured this season:
Offensive-zone faceoff is a genuine leverage point
- OZ faceoff → +12.0 percentage points on "your team gets a shot attempt in the next 30 seconds"
Not exactly the most novel insight but this is a data-backed proof of why coaches care about set plays and why players care so much about "having a look right off the draw."
Defensive-zone faceoff is the opposite
- DZ faceoff → −5.46 pp
Again this makes sense: if you're restarting in your own end, your next job is usually survival—clean retrieval, clean exit, avoid the second wave.
Late giveaways are brutal
- Giveaway in the last 5 seconds → −7.02 pp
- Any turnover in the last 5 seconds → −3.54 pp
Every fan knows the gut-sinking feeling of giving the puck away just when O-zone pressure is mounting. A late turnover isn't just losing possession: it hands the opponent the start of the next segment with structure and numbers.
3) Which Teams Capitalize the Most?
Now that we know how crucial O-zone and D-zone faceoff moments are, I wanted to learn which teams are the best at capitalizing on them.
Defining a Set Play
- OZ Set-Play For: After an offensive-zone faceoff, did your team get a shot attempt within 10 seconds?
- DZ Set-Play Against: After a defensive-zone faceoff your team takes, did the opponent get a shot attempt within 10 seconds?
Then I combined them into one Set Play Index:
Set-Play Index = (OZ For rate) − (DZ Against rate)
Essentially, this index shows: how well do you cash in, and how well do you prevent the opponent from cashing in right back?
4) League-wide trends across all 32 teams
Here's the league distribution so far this season:
OZ set-play for rate
- mean: 0.485
- range: [0.400 → 0.561]
DZ set-play against rate
- mean: 0.107
- range: [0.052 → 0.139]
Set-play index
- mean: 0.378
- range: [0.267 → 0.462]
Two big takeaways:
- Teams vary a lot in immediate OZ creation.
- A few teams separate themselves by being unusually stingy after DZ draws ("survive the moment" skill).
Interestingly, when you split the league into quadrants by median OZ For and median DZ Against, it's a perfectly even 8–8–8–8 split. So you can fall into the following buckets:
- creators (high OZ For),
- preventers (low DZ Against),
- both,
- or neither.

5) The Best Teams So Far
Top 10 Set-Play Index (through Dec 27)
- COL — 0.462
- NJD — 0.452
- WPG — 0.443
- LAK — 0.428
- ANA — 0.424
- BOS — 0.423
- CAR — 0.421
- FLA — 0.415
- NSH — 0.412
- BUF — 0.404
Colorado (COL): the cleanest "win the moment, then stabilize" profile
COL pairs high OZ conversion with strong DZ prevention. They spike offense after OZ restarts and don't give it back immediately. That's why they're #1 and it matches the eye test almost perfectly.
New Jersey (NJD): elite OZ execution
NJD's OZ set-play rate is the best in the league, which according to the Devils’ media, is a blessing and a curse. As much as the set plays have been impressive, there has been discourse that the Devils need to move away from "one extra pass" hockey and focus on finishing.
Winnipeg (WPG): the prevention outlier
WPG isn't #3 because their OZ conversion is absurd; they're #3 because their DZ Against rate is the best in the league (lowest). Essentially it appears that their identity is to survive the DZ start so they don't give up a free look.
LA Kings (LAK): "faceoff execution to perfection" as a theme
Kings media has called out faceoff execution as the trigger for key goals, describing them as heavy in the offensive zone and forecheck-driven when they're playing their game.
Carolina (CAR): the set-play index matches the "tilt the rink" reputation
NHL EDGE notes that Carolina leads the league in offensive-zone time percentage and 5-on-5 shot attempts percentage and the Hurricanes often come up as a hard team to play against with excellent zone-time profiles at even strength.
6) The Worst Teams So Far
Bottom 10 Set-Play Index (through Dec 27)
- MTL — 0.267
- STL — 0.279
- VAN — 0.311
- PHI — 0.325
- CHI — 0.331
- NYR — 0.335
- PIT — 0.345
- TBL — 0.347
- NYI — 0.349
- UTA — 0.352
There are two main stories for how these teams ended up at the bottom of the Set Play Index rankings.
Failure mode A: low OZ creation + average/worse prevention
This is what I’m seeing with MTL/STL/VAN: they’re not generating an immediate look off OZ draws, and also not reliably preventing looks off DZ draws. Over a season, that's a lot of "free" moments left on the table.
Habs Media have been blunt about how turnovers and extended defensive-zone time (especially in the second period) compound into serious problems for their team.
Failure mode B: you might win draws, but you're not winning the next 10 seconds
The Rangers are the best example of why this is an interesting metric. Rangers’ media have pointed out that NYR’s faceoff win percentage was among the league's best but still, they're bottom-10 in net set-play index.
So, yes, they are good at winning faceoffs, but they can’t generate any meaningful offense after winning the faceoff. That failure boils down to any number of factors from spacing to assignments to first battle to first retrieval.
7) Extending This Analysis
What public data can’t see and what “team-level” data would unlock
Everything in this analysis is built using public NHL play-by-play, boxscore, and shift chart data because that is what I have access to. It has been very informative but to get the next-level of insight, I would really benefit from access to the kind of data that teams have behind the scenes (dubbed “team-level data” here).
At a high level, public data tells you what happened and when. Team-level data tells you how, why, and whether it was repeatable.
The gap between those two is exactly where the next layer of insight lives.
A. Faceoffs: outcome vs. execution
In the public dataset, our faceoff data is limited to a timestamp, a zone, and a winner. That’s enough to show that offensive-zone starts materially increase the probability of a shot attempt in the next 30 seconds and that defensive-zone starts impose a real survival tax.
What it can’t show is how that leverage is created.
With position tracking data, the faceoff moment decomposes into several hidden variables:
- Pre-draw structure: winger stagger depth, weak-side defenseman positioning, center stick orientation
- Win direction and velocity: clean pull-back vs. tie-up vs. scramble
- First-touch quality: time-to-control, bobbles, forced rim vs. clean possession
- Immediate spacing: shooting lane creation, point shot availability, net-front occupation
Two OZ faceoffs can look identical in public data and produce the same “shot within 10 seconds” label, but one is a scripted set play executed cleanly, while the other is a broken play salvaged by individual skill. Public data collapses those distinctions into a single outcome.
With team-level data, I could:
- Separate designed set plays from improvised wins
- Attribute success to structure vs. personnel
- Identify which faceoff losses are still “good losses” because shape and retrieval mitigate risk
Ultimately, this is the difference between just saying that a team is good after OZ draws and actually knowing why they are.
B. Shot attempts as a blunt proxy for danger
In this model, momentum is defined as the probability of generating a shot attempt in the next 30 seconds. I made that choice, because shot attempts are a very well-tracked stat.
But not all attempts are created equal.
Public data treats:
- A point shot through traffic
- A blocked wrister from the wall
- A royal-road one-timer
as identical events. They count the same in the outcome window, even though their threat profiles are radically different.
With team-level data, I could add much richer insight such as:
- Shot preconditions (east–west puck movement, lateral goalie displacement)
- Release time (catch-and-shoot vs. handle-and-shoot)
- Defensive pressure at release
- Goalie depth and lateral movement
Instead of asking “did a shot occur?”, I could ask:
Did the start generate a dangerous look before the defense re-stabilized?
Why does this distinction matter? Well, a team might “win” the moment statistically while still producing low-quality offense. And when it comes to the playoffs, that kind of performance doesn’t scale well at all.
C. Understanding the Positional Geometry of Turnovers
The difference between:
- A D-to-D pass under pressure that misses by a foot
- A high-risk middle-lane feed that gets picked off
- A bobbled puck on a routine wall play
is enormous, but they all enter the dataset as the same event type.
With tracking data, late-turnover effects could be decomposed into:
- Pressure-induced vs. unforced errors
- Outlet availability at the moment of turnover
- Defensive gap control immediately after the loss
- Opponent posture (counterattack vs. regroup)
That would allow the model to distinguish:
- Bad decisions
- Bad execution
- Good defense forcing mistakes
Right now, I was able to extract from the public data that late giveaways are brutal. Team data would show which ones are unacceptable, which are situational, and which are the cost of playing fast.
Methods
For a detailed walkthrough of my methods please see this detailed pdf (opens in a new tab).
References
Griffiths, Daniel, and Piper Moskow. Gaining Momentum: Uncovering Hidden Scoring Dynamics in Hockey through Deep Neural Sequencing and Causal Modeling. arXiv, 2025, arXiv:2511.00615, https://arxiv.org/abs/2511.00615.
Nandakumar, Namita, and Shane T. Jensen. “Historical Perspectives and Current Directions in Hockey Analytics.” Annual Review of Statistics and Its Application, vol. 6, 2019, pp. 19–36. https://doi.org/10.1146/annurev-statistics-030718-105202.
Johansson, Ulf, Erik Wilderoth, and Arsalan Sattari. “How Analytics Is Changing Ice Hockey.” Proceedings of the Linköping Hockey Analytics Conference (LINHAC 2022), 2022, https://ecp.ep.liu.se/index.php/linhac/article/view/479.
Goldfarb, Daniel. An Application of Topological Data Analysis to Hockey Analytics. arXiv, 2014, arXiv:1409.7635, https://arxiv.org/abs/1409.7635.
Gupta, Priyansh, et al. “A Gaussian Mixture Model Approach for Characterizing Playing Styles of Ice Hockey Players.” Proceedings of the Linköping Hockey Analytics Conference (LINHAC 2025), 2025, https://ecp.ep.liu.se/index.php/linhac/article/view/1207.
Zmalski. NHL-API-Reference: Unofficial Reference for NHL API Endpoints. GitHub, 2024, https://github.com/Zmalski/NHL-API-Reference. Accessed 2025.
Howard, Stevie. NHL API Docs. Community documentation, 2024, https://steviehoward.com/NHL-API-docs/.
Pedregosa, Fabian, et al. “Scikit-learn: Machine Learning in Python.” Journal of Machine Learning Research, vol. 12, 2011, pp. 2825–2830, https://jmlr.org/papers/v12/pedregosa11a.html.