Demo -- read-only snapshot of the live system as of 2026-07-16T01:45:31Z; no live data, paper units only.
Skip to main content

evidence / Frontier measurements

The industry's player-metric landscape -- mapped, approximated where honest, and a do-not-fake list for the rest

A credible analytics shop knows which metrics its data can actually support and which it cannot -- and says so out loud. This page does that: we mapped the public NBA player-metric landscape against our raw input coverage, built transparent approximations of the three families our box-score data genuinely supports, and published a do-not-fake list for the rest, with the RAPM family (RAPM/EPM/DARKO/LEBRON/RAPTOR) declared explicitly out of reach. Every number below is quoted verbatim from committed JSON. The single truth-source for any figure is docs/JOB_EVIDENCE_PACKET.md. No dollar/ROI/edge is claimed anywhere -- every module carries a DESCRIPTIVE_ONLY label.

strongest single receipt

Support = raw input-column coverage only, never a claim that a branded metric is reproduced.

the claim

We mapped the industry's player-metric landscape, built honest approximations of the three families our data supports, and published a do-not-fake list for the rest. Concretely:

1. A capability matrix grades every well-known player-metric family supported / partial / not_supported against our actual input-column coverage -- and refuses to claim any branded metric is reproduced. 2. Three built approximations -- a box-only value index, an on/off net-rating differential, and a per-36 rate cast -- each with frozen weights or an unchanged source formula, each labelled for exactly what it is not. 3. An honest refusal -- aging curves -- where the data does not exist, returned as a not_buildable verdict rather than a fabricated curve.

The discipline is the point: approximate only what the columns support, name every metric it is not, and refuse the rest.


cited artifacts

committed artifact
scripts/platformkit/analytics_showcase/out/player_metric_landscape.json
scripts/platformkit/analytics_showcase/out/box_value_index.json
scripts/platformkit/analytics_showcase/out/on_off_showcase.json
scripts/platformkit/analytics_showcase/out/aging_curve_lite.json

why this matters

The hard part of sports analytics is not computing a box index -- it is knowing where your data runs out and refusing to fake the rest. This page maps the full public metric landscape, builds only the three families the columns actually support (each labelled for what it is not), declares the RAPM family out of reach, and returns a not_buildable refusal for aging curves rather than inventing a curve from three seasons with no age field. It even surfaces a real upstream data bug (diacritic-split player ids) instead of hiding it. The throughline: approximate only what the columns support, name every confound, and never dress a descriptive metric as an edge.


reproduce

reproduce on a fresh clone
cd nba-ai-system

# capability matrix (the map)
python scripts/platformkit/analytics_showcase/player_metric_landscape.py

# built approximations
python scripts/platformkit/analytics_showcase/box_value_index.py
python scripts/platformkit/analytics_showcase/on_off_showcase.py

# the honest refusal (writes JSON only, no chart)
python scripts/platformkit/analytics_showcase/aging_curve_lite.py

# each module ships a self-check
python scripts/platformkit/analytics_showcase/box_value_index.py --check
python scripts/platformkit/analytics_showcase/on_off_showcase.py --check
python scripts/platformkit/analytics_showcase/aging_curve_lite.py --check
no edge claimed

This site reports calibration and sharpness only, never a dollar edge, ROI, or bankroll result. An honest null is a success.