Downloads · 30 days
0
silly-kicks/ghost-gk-sweeper-position-only-v1
ghost-gk-sweeper-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 companion to silly-kicks/ghost-gk-sweeper-v1: the same extended-grid (xmax = 52.5 m) high-sweeper model, but with the 5 velocity features dropped (21 features instead of 26) so it scores on StatsBomb…
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 · 99%
From the Hugging Face model README
The velocity-less companion to
silly-kicks/ghost-gk-sweeper-v1: the same
extended-grid (x_max = 52.5 m) high-sweeper model, but with the 5 velocity features dropped (21
features instead of 26) so it scores on StatsBomb-360 freeze-frames, which carry no per-player
temporal history.
Part of the silly-kicks soccer analytics library (TF-60 rest-defense; ADR-067 velocity-keyed variants; ADR-083).
The bundled Ghost-GK variants train on a fixed x ∈ [0, 30] m goal-relative box and
hard-saturate at 30 m, so they cannot place an in-possession high sweeper (30–45 m). This
sweeper_position_only variant lifts the ceiling to x_max = 52.5 m AND drops the velocity features
so the model is valid on velocity-less freeze-frames (velocity features are dropped, not NaN-filled
— the feature contract raises on a non-finite input rather than imputing). It is auto-selected at
the serve seam for a sweeper request on declared velocity-less frames.
The frozen default/position_only/full variants are unchanged — additive; opt in via
from_variant("sweeper") (which resolves to this variant on velocity-less frames).
ghost_gk_x/y, exact pickle-free boosted HGBR mean); predict_density is
not supported on the extended grid and raises (ADR-083).ball_vx, ball_vy, ball_speed,
defensive_line_speed, defending_centroid_vx — are dropped, not imputed).HistGradientBoostingRegressor, 500 trees, max depth 8, 5-fold CV.| Metric | Value |
|---|---|
| Held-out CV euclidean MAE | 1.156 m (per-provider: Gradient Sports 1.086 / SkillCorner 1.216 / Sportec 1.721) |
| Boosted-reconstruction parity vs sklearn | 1.78e-13 (exact) |
| > 30 m high-sweeper stratum MAE | ~1.96 m |
| Training corpus | 179 games / 1048834 frames |
> 30 m coverage is IDSSE/Sportec-dominated (11.5 %); SkillCorner 0.24 %; Gradient Sports 0.0 %
(see the data caveat).
Both-axes goal-relative re-fit (silly-kicks 4.111.0 / ADR-089;
training_commit=4bda048). These weights were re-fit after the ghost-GK feature extractor was corrected to apply the full 180° goal-relative point reflection (both axes) — the previous convention flipped only x, leaving the signed-y features (the velocity-less variant keepsball_y,ball_to_goal_angle,attacker_centroid_y) and the targetgk_yin absolute frame coordinates, mislocating away-team keepers in y. The servedghost_gk_x/ychange (chiefly for away-team keepers) and the feature-contract + chirality fingerprints change, so pre-4.111.0 artifacts fail closed on load. The aggregate MAE is essentially unchanged (the correction affects the away-team subset).
Same 179-match licensed corpus as the faithful sweeper (Sportec/DFL, SkillCorner, Gradient Sports WC2022); parameters-only, no raw tracking data redistributed; clean CI-green training commit.
⚠ Gradient Sports goalkeeper clamp. Gradient Sports clamps the goalkeeper's tracked position to a hard 27.5 m from goal (source-data limitation, verified on the raw provider data). GS contributes no high-sweeper signal and any GS goalkeeper-depth analysis is invalid past 27.5 m; silly-kicks flags it via
validate_gk_position_clamp/GoalkeeperClampWarning. Seedocs/research/gs_keeper_clamp/.
import silly_kicks.tracking as tracking
# from_variant("sweeper") auto-selects THIS variant on declared velocity-less (freeze-frame) input.
model = tracking.GhostGkModel.from_variant("sweeper_position_only")
out = tracking.compute_ghost_gk(frames, model=model, home_team_id=1) # ghost_gk_x / ghost_gk_y
Input frames must be LTR-normalized; coordinates are goal-relative. predict_density raises on the
extended grid — use the mean/serve path.
ghost-gk-sweeper-v1 on
velocity-bearing continuous tracking.Le et al. 2017 (MIT Sloan); Dutta et al. 2024 (arXiv:2406.17220); Pospisil & Lee 2018
(arXiv:1804.05753). See the silly-kicks NOTICE for full citations.
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.