ATHLIXAI
SCENARIO SIM
Back to methodology
ATHLIX::BACKTEST

Does the collapse heuristic actually work?

The honest test of a hand-tuned heuristic is whether it separates real outcomes. We run the engine’s collapse signal over 4,273 historical qualifying player-seasons (1996-97 – 2022-23) and check whether it predicted a real scoring decline in the next 3 seasons. The numbers below are reported as they fall — flattering or not.

Precision @30
25.0%
Recall @30
41.4%
F1
31.2%
Base rate
13.5%

Confusion matrix · threshold 30

True positives
239
False positives
716
False negatives
338
True negatives
2,980

Precision / recall trade-off across thresholds

collapseProb ≥PrecisionRecallF1
2020.1%56.8%29.7%
2522.8%48.2%30.9%
3025.0%41.4%31.2%
3531.2%19.4%23.9%
4032.9%8.7%13.7%
4531.4%4.7%8.1%

Precision beats the 13.5% base rate at every threshold — so the signal is real, not noise (roughly a 1.9× lift at threshold 30). But it is a modest edge, and it does not clearly beat a trivial “flag everyone over 31” rule (precision 27.2%, recall 30.7%). That is the honest ceiling of hand-tuned weights fed a games-played injury proxy.

What this is and isn’t

  • Injury is proxied from games played (clamp(round((1 - gp/72) * 100), 0, 100)) because the stats snapshot has no injury data. Contract and salary inputs are held neutral. So this tests the age + availability mechanism, not the full heuristic.
  • “Decline” is scoring-only: best points over the next 3 seasons falling below 70.0% of the current season (rotation players only: ≥40 GP, ≥8 PPG). It is a proxy for career/earnings collapse, not the thing itself.
  • Only seasons through 2019-20 are scored, so every sample has a full 3-season future to observe within the snapshot.
  • A truly learned model would fit weights on labeled injury + contract + earnings data and report a calibrated interval — this backtest is the measurement that would tell you whether that is worth doing. On this evidence: the heuristic has real but small lift.
Source: Kaggle NBA Players (all_seasons.csv) · snapshot 2026-07-17 · static, not live