Pressure-sequence tag
The pressure-sequence tag marks shot attempts that follow shortly after a defensive event the defending team likely hadn't cleanly recovered from. It is a convenience filter built from event primitives the PWHL feed already exposes.
Rule
A shot, blocked_shot, or goal event is tagged when ALL hold:
-
Shooter is in their offensive zone — event
zoneisslotorperimeter. -
Within the prior 8 seconds, at least one
trigger fires:
- Lost defensive-zone faceoff by the defending team — a faceoff whose winning team is the shooting team, in the defending team's defensive zone (the shooter's offensive zone).
- Hit by the shooting team on the defending team in the defending team's defensive or neutral zone.
-
Rebound — a prior
shotorgoalby the same team within ≤3 seconds in the same zone.
- No intervening reset — between the trigger and the outcome, no faceoff and no shot attempt by the defending team. Possession was not visibly reset.
- Under-counts: the feed has no giveaways, takeaways, zone entries, dump-ins, or puck recoveries. Real "pressure" sequences that don't start with a faceoff loss / hit / rebound are invisible to us.
- Over-counts: a hit is not the same as a turnover. Many hits are clean separations where the defending team retains possession.
-
Rebound bucket dominates. Empirically the
rebound trigger fires far more often than faceoff/hit
triggers. If you want a rebound-free view, set
prev_event_types = faceoff,hitin the primitives panel. - Honest naming. This is not "odd-man rush", "1v0", or "breakaway" detection — those require possession and player-tracking data the feed does not provide. We call it what it is: shot attempts that follow certain events within a short window.
Build your own
Every primitive that feeds the tag is exposed as its own filter on the play index and the matchup play-index panel. You can rebuild this metric with different parameters — a 5-second window, hits only, no rebounds, or anything in between.
Known mismatch with the precomputed tag. The
primitive form looks at the immediately preceding event
only, while the precomputed tag walks back through the entire
8-second window for any matching trigger. So the canonical preset
(faceoff/hit primitives) will return a strict subset of what the
pressure_sequence_only checkbox returns — any sequence
where another event (e.g. a same-team shot) sits between the
trigger and the outcome is caught by the precomputed tag but missed
by the primitive form. This is by design: the primitive form is
composable AND-of-constraints, the tag is sliding-window OR-of-triggers.
Try it: prefilled primitives form.
What we'd need to do this properly
Real possession-aware pressure detection (zone-entry quality,
time-from-first-touch-to-shot, odd-man-rush flagging) requires a
richer feed than the public LeagueStat pxpverbose
endpoint provides. That data exists today only via private vendors
(Sportlogiq, InStat) or manual video coding. See
research/02-feed-ceiling-possession.md
for the full ceiling analysis.