Pull Goalie Decisions
Beginner
10 min read
19 views
Nov 27, 2025
Pull goalie decisions use probabilistic models to determine optimal timing for removing the goaltender when trailing late in games.
## Expected Value Analysis
**Python Analysis:**
```python
import pandas as pd
import numpy as np
# Goal probability by time remaining
time_remaining = np.array([120, 90, 60, 30]) # seconds
goal_prob_with_goalie = np.array([0.08, 0.10, 0.15, 0.25])
goal_prob_extra_attacker = np.array([0.15, 0.20, 0.30, 0.45])
empty_net_prob = np.array([0.35, 0.40, 0.50, 0.60])
# Calculate expected value
ev_pull = goal_prob_extra_attacker - empty_net_prob
ev_keep = goal_prob_with_goalie
df = pd.DataFrame({
'time_remaining': time_remaining,
'ev_pull': ev_pull,
'ev_keep': ev_keep,
'advantage': ev_pull - ev_keep
})
print("Pull Goalie Expected Value:")
print(df)
print(f"\nOptimal pull time: {df[df['advantage'] > 0]['time_remaining'].max()} seconds")
```
**R Analysis:**
```r
# Score differential analysis
library(dplyr)
pull_scenarios <- data.frame(
score_diff = c(-1, -1, -2, -2),
time_remaining = c(90, 60, 150, 90),
faceoff_location = c("Offensive", "Defensive", "Offensive", "Neutral"),
win_prob_pull = c(0.15, 0.18, 0.05, 0.08),
win_prob_keep = c(0.08, 0.12, 0.02, 0.04)
)
# Calculate decision value
pull_scenarios$decision_value <- pull_scenarios$win_prob_pull -
pull_scenarios$win_prob_keep
pull_scenarios <- pull_scenarios %>%
mutate(recommendation = ifelse(decision_value > 0, "PULL", "KEEP"))
print(pull_scenarios)
```
## Key Decision Factors
- Score differential (1 goal vs 2+ goals)
- Time remaining and stoppage location
- Faceoff win probability
- Opponent's empty net shooting ability
- Offensive pressure and momentum
Discussion
Have questions or feedback? Join our community discussion on
Discord or
GitHub Discussions.
Table of Contents
Related Topics
Quick Actions