← PROJECTS

IN PROGRESS · 2026 · AGGIE SPORTS ANALYTICS

Quantifying Off-Ball Movement from Player Tracking Data

Almost every soccer statistic describes the player on the ball. This one measures the other ten. Working from broadcast tracking of Germany's 1-2 loss to Japan at the 2022 World Cup, it finds every moment a player breaks into a run without the ball and scores it on the space won and the danger created. A first-pass classifier sorts each run by shape; that part is still being validated.

QUANTIFYING OFF-BALL MOVEMENT FROM PLAYER TRACKING DATA
124runs detected in the pilot match
PythonPlayer TrackingExpected Threat (xT)Soccer Analytics

THE STORY

Run counts are the easy number, and they mislead. Germany out-ran Japan 79 to 45 in a game Germany lost, and Japan's 45 runs were worth more than Germany's 79: 0.51 of expected threat against 0.35. That gap between how much a team runs and how much those runs are worth is the thing I am trying to measure. One match is a pilot, not a finding. The detector is a fixed rule that tests reproduce exactly, the goal times agree with open data to within a second, and no one has checked the runs against match video yet; I'm doing that now. The run-type labels are first-pass geometry I would not defend yet. Next it gets pointed at a teammate's tracking model, and then at UC Davis women's soccer film.

FEATURES

Run Detection

Speed and acceleration rule over PFF FC broadcast tracking at 29.97 Hz

Run Typing

Geometry sorts each run: in-behind, ahead-of-ball, come-short, overlap, underlap

Separation Gained

Distance won on the nearest defender across the run

Threat Delta

Change in expected threat on Karun Singh's xT grid

Reception Check

Which runs actually got the ball: 35 of the 124

Validation

Goal timestamps agree with StatsBomb open data to within a second

LIVE DEMO

Try the live model

DOCUMENTS

CODE

Repo pending · active research with Aggie Sports Analytics