Key Takeaways: Special Teams Analytics
One-page reference for Chapter 11 concepts
Special Teams Impact
| Aspect |
Value |
| % of plays |
~17% |
| % of scoring |
~15% |
| Close game impact |
Decisive in 45% |
| Field position value |
~0.4 EP per 10 yards |
Kicker Evaluation
# Expected FG% by distance
def expected_fg(distance):
if distance <= 20: return 0.99
elif distance <= 30: return 0.95
elif distance <= 40: return 0.88
elif distance <= 50: return 0.75
elif distance <= 55: return 0.60
else: return 0.45
# FG Over Expected
fg_over_expected = actual_makes - sum(expected_fg(d) for d in distances)
FG% by Distance Benchmarks
| Distance |
League Avg |
Elite |
| 0-30 |
95% |
98%+ |
| 31-40 |
88% |
92%+ |
| 41-50 |
75% |
82%+ |
| 51+ |
55% |
65%+ |
Punter Evaluation
# Net average
net_avg = gross_yards - return_yards
# Inside 20 rate
inside_20 = (ending_position <= 20).mean()
# Better: EPA per punt
punt_epa = punts['epa'].mean()
Punting Benchmarks
| Metric |
Average |
Elite |
| Gross Avg |
45 yds |
48+ yds |
| Net Avg |
40 yds |
43+ yds |
| Inside 20% |
35% |
45%+ |
| Touchback% |
10% |
<5% |
Return Evaluation
# Kick return value
kr_avg = kickoff_returns['return_yards'].mean()
kr_value = kr_avg * 0.04 # EP per yard
# Punt return value
pr_avg = punt_returns['return_yards'].mean()
# Yards over expected
yoe = actual_yards - (attempts * league_avg)
Return Benchmarks
| Type |
Average |
Elite |
| Kick Return |
22 yds |
27+ yds |
| Punt Return |
8 yds |
12+ yds |
Coverage Quality
# Coverage score (higher = better)
coverage_score = (
fair_catch_rate * 100 -
long_return_rate * 100 -
avg_return_allowed * 2
)
Field Position Value
| Starting Position |
Expected Points |
| Own 10 |
-0.5 |
| Own 25 |
0.0 |
| Own 40 |
+0.6 |
| Midfield |
+1.0 |
| Opp 40 |
+1.6 |
| Opp 20 |
+2.5 |
Every 10 yards ≈ 0.4 EP
Decision Framework
def should_go_for_it(yardline, ytg):
"""Simplified 4th down decision."""
conv_prob = 0.75 - ytg * 0.05
go_ev = conv_prob * 2.5 + (1-conv_prob) * (-field_position_value(yardline))
punt_ev = -field_position_value(yardline - 40)
return go_ev > punt_ev
Sample Size Warning
| Play Type |
Season n |
95% CI Width |
| FG |
~30 |
±15% |
| XP |
~45 |
±12% |
| Punts |
~60 |
±10% |
| KR |
~25 |
±18% |
| PR |
~30 |
±16% |
Small samples = wide confidence intervals
Year-to-Year Stability
| Metric |
Correlation |
| FG% |
~0.35 |
| Punt Net |
~0.45 |
| KR Avg |
~0.25 |
| PR Avg |
~0.20 |
Lower correlation = higher variance/luck
Team ST Evaluation Framework
1. Kicking
- FG over expected
- XP%
- Kickoff touchback rate
2. Punting
- Net average
- Inside 20 rate
- Hangtime proxy (fair catch rate)
3. Returns
- KR average
- PR average
- Return TDs
4. Coverage
- KR allowed
- PR allowed
- Return TDs allowed
Common Pitfalls
| Pitfall |
Better Approach |
| Raw FG% |
FG over expected |
| Gross punt avg |
Net average + inside 20 |
| Return yards only |
Yards over expected |
| Ignoring samples |
Wide confidence intervals |
Data Sources
| Metric |
Source |
| FG/XP results |
Standard PBP |
| Punt distances |
Standard PBP |
| Return yards |
Standard PBP |
| Hangtime |
Not in public data |
| Individual grades |
PFF (subscription) |
Key Limitations
- Sample sizes too small for confidence
- Environment effects hard to model
- Unit coordination not captured
- Year-to-year stability moderate
- High-leverage context difficult
Preview: Part 3
Next: Team Analytics - how individual performances combine into team success and what drives winning.