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:

  1. Shooter is in their offensive zone — event zone is slot or perimeter.
  2. 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 shot or goal by the same team within ≤3 seconds in the same zone.
  3. No intervening reset — between the trigger and the outcome, no faceoff and no shot attempt by the defending team. Possession was not visibly reset.
Caveats — read these before trusting the metric.
  • 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,hit in 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.