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

  1. Shot Blocks: Direct xG of blocked shots
  2. Interceptions: xT at intended destination
  3. Tackles Won: Positional value × 0.02-0.05
  4. Clearances: Danger zone value × 0.01-0.04
  5. 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:

  1. Team Possession % - Use PADA formula
  2. Opposition Strength - Weight by opponent xG created
  3. Game State - Segment by leading/level/trailing
  4. 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

  1. Core Stats: Tackles, interceptions, clearances, blocks
  2. Aerial Ability: Win rate and involvement
  3. Pressing: Pressure frequency and success
  4. Ball-Playing: Pass completion and progression
  5. Context: Team, opposition, game state adjustments
  6. 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

  1. Comparing raw stats without possession adjustment
  2. Ignoring tactical context in interpretation
  3. Overvaluing volume over efficiency
  4. Single-metric evaluation instead of profiles
  5. 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

  1. Defensive analysis requires context - Raw stats are misleading without adjustment

  2. No single metric captures defensive quality - Use multi-dimensional profiles

  3. The counterfactual problem - Great defenders prevent actions that never occur

  4. Pressing is measurable - PPDA, high turnovers, and counter-pressing quantify pressing effectiveness

  5. Archetypes matter - Different defenders suit different systems

  6. Value can be estimated - xG prevented and defensive xT provide value frameworks

  7. 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)