Downloads · 30 days
0
silly-kicks/ghost-outfield-position-only-v1
ghost-outfield-position-only-v1 is a tabular regression model from silly-kicks. Use it for the tabular regression task on the model card, and read the license before you ship it in a product. It is set up for silly-kicks. The card lists the license as mit.
The velocity-less variant of Ghost-Outfield v1: predicts a league-average outfield rearguard position per tracking frame, team, and lateral slot, using a 16-feature vector with the 4 velocity features dropped. Built f…
Downloads · 30 days
0
Access
Public
Updated Oct 5, 2026
Repo size
4.7 MB
Likes
0
Public
Click a slice to open those files.
.npz2.3 MB · 100%
From the Hugging Face model README
The velocity-less variant of Ghost-Outfield v1:
predicts a league-average outfield rearguard position per tracking frame, team, and lateral slot,
using a 16-feature vector with the 4 velocity features dropped. Built for StatsBomb-360
freeze-frames, which carry no per-player velocity. Point estimate (ghost_gr_x/y, goal-relative)
served as the exact pickle-free boosted HistGradientBoostingRegressor mean.
Part of the silly-kicks soccer analytics library (TF-60 rest-defense; ADR-087).
StatsBomb-360 freeze-frames have no temporal history, so the 4 situational-velocity features of the
default variant (ball velocity components, ball speed, opponent-forward centroid velocity) cannot be
computed. This variant is trained without them so it is valid on velocity-less input. The serve
seam auto-selects it from the frames' declared velocity availability; if it is not bundled, a
velocity-less frame yields honest-NaN — never the default velocity model, which is invalid
on velocity-less input.
| Variant | Repo | Features | Use |
|---|---|---|---|
default | silly-kicks/ghost-outfield-v1 | 20 (velocity-bearing) | Continuous tracking (Sportec, SkillCorner, Gradient Sports) |
position_only (this repo) | silly-kicks/ghost-outfield-position-only-v1 | 16 (4 velocity features dropped) | Velocity-less StatsBomb-360 freeze-frames |
ghost_gr_x/y serve the exact boosted HGBR mean, reconstructed
pickle-free (baseline + Σ_trees leaf_value; no sklearn at inference). No KDE / density
read-out.team_in_possession feature); no input encodes the modeled
team's own rearguard coordinates (the target).ghost_outfield_source="fov_cropped"), never a fabricated ghost from the deepest-n visible
players.HistGradientBoostingRegressor, 500 trees, max depth 8, 5-fold CV; trained at
1 frame/second.| Metric | Value |
|---|---|
| Held-out CV euclidean MAE | 6.07 m (per-provider: Gradient Sports 6.20 / SkillCorner 5.99 / Sportec 6.39) |
| Per-possession CV MAE | in-possession 7.03 m / out-of-possession 5.10 m |
| Per-slot CV MAE (slots 1–4) | 6.03 / 6.11 / 6.09 / 6.04 m |
| Training corpus | 179 games / 4170920 rows |
| Rearguard coherence (slot ordering) | ordering_fraction = 1.0 |
| Boosted-reconstruction parity vs sklearn | exact (round-trip verified — safe to publish) |
Slightly higher MAE than the default variant, as expected: dropping the velocity features removes
information. Use default on velocity-bearing tracking; use this variant only on velocity-less input.
179 matches / ~4.17M per-(frame, team, slot) rows (at 1 fps) of licensed professional tracking (Sportec/DFL Bundesliga, SkillCorner, Gradient Sports FIFA World Cup 2022). Only the learned parameters are published; no raw provider tracking data is redistributed (parameters-only artifact). Trained from a clean, CI-green commit.
import silly_kicks.tracking as tracking
# Auto-selected on declared velocity-less freeze-frames when model=None; or explicitly:
model = tracking.GhostOutfieldModel.from_variant("position_only")
served = tracking.serve_ghost_outfield_positions(frames, model=model, home_team_id=1)
Input frames must be LTR-normalized (home attacks right). All coordinates are goal-relative to the modeled team's defended goal.
default where velocity is available.Le et al. 2017 (Data-Driven Ghosting, MIT Sloan). Boosted-mean point-estimate variant of the
ghosting concept (no density estimation). See the silly-kicks NOTICE for the full citation.
F1b float32-frame re-fit (silly-kicks 4.128.0 / ADR-106; training_commit=3ca609f). Re-fit on float32-stored frames (the storage rounding exceeds the trained-model feature-contract atol); the metrics table above reflects this re-fit, and the mirror is republished to match the wheel.