Exercises: Rushing and Running Game Analysis

Level 1: Conceptual Understanding

Exercise 1.1: Success Rate vs YPC

Explain why a running back with 4.0 YPC and 48% success rate might be more valuable than one with 4.5 YPC and 38% success rate.

Exercise 1.2: Yards After Contact

A running back has 1,000 rushing yards with 600 coming after contact. His teammate has 900 yards with 300 after contact. What does this tell you about: - Their respective skill levels? - The offensive line's contribution to each? - Who might perform better with a different team?

Exercise 1.3: RYOE Interpretation

If a back has +0.8 RYOE per carry, what does this mean? What if he has -0.5 RYOE per carry?

Exercise 1.4: Situational Value

Why is short-yardage conversion rate considered more valuable than overall YPC for evaluating a running back's reliability?

Exercise 1.5: EPA Difference

Two carries both gain 4 yards: - Carry A: 1st and 10 at the 50-yard line - Carry B: 3rd and 3 at the opponent's 30

Which has higher EPA? Explain why.


Level 2: Basic Calculations

Exercise 2.1: Calculate Success Rate

Given these 10 carries, calculate the overall success rate:

Carry Down Distance Yards Gained
1 1 10 5
2 1 10 3
3 2 5 3
4 2 7 2
5 3 4 5
6 3 1 0
7 1 10 8
8 2 2 4
9 1 10 2
10 3 3 4

Success criteria: 1st down = 40%+, 2nd down = 50%+, 3rd/4th = 100%

Exercise 2.2: YAC Calculations

A running back has these statistics: - Total carries: 150 - Total yards: 675 - Total yards before contact: 350 - Broken tackles: 28

Calculate: - Yards per carry - Average yards before contact - Average yards after contact - YAC share percentage - Broken tackles per carry

Exercise 2.3: Stuff Rate

From these carries, calculate stuff rate (yards <= 0):

Yards gained: [4, -1, 2, 0, 6, -2, 3, 0, 5, 1, -1, 4, 2, 8, 0]

Exercise 2.4: Explosive Play Rate

A team has 450 rushing attempts. Of these: - 42 went for 10+ yards - 15 went for 20+ yards - 5 went for 40+ yards

Calculate the explosive play rate (10+ yards).

Exercise 2.5: Short-Yardage Analysis

A running back has these short-yardage carries (3rd/4th and 2 or less):

Attempt Distance Yards
1 1 2
2 2 1
3 1 3
4 2 0
5 1 1
6 2 -1
7 1 4
8 2 2

Calculate conversion rate and stuff rate.


Level 3: Implementation

Exercise 3.1: Success Rate Calculator

def calculate_success_rate(carries: List[Dict]) -> Dict:
    """
    Calculate rushing success rate.

    Parameters:
    -----------
    carries : list
        List of carries with 'down', 'distance', 'yards_gained'

    Returns:
    --------
    dict with:
        - total_carries
        - successful_carries
        - success_rate
        - by_down (breakdown for each down)
    """
    pass

Exercise 3.2: YAC Analyzer

def analyze_yards_after_contact(carries: List[Dict]) -> Dict:
    """
    Calculate YAC metrics.

    Parameters:
    -----------
    carries : list
        Each carry has: yards_gained, yards_before_contact, broken_tackles

    Returns:
    --------
    dict with:
        - avg_ypc
        - avg_ybc (yards before contact)
        - avg_yac (yards after contact)
        - yac_share
        - broken_tackles_per_carry
    """
    pass

Exercise 3.3: RYOE Calculator

def calculate_ryoe(carries: List[Dict]) -> Dict:
    """
    Calculate Rush Yards Over Expected.

    For simplicity, use this expected yards formula:
    Expected = 4.0 - 0.3 * (defenders_in_box - 7)

    Returns total RYOE and RYOE per carry.
    """
    pass

Exercise 3.4: Situational Analyzer

def analyze_situational_rushing(carries: List[Dict]) -> Dict:
    """
    Analyze rushing by situation.

    Return separate analysis for:
    - Short yardage (3rd/4th and 2 or less)
    - Goal line (inside 5)
    - Negative game script (trailing by 7+)
    """
    pass

Exercise 3.5: RB Comparison Tool

def compare_running_backs(rb_data: Dict[str, List[Dict]]) -> pd.DataFrame:
    """
    Compare multiple RBs across all metrics.

    Return DataFrame with:
    - carries, yards, ypc
    - success_rate
    - avg_yac
    - explosive_rate
    - composite_rank
    """
    pass

Level 4: Advanced Analysis

Exercise 4.1: Build Expected Rushing Model

Create a more sophisticated expected rushing yards model:

class ExpectedRushingYardsModel:
    """
    Features to consider:
    - Defenders in box
    - Run gap (A, B, C, off-tackle)
    - Formation (shotgun, under center, pistol)
    - Down and distance
    - Score differential
    - Time remaining
    """

    def train(self, historical_data: pd.DataFrame):
        """Train model on historical plays."""
        pass

    def predict(self, play: Dict) -> float:
        """Predict expected yards."""
        pass

    def calculate_ryoe(self, carries: List[Dict]) -> pd.DataFrame:
        """Calculate RYOE with confidence intervals."""
        pass

Exercise 4.2: Run Blocking Attribution

Develop a method to attribute rushing success between back and blocking:

class RushingAttribution:
    """
    Attribute rushing success to:
    - Offensive line (yards before contact)
    - Running back skill (yards after contact)
    - Scheme (play design)
    """

    def calculate_attribution(self, team_carries: List[Dict]) -> Dict:
        """
        Return percentage attribution:
        - oline_contribution
        - back_contribution
        - scheme_contribution
        """
        pass

Exercise 4.3: Workload-Adjusted Efficiency

Analyze how efficiency changes with workload:

def analyze_efficiency_by_workload(carries: List[Dict]) -> pd.DataFrame:
    """
    Analyze:
    - Efficiency on carries 1-10 vs 11-20 vs 20+
    - Efficiency in first half vs second half
    - Efficiency early season vs late season

    Look for signs of fatigue or durability.
    """
    pass

Exercise 4.4: RYOE Stability Study

Examine year-over-year RYOE stability:

def analyze_ryoe_stability(multi_year_data: Dict[str, Dict[int, List[Dict]]]) -> Dict:
    """
    For each RB, calculate RYOE per year and examine:
    - Year-over-year correlation
    - Stability coefficient
    - Regression to mean patterns
    """
    pass

Exercise 4.5: Comprehensive Evaluation System

Build a complete RB evaluation system:

class RBEvaluationSystem:
    """
    Multi-factor evaluation considering:
    - Efficiency (success rate, RYOE)
    - Volume (carries, yards)
    - Big plays (explosive rate)
    - Situational (short yardage, goal line)
    - Durability (efficiency over workload)
    - Receiving (catches, yards, targets)
    - Protection (pass block wins)

    Produce overall grade 0-100.
    """

    def evaluate(self, rb_data: Dict) -> Dict:
        """Full evaluation with breakdown."""
        pass

    def compare(self, rb_list: List[Dict]) -> pd.DataFrame:
        """Rank multiple RBs."""
        pass

Level 5: Research Projects

Exercise 5.1: RYOE Predictive Value

Research question: How well does RYOE predict future rushing performance?

Tasks: 1. Calculate RYOE for 50+ RBs over multiple seasons 2. Examine year-to-year correlation 3. Compare predictive power to YPC 4. Write report with visualizations

Exercise 5.2: Blocking vs Back Skill Study

Analyze the relative contribution of blocking vs back skill:

Tasks: 1. Compare backs who changed teams 2. Analyze YBC vs YAC for same plays/blocks 3. Determine what percentage of rushing success is attributable to each 4. Present findings with statistical support

Exercise 5.3: Short-Yardage Specialist Value

Study: Is short-yardage rushing skill a real trait?

Tasks: 1. Identify backs with extreme short-yardage conversion rates 2. Test if this persists year-over-year 3. Calculate the value of short-yardage conversion 4. Recommend roster construction strategy

Exercise 5.4: Rushing and Game Script

Analyze how rushing metrics vary by game script:

Tasks: 1. Define game script categories 2. Calculate success rate and efficiency by script 3. Identify backs who excel in different scripts 4. Discuss implications for evaluation

Exercise 5.5: The Value of an Elite RB

Calculate the replacement-level value added by elite backs:

Tasks: 1. Define replacement level (league average or worse) 2. Calculate value added above replacement 3. Convert to wins and/or draft value 4. Recommend appropriate RB investment strategy


Bonus Challenges

Challenge A: Real-Time Rushing Dashboard

Build an interactive dashboard showing: - Rolling success rate - RYOE trend - Situational performance - Comparison to league average

Challenge B: Rushing Tendencies

Analyze and visualize rushing tendencies: - Run gap frequency - Formation preferences - Down and distance patterns - Success rate by tendency

Challenge C: Machine Learning RYOE

Build a ML-based expected rushing model: - Feature engineering from play-by-play - Model comparison (linear, RF, XGBoost) - Feature importance analysis - Validation methodology


Solutions

Solutions are available in code/exercise-solutions.py