Pull Goalie Decisions
Beginner
10 min read
0 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