Pull Goalie Decisions

Beginner 10 min read 1 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.