Chapter 12: Key Takeaways
Quick Reference Guide for Defensive Metrics and Analysis
Core Defensive Statistics
Metric Definitions
| Metric | Definition | Typical Range |
|---|---|---|
| Tackles | Attempts to dispossess opponent | 1.5-4.0 per 90 |
| Tackle Success % | Tackles won / Total tackles | 50-75% |
| Interceptions | Passes cut out | 1.0-3.0 per 90 |
| Clearances | Ball removed from danger | 3.0-9.0 per 90 |
| Blocks | Shots/passes blocked | 0.5-2.0 per 90 |
| Aerial Win % | Aerial duels won / Total | 50-75% |
| Ball Recoveries | Loose balls gained | 4.0-10.0 per 90 |
Interpretation Guidelines
High tackles can indicate: - Aggressive defensive style (positive) - Compensation for poor positioning (negative) - High involvement due to team style (contextual)
Low tackles can indicate: - Excellent positioning deterring challenges (positive) - Playing for dominant possession team (contextual) - Avoidance of engagement (negative)
Key Formulas
Possession-Adjusted Defensive Actions (PADA)
$$\text{PADA} = \frac{\text{Defensive Actions per 90}}{1 - \text{Team Possession \%}}$$
Example: - 2.5 tackles per 90, team possession 65% - PADA = 2.5 / 0.35 = 9.14 tackles per opponent possession
Passes Per Defensive Action (PPDA)
$$\text{PPDA} = \frac{\text{Opponent Passes (Their Def Third)}}{\text{Defensive Actions (Their Def Third)}}$$
Benchmark Values: | Style | PPDA | |-------|------| | High Press | < 8 | | Medium Press | 8-12 | | Medium Block | 12-15 | | Low Block | > 15 |
Tackle Success Rate
$$\text{Success Rate} = \frac{\text{Tackles Won}}{\text{Total Tackles}} \times 100$$
Aerial Dominance Index
$$\text{ADI} = (\text{Aerial Win Rate} - 0.5) \times \text{Total Aerial Duels}$$
Pressing Metrics Summary
Individual Pressing
| Metric | Formula | Benchmark |
|---|---|---|
| Pressures p90 | Pressures × 90 / Minutes | 8-20 |
| Pressure Success % | Regains (5s) / Pressures | 25-40% |
| Valuable Pressures | Pressures → Shots (10s) | Varies |
Team Pressing
| Metric | Interpretation |
|---|---|
| PPDA < 8 | Intense high press |
| PPDA 8-12 | Medium press |
| PPDA > 15 | Defensive approach |
Counter-Pressing
| Metric | Definition |
|---|---|
| Counter-Press Rate | Press attempts within 5s of turnover / Turnovers |
| Counter-Press Regain Rate | Regains (8s) / Counter-press attempts |
Defensive Value Calculations
xG Prevented Components
- Shot Blocks: Direct xG of blocked shots
- Interceptions: xT at intended destination
- Tackles Won: Positional value × 0.02-0.05
- Clearances: Danger zone value × 0.01-0.04
- Pressure Regains: xT at location × 0.5
Defensive xT Prevented Formula
$$\text{xT Prevented} = \sum_{i} \text{xT}(\text{intercept\_location}_i)$$
Center-Back Archetypes
| Archetype | Key Traits | Best Fit |
|---|---|---|
| Ball-Playing Builder | High pass %, progressive passes | Possession systems |
| Aerial Dominator | High aerial %, clearances | Direct play, low block |
| Aggressive Engager | High tackles, pressures | High press systems |
| Positional Reader | High interceptions, efficiency | Tactical systems |
| Complete Defender | Balanced across all metrics | Any system |
Contextual Adjustment Checklist
Always Adjust For:
- Team Possession % - Use PADA formula
- Opposition Strength - Weight by opponent xG created
- Game State - Segment by leading/level/trailing
- Position - Compare within position groups
When Interpreting:
- Consider team tactical instructions
- Account for partner profiles
- Note sample size limitations
- Examine underlying context
Visualization Best Practices
Defensive Action Maps
- Use pitch diagram with scatter plots
- Color-code by action type
- Size by success/value
Radar Charts
- Include 7-8 key metrics
- Normalize to 0-100 scale
- Add comparison overlays
Defensive Shape
- Use convex hull for team shape
- Show average positions
- Include positional spread metrics
Practical Application Guide
Defender Evaluation Checklist
- Core Stats: Tackles, interceptions, clearances, blocks
- Aerial Ability: Win rate and involvement
- Pressing: Pressure frequency and success
- Ball-Playing: Pass completion and progression
- Context: Team, opposition, game state adjustments
- Value: xG prevented, defensive xT
Recruitment Criteria by Role
Ball-Playing CB Requirements: - Pass completion > 88% - Progressive passes > 3.5 per 90 - Comfortable under pressure
Aerial Stopper Requirements: - Aerial win rate > 70% - Clearances > 7.0 per 90 - Heading accuracy in both boxes
Pressing CB Requirements: - Pressures > 15 per 90 - Tackles won > 2.0 per 90 - Recovery pace for high line
Common Mistakes to Avoid
- Comparing raw stats without possession adjustment
- Ignoring tactical context in interpretation
- Overvaluing volume over efficiency
- Single-metric evaluation instead of profiles
- Ignoring deterrence effect (what doesn't happen)
Quick Reference: Metric Benchmarks
Elite Level (Top 5%)
| Metric | Threshold |
|---|---|
| Aerial Win % | > 75% |
| Interceptions p90 | > 2.5 |
| Pass Completion | > 92% |
| Progressive Passes p90 | > 7.0 |
| PPDA (Team) | < 9.0 |
Good Level (Top 25%)
| Metric | Threshold |
|---|---|
| Aerial Win % | > 68% |
| Interceptions p90 | > 1.8 |
| Pass Completion | > 88% |
| Progressive Passes p90 | > 3.5 |
| PPDA (Team) | < 12.0 |
Key Takeaways Summary
-
Defensive analysis requires context - Raw stats are misleading without adjustment
-
No single metric captures defensive quality - Use multi-dimensional profiles
-
The counterfactual problem - Great defenders prevent actions that never occur
-
Pressing is measurable - PPDA, high turnovers, and counter-pressing quantify pressing effectiveness
-
Archetypes matter - Different defenders suit different systems
-
Value can be estimated - xG prevented and defensive xT provide value frameworks
-
Team defense emerges from individuals - Analyze both levels
Code Snippets
Basic Defensive Stats
def get_defensive_stats(events_df, player_name, minutes):
player = events_df[events_df['player'] == player_name]
p90 = 90 / minutes
return {
'tackles_p90': len(player[player['type'] == 'Tackle']) * p90,
'interceptions_p90': len(player[player['type'] == 'Interception']) * p90,
'clearances_p90': len(player[player['type'] == 'Clearance']) * p90
}
PPDA Calculation
def calculate_ppda(events_df, pressing_team):
opponent = [t for t in events_df['team'].unique() if t != pressing_team][0]
opp_passes = events_df[
(events_df['team'] == opponent) &
(events_df['type'] == 'Pass') &
(events_df['location'].apply(lambda x: x[0] < 40 if isinstance(x, list) else False))
]
def_actions = events_df[
(events_df['team'] == pressing_team) &
(events_df['type'].isin(['Pressure', 'Tackle', 'Interception'])) &
(events_df['location'].apply(lambda x: x[0] > 80 if isinstance(x, list) else False))
]
return len(opp_passes) / len(def_actions) if len(def_actions) > 0 else float('inf')
Possession Adjustment
def possession_adjust(actions_p90, team_possession):
return actions_p90 / (1 - team_possession)