Methodology

Court Signal is an independent NBA analytics project. It is not an aggregator of other people's ratings — the original metrics below are our own transparent formulas, and the classic metrics are sourced reference columns with attribution.

Original metrics Court Signal

Each original is era-relative: it is a z-score of a box-score formula against that season's qualified players, scaled so 100 = league average that year (like OPS+ in baseball). This compares within-season standardized standing; equal values in 1962 and 2024 do not establish equal basketball value or context.

Career-page and Compare headline peaks use only seasons with at least 500 minutes. Smaller samples remain visible in the season history but do not set a career peak; a player with no qualifying season has no published peak.

These are provisional, descriptive v1 formulas. They are transparent box-score summaries, blind to lineup context, and have not yet passed Court Signal's preregistered construct and predictive backtests. That is what the research roadmap tests.

Classic metrics

PER, BPM, Win Shares, VORP, TS%, and USG% are public-formula metrics sourced from Basketball-Reference season tables. We show them as familiar reference points; we do not claim them as our own.

CORE — the flagship impact metric provisional

Box-score metrics can't see who was on the court together. Court Signal's flagship metric, CORE, is a possession-weighted impact estimate (RAPM — regularized adjusted plus-minus) built from real play-by-play: it accounts for teammates and opponents and reads in net points per 100 possessions vs. the modeled average (positive is better). See the Impact tab.

CORE covers seven independently fit seasons, 2019-20 through 2025-26. O-CORE estimates offensive impact; D-CORE is sign-adjusted so positive means better defense; and CORE = O-CORE + D-CORE. Both components are centered to a model-possession-weighted season average of zero while preserving five-player lineup predictions.

For this completed-season retrospective, the ridge model uses same-season final Basketball-Reference OBPM/DBPM as a transparent shrinkage prior. It currently uses 120 whole-game resamples for a provisional 90% conditional bootstrap stability range for total CORE. Each resample rebuilds the player columns, so a low-exposure player's percentiles use only draws in which that player appears. O-CORE and D-CORE component intervals are not published. The range conditions on the released estimator, configured alpha/prior, observed-season resampling design, and player appearance; it is not a calibrated true-effect confidence interval. Reliability thresholds combine exposure and interval width heuristically: high means at least 2,000 possessions and width at most 5.0; medium means at least 800 possessions and width at most 9.0; all other interval rows are low. The frozen fixed-universe 1,000-draw known-truth program has not run. Stable Basketball-Reference IDs connect Impact rows to player career pages.

CORE is a completed-season retrospective estimate, not a forecast or rolling as-of value. Seasons are fit independently, so equal numbers in different seasons do not prove identical impact contexts.

Impact Lens

The optional Impact Lens changes the display, not the fitted model. Rate is the selected O-CORE, D-CORE, or total CORE value. Across multiple seasons it is weighted by the player's modeled possessions. Impact Points are the deterministic cumulative transform selected CORE component × possessions / 100, summed across the selected seasons. It is useful for separating rate from exposure, but it is not a new fitted metric, forecast, or wins estimate.

Multi-season CORE WAR is shown only when every selected season uses the same calibration identity. Court Signal does not publish O-WAR or D-WAR, so the WAR lens intentionally permits Total only rather than inventing an offense/defense allocation.

CORE WAR provisional

CORE WAR is provisionally calibrated, not a hard-coded conversion: ((CORE - r) × possessions / 100) / k, with r = -2.005486122 and k = 35.6671204135. Those values come from 7,059 games and 180 team-seasons across the six frozen calibration seasons. The same parameters are applied to 2025-26 without retraining them. Treat both CORE and CORE WAR as research estimates, not settled truth.

Input precision. CORE WAR is computed from the published CORE (two decimals) and possessions (whole numbers) rather than from the unrounded fitted values, which are not currently persisted. Propagating that quantization bounds the induced error at 0.01 wins; roughly a third of rows therefore have an uncertain final decimal. No leaderboard ordering changes at that magnitude, but the second decimal of a published CORE WAR should not be read as exact.

Signal Matrix

The Signal Matrix shows how basketball metrics agree, differ, and depend on one another. Spearman rank correlation is primary (do two metrics rank players similarly?), computed on percentile ranks taken within each season and eligible population and then pooled — raw values are never pooled across seasons. Pearson on within-season z-scores is secondary. Every cell publishes its common sample, season coverage, and a dependency badge; pair views add season-by-season values, a player-clustered bootstrap interval, top-list overlap, the largest rank disagreements, and an exposure diagnostic for cumulative metrics.

Correlation describes relationship, not truth. Metrics can agree because they measure similar constructs, share inputs (CORE's prior is OBPM/DBPM; ALIEN includes DBPM; BUCKETS includes TS%), or respond to the same playing-time and team context. The matrix never ranks metric quality, and a blocked external comparator (EPM, LEBRON, DARKO, xRAPM, ESPN Net Points) is shown as an honest availability state, never a number. The one admitted external system is FiveThirtyEight's discontinued RAPTOR archive (CC BY 4.0, retrospective comparison only). Full method: docs/methodology/signal_matrix.md in the repository.

Data & honesty

Historical box data is Basketball-Reference-derived. Coverage varies by era — three-point, steals, blocks, and usage simply weren't recorded in early decades, so those cells are blank rather than guessed. Nothing here is a commercial product; it's an independent research project.

Historical team profiles

Team Time Machine is a descriptive roster archive, not a team impact model or wins forecast. Rate metrics are weighted by actual player-team minutes; cumulative metrics allocate each player's season total by the share of minutes played for that team. A traded player's aggregate TOT row is never duplicated across teams, and every team value must sum back through its visible player contributions.

The archive begins in 1959-60, defaults to the latest complete-source season, preserves historical team codes, and derives metric availability separately for each season. Source-partial seasons are labeled in the selector and page evidence rather than being presented as complete.