Pull Goalie Decisions

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