| Group | Subtypes | Tactical Role |
|---|---|---|
| Cross Receiver (reference) | cross_receiver | Runs into the penalty area to receive crosses; highest positional threat |
| Penetrative Runs | overlap, underlap, behind | Forward runs past the ball carrier or behind the last defensive line |
| Progressive Support | support, run_ahead_of_the_ball | Forward runs that stop short of breaking the defensive line |
| Width Creation | pulling_wide, pulling_half_space | Lateral runs to stretch width without forward penetration |
| Support to Receive | dropping_off, coming_short | Short or backward runs toward ball to support ball retention |
Off-Ball Model Write Up
Introduction
Off-ball runs in soccer are one of the lesser analyzed areas of soccer analytics. And yet, the majority of a player’s time in a match is spent without the ball. Off-ball runs help shape a team’s offensive structure, create passing lanes, and generate threat even when the ball never arrives to the runner.
Traditional statistics offer no way to quantify this contribution. A forward who makes intelligent runs behind the defense in a match, passing defenders and opening themselves up for a potential shot, receives no credit in the box score if the ball never reaches them. This is a fundamental gap in how we evaluate attacking players.
SkillCorner’s Dynamic Events data set changes this. Using broadcast video and computer vision, SkillCorner detects and classifies off-ball runs in real time, assigning each run an xThreat value — the probability that a goal occurs within 10 seconds if the runner was served a pass at the moment of their run. This value is computed even for runs where the ball was never played to the runner, capturing the positional threat of the movement itself.
Our research question: What characteristics of an off-ball run are associated with higher xThreat values?
We examine how run type, movement speed, space creation, and game context relate to the threat generated by off-ball runs across the 2023 MLS regular season. We then apply our model to develop player and team-level metrics that help us identify which teams/players are exceeding what we would expect their threat to be based on our model.
Data
Our data set comes from SkillCorner and contains match, event, and tracking data from the 2023 MLS regular season. SkillCorner uses artificial intelligence and computer vision applied to broadcast video to detect and classify player and ball movements. The Dynamic Events CSV files include three event types:
Player Possession: periods when a player is in control of the ball and can potentially pass, shoot, or carry
Off-Ball Run: Run lasts ≥0.7s, speed >4.2 m/s (15 km/h), player is visible ≥0.5s during the run, and the player is a passing option during the run or within 8 frames after it ends (or receives a pass during/after the run). The 8-frame window accounts for runs made in anticipation of a later passing opportunity
Passing Option: moments when a player is a highly likely target for a pass from a player in possession
For a player to be recorded as performing an Off-Ball Run, they need to have been a Passing Option at one point during his Off-Ball Run, so our analysis focuses exclusively on Off-Ball Run events.
We replaced the 0.7% of off-ball runs with exactly zero xThreat with a small positive value (0.001) to satisfy the strict (0,1) requirement of beta regression, rather than dropping them outright. We dropped the 2% of runs missing speed_avg, which the SkillCorner documentation attributes to players being off-camera during their run.
Run Type Classification
SkillCorner’s data classifies off-ball runs into 10 types. We condensed these down to 5 in order to better balance the distributions between the runs.
We set cross receiver as the reference level because this run type places runners in the highest-threat positions.
Spatial Coordinate Transformation
Per the SkillCorner specification, all coordinates assume the team in possession attacks from left to right, placing the attacking goal at approximately (54.5, 0). We verified this and confirmed no manual coordinate flipping is required. We transformed raw coordinates to goal-relative measures:
\[\mathrm{x\_to\_goal} = 54.5 - \mathrm{x\_end}\]
\[\mathrm{y\_to\_goal} = |\mathrm{y\_end}|\]
where \(\mathrm{x\_to\_goal} = 0\) represents an off-ball run ending at the goal line and larger values indicate runs ending further from goal, and \(\mathrm{y\_to\_goal} = 0\) represents a central position with larger values indicating wider positions from goal.
Exploratory Data Analysis
The distribution of xThreat is heavily right-skewed, with the vast majority of off-ball runs having values close to zero. This indicates that most runs generate relatively little immediate scoring threat, while only a small proportion of runs place attackers in highly dangerous positions. The bounded, skewed nature of the response further motivates the use of beta regression.
Run frequencies were uneven across the original ten SkillCorner categories, motivating consolidation into five broader groups for better sample sizes for modeling. While not perfectly adjusted, these sample sizes are more sufficient than the original 10.
These exploratory plots suggest that several continuous predictors exhibit nonlinear relationships with xThreat, motivating the use of smooth functions in the GAM rather than assuming strictly linear effects.
Methods
We use beta regression as our main model. Beta regression is appropriate here for three reasons. First, xThreat is bounded strictly between 0 and 1. Second, the beta family naturally handles the skewdness present in xThreat without requiring transformation. Third, the logit link function ensures all predicted values remain within the unit interval.
We compare three model families:
Beta regression with linear predictors (M1–M4 as a progression)
Log-linear GLM on \(log(xThreat)\) as an alternative
Beta GAM with smooth terms for continuous predictors
Model Specifics
We fit four beta regression models to assess the marginal contribution of each predictor group.
- M1: Spatial Baseline
\[\mathrm{xThreat} = \beta_0 + \beta_1(\mathrm{x\_to\_goal}) + \beta_2(\mathrm{y\_to\_goal})\]
- M2: Baseline + Run Characteristics
\[{\mathrm{xThreat}}= \beta_0 + \beta_1({\mathrm{x\_to\_goal}})+ \beta_2({\mathrm{y\_to\_goal}})+ \beta_3(\mathrm{run\_type})+\beta_4(\mathrm{speed\_average})\]
- M3: Baseline + Run Characteristics + Space Creation
\[{\mathrm{xThreat}}=\beta_0 + \beta_1({\mathrm{x\_to\_goal}})+ \beta_2({\mathrm{y\_to\_goal}})+ \beta_3(\mathrm{run\_type})+\beta_4(\mathrm{speed\_average})+\beta_5(\mathrm{distance\_to\_player\_in\_possession})+ \beta_6(\mathrm{separation\_gain})+ \beta_7(\mathrm{distance\_to\_defensive\_line\_gain})+ \beta_8(\mathrm{location\_to\_player\_in\_possession})\]
- M4: Baseline + Run Characteristics + Space Creation + Game Context
\[{\mathrm{xThreat}}= \beta_0 + \beta_1({\mathrm{x\_to\_goal}})+ \beta_2({\mathrm{y\_to\_goal}})+ \beta_3(\mathrm{run\_type})+\beta_4(\mathrm{speed\_average})+ \beta_5(\mathrm{distance\_to\_player\_in\_possession})+ \beta_6(\mathrm{separation\_gain})+\beta_7(\mathrm{distance\_to\_defensive\_line\_gain})+ \beta_8(\mathrm{location\_to\_player\_in\_possession})+\beta_9(\mathrm{num\_simultaneous\_offball\_runs})+\beta_{10}(\mathrm{game\_state})\]
Our final model, GAM Beta Regression (M6), replaces the linear terms for all continuous predictors in M4 with smooth functions.
\[{\mathrm{xThreat}}=s({\mathrm{x\_to\_goal}})+s({\mathrm{y\_to\_goal}})+\mathrm{run\_type}+s(\mathrm{speed\_average})+s(\mathrm{distance\_to\_player\_in\_possession})+s(\mathrm{separation\_gain})+s(\mathrm{distance\_to\_defensive\_line\_gain})+\mathrm{location\_to\_player\_in\_possession}+\mathrm{num\_simultaneous\_offball\_runs}+\mathrm{game\_state}\]
Evaluation
We evaluate all models using 5-fold cross-validation with match-level folds — entire matches are assigned to a single fold, ensuring no runs from the same match appear in both training and test sets. This prevents data leakage since runs within the same match share a common defensive opponent, game context, etc. We report cross-validated root mean squared error (RMSE) and mean absolute error (MAE).
| Cross-Validation Model Comparison | ||||
| Model | CV RMSE | SE RMSE | CV MAE | SE MAE |
|---|---|---|---|---|
| Spatial Baseline | 0.0406 | 0.0004 | 0.0210 | 0.0001 |
| Running Characteristics | 0.0394 | 0.0004 | 0.0197 | 0.0001 |
| Space Creation | 0.0376 | 0.0004 | 0.0188 | 0.0001 |
| Game Context GLM | 0.0375 | 0.0004 | 0.0187 | 0.0001 |
| Log-Linear | 0.0382 | 0.0004 | 0.0167 | 0.0002 |
| Game Context GAM | 0.0368 | 0.0004 | 0.0185 | 0.0001 |
The Beta GAM (M6) achieves the lowest cross-validated RMSE and MAE across all five folds, outperforming both the full linear beta regression (M4) and the log-linear GLM (M5). Within the beta regression progression, each additional predictor group reduces RMSE, with the largest single gain occurring from M1 to M2 when run type and speed are added — confirming that run characteristics explain substantial variance beyond spatial location alone.
Smooth Terms
All smooth terms are highly significant (p < 0.05), and we see that the relationship between x and y distances to goal and xThreat seem quite linear. The further from goal on the x axis, the lower associated threat, and the wider from goal on y axis, the lower associated threat as well. Speed shows an inverted-U pattern, with very slow and very fast runs associated with lower xThreat than runs at moderate high speed. Separation gain shows a positive relationship that plateaus at high values, suggesting diminishing returns to creating additional separation once a runner has already achieved significant space.
| Parametric Coefficients: Beta GAM | ||||
| Predictor | Estimate | Exp(Estimate) | Odds Interpretation | p-value |
|---|---|---|---|---|
| (Intercept) | −3.293 | 0.037 | 96.3% decrease | 0.000 |
| run_typesupport_to_receive | −1.058 | 0.347 | 65.3% decrease | 0.000 |
| run_typewidth_creation | −0.661 | 0.516 | 48.4% decrease | 0.000 |
| run_typeprogressive_support | −0.388 | 0.678 | 32.2% decrease | 0.000 |
| run_typepenetrative_runs | −0.238 | 0.788 | 21.2% decrease | 0.000 |
| location_to_player_in_possession_startbehind | −0.063 | 0.939 | 6.1% decrease | 0.000 |
| location_to_player_in_possession_startsame_line | 0.040 | 1.041 | +4.1% increase | 0.000 |
| n_simultaneous_runs1 | 0.083 | 1.086 | +8.6% increase | 0.000 |
| n_simultaneous_runs2 | 0.095 | 1.100 | +10% increase | 0.000 |
| n_simultaneous_runs3 | 0.092 | 1.097 | +9.7% increase | 0.000 |
| n_simultaneous_runs4 | 0.080 | 1.083 | +8.3% increase | 0.000 |
| n_simultaneous_runs5+ | 0.118 | 1.125 | +12.5% increase | 0.027 |
| game_statelosing | 0.061 | 1.063 | +6.3% increase | 0.000 |
| game_statewinning | 0.153 | 1.165 | +16.5% increase | 0.000 |
All run type coefficients are negative relative to the cross receiver reference, indicating that cross receiver runs generate the highest xThreat at any given pitch location. Penetrative runs (overlap, underlap, behind) show the smallest negative coefficient, suggesting they generate threat closest to cross receiver runs. Support to receive runs, which move players backward or toward the ball, show the largest negative coefficient — consistent with their possession-maintenance rather than threat-creation function.
Player and Team Metrics
Our model predicts xThreat based on contextual factors. The residual — actual xThreat minus model-predicted xThreat — captures how much threat a run generated above or below model expectations, which we term xThreat Over Expected (xTOE). Players and teams with consistently positive xTOE generate more threat than their situations would predict, indicating a genuine quality contribution to off-ball movement beyond the predictors in our model.
These are the players with the highest xThreat Over Expected. It’s encouraging that several are well-known attacking players, but not every player on this list was a top goal scorer. This tells us the players who created dangerous opportunities through their movement, even if those runs don’t always end in goals.
The Columbus Crew had the most off-ball runs, yet their xThreat Over Expected was slightly below average. Because they were one of the league’s best teams this season, this suggests there are important tactical or contextual factors that our model doesn’t yet capture, which motivates our ideas for future improvements.
Conclusion
In conclusion, we found that the threat generated by an off-ball run depends on much more than simply where it ends on the field. While proximity to goal remains the strongest predictor of xThreat, characteristics such as run type, speed, separation from defenders, and movement relative to the defensive line all contribute to creating dangerous attacking opportunities.
Among the models we considered, the beta GAM performed best, showing that many of these relationships are nonlinear.
Finally, by comparing observed xThreat to our model’s predictions, and utilizing xThreat Over Expected, a metric that identifies players and teams whose off-ball movement creates more threat than expected given the context of their runs, allows teams and coaches to identify players/teams who are creating the most threat on average.
Limitations
Our analysis uses only 2023 MLS data, limiting generalizability to leagues with different tactical styles, player quality, etc. xThreat is itself a model output from SkillCorner’s machine learning pipeline — we are modeling a model’s estimates rather than a direct outcome. Off-ball runs within the same possession share contextual features, and while match-level cross-validation addresses data leakage, our coefficient estimates do not fully account for within-possession correlation.
Future Work
Potential future work could insist of incorporating tracking data, modeling a mixed effects model to account for team/player variations, and including more explanatory variables. Further ideas we have are building off this project with a prediction analysis, possibly answering the question of identifying which off-ball runs are “missed opportunities”.
Acknowledgement
Special thanks to Ron Yurko, Quang Nguyen, Sara Colando, Erin Franke, and our external advisor Daniel Wicker.