Skip to content

Train the NAIL Critical-Spacing Candidate

This controlled candidate starts with production NAIL-RAPM v1.2.1 and adds one non-additive five-man feature, critical_spacing. No player-prior, additive profile, padding, aging, cold-start, or Ridge regularization settings change.

For every seasonal context state, the model finds the lower tercile of shrunk three_pm_per_100 across the profiles available at that point in the recursive history. A unit receives critical_spacing = 1 when at least two players are strictly below that cutoff; otherwise it receives 0. Thus the cutoff is season-specific and forward-safe, while the activation rule is fixed before evaluation.

uv run nba-train-nail-critical-spacing \
  --log-path artifacts/logs/nail-critical-spacing.log

Follow recursive seasonal progress:

tail -f artifacts/logs/nail-critical-spacing.log

After the completed recursive run, replay the three frozen evaluation seasons and run the paired bootstrap against v1.2.1:

uv run nba-evaluate-nail-critical-spacing \
  --log-path artifacts/logs/nail-critical-spacing-frozen.log
uv run nba-bootstrap-nail-critical-spacing

Every candidate requires a published coefficient time series before a promotion decision. Build it after the recursive fit:

uv run nba-audit-nail-critical-spacing-weights