Exercises: Offensive Line Analytics
Difficulty Levels
- Level 1 (Foundational): Basic O-line metric calculations
- Level 2 (Applied): Team-level O-line analysis
- Level 3 (Intermediate): Advanced blocking metrics
- Level 4 (Advanced): Context adjustments and attribution
- Level 5 (Expert): Comprehensive O-line evaluation
Section 1: Pass Protection Metrics (Level 1-2)
Exercise 1.1: Sack Rate Calculation
Level 1 | Basic Metric
For the 2023 season: 1. Calculate sack rate for all teams 2. Rank teams from best to worst protection 3. What is the league average sack rate? 4. Which teams are significantly above/below average?
# Your code here
Exercise 1.2: Pressure Rate
Level 2 | Expanded Metric
Calculate a broader pressure metric: 1. Define pressure as sack OR QB hit OR scramble 2. Calculate pressure rate by team 3. Compare to sack rate—which tells more? 4. Which teams have high pressure but low sacks (QB escapes)?
# Your code here
Exercise 1.3: Clean Pocket Analysis
Level 2 | Situational
Compare performance with and without pressure: 1. Calculate EPA on clean plays vs pressured plays by team 2. Which teams have the biggest performance drop under pressure? 3. Is there a correlation between pressure rate and EPA drop?
# Your code here
Exercise 1.4: QB Hit Analysis
Level 2 | Component
Analyze QB hits specifically: 1. Calculate QB hit rate by team 2. How does hit rate correlate with sack rate? 3. Which teams allow hits without sacks (good QB)? 4. Which teams allow sacks without hits (quick wins)?
# Your code here
Exercise 1.5: Scramble Rate
Level 2 | QB Effect
Analyze how often QBs scramble: 1. Calculate scramble rate by team 2. Is high scramble rate good or bad protection? 3. Separate designed runs from scrambles if possible 4. Which teams' QBs scramble most/least?
# Your code here
Section 2: Run Blocking Metrics (Level 2-3)
Exercise 2.1: Stuff Rate
Level 2 | Basic Metric
Calculate stuff rate: 1. Define stuffs as runs for 0 or fewer yards 2. Calculate stuff rate by team 3. Also calculate negative run rate (yards < 0) 4. Rank teams by run blocking quality
# Your code here
Exercise 2.2: Adjusted Line Yards
Level 3 | ALY
Calculate ALY using the Football Outsiders formula: 1. Apply the caps (100%/50%/25% for short/medium/long) 2. Apply the penalty for negative runs (125%) 3. Calculate ALY by team 4. Compare to raw YPC—what differs?
# Your code here
Exercise 2.3: Explosive Run Rate
Level 2 | Big Plays
Analyze explosive runs: 1. Calculate percentage of runs going 10+ yards 2. Calculate percentage going 20+ yards 3. Rank teams by explosive run rate 4. Is this O-line or RB skill?
# Your code here
Exercise 2.4: Run Direction Analysis
Level 3 | Direction
If run location is available: 1. Calculate ALY by run direction (left, middle, right) 2. Which teams have directional strengths? 3. Which teams have directional weaknesses? 4. How might this inform scheme?
# Your code here
Exercise 2.5: Second Level Blocks
Level 3 | Advanced
Analyze runs reaching the second level: 1. Calculate percentage of runs gaining 4+ yards 2. This proxy for reaching linebackers 3. Compare to stuff rate—correlation? 4. Which teams get to the second level?
# Your code here
Section 3: Separating O-Line from Skill Players (Level 3-4)
Exercise 3.1: Sack Rate vs QB Time
Level 3 | Attribution
Investigate QB contribution to sack rate: 1. Calculate average target depth (ADOT) by team 2. Higher ADOT = more time needed 3. Adjust sack rate for ADOT 4. Which teams' rankings change?
# Your code here
Exercise 3.2: Multiple RB Analysis
Level 3 | RB Control
Compare RBs on same team: 1. Find teams with multiple RBs (30+ carries each) 2. Compare their YPC and stuff rates 3. If same O-line, RB differences = RB skill 4. What does this tell us about O-line vs RB?
# Your code here
Exercise 3.3: RB Change Impact
Level 4 | Natural Experiment
Analyze teams with RB changes: 1. Compare rushing metrics before/after injury 2. If O-line constant, change = RB effect 3. How much does RB matter vs O-line?
# Your code here
Exercise 3.4: Short Yardage Analysis
Level 3 | Situational
Analyze short yardage (1-2 yards to go): 1. Calculate conversion rate by team 2. This is more O-line dependent 3. Compare to overall run blocking 4. Which teams excel in short yardage?
# Your code here
Exercise 3.5: Goal Line Analysis
Level 4 | Extreme Short
Analyze goal line (inside 5): 1. Calculate rushing success in goal-to-go 2. Very O-line dependent (limited space) 3. Which teams push it in? 4. Compare run vs pass success
# Your code here
Section 4: Advanced Metrics (Level 4-5)
Exercise 4.1: Opponent Adjustment
Level 4 | Adjustment
Adjust O-line metrics for opponent: 1. Calculate defensive sack rate and stuff rate allowed 2. Create opponent-adjusted O-line metrics 3. Which teams look better/worse after adjustment?
# Your code here
Exercise 4.2: Blitz Protection
Level 4 | Blitz
Analyze protection against blitzes: 1. Define blitz (5+ rushers or use available data) 2. Calculate sack rate vs blitz and non-blitz 3. Which teams handle blitz well? 4. Is blitz protection a different skill?
# Your code here
Exercise 4.3: Composite O-Line Index
Level 4 | Composite
Create a composite O-line rating: 1. Combine pass protection and run blocking 2. Weight appropriately 3. Normalize to 0-100 scale 4. Rank all teams
# Your code here
Exercise 4.4: Stability Analysis
Level 5 | Reliability
Test O-line metric stability: 1. Split season into halves 2. Calculate metrics for each half 3. What is the half-to-half correlation? 4. Which metrics are most stable?
# Your code here
Exercise 4.5: O-Line and Offensive Success
Level 5 | Impact
Analyze O-line impact on offense: 1. Correlate O-line metrics with team EPA 2. Does pass protection or run blocking matter more? 3. Which O-line metric best predicts wins?
# Your code here
Section 5: Comprehensive Evaluation (Level 4-5)
Exercise 5.1: O-Line Comparison Tool
Level 4 | Application
Build an O-line comparison tool: 1. Compare two teams' O-lines 2. Break down by pass and run 3. Include situational analysis 4. Generate report
class OLineComparison:
def __init__(self, pbp):
pass
def compare(self, team_a, team_b):
pass
def generate_report(self):
pass
Exercise 5.2: Individual Attribution Estimation
Level 5 | Attribution
Estimate individual lineman impact: 1. Use team metrics when specific player is injured 2. Calculate team metrics with/without player 3. Estimate player's individual value 4. Discuss limitations
# Your code here
Exercise 5.3: Scheme Classification
Level 5 | Scheme
Classify teams by blocking scheme: 1. Use run direction distribution as proxy 2. Outside zone teams run more outside 3. Gap teams run more inside 4. How does scheme affect metrics?
# Your code here
Exercise 5.4: Multi-Year Trajectory
Level 5 | Longitudinal
Analyze O-line stability across years: 1. Load multiple seasons 2. Track team O-line metrics over time 3. Which teams are consistently good/bad? 4. How stable is O-line performance?
# Your code here
Exercise 5.5: Complete O-Line Report
Level 5 | Capstone
Generate comprehensive O-line evaluation: 1. Select a team to analyze 2. Include all metric categories 3. Break down pass and run 4. Compare to league 5. Provide assessment and recommendations
# Your code here
Submission Guidelines
For each exercise: 1. Include all code with comments 2. Provide visualizations where appropriate 3. Interpret findings with appropriate caveats 4. Acknowledge data limitations
Grading Rubric
| Level | Points | Focus |
|---|---|---|
| 1 | 2 each | Correct calculation |
| 2 | 3 each | Calculation + interpretation |
| 3 | 4 each | Multi-metric analysis |
| 4 | 5 each | Context and adjustment |
| 5 | 6 each | Comprehensive evaluation |