Downloads · 30 days
0
silly-kicks/xcross-attempt-v1
xcross-attempt-v1 is a tabular classification model from silly-kicks. Use it for the tabular classification 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.
Read this first. This repo serves the scextended (owner-tier) variant. It is NOT bundled with the silly-kicks wheel because it is trained on restricted owner-tier data that cannot be redistributed inside a PyPI packag…
Downloads · 30 days
0
Access
Public
Updated Oct 18, 2026
Repo size
—
Likes
0
Public
Click a slice to open those files.
.json1.1 MB · 99%
From the Hugging Face model README
sc_extended) — Cross-Attempt Propensity from Tracking StateRead this first. This repo serves the
sc_extended(owner-tier) variant. It is NOT bundled with thesilly-kickswheel because it is trained on restricted owner-tier data that cannot be redistributed inside a PyPI package — a licensing constraint. Only the learned parameters are published here. If you do not have owner-tier access, use the bundleddefaultvariant instead — see Which variant should I use?.
XCrossAttemptModel is a deterministic-XGBoost classifier estimating P(the in-possession team
attempts a cross within ~1 s of a tracking frame) — a STATE-anchored framing, reframed
from the sender-level event treatment in Cao et al. (arXiv:2505.11841).
It carries 7 of the paper's 8 confounders (crosser-position, #7, is omitted — no faithful tracking-only proxy) plus a novel, isolatable GK-position confounder block, which is the paper's headline gap and the reason this model exists inside the GKDV research arc (TF-17 → TF-19).
faithful (velocity-bearing), goal-relative coordinates via the shared _geometry helpersc_extended model is fit on the owner-tier corpus (IDSSE + SkillCorner incl. owner-tier);
base rate 5.0% positive.| Variant | Corpus | Where it lives | Use it? |
|---|---|---|---|
default (public) | 17 matches — SkillCorner + IDSSE, redistributable | bundled in the wheel | Default choice — offline, fully reproducible, no restricted data |
sc_extended | IDSSE + SkillCorner incl. 98 owner-tier SkillCorner matches | this repo (HF-only) | Yes, if you have owner-tier access and can accept a Hub download + the corpus caveats below |
sc_extended_position_only | same owner-tier corpus, velocity features dropped (15-feature) | separate repo silly-kicks/xcross-attempt-position-only-v1 (HF-only) | Yes, if scoring velocity-less frames (StatsBomb-360 freeze frames) with owner-tier access — a stronger position-only model than the bundled position_only. Reachable ONLY via from_variant("sc_extended_position_only"); asking for sc_extended still returns this faithful model (ADR-070). |
sc_extended is HF-only for licensing, not quality: it is trained on restricted owner-tier
SkillCorner data that cannot be redistributed inside the PyPI wheel (ADR-038). Only learned
parameters are published here — no raw provider tracking data (only split thresholds, feature indices and leaf values are stored — no per-sample training data).
The Hub sc_extended repo is the owner-tier archive: it holds the owner-tier model independent of
the wheel-bundle selection gate, which decides only what ships in the wheel (ADR-071). This artifact
was produced with that operator override (--ship-variant sc_extended); the gate's verdict and
per-fold deltas are recorded in metrics.json (candidates.paired). training_commit: 4095251.
| Metric | Value | Baseline |
|---|---|---|
| PR-AUC | 0.1896 (± 0.0105) | base rate 0.0500 |
| Brier | 0.0436 | base-rate Brier 0.0475 |
| Log loss | 0.1655 | — |
All four acceptance gates pass (enough_usable_folds, pr_auc_gt_base_rate,
brier_lt_base_rate_brier, log_loss_lt_uniform). Estimates are CV, not the shipped fit.
The frozen GK-substitution probe (gk_substitution_probe in metrics.json; 200 frames; ADR-037's
two-prong gate — ratio ≥ 2.0 × the nearest-defender control and an absolute floor ≥ 0.01):
| Metric | Value |
|---|---|
gk_median_abs_delta | 0.00625 |
nearest_def_median_abs_delta | 0.00329 |
| ratio (gk / control) | 1.90× — misses (needs ≥ 2.0) |
| absolute floor | 0.00625 < 0.01 — misses |
tf19_ready | false |
The GK-block ablation shows the GK confounder block does carry signal (removing it drops held-out
PR-AUC by 0.0089), but the substitution probe does not clear the frozen gate. Per ADR-037 this is a
gated_clean_fail — TF-19 routes to GK feature engineering, explicitly not "no signal." Do not
build a TF-19 consumer on this surface. (The position-only sibling — xcross-attempt-position-only-v1 —
does clear the gate; see its card.)
from silly_kicks.tracking import XCrossAttemptModel
model = XCrossAttemptModel.from_variant("default") # recommended, bundled, offline
model = XCrossAttemptModel.from_variant("sc_extended") # this repo, downloads from the Hub
Requires pip install silly-kicks[xcross] and silly-kicks >= 4.74.0 (the
sc_extended_position_only sibling repo requires >= 4.94.0, which introduced its variant key —
ADR-070).
The
>= 4.74.0floor is a hard requirement. These weights are on the corrected goal-relative transform (geometry_version: goal-relative-2); ADR-051 found the previous transform was chiral (an x-only mirror at one goal end, identity at the other), so one physical scene scored differently depending which end the attacking team attacked.load()'s feature-contract prong is fail-closed, so an older silly-kicks refuses these weights withIntegrityError.from_hub()takes norevisionargument yet, so treat the library version as the pin; prior revisions are addressable by commit SHA.
load() is fail-closed on two independent checks: (1) SHA256SUMS verified before anything is
parsed; (2) chirality fingerprint (ADR-040) — the model re-runs its own outputs on a fixed
y-asymmetric probe frame and compares to the recorded fingerprint, raising on a mismatch and on a
missing one. A base_score guard handles the xgboost 3.x bracketed-string serialization that 2.x
silently drops to 0.5.
tf19_ready = false (see the TF-19 section) — do not build a TF-19 consumer on this surface.See the NOTICE file in the silly-kicks repository for full bibliographic citations.
| File | Purpose |
|---|---|
model.json | XGBoost booster (pickle-free) |
metadata.json | features, hyperparameters, chirality fingerprint, provenance |
metrics.json | CV metrics, GK-substitution probe, ablation, permutation importance |
SHA256SUMS | integrity manifest, verified by load() |
https://github.com/karsten-s-nielsen/silly-kicks
In silly-kicks 4.134.0 the wheel's bundled default was re-fit on the corrected floor velocities (TF-65 / ADR-120, training_commit=a34e992). This Hub owner-tier sc_extended artifact is re-fit on the same corrected floor velocities this cycle (silly-kicks 4.138.0): predictions change within noise from the prior velocity-stale artifact (PR-AUC 0.189). No label defect — xCross was always type_id-filtered. The re-fit artifact is pushed by the ADR-088 model-publish step.