Set pieces represent one of the most analytically tractable aspects of soccer. Unlike open play, where chaos and continuous action make analysis complex, set pieces provide discrete, repeatable situations with clear starting conditions. Modern...
Learning Objectives
- Analyze corner kick effectiveness using data
- Build free kick and penalty models
- Design data-driven set piece routines
In This Chapter
- Learning Objectives
- Introduction
- 14.1 The Strategic Value of Set Pieces
- 14.2 Corner Kick Analysis
- 14.3 Free Kick Analysis
- 14.4 Penalty Analysis
- 14.5 Throw-in Analysis and Long Throw Metrics
- 14.6 Goal Kick Strategy Analysis
- 14.7 Defensive Set Piece Organization
- 14.8 Expected Goals from Set Pieces (xGSP)
- 14.9 Designing Set Piece Routines Using Data
- 14.10 Player Specialization and Set Piece Roles
- 14.11 Tactical Pattern Recognition
- 14.12 Building Set Piece Reports
- 14.13 Advanced Topics
- Summary
- Key Equations and Formulas
- Looking Ahead
- References and Further Reading
Chapter 14: Set Piece Analytics
Learning Objectives
By the end of this chapter, you will be able to:
- Understand the strategic importance of set pieces in modern soccer
- Analyze corner kick patterns including delivery types, target zones, and outcomes
- Evaluate free kick effectiveness using expected goals frameworks
- Build penalty analysis models incorporating historical and situational data
- Assess throw-in strategies and their tactical implications
- Measure defensive set piece performance and vulnerabilities
- Create comprehensive set piece reports for tactical preparation
- Apply machine learning techniques to set piece pattern recognition
- Design set piece routines informed by data analysis
- Evaluate player specialization and set piece roles
Introduction
Set pieces represent one of the most analytically tractable aspects of soccer. Unlike open play, where chaos and continuous action make analysis complex, set pieces provide discrete, repeatable situations with clear starting conditions. Modern analytics has revealed that set pieces account for approximately 25-35% of all goals in professional soccer, making them a critical area for tactical development and strategic advantage.
The appeal of set piece analytics lies in several factors. First, the dead-ball nature of set pieces allows teams to execute pre-planned routines, making them more predictable and trainable than open play. Second, the discrete nature of these events makes data collection and analysis more straightforward. Third, the high-value nature of set pieces—particularly in tight matches—means that small improvements can yield significant competitive advantages.
The professionalization of set piece analysis has accelerated in recent years. Several clubs now employ dedicated set piece coaches and analysts, recognizing that the controlled environment of dead-ball situations is uniquely suited to data-driven optimization. Liverpool's appointment of a specialist set piece coach contributed to a measurable improvement in their set piece output, and the approach has since been replicated across the top leagues.
This chapter explores the analytical frameworks, methodologies, and practical applications for understanding set pieces at elite levels. We examine corner kicks, free kicks, penalties, throw-ins, and goal kicks through the lens of data science, developing tools and techniques that can inform tactical decision-making and player evaluation.
Real-World Application: In the 2018 FIFA World Cup, set pieces accounted for approximately 43% of all goals—a figure that underscored the growing importance of set piece preparation at the international level. England's run to the semi-finals was significantly aided by their set piece effectiveness, which was the product of systematic analytical preparation by their coaching and analytics staff.
14.1 The Strategic Value of Set Pieces
Frequency and Impact
Understanding the true value of set pieces begins with quantifying their occurrence and impact across competitions.
Set Piece Frequency
In a typical professional match, teams collectively generate:
- Corners: 10-12 per match (5-6 per team on average)
- Free kicks in attacking areas: 8-12 per match
- Direct free kick shooting opportunities: 1-3 per match
- Penalties: 0.2-0.3 per match on average
- Throw-ins: 40-50 per match total
- Goal kicks: 12-16 per match total
While individual set piece opportunities are relatively rare, their cumulative impact is substantial. Over a 38-match league season, a team might have:
- 200+ corners
- 150+ attacking free kicks
- 30-50 direct free kick shooting opportunities
- 6-8 penalties
- 800+ throw-ins
- 250+ goal kicks
Goal Contribution
Research across major European leagues consistently shows that set pieces contribute 25-35% of all goals:
| Set Piece Type | % of Total Goals | Goals per Team/Season |
|---|---|---|
| Corners | 8-12% | 6-10 |
| Indirect Free Kicks | 5-8% | 4-6 |
| Direct Free Kicks | 2-4% | 1.5-3 |
| Penalties | 6-9% | 5-7 |
| Throw-ins | 1-2% | 0.5-1.5 |
| Total | 25-35% | 18-28 |
These figures reveal significant opportunity. If a team can improve their set piece conversion rate by even 10-15%, they might gain 2-4 additional goals per season—often enough to influence final league position by 3-6 points.
Intuition: Think of set pieces as the structured plays in American football. While open play is more like the improvised scrambles, set pieces are designed plays where every player knows their role and movement pattern in advance. The team that prepares these plays most thoroughly and executes them most precisely gains a measurable advantage.
Tactical Advantages
Set pieces offer several unique tactical advantages:
Controlled Conditions: Unlike open play, set pieces begin from a stopped position with predetermined player locations. This allows teams to: - Execute pre-planned movements and blocking patterns - Exploit specific height or strength mismatches - Create numerical advantages in dangerous areas through coordinated movement
Repeatability: The same set piece situation can be practiced repeatedly, allowing for optimization through: - Video analysis of opponent tendencies and marking assignments - Statistical analysis of success rates by delivery type and target zone - Refinement based on personnel strengths and opponent weaknesses
Reduced Defensive Reaction Time: Attacking set pieces compress defending into a small timeframe, limiting the defensive team's ability to: - Reorganize effectively after the whistle - Communicate adjustments during the delivery - Maintain concentration throughout the movement phase
Real-World Application: Brentford FC, upon promotion to the Premier League, became one of the most effective set piece teams in the league. Their approach was built on detailed analytical work identifying optimal delivery zones, movement patterns, and blocking strategies. The club's set piece specialist worked with data analysts to create bespoke routines for each opponent, resulting in a significantly above-average set piece goal rate.
The Growing Importance of Set Pieces at Elite Level
At the highest level of competition, where the quality gap between teams is often narrow, set pieces can be the decisive factor. Tournament football is particularly influenced by set pieces because:
- Low-scoring matches: Knockout matches tend to be tight and tactical, amplifying the value of each chance
- Unfamiliar opponents: Teams may face opponents they rarely play, making open-play attacking patterns less reliable
- Fatigue: In the later stages of tournaments, player fatigue reduces open-play quality but set pieces remain reliable
- Psychological impact: Scoring from a set piece can shift momentum and confidence
14.2 Corner Kick Analysis
Corner kicks represent the most frequent high-value set piece opportunity, making them a primary focus of analytical attention.
Delivery Analysis: Types, Target Zones, and xG from Corners
The method of corner delivery significantly impacts expected outcomes. We categorize deliveries along several dimensions:
Delivery Type Classification
By Trajectory: - Inswinger: Curving toward goal, creating direct threat and difficult claiming for the goalkeeper - Outswinger: Curving away from goal, favoring attacking runs onto the ball - Driven/Flat: Low, fast delivery to near post or edge of box, reducing goalkeeper reaction time - Lofted: High, hanging delivery to far post area, maximizing heading opportunities
By Target Zone: - Near Post: First 6 yards, requiring quick contact (flick-ons, glancing headers) - Central: 6-yard to penalty spot area (the "danger zone") - Far Post: Beyond penalty spot to far post (run-and-head opportunities) - Short: Played to nearby teammate (creates angles, draws defenders) - Edge of Box: Delivery to players outside the box (shooting opportunities)
def classify_corner_delivery(corner_event):
"""Classify corner kick delivery type."""
end_location = corner_event.get('pass_end_location', [0, 0])
technique = corner_event.get('pass_technique', {}).get('name', '')
height = corner_event.get('pass_height', {}).get('name', '')
end_x = end_location[0]
end_y = end_location[1]
if end_x < 108:
target_zone = 'short'
elif end_x < 114 and 36 < end_y < 44:
target_zone = 'near_post'
elif end_x >= 114 and 36 < end_y < 44:
target_zone = 'central'
elif end_y >= 44 or end_y <= 36:
target_zone = 'far_post'
else:
target_zone = 'edge_of_box'
if 'Inswinging' in technique:
trajectory = 'inswinger'
elif 'Outswinging' in technique:
trajectory = 'outswinger'
elif height == 'Ground Pass' or height == 'Low Pass':
trajectory = 'driven'
else:
trajectory = 'lofted'
return {
'target_zone': target_zone,
'trajectory': trajectory,
'end_location': end_location
}
Delivery Effectiveness by Type
Research reveals significant variation in corner effectiveness by delivery type:
| Delivery Type | Shot Rate | xG per Corner | Scoring Rate |
|---|---|---|---|
| Inswinger to near post | 18-22% | 0.04-0.06 | 2.5-3.5% |
| Outswinger to far post | 15-18% | 0.03-0.05 | 2.0-3.0% |
| Driven to near post | 12-15% | 0.03-0.04 | 1.5-2.5% |
| Short corner | 20-25% | 0.04-0.06 | 2.5-3.5% |
| Lofted central | 14-17% | 0.03-0.04 | 1.8-2.5% |
The data suggests that while no single delivery type dominates, inswingers and short corners generally produce the highest expected value. However, effectiveness is highly dependent on personnel and defensive structure.
Target Zone xG Breakdown
A more granular understanding of corner effectiveness requires mapping xG by target zone within the box. Research across multiple seasons of top-flight data reveals consistent patterns in where dangerous chances are created:
| Target Zone | Avg xG per Corner | Shot Conversion | Header % | Key Characteristics |
|---|---|---|---|---|
| Near post (0-6 yards) | 0.035-0.055 | 3.0-4.0% | 70-80% | Quick flick-ons, requires precise timing |
| Central danger zone (6yd-penalty spot) | 0.045-0.065 | 3.5-5.0% | 65-75% | Highest raw xG, most congested area |
| Far post (beyond penalty spot) | 0.030-0.045 | 2.5-3.5% | 60-70% | Run-and-head, less contested |
| Edge of box (18 yards+) | 0.015-0.025 | 1.5-2.5% | 10-20% | Volleys and half-volleys, lower conversion |
| Six-yard box | 0.060-0.090 | 5.0-8.0% | 80-90% | Highest xG per contact, rare clean delivery |
The central danger zone between the six-yard box and the penalty spot consistently produces the highest aggregate xG because it combines reasonable shot quality with a higher frequency of deliveries reaching that area. However, when a delivery reaches the six-yard box cleanly—bypassing the first line of defenders—the resulting chance is typically far more dangerous, with individual shot xG values often exceeding 0.25 for headers from within six yards.
Near-Post Flick-On Strategy: One particularly effective pattern involves delivering the ball to the near post for a flick-on header, redirecting the ball across the face of goal for a second attacker arriving at the far post. This two-touch pattern is difficult to defend because the flick-on changes the trajectory unpredictably and the second attacker arrives onto the ball with momentum. Data shows that flick-on sequences produce approximately 15-20% higher xG per corner than single-contact headers, though they require precise coordination between the deliverer, the near-post flicker, and the far-post target.
Intuition: The near-post flick-on is effective for the same reason that a one-two pass is effective in open play: it changes the point of attack faster than the defense can adjust. The defense sets up to deal with a direct delivery, and the flick-on redirects the ball into an area that the defensive structure was not prepared to cover. The analytical challenge is that flick-ons are difficult to plan with certainty—the margin between an effective glancing header and a missed contact is millimeters.
Common Pitfall: Many analyses of corner effectiveness focus solely on direct goals from corners. This significantly undervalues corners by ignoring second-ball opportunities, penalties won from corner sequences, and the general disruption caused to the opposing defense. A corner that leads to a shot that is blocked, followed by a second shot that scores, should be credited to the corner even though the goal came from the second chance.
Outcome Modeling: xG from Corners
Beyond delivery classification, we can model corner outcomes probabilistically.
Outcome Categories
Corner outcomes typically fall into these categories: - Goal: Direct or indirect goal scored - Shot on target: Shot requiring save - Shot off target: Shot missing the goal - Header won (attacking): First contact won by attacking team - Header won (defensive): First contact won by defending team - Claimed by goalkeeper: Ball caught or punched by goalkeeper - Out of play: Ball goes out of bounds - Cleared: Ball cleared by defense - Possession retained: Attacking team maintains possession
def calculate_corner_xg(corner_data, subsequent_shots):
"""Calculate expected goals from corner kick."""
corner_xg = []
for _, corner in corner_data.iterrows():
corner_time = corner['minute'] * 60 + corner.get('second', 0)
related_shots = subsequent_shots[
(subsequent_shots['team'] == corner['team']) &
(subsequent_shots['minute'] * 60 + subsequent_shots.get('second', 0) - corner_time <= 10) &
(subsequent_shots['minute'] * 60 + subsequent_shots.get('second', 0) - corner_time >= 0)
]
total_xg = related_shots['shot_statsbomb_xg'].sum() if len(related_shots) > 0 else 0
corner_xg.append({
'corner_id': corner.name,
'team': corner['team'],
'delivery_type': classify_corner_delivery(corner)['trajectory'],
'target_zone': classify_corner_delivery(corner)['target_zone'],
'shots_generated': len(related_shots),
'xg_generated': total_xg,
'goal_scored': any(related_shots['shot_outcome'] == 'Goal') if len(related_shots) > 0 else False
})
return pd.DataFrame(corner_xg)
First Contact Analysis
A critical element of corner analysis is tracking who wins first contact on the delivery. The team that wins first contact has a dramatically higher probability of scoring:
def analyze_first_contact(corner_events, aerial_duels):
"""Analyze first contact patterns from corners."""
results = {
'attacking_wins': 0,
'defensive_wins': 0,
'goalkeeper_claims': 0,
'no_contact': 0,
'attacking_win_locations': [],
'defensive_win_locations': []
}
for _, corner in corner_events.iterrows():
corner_time = corner['minute']
related_aerials = aerial_duels[
(aerial_duels['minute'] == corner_time) |
(aerial_duels['minute'] == corner_time + 1)
]
if len(related_aerials) > 0:
first_duel = related_aerials.iloc[0]
if first_duel['team'] == corner['team']:
results['attacking_wins'] += 1
results['attacking_win_locations'].append(first_duel['location'])
else:
results['defensive_wins'] += 1
results['defensive_win_locations'].append(first_duel['location'])
return results
Best Practice: When analyzing corner effectiveness, always track both the immediate outcome (shot, clearance, etc.) and the secondary outcome (what happens with the second ball). Teams that consistently retain possession after failed corner deliveries maintain pressure and create additional opportunities, and this should be valued in the analysis.
14.3 Free Kick Analysis
Free kicks present different analytical challenges depending on their location and type.
Direct Free Kick Shooting: xG Models and Wall Positioning
Direct free kicks within shooting range represent high-value opportunities that require specific analytical treatment.
Shooting Zone Classification
| Zone | Distance | Angle | Direct Shot xG |
|---|---|---|---|
| Prime | 18-22m | Central | 0.06-0.10 |
| Good | 22-28m | Central | 0.03-0.06 |
| Moderate | 18-25m | Wide | 0.02-0.04 |
| Marginal | 28-35m | Any | 0.01-0.03 |
| Unlikely | 35m+ | Any | <0.01 |
def calculate_free_kick_xg(location, goal_center=[120, 40]):
"""Calculate expected goals for direct free kick shot."""
import numpy as np
distance = np.sqrt(
(goal_center[0] - location[0])**2 +
(goal_center[1] - location[1])**2
)
goal_width = 9.32
angle = np.arctan(goal_width / distance) * (180 / np.pi)
centrality = 1 - abs(location[1] - 40) / 40
if distance < 18:
base_xg = 0.12
elif distance < 22:
base_xg = 0.08
elif distance < 26:
base_xg = 0.05
elif distance < 30:
base_xg = 0.03
else:
base_xg = 0.015
adjusted_xg = base_xg * (0.5 + 0.5 * centrality)
return adjusted_xg
Technique Analysis
Free kick technique significantly impacts conversion probability:
Key Technical Factors: - Spin type: Knuckleball (unpredictable movement), curve (bending around wall), dip (rising then dropping) - Ball speed: Higher speed reduces goalkeeper reaction time but may sacrifice accuracy - Target zone: Top corners convert at roughly twice the rate of bottom areas, though they miss the frame more frequently - Wall setup: Number of players in the wall, their positioning, and whether they jump affect the available target area
Wall Positioning Analysis:
The defensive wall is a critical factor in free kick xG. Standard walls typically consist of 3-5 players positioned to block the near post angle. Recent innovations include: - Behind-the-wall player: A teammate lying behind the wall to block low shots under jumping wall players - Run-around techniques: An extra attacker standing in or near the wall, then peeling off at the moment of the kick - Two-wall systems: Splitting the wall to cover different angles
Advanced: Advanced free kick xG models incorporate wall positioning data (when available from tracking) to estimate the visible goal area available to the shooter. A well-positioned wall can reduce the target area by 40-60%, dramatically reducing xG compared to a poorly organized wall or one that fails to jump at the right moment.
Detailed Wall Positioning Analytics
Wall positioning is one of the most analytically rich aspects of free kick defense, and tracking data has enabled a new level of precision in understanding how wall construction affects goal probability.
Wall Width and Coverage: The standard wall for a central free kick at 20-25 meters consists of 4-5 players covering the near-post angle. The wall's purpose is to block the direct path to approximately one-third of the goal, forcing the kicker to either shoot over or around the wall or aim for the portion of the goal that the goalkeeper covers. The optimal wall width depends on the free kick location: wider angles require fewer players in the wall (as the near post is already partially shielded by geometry), while central free kicks require wider walls.
Wall Jump Timing and Effectiveness: A persistent vulnerability of the defensive wall is the jump. Players in the wall typically jump as the ball is struck, attempting to block shots aimed over the wall. However, this creates a brief window during which the bottom of the wall is unprotected—a gap that some free kick specialists exploit by shooting under the jumping wall. Data from tracking systems shows that the average wall jump creates a gap of 0.3-0.5 meters between the ground and the players' feet, lasting approximately 0.4 seconds. To counter this, the innovation of placing a player lying down behind the wall has become increasingly common at the elite level.
Wall Distance Compliance: By rule, the wall must stand at least 9.15 meters (10 yards) from the ball. However, referees vary in how strictly they enforce this distance, and walls that creep forward even 1-2 meters reduce the shooter's time and angle significantly. Tracking data enables precise measurement of wall distance, and analysis shows that walls positioned at 8-9 meters rather than the mandated 9.15 meters reduce the probability of a goal by approximately 10-15% relative to walls at the correct distance, due to the reduced reaction time for the shooter.
Best Practice: When analyzing free kick defense, track the wall's composition (which players stand in the wall, whether they include a "lying player" behind), the wall's actual distance from the ball, the wall's jump timing relative to the shot, and the resulting gap created during the jump. These four factors collectively explain a significant portion of the variance in free kick outcomes from the defensive perspective and reveal whether a team's wall organization is helping or hindering their goalkeeper.
Goalkeeper Positioning Relative to the Wall: The relationship between the wall and the goalkeeper's starting position is critical. The wall protects the near post, and the goalkeeper covers the remainder of the goal. If the wall is too narrow, the goalkeeper must cover an excessive portion of the goal; if too wide, it blocks the goalkeeper's sightline to the ball. The optimal balance depends on the specific location of the free kick and the goalkeeper's reaction speed and reach. Advanced analysis maps the "effective goal area" visible to both the shooter and the goalkeeper after accounting for the wall, identifying the exact zones that are most vulnerable.
Indirect Free Kicks
Indirect free kicks in dangerous positions function similarly to corners but with greater flexibility in starting location.
Delivery Patterns
Common indirect free kick routines include:
- Traditional Cross: Delivery into box for aerial challenge
- Driven Near Post: Quick, low ball to near post runners
- Lay-off to Shooter: Short pass to set up edge-of-box shot
- Back Post Runner: Cross to player making far post run
- Decoy Run: Elaborate movement to create shooting opportunity
def classify_indirect_free_kick(fk_event, subsequent_events):
"""Classify indirect free kick routine type."""
fk_location = fk_event['location']
end_location = fk_event.get('pass_end_location', [0, 0])
pass_length = np.sqrt(
(end_location[0] - fk_location[0])**2 +
(end_location[1] - fk_location[1])**2
)
if pass_length < 10:
next_event = subsequent_events.iloc[0] if len(subsequent_events) > 0 else None
if next_event is not None and next_event['type'] == 'Shot':
return 'lay_off_to_shooter'
else:
return 'short_combination'
else:
if end_location[0] > 114 and end_location[1] < 35:
return 'near_post_delivery'
elif end_location[0] > 114 and end_location[1] > 45:
return 'far_post_delivery'
else:
return 'central_delivery'
Real-World Application: Data analysis of free kick routines has revealed that the lay-off-to-shooter routine (a short pass to a teammate who then shoots from just outside the box) produces higher xG per free kick than traditional cross deliveries in many situations. This is because the shooter faces a more open goal than a direct free kick taker (no wall) and can strike the ball cleanly from a controlled position.
14.4 Penalty Analysis
Penalties represent the highest-converting set piece opportunity, with conversion rates typically between 75-80%. Despite this high baseline, significant analytical value exists in understanding the nuances of penalty-taking and saving.
Historical Conversion Rates
Penalty conversion rates have remained remarkably stable over time:
| Competition | Period | Conversion Rate |
|---|---|---|
| Premier League | 2015-2024 | 76-78% |
| La Liga | 2015-2024 | 77-80% |
| Serie A | 2015-2024 | 75-78% |
| Bundesliga | 2015-2024 | 76-79% |
| World Cup | 1990-2022 | 73-76% |
| Shootouts | 1990-2022 | 71-74% |
The slightly lower conversion rate in World Cups and shootouts reflects the increased psychological pressure of these high-stakes situations.
Penalty Outcome Factors
Research has identified several factors influencing penalty outcomes:
Shooter vs. Goalkeeper Strategies
Taker Factors: 1. Preferred foot: Right-footed takers tend to favor their left (the goalkeeper's right), and vice versa 2. Run-up style: Length, angle, speed of approach all signal intent 3. Historical tendency: Established patterns in shot placement that goalkeepers can study 4. Situational pressure: Match state, competition stage, stakes
Goalkeeper Factors: 1. Dive timing: Early divers commit before the shot, gaining reach but sacrificing information; late divers react to the shot but have less time 2. Side preference: Statistical tendencies in dive direction 3. Save technique: Positioning, reach, reaction time 4. Psychological tactics: Movement on the line, delay, verbal engagement
Situational Factors
- Match state: Leading, level, or trailing affects both taker and goalkeeper behavior
- Time remaining: Early-match penalties have different dynamics than late-match penalties
- Competition context: League vs. cup vs. knockout vs. shootout
- Crowd influence: Home advantage in penalty situations is measurable but modest
Penalty Placement Analysis
Shot placement is the strongest predictor of penalty success:
| Target Zone | Conversion Rate | Save Rate | Miss Rate |
|---|---|---|---|
| Top corners | 90-95% | 2-4% | 4-8% |
| Bottom corners | 80-85% | 8-12% | 6-10% |
| Mid-height sides | 70-75% | 18-22% | 5-8% |
| Central | 80-85%* | 12-15%* | 2-4% |
*Central placement often benefits from goalkeeper diving away
def analyze_penalty_placement(penalty_events):
"""Analyze penalty kick placement patterns."""
zones = {
'top_left': {'count': 0, 'goals': 0, 'saved': 0, 'missed': 0},
'top_right': {'count': 0, 'goals': 0, 'saved': 0, 'missed': 0},
'bottom_left': {'count': 0, 'goals': 0, 'saved': 0, 'missed': 0},
'bottom_right': {'count': 0, 'goals': 0, 'saved': 0, 'missed': 0},
'center': {'count': 0, 'goals': 0, 'saved': 0, 'missed': 0}
}
for _, pen in penalty_events.iterrows():
end_loc = pen.get('shot_end_location', [120, 40, 1])
outcome = pen.get('shot_outcome', '')
y = end_loc[1] if len(end_loc) > 1 else 40
z = end_loc[2] if len(end_loc) > 2 else 1
if 38 < y < 42:
zone = 'center'
elif y <= 38:
zone = 'top_right' if z > 1.2 else 'bottom_right'
else:
zone = 'top_left' if z > 1.2 else 'bottom_left'
zones[zone]['count'] += 1
if outcome == 'Goal':
zones[zone]['goals'] += 1
elif outcome in ['Saved', 'Saved to Post']:
zones[zone]['saved'] += 1
else:
zones[zone]['missed'] += 1
return zones
Intuition: The penalty dilemma for the taker is a tradeoff between accuracy and power. Aiming for the top corners gives the highest conversion rate if the shot is on target, but increases the risk of missing the frame entirely. Aiming for the center of the goal is safer in terms of accuracy but relies on the goalkeeper diving away. The optimal strategy depends on the taker's technical ability and composure under pressure.
Game Theory Applications
Penalty analysis provides a natural application of game theory, modeling the strategic interaction between taker and goalkeeper.
Mixed Strategy Equilibrium
In game-theoretic terms, the optimal penalty strategy involves mixing between different shot placements such that the goalkeeper cannot exploit any predictability. If a taker always shoots left, the goalkeeper will always dive left and the conversion rate drops. The optimal strategy is to randomize in proportion to the expected conversion rate in each direction.
def calculate_mixed_strategy_value(taker_tendencies, gk_tendencies, outcome_matrix):
"""Calculate expected value given mixed strategies."""
expected_value = 0
for shot_zone, shot_prob in taker_tendencies.items():
for dive_dir, dive_prob in gk_tendencies.items():
success_prob = outcome_matrix.get((shot_zone, dive_dir), 0.75)
expected_value += shot_prob * dive_prob * success_prob
return expected_value
Empirical Findings on Mixed Strategies:
Research by Palacios-Huerta and others has shown that professional penalty takers and goalkeepers approximate the Nash equilibrium prediction surprisingly well. However, detectable biases exist: - Takers tend to shoot toward their "strong" side slightly more often than game theory would predict - Goalkeepers tend to dive in the same direction as the taker's dominant foot slightly more often - Under extreme pressure (shootouts, decisive penalties), both takers and goalkeepers become more predictable
Advanced: The game-theoretic framework for penalties assumes that both parties are fully rational and have access to the same information. In practice, asymmetric information (the goalkeeper may not have studied the taker, or vice versa) creates deviations from equilibrium. Analytics departments at top clubs compile detailed penalty reports for both takers and goalkeepers, aiming to exploit informational advantages.
14.5 Throw-in Analysis and Long Throw Metrics
While often overlooked, throw-ins represent the most frequent set piece in soccer. Modern tactical approaches have revealed significant untapped value in throw-in optimization.
Throw-in Volume and Location
Throw-ins occur approximately 40-50 times per match, concentrated in the middle thirds of the pitch. Attacking throw-ins (in the final third) represent the highest-value opportunities.
Throw-in Classification
def classify_throw_in(throw_event):
"""Classify throw-in by location and type."""
location = throw_event.get('location', [60, 0])
end_location = throw_event.get('pass_end_location', [60, 40])
if location[0] < 40:
zone = 'defensive'
elif location[0] < 80:
zone = 'middle'
else:
zone = 'attacking'
direction_x = end_location[0] - location[0]
direction_y = end_location[1] - location[1]
if direction_x > 10:
direction = 'forward'
elif direction_x < -10:
direction = 'backward'
else:
direction = 'lateral'
if end_location[0] > 102:
target = 'danger_zone'
elif end_location[0] > 80:
target = 'attacking_third'
else:
target = 'safe'
return {
'zone': zone,
'direction': direction,
'target': target,
'length': np.sqrt(direction_x**2 + direction_y**2)
}
The "Long Throw" Specialist
Long throws have gained tactical prominence as teams recognize their potential as additional corner-like opportunities.
Long Throw Effectiveness
| Metric | Regular Throw | Long Throw (into box) |
|---|---|---|
| Avg. length | 15-20m | 30-40m |
| Shot rate | 2-3% | 12-18% |
| xG generated | 0.001 | 0.02-0.04 |
| Goal rate | 0.1% | 1-2% |
The dramatic increase in expected value from long throws has led many teams to specifically recruit or develop long-throw specialists. Stoke City's Rory Delap pioneered this approach in the Premier League, and it has since been adopted by numerous clubs at all levels.
Real-World Application: Analysis has shown that long throws into the penalty area create chaos that traditional marking systems struggle to cope with. The flat, driven trajectory of a long throw is harder for goalkeepers to claim than a corner kick (which arrives on a higher, more predictable arc), and the unexpected nature of the delivery can catch defenders off-guard. Teams that face long-throw specialists now prepare specific defensive routines, treating them with the same seriousness as corner kicks.
Throw-in Retention Analysis
A key metric for throw-in effectiveness is possession retention:
def calculate_throw_in_retention(throw_events, possession_sequences):
"""Calculate throw-in possession retention rates."""
retention_stats = {
'defensive': {'retained': 0, 'lost': 0},
'middle': {'retained': 0, 'lost': 0},
'attacking': {'retained': 0, 'lost': 0}
}
for _, throw in throw_events.iterrows():
classification = classify_throw_in(throw)
zone = classification['zone']
outcome = throw.get('pass_outcome', None)
retained = pd.isna(outcome)
if retained:
retention_stats[zone]['retained'] += 1
else:
retention_stats[zone]['lost'] += 1
for zone in retention_stats:
total = retention_stats[zone]['retained'] + retention_stats[zone]['lost']
if total > 0:
retention_stats[zone]['rate'] = retention_stats[zone]['retained'] / total
return retention_stats
Throw-in Retention Benchmarks:
| Zone | Average Retention | Elite Retention |
|---|---|---|
| Defensive third | 75-80% | 85-90% |
| Middle third | 65-72% | 78-85% |
| Attacking third | 55-65% | 70-78% |
Common Pitfall: Throw-in retention rates in the attacking third are naturally lower because the opposition is defending more densely. Do not penalize teams for lower retention rates in advanced positions—instead, evaluate whether they are creating value from the throw-ins they do retain.
14.6 Goal Kick Strategy Analysis
Goal kicks have undergone a tactical revolution in recent years, evolving from routine clearances into strategic opportunities for build-up play.
Short vs. Long Goal Kick Trends
| Season | Short GK % (Top 5 Leagues) | Long GK % |
|---|---|---|
| 2015-16 | 35-40% | 60-65% |
| 2017-18 | 42-48% | 52-58% |
| 2019-20 | 50-55% | 45-50% |
| 2021-22 | 55-60% | 40-45% |
| 2023-24 | 58-63% | 37-42% |
The trend toward short goal kicks reflects the influence of possession-based tactical philosophies and improved goalkeeper distribution skills.
Short Goal Kick Analysis:
Short goal kicks aim to retain possession and build from the back. Key metrics include: - Success rate: Proportion of short goal kicks that result in the team retaining possession past the halfway line - Press resistance: How often the team successfully plays through an opponent's press from a goal kick - Progression speed: How quickly the team advances the ball from a goal kick
Long Goal Kick Analysis:
Long goal kicks aim to bypass pressure and gain territory. Key metrics include: - Duel win rate: How often the target player wins the aerial duel - Second ball win rate: How often the team wins the second ball after the header - Territory gained: Net forward progress from long goal kicks
Best Practice: Goal kick strategy should be opponent-specific. Against teams that press aggressively from goal kicks, long distribution may be more effective. Against teams that sit deep, short distribution allows the team to build possession and advance methodically. The analytics team should prepare goal kick strategy recommendations as part of the match preparation briefing.
14.7 Defensive Set Piece Organization
While much attention focuses on attacking set pieces, defensive analysis is equally critical.
Defensive Structures: Zonal, Man-to-Man, and Hybrid
Teams employ various defensive structures for set pieces:
Marking Systems
-
Zonal Defense: Players defend designated areas rather than marking specific opponents. Advantages include predictability for defenders, consistency regardless of opponent, and reduced vulnerability to decoy runs. Disadvantages include potential confusion at zone boundaries and difficulty handling runners who attack between zones.
-
Man-to-Man: Each defender assigned to specific attacker. Advantages include clear accountability, ability to neutralize key aerial threats, and simplicity of communication. Disadvantages include vulnerability to blocking runs, potential for mismatches, and difficulty when opponents rotate positions.
-
Hybrid: Combination of zonal and man-marking, typically with 2-3 zone defenders in the most dangerous areas and man-markers assigned to the opponent's key set piece threats. This has become the most popular system at elite level.
-
Mixed: Different systems for different situations—zonal for corners, man-marking for free kicks, for example.
def analyze_defensive_structure(set_piece_events, tracking_data=None):
"""Analyze defensive set piece structure."""
if tracking_data is not None:
defensive_positions = analyze_positioning(tracking_data)
else:
defensive_positions = None
goals_conceded = len(set_piece_events[set_piece_events['outcome'] == 'Goal'])
total_set_pieces = len(set_piece_events)
concession_rate = goals_conceded / total_set_pieces if total_set_pieces > 0 else 0
clearances = set_piece_events[set_piece_events['type'] == 'Clearance']
aerial_duels = set_piece_events[set_piece_events['type'].str.contains('Aerial', na=False)]
return {
'total_defensive_set_pieces': total_set_pieces,
'goals_conceded': goals_conceded,
'concession_rate': concession_rate,
'clearances': len(clearances),
'aerial_duels_won': len(aerial_duels[aerial_duels['outcome'] == 'Won']),
'positioning_analysis': defensive_positions
}
Vulnerability Assessment
Identifying defensive vulnerabilities requires systematic analysis of goals and chances conceded:
Common Vulnerability Patterns
- Near post weakness: Poor coverage of near post runs, often caused by the goalkeeper not positioning the wall correctly or the nearest zone defender not holding their ground
- Second ball reactions: Failure to clear rebounds and knockdowns, often caused by defenders ball-watching rather than scanning for secondary threats
- Far post neglect: Insufficient coverage of far post, particularly when the delivery is played with an outswinging trajectory
- Aerial mismatches: Key attackers winning duels against outmatched defenders, often caused by poor man-marking assignments
- Runner tracking: Losing runners who start deep and attack the delivery late, particularly from free kicks where movement can start earlier than from corners
Defensive Set Piece Metrics and Benchmarks
Quantifying defensive set piece performance requires a suite of metrics that go beyond simple goals-conceded counts:
xG Conceded per Set Piece: The most important defensive metric is the expected goals conceded per defensive set piece faced. This accounts for the quality of chances allowed, not just whether they resulted in goals. A team conceding 0.04 xG per corner is performing at an elite level, while one conceding 0.07 or above is vulnerable. Tracking this metric over time reveals whether defensive improvements in training are translating to match performance.
First Contact Win Rate: In defensive set piece situations, winning first contact on the delivery is the single most predictive factor for preventing a goal. Teams that win first contact on 65% or more of deliveries concede significantly fewer set piece goals than those winning first contact less than 55% of the time. This metric directly evaluates the effectiveness of the chosen marking system—whether the markers or zone defenders are succeeding in their primary task.
Clearance Quality: Not all clearances are equal. A clearance that travels 30 yards and reaches a teammate is qualitatively different from one that drops 5 yards from goal and creates a second-ball scramble. Track the average distance and direction of clearances from set pieces to assess whether the defensive structure is genuinely neutralizing threats or merely delaying them.
Second Ball Recovery Rate: After the initial contact on a set piece delivery, the resulting loose ball must be secured. Teams that recover second balls at a rate above 55% from defensive set pieces significantly outperform those below 45%. This metric evaluates the positioning and alertness of players who are not directly involved in the first aerial duel—the edge-of-box players, the goalkeeper's positioning for rebounds, and the midfielders tasked with sweeping up clearances.
Real-World Application: When a club identifies that they are conceding above-average xG from set pieces, the analytical workflow involves categorizing the source of the problem. Is it a first-contact issue (the attackers are winning the initial header)? A clearance quality issue (defenders are winning first contact but failing to clear effectively)? A second-ball issue (the initial clearance is adequate but the team loses the subsequent scramble)? Or a structural issue (the defensive formation leaves certain zones consistently unguarded)? Each diagnosis leads to a different intervention: personnel changes, marking assignment adjustments, tactical structure modifications, or targeted training sessions focused on the specific weakness.
Common Pitfall: When analyzing set piece defensive vulnerabilities, do not focus exclusively on goals conceded. Many defensive weaknesses produce shots and chances without resulting in goals, and these near-misses are equally indicative of structural problems. Tracking xG conceded from set pieces provides a more complete picture than goals conceded alone.
14.8 Expected Goals from Set Pieces (xGSP)
Building dedicated expected goals models for set pieces improves prediction accuracy.
Why Separate Set Piece xG?
Standard xG models trained primarily on open-play data may not accurately capture set piece shot quality because:
- Defensive structure differs: Set piece defenses are organized differently than open-play defenses, with more bodies in the box and different marking arrangements
- Shot contexts vary: Headers from corners involve different body mechanics and contact quality than headers from open-play crosses
- Goalkeeper positioning: Goalkeeper positioning differs in set pieces, particularly for corners where the goalkeeper starts on the line rather than in their typical off-the-line position
- Predictable patterns: Trained routines create different shot types with different characteristics than the spontaneous shots generated in open play
Building a Set Piece xG Model
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import cross_val_score
def build_set_piece_xg_model(set_piece_shots):
"""Build expected goals model specific to set pieces."""
features = []
labels = []
for _, shot in set_piece_shots.iterrows():
location = shot.get('location', [0, 0])
body_part = shot.get('shot_body_part', {}).get('name', 'Unknown')
set_piece_type = shot.get('shot_type', {}).get('name', 'Unknown')
distance = np.sqrt((120 - location[0])**2 + (40 - location[1])**2)
angle = np.arctan(9.32 / (2 * distance)) * 180 / np.pi
feature_row = {
'distance': distance,
'angle': angle,
'is_header': 1 if body_part == 'Head' else 0,
'is_corner': 1 if 'Corner' in set_piece_type else 0,
'is_free_kick': 1 if 'Free Kick' in set_piece_type else 0,
'location_x': location[0],
'location_y': abs(location[1] - 40)
}
features.append(feature_row)
labels.append(1 if shot.get('shot_outcome') == 'Goal' else 0)
X = pd.DataFrame(features)
y = np.array(labels)
model = GradientBoostingClassifier(
n_estimators=100, max_depth=4,
learning_rate=0.1, random_state=42
)
cv_scores = cross_val_score(model, X, y, cv=5, scoring='roc_auc')
print(f"Cross-validation AUC: {cv_scores.mean():.3f} (+/- {cv_scores.std()*2:.3f})")
model.fit(X, y)
return model, X.columns.tolist()
Comparing Open Play and Set Piece xG
| Shot Context | Avg xG | Conversion Rate | xG Model AUC |
|---|---|---|---|
| Open play | 0.10 | 9-10% | 0.78-0.80 |
| Corner | 0.03-0.04 | 3-4% | 0.72-0.75 |
| Free kick (indirect) | 0.04-0.05 | 4-5% | 0.73-0.76 |
| Free kick (direct) | 0.04-0.06 | 4-6% | 0.75-0.78 |
| Penalty | 0.76-0.78 | 76-78% | N/A |
Advanced: Set piece xG models typically have lower AUC scores than open-play models because the outcome is more random in set piece situations. Headers from corners involve more physical contact, more chaotic ball movement, and less predictable outcomes than open-play shots. This higher randomness means that even a well-calibrated model will have more difficulty predicting individual outcomes, though it remains valuable for aggregate evaluation.
14.9 Designing Set Piece Routines Using Data
Data-Driven Routine Design
Analytics can inform the design of set piece routines by identifying:
- Opponent weaknesses: Which zones the opponent defends poorly, which markers are vulnerable to being blocked, which defenders are weakest in the air
- Player strengths: Which attackers are strongest in the air, fastest in short-distance sprints, most effective at blocking
- Delivery optimization: Which delivery type creates the highest xG against the specific defensive structure
- Historical success patterns: Which routine types have produced the highest xG across the season
The Routine Design Process:
Step 1: Analyze opponent set piece defense across 5-10 recent matches Step 2: Identify structural weaknesses (zones, individual mismatches) Step 3: Design routines that exploit identified weaknesses using available personnel Step 4: Simulate routine outcomes using historical data Step 5: Practice routines in training Step 6: Evaluate and iterate based on match outcomes
Real-World Application: At elite clubs, the set piece analyst typically prepares 3-4 corner routines and 2-3 free kick routines for each match, tailored to the specific opponent. These routines are communicated through diagrams, video clips, and training sessions. The best set piece teams vary their routines to prevent opponents from preparing counter-measures, using data to determine the optimal rotation of different approaches.
Personnel-Based Routine Optimization
The most effective set piece routines are designed around the specific strengths and physical attributes of the available players, not around abstract tactical patterns. Data-driven routine design begins by profiling each player's set piece capabilities:
Height and Aerial Win Rate Mapping: Identify which attackers win the highest percentage of aerial duels from set pieces (not open play, as the context is different). Cross-reference this with their heading accuracy—the ability to direct the header on target. A player who wins 70% of their aerial duels but only directs 30% of headers on target is less valuable as a primary target than one who wins 55% but directs 50% on target.
Sprint Speed from Standing Start: Set piece movement involves short, explosive sprints from standing or near-standing positions. Players with the fastest acceleration over 3-5 meters are ideal for near-post runs, where timing and explosive movement matter more than top-end speed. Tracking data provides acceleration profiles that reveal which players can generate the most separation from their markers in the crucial 1-2 seconds after the delivery.
Blocking Effectiveness: Some players are naturally effective at creating legal screens that obstruct defenders' movement. This is difficult to measure from event data but can be assessed through video tagging. Track how often a specific player's screening movement results in their intended target winning the aerial duel uncontested. Elite blockers can increase the target's uncontested header rate by 15-25 percentage points.
Delivery Versatility: Evaluate whether the primary set piece deliverer can vary their technique effectively. A deliverer who can hit inswingers, outswingers, and driven deliveries with equal accuracy provides significantly more tactical flexibility than one who is only accurate with a single technique. Track the accuracy and xG generated by each delivery type for each potential deliverer.
Intuition: Designing set piece routines is analogous to designing plays in basketball or American football: the best plays exploit specific mismatches rather than relying on generic patterns. If the opposing team has a slow center-back marking your fastest attacker at corners, design a routine that isolates that mismatch through screening and movement. If their goalkeeper is hesitant to come for crosses, deliver the ball into the area just in front of the goal where the goalkeeper would normally claim it.
Set Piece Coaching Workflows
A modern set piece coaching workflow integrates data analysis with on-field preparation:
- Data Collection Phase: Gather opponent set piece data from all available sources (event data, video, tracking)
- Analysis Phase: Identify patterns, weaknesses, and tendencies
- Design Phase: Create routines that exploit identified opportunities
- Communication Phase: Present analysis and routines to coaching staff and players
- Training Phase: Practice routines on the training ground
- Execution Phase: Deploy routines in matches
- Review Phase: Evaluate outcomes and update the knowledge base
Best Practice: The most effective set piece coaching workflows maintain a database of all set piece routines used throughout the season, their outcomes, and the opponent's defensive structure at the time. This database enables trend analysis (is a particular routine type becoming less effective as opponents adapt?) and long-term strategic planning.
14.10 Player Specialization and Set Piece Roles
Identifying Set Piece Specialists
Different players serve different roles in set piece situations:
Delivery Specialists: Players with the technical quality to deliver accurate corners and free kicks. Key metrics include pass accuracy from dead-ball situations, ability to vary delivery type, and consistency under pressure.
Aerial Threat Players: Players who win a disproportionate share of aerial duels from set piece deliveries. Key metrics include aerial win rate from set pieces specifically (not just open play), heading accuracy, and movement timing.
Blockers: Players whose primary role is to create space for teammates through legal screening movements. This role is less amenable to statistical analysis but is critical to set piece success.
Near Post Runners: Players who attack the near post with pace and timing. Key metrics include frequency of arriving first to near-post deliveries and contact quality when they do.
Edge-of-Box Shooters: Players who position outside the box during set pieces, ready to shoot from clearances or knockdowns. Key metrics include shot accuracy from outside the box and xG from these situations.
Evaluating Set Piece Contribution
def evaluate_set_piece_contribution(events_df, player_name):
"""Evaluate a player's set piece contribution."""
set_piece_types = ['From Corner', 'From Free Kick', 'From Throw In']
player_sp_events = events_df[
(events_df['player'] == player_name) &
(events_df['play_pattern'].isin(set_piece_types))
]
deliveries = player_sp_events[player_sp_events['type'] == 'Pass']
shots = player_sp_events[player_sp_events['type'] == 'Shot']
goals = shots[shots['shot_outcome'] == 'Goal']
aerials_won = player_sp_events[player_sp_events.get('aerial_won', False) == True]
return {
'deliveries': len(deliveries),
'delivery_success': len(deliveries[deliveries['pass_outcome'].isna()]) / len(deliveries) if len(deliveries) > 0 else 0,
'shots_from_sp': len(shots),
'goals_from_sp': len(goals),
'xg_from_sp': shots['shot_statsbomb_xg'].sum() if len(shots) > 0 else 0,
'aerials_won_at_sp': len(aerials_won)
}
Intuition: Set piece specialization is one of the clearest examples of where individual player evaluation must account for role. A center-back who wins 80% of aerial duels from corners but never delivers a cross should be evaluated on their aerial contribution, not penalized for low delivery numbers. Similarly, a set piece delivery specialist who rarely contests aerial duels should be evaluated on the quality of their deliveries.
14.11 Tactical Pattern Recognition
Machine learning techniques can identify successful set piece patterns.
Clustering Set Piece Routines
Unsupervised learning can group similar set piece routines:
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
def cluster_corner_routines(corner_data):
"""Cluster corner kick routines by pattern."""
features = []
for _, corner in corner_data.iterrows():
delivery = classify_corner_delivery(corner)
feature_row = {
'end_x': delivery['end_location'][0] if delivery['end_location'] else 0,
'end_y': delivery['end_location'][1] if delivery['end_location'] else 0,
'is_inswinger': 1 if delivery['trajectory'] == 'inswinger' else 0,
'is_outswinger': 1 if delivery['trajectory'] == 'outswinger' else 0,
'is_short': 1 if delivery['target_zone'] == 'short' else 0,
'pass_length': corner.get('pass_length', 30)
}
features.append(feature_row)
X = pd.DataFrame(features)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
n_clusters = 5
kmeans = KMeans(n_clusters=n_clusters, random_state=42, n_init=10)
corner_data['cluster'] = kmeans.fit_predict(X_scaled)
cluster_analysis = corner_data.groupby('cluster').agg({
'shot_outcome': lambda x: (x == 'Goal').sum() / len(x) if len(x) > 0 else 0
})
return corner_data, cluster_analysis
Opponent Analysis
Systematic opponent set piece analysis enables tactical preparation:
def analyze_opponent_set_pieces(opponent_events, set_piece_type='corner'):
"""Analyze opponent set piece patterns."""
if set_piece_type == 'corner':
set_pieces = opponent_events[
(opponent_events['type'] == 'Pass') &
(opponent_events['play_pattern'] == 'From Corner')
]
elif set_piece_type == 'free_kick':
set_pieces = opponent_events[
(opponent_events['play_pattern'].str.contains('Free Kick', na=False))
]
else:
set_pieces = opponent_events
analysis = {
'total_count': len(set_pieces),
'delivery_types': {},
'target_zones': {},
'key_players': {},
'outcomes': {'goals': 0, 'shots': 0, 'chances': 0}
}
for _, sp in set_pieces.iterrows():
if set_piece_type == 'corner':
classification = classify_corner_delivery(sp)
delivery = classification['trajectory']
zone = classification['target_zone']
analysis['delivery_types'][delivery] = analysis['delivery_types'].get(delivery, 0) + 1
analysis['target_zones'][zone] = analysis['target_zones'].get(zone, 0) + 1
player = sp.get('player', 'Unknown')
analysis['key_players'][player] = analysis['key_players'].get(player, 0) + 1
total = analysis['total_count']
if total > 0:
analysis['delivery_distribution'] = {k: v / total for k, v in analysis['delivery_types'].items()}
analysis['zone_distribution'] = {k: v / total for k, v in analysis['target_zones'].items()}
return analysis
14.12 Building Set Piece Reports
Comprehensive set piece reports combine multiple analyses for tactical decision-making.
Report Components
An effective set piece report includes:
- Overview Statistics: Volume, conversion rates, xG from set pieces
- Attacking Analysis: Pattern breakdown, key players, delivery effectiveness by type
- Defensive Analysis: Concession rates, vulnerability patterns, marking effectiveness
- Opponent Scouting: Opposition tendencies, weaknesses, and key personnel
- Recommendations: Specific tactical suggestions based on data analysis
def generate_set_piece_report(team_events, opponent_events=None):
"""Generate comprehensive set piece analysis report."""
report = {
'overview': {},
'attacking': {},
'defending': {},
'recommendations': []
}
corners = team_events[team_events['play_pattern'] == 'From Corner']
free_kicks = team_events[team_events['play_pattern'].str.contains('Free Kick', na=False)]
penalties = team_events[team_events['shot_type'].fillna('').str.contains('Penalty')]
report['overview'] = {
'corners_taken': len(corners[corners['type'] == 'Pass']),
'free_kicks_taken': len(free_kicks[free_kicks['type'] == 'Pass']),
'penalties_taken': len(penalties),
'set_piece_goals': len(team_events[
(team_events['shot_outcome'] == 'Goal') &
(team_events['play_pattern'].isin(['From Corner', 'From Free Kick']))
])
}
corner_analysis = analyze_corner_patterns(corners)
report['attacking']['corners'] = corner_analysis
goals_conceded_from_sp = len(team_events[
(team_events['shot_outcome'] == 'Goal') &
(team_events['team'] != team_events['team'].iloc[0]) &
(team_events['play_pattern'].isin(['From Corner', 'From Free Kick']))
])
report['defending']['goals_conceded'] = goals_conceded_from_sp
if corner_analysis.get('success_rate', 0) < 0.02:
report['recommendations'].append(
"Consider varying corner delivery patterns - current conversion below league average"
)
return report
def analyze_corner_patterns(corner_events):
"""Analyze corner kick patterns."""
if len(corner_events) == 0:
return {'note': 'No corner data'}
patterns = {}
for _, corner in corner_events.iterrows():
classification = classify_corner_delivery(corner)
key = f"{classification['trajectory']}_{classification['target_zone']}"
patterns[key] = patterns.get(key, 0) + 1
return {
'total': len(corner_events),
'patterns': patterns,
'most_common': max(patterns, key=patterns.get) if patterns else None
}
Real-World Application: Professional set piece reports at elite clubs typically include video clips alongside data analysis. The analyst will prepare a slide deck or interactive dashboard showing opponent corner tendencies (with video examples), free kick patterns (with spatial visualizations), and recommended attacking routines (with annotated diagrams). The best reports make it easy for players and coaches to absorb the key information quickly during team meetings.
14.13 Advanced Topics
Tracking Data Applications
When tracking data is available, set piece analysis reaches new depths:
Pre-delivery Positioning: Analyzing where all players start before delivery, including blocking positions and runner starting points Movement Patterns: Tracking the speed, direction, and timing of attacking runs to identify optimal movement sequences Defensive Shape: Measuring compactness, zonal coverage gaps, and individual marker positioning Space Creation: Quantifying the space generated by screening movements and decoy runs Goalkeeper Movement: Tracking the goalkeeper's starting position and movement during the delivery
Machine Learning for Set Piece Prediction
Advanced models can predict set piece outcomes:
def build_set_piece_outcome_predictor(historical_data):
"""Build model to predict set piece outcomes."""
from sklearn.ensemble import RandomForestClassifier
features = engineer_set_piece_features(historical_data)
# Target: multi-class outcome
# 0: No shot, 1: Shot off target, 2: Shot on target, 3: Goal
outcomes = historical_data['outcome_class']
model = RandomForestClassifier(
n_estimators=200, max_depth=8,
min_samples_leaf=20, random_state=42
)
model.fit(features, outcomes)
return model
Real-Time Set Piece Analysis
Modern applications include real-time analysis during matches:
- Live pattern recognition: Identifying opponent tendencies mid-match and communicating adjustments
- Tactical adjustments: Suggesting defensive tweaks based on observed patterns during the first half
- Substitution implications: Understanding how personnel changes affect set piece effectiveness for both teams
- In-game communication: Relaying analysis to the coaching staff via tablets or communication systems
Advanced: Some clubs now use computer vision systems that automatically detect set piece situations from live match footage and provide real-time analysis of the opponent's defensive structure. These systems can identify which zones are undermanned, which markers are out of position, and which routine types are most likely to succeed—all within seconds of the set piece being awarded.
Summary
This chapter has explored the analytical frameworks for understanding set pieces in soccer. Key concepts include:
-
Strategic Value: Set pieces contribute 25-35% of goals, representing significant tactical opportunity that becomes even more impactful in tight matches and tournament football
-
Corner Analysis: Delivery classification (inswinger, outswinger, driven, short), target zones (near post, central, far post), first contact analysis, and xG modeling reveal pattern effectiveness and inform routine design
-
Free Kick Analysis: Distinguishing direct shooting opportunities from indirect delivery situations, with wall positioning and technique analysis for direct free kicks and delivery pattern classification for indirect free kicks
-
Penalty Analysis: Game-theoretic approaches to understanding the taker-goalkeeper interaction, placement analysis, and historical conversion rates provide frameworks for both taker preparation and goalkeeper scouting
-
Throw-in Value: Recognition of throw-ins as underutilized tactical opportunities, particularly long throws which can generate corner-kick-like xG values
-
Goal Kick Strategy: The evolution from routine clearances to strategic build-up opportunities, with data-driven decisions about short vs. long distribution
-
Defensive Analysis: Systematic evaluation of defensive structures (zonal, man-marking, hybrid), vulnerability identification, and second-ball reaction analysis
-
Set Piece xG: Building dedicated models for more accurate set piece evaluation, recognizing that open-play models may not transfer well to set piece contexts
-
Routine Design: Data-driven approaches to designing and iterating set piece routines, incorporating opponent analysis, player strengths, and historical pattern effectiveness
-
Player Specialization: Evaluating individual set piece contributions by role (deliverer, aerial threat, blocker, edge-of-box shooter) rather than generic metrics
-
Pattern Recognition: Using machine learning to identify, classify, and predict set piece outcomes
-
Tactical Reporting: Combining analyses into actionable tactical intelligence for coaching staff and players
The tools and frameworks presented enable both retrospective analysis and prospective tactical preparation, making set pieces one of the most analytically tractable areas of soccer performance.
Key Equations and Formulas
Corner xG Calculation: $$xG_{corner} = \sum_{i} P(shot_i) \times xG(shot_i | location, type)$$
Direct Free Kick xG: $$xG_{FK} = f(distance, angle, centrality) \times (0.5 + 0.5 \times centrality)$$
Penalty Expected Value: $$E[Goal] = \sum_{s} \sum_{d} P(shot=s) \times P(dive=d) \times P(goal|s,d)$$
Set Piece Conversion Rate: $$CR_{SP} = \frac{Goals_{SP}}{Opportunities_{SP}}$$
Possession Retention Rate: $$Retention = \frac{Successful_{SP}}{Total_{SP}}$$
Set Piece xG Added: $$xGA_{SP} = xG_{SP, team} - xG_{SP, league\_avg}$$
Looking Ahead
The next chapter explores Player Performance Metrics, where we'll develop comprehensive frameworks for evaluating individual player contributions. We'll examine how to combine multiple metrics into holistic player profiles and apply these frameworks to player comparison and recruitment decisions.
References and Further Reading
- StatsBomb - "The Science of Set Pieces"
- Analysis of set piece patterns in elite football
- Game theory applications to penalty kicks (Palacios-Huerta, 2003)
- Tracking data applications for set piece analysis
- Machine learning approaches to sports pattern recognition
- The role of the set piece coach in modern football