ATHLIXAI
SCENARIO SIM
Back to landing

Methodology

ATHLIX is a scenario simulator, not a predictive model. It maps a small set of user-controlled inputs through fixed, documented formulas to a self-consistent risk readout. It does not forecast real-world outcomes and is not financial advice.

What is real data

  • Player search, bio (team, position, college, country, draft year, physicals) and recent team game results come live from the BALLDONTLIE API, fetched server-side. The API key never reaches the browser.
  • The “Live Feed” card on a player page is real, sourced, and timestamped. If the key is missing or the request fails, the card shows an explicit offline state — numbers are never invented to fill the gap.

What is a modeling assumption

  • All dollar figures (salary, guarantees, endorsements, contract value) are analyst assumptions for the five curated profiles and documented defaults for live-searched players. They are inputs to the simulator, not measured ground truth.
  • The cohort baseline is a synthetic Gaussian earnings curve, not a real population of players. Percentiles are relative to that synthetic curve.
  • The AI analyst (DeepSeek via OpenRouter) generates natural-language commentary grounded in the current scenario context. Its prose is model output, not a data source.

The formulas

Four inputs drive everything: age, injury severity (0–100), contract duration (years), and salary exposure (0–100). Same inputs always produce the same outputs (fully deterministic — no randomness).

ageFactor      = 1 - clamp((age - 22) / 18, 0, 1) * 0.55
injuryFactor   = 1 - (injurySeverity / 100) * 0.78
contractFactor = clamp(duration / 5, 0.25, 1)
exposureFactor = 1 - (salaryExposure / 100) * 0.42

stabilityScore = 100 * (ageFactor * 0.30
                      + injuryFactor * 0.36
                      + contractFactor * 0.18
                      + exposureFactor * 0.16)

collapseProb   = 100 - stabilityScore
                      + (injurySeverity/100) * 25
                      + (age > 31 ? 10 : 0)

Wealth curves are Gaussian earnings arcs peaking near age 27 for the cohort baseline and near age + 3 - injury·3 for the player, with an injury/age decay term after the peak. Risk dials and exposure buckets are further fixed transforms of the same inputs. The exact weights live in lib/scenario-engine.ts.

Projection band (uncertainty)

The wealth chart shades a ±bandaround the projected path rather than drawing a single line. Credible projection tools ship uncertainty, and a bare point estimate is misleading — so the band makes the model’s spread explicit.

horizonFrac = (age - startAge) / (endAge - startAge)
spreadFrac  = clamp(0.06
                  + (injurySeverity/100) * 0.30
                  + horizonFrac * 0.22, 0.06, 0.55)

projectedLow  = projected * (1 - spreadFrac)
projectedHigh = projected * (1 + spreadFrac)

The half-width widens with two things: simulated injury severity (more injury → more variance) and how far out the point is (a fan chart — near-term is tighter than long-range). This is a presentation heuristic over the deterministic path, not a fitted confidence interval from a distribution of outcomes. It communicates “this is a range, not a promise,” without claiming a calibration it doesn’t have.

Heuristic vs. learned model

ATHLIX is a hand-weighted heuristic, not a learned model. Being precise about that gap is the honest framing — here is what the reference public NBA tools actually do and where this simulator sits relative to them.

  • DARKO (Daily Plus-Minus) is a genuine forward projection: an exponential-decay + Kalman-filter model that treats each game as a noisy reading of true skill and blends it by reliability, with age curves built in. It learns from thousands of player-games.
  • EPM (Estimated Plus-Minus) is built on RAPM plus a Bayesian prior from a statistical-plus-minus model, using player-tracking data. It documents how each input stabilizes and frames itself as predictive with known uncertainty.
  • What ATHLIX does: the weights above (0.30 age, 0.36 injury, 0.18 contract, 0.16 exposure, and the dial/bucket coefficients) are hand-chosen for internal consistency and legibility, not fit to data. They encode a plausible story about what erodes athlete wealth — injury dominates, age next — but nothing in the app has ever seen a real earnings outcome.
  • What would make it a learned model: a labeled dataset of athlete career + earnings outcomes, a train/validate/test split, and fit coefficients replacing the hand-chosen ones — with the residuals of the fit giving a real confidence interval in place of the presentation band above. The backtest is the first step toward that: it measures whether the current hand-picked weights actually separate real career declines from non-declines (spoiler: real but small lift).
Limitations: the weights above are hand-chosen for internal consistency and visual demonstration, not fit to historical earnings data. Treat every output as a “what-if” readout of the formulas, not a forecast. A genuine predictive model would require a labeled dataset of athlete career and earnings outcomes and a proper train/validate/test split — out of scope for this build.