Player Rating Overview: Analysis Results

Author

Justin Pietsch

Published

July 4, 2026

Season: 2025–26


─── DATA COVERAGE ───────────────────────────────────────────────
Season: 2025–26
Total players in unified table: 582
Qualified players (>= 500 min): 378
Rating systems present: 14
  Game Score: 378 players with data
  PER: 378 players with data
  Win Shares: 378 players with data
  WS/48: 378 players with data
  BPM: 378 players with data
  OBPM: 378 players with data
  DBPM: 378 players with data
  VORP: 378 players with data
  RAPM: 378 players with data
  O-RAPM: 378 players with data
  D-RAPM: 378 players with data
  RAPM+prior: 378 players with data
  O-RAPM+prior: 378 players with data
  D-RAPM+prior: 378 players with data
  RAPM players with computed values: 582

─── RAPM — COMPUTED SINGLE-SEASON (NO PRIOR) ────────────────────
  1. Kawhi Leonard: RAPM +10.98 per 100
  2. Victor Wembanyama: RAPM +9.80 per 100
  3. Chet Holmgren: RAPM +9.68 per 100
  4. Shai Gilgeous-Alexander: RAPM +8.61 per 100
  5. Marcus Smart: RAPM +8.18 per 100
  Mean rank agreement with box-score systems: 0.40
  RAPM #1 (Kawhi Leonard) consensus rank: 6

─── RAPM_MY — PRIOR-INFORMED, MULTI-YEAR ────────────────────────
  1. Nikola Jokić: RAPM_MY +10.95 per 100
  2. Shai Gilgeous-Alexander: RAPM_MY +10.49 per 100
  3. Giannis Antetokounmpo: RAPM_MY +10.28 per 100
  4. Victor Wembanyama: RAPM_MY +9.52 per 100
  5. Kawhi Leonard: RAPM_MY +8.85 per 100
  Mean rank agreement with box-score systems: 0.79
  Rank agreement with the consensus: 0.93
  Bare RAPM rank agreement with the consensus: 0.49

─── RAPM RELIABILITY (SPLIT-HALF AND YEAR-OVER-YEAR) ────────────
Split-half: fit bare RAPM on two random halves of the pooled
possessions, then correlate the two estimates. If the lineup signal
is real the halves agree; if it is noise they do not.
  Split-half reliability (279 players, 1000+ min): 0.49
  (near-zero would be noise; a usable metric sits near 0.5-0.7)
  By minutes bin:
       0-500  min: n=423  r=+0.24
     500-1000 min: n= 99  r=+0.27
    1000-1500 min: n=115  r=+0.38
    1500-2000 min: n= 87  r=+0.52
    2000-3500 min: n= 77  r=+0.54

Per-player uncertainty (bare one-season RAPM, 1000+ min):
  Standard error ~1.5 per 100; 95% band ~+/-3.0 per 100.
  Measured from the split-half spread: a and b are independent
  fits on disjoint halves, so SD(a-b)/2 is the SE of the full
  season directly, with no reliability-model assumption.
  Box-score systems (PER, WS, BPM) have no comparable sampling
  band: they are near-deterministic in the season box stats, so
  their error is model error (wrong target), not estimation noise.

Year-over-year stability (players 1000+ min in both seasons):
  RAPM     +0.38
  RAPM_MY  +0.85
  BPM      +0.79

After the possession-reconstruction fixes, the lineup signal is real,
not noise. A reconstruction bug had been discarding ~60% of games with
complete play-by-play; recovering them took split-half reliability from
about 0.10 to 0.49, and bare single-season RAPM now holds from one
season to the next at 0.38 (it was near zero before).
Pooled across seasons and anchored to the BPM prior, RAPM_MY is at least
as stable as BPM (0.85 vs 0.79), so it adds a
genuine lineup contribution on top of the box score rather than echoing
it.
Pooling more seasons does not move split-half reliability much further:
0.49 at 3 pooled seasons and 0.52 at 5 (Spearman-Brown full-data
estimate 0.65 and 0.68 respectively), so most of the gain from
pooling years is already captured by 3 seasons.

─── BPM VALIDATION vs BASKETBALL-REFERENCE ──────────────────────
  Qualified players matched to BBR: 361
  BPM vs BBR bpm: r=0.930  MAE=0.80 (n=361)
  OBPM vs BBR obpm: r=0.946  MAE=0.61 (n=361)
  DBPM vs BBR dbpm: r=0.877  MAE=0.47 (n=361)
  VORP vs BBR vorp: r=0.961  MAE=0.27 (n=361)

  Spot check (ours vs BBR):
  Player                     BPM   BBR BPM    OBPM  BBR OBPM    DBPM  BBR DBPM
  Shai Gilgeous-Alexander    10.4      11.7     9.0       8.7     1.4       3.0
  Giannis Antetokounmpo     10.0       9.5     9.8       7.7     0.1       1.8
  Victor Wembanyama          8.9      10.7     5.0       6.5     3.9       4.2
  Luka Garza                 3.6       2.4     3.2       2.2     0.3       0.2
  Jalen Brunson              3.4       3.1     4.3       4.0    -0.9      -0.9
  Jayson Tatum               3.0       4.8     1.1       2.9     1.9       1.8
  Kawhi Leonard              7.7       8.0     6.6       7.4     1.2       0.6

─── BASIC DISTRIBUTION STATS ────────────────────────────────────

Game Score (n=378):
  Mean: 9.46  Median: 8.52  Std: 4.80
  Min: 2.34  Max: 28.68
  Gini: 0.277  Top-5% share: 11.5%
  Skew: +1.00  Excess kurtosis: +0.88  Below zero: 0%

PER (n=378):
  Mean: 14.86  Median: 14.13  Std: 4.31
  Min: 5.99  Max: 32.16
  Gini: 0.160  Top-5% share: 8.6%
  Skew: +0.83  Excess kurtosis: +1.25  Below zero: 0%

Win Shares (n=378):
  Mean: 3.91  Median: 3.35  Std: 2.54
  Min: 0.06  Max: 15.66
  Gini: 0.353  Top-5% share: 13.5%
  Skew: +1.11  Excess kurtosis: +1.51  Below zero: 0%

WS/48 (n=378):
  Mean: 0.13  Median: 0.12  Std: 0.06
  Min: 0.00  Max: 0.35
  Gini: 0.260  Top-5% share: 11.4%
  Skew: +0.90  Excess kurtosis: +0.95  Below zero: 0%

BPM (n=378):
  Mean: -0.24  Median: -0.43  Std: 2.66
  Min: -5.72  Max: 11.43
  Top-5% share: 34.3%  (Gini omitted: 58% of players below zero)
  Skew: +0.78  Excess kurtosis: +1.68  Below zero: 58%

OBPM (n=378):
  Mean: -0.22  Median: -0.46  Std: 2.30
  Min: -5.65  Max: 10.16
  Top-5% share: 34.9%  (Gini omitted: 59% of players below zero)
  Skew: +0.84  Excess kurtosis: +2.05  Below zero: 59%

DBPM (n=378):
  Mean: -0.02  Median: -0.10  Std: 1.10
  Min: -3.01  Max: 3.89
  Top-5% share: 30.4%  (Gini omitted: 53% of players below zero)
  Skew: +0.32  Excess kurtosis: +0.63  Below zero: 53%

VORP (n=378):
  Mean: 0.81  Median: 0.54  Std: 1.24
  Min: -1.64  Max: 7.73
  Gini: 0.611  Top-5% share: 24.5%
  Skew: +1.71  Excess kurtosis: +4.96  Below zero: 25%

RAPM (n=378):
  Mean: 0.51  Median: 0.48  Std: 3.11
  Min: -7.61  Max: 10.98
  Top-5% share: 25.2%  (Gini omitted: 42% of players below zero)
  Skew: +0.22  Excess kurtosis: +0.28  Below zero: 42%

O-RAPM (n=378):
  Mean: 0.42  Median: 0.47  Std: 2.21
  Min: -6.64  Max: 8.51
  Top-5% share: 25.1%  (Gini omitted: 40% of players below zero)
  Skew: +0.15  Excess kurtosis: +0.63  Below zero: 40%

D-RAPM (n=378):
  Mean: 0.09  Median: -0.02  Std: 2.09
  Min: -6.01  Max: 7.86
  Top-5% share: 26.6%  (Gini omitted: 51% of players below zero)
  Skew: +0.05  Excess kurtosis: +0.47  Below zero: 51%

RAPM+prior (n=378):
  Mean: -0.12  Median: -0.27  Std: 2.67
  Min: -6.48  Max: 10.95
  Top-5% share: 33.6%  (Gini omitted: 55% of players below zero)
  Skew: +0.72  Excess kurtosis: +1.83  Below zero: 55%

O-RAPM+prior (n=378):
  Mean: -0.14  Median: -0.38  Std: 2.18
  Min: -5.48  Max: 9.42
  Top-5% share: 36.4%  (Gini omitted: 56% of players below zero)
  Skew: +0.89  Excess kurtosis: +2.35  Below zero: 56%

D-RAPM+prior (n=378):
  Mean: 0.02  Median: -0.02  Std: 1.34
  Min: -3.69  Max: 5.25
  Top-5% share: 29.1%  (Gini omitted: 51% of players below zero)
  Skew: +0.30  Excess kurtosis: +0.55  Below zero: 51%

RAPM distribution shape, pooled over 29 seasons (n=9820 player-seasons):
  Skew: +0.13  Excess kurtosis: +0.03  Below zero: 47%

─── POWER-LAW FIT (VALUE VS RANK, LOG-LOG) ──────────────────────
A system's top-50 value-vs-rank curve is a power law when the
log-log fit clears R^2 >= 0.95 (a straight line on log-log axes).

Game Score (n=50 positive ranks):
  exponent alpha=0.17  R^2=0.973  -> power law

PER (n=50 positive ranks):
  exponent alpha=0.14  R^2=0.958  -> power law

Win Shares (n=50 positive ranks):
  exponent alpha=0.22  R^2=0.983  -> power law

WS/48 (n=50 positive ranks):
  exponent alpha=0.17  R^2=0.931  -> not a power law (bends)

BPM (n=50 positive ranks):
  exponent alpha=0.43  R^2=0.979  -> power law

OBPM (n=50 positive ranks):
  exponent alpha=0.44  R^2=0.972  -> power law

DBPM (n=50 positive ranks):
  exponent alpha=0.36  R^2=0.968  -> power law

VORP (n=50 positive ranks):
  exponent alpha=0.37  R^2=0.978  -> power law

RAPM (n=50 positive ranks):
  exponent alpha=0.27  R^2=0.946  -> not a power law (bends)

O-RAPM (n=50 positive ranks):
  exponent alpha=0.32  R^2=0.965  -> power law

D-RAPM (n=50 positive ranks):
  exponent alpha=0.33  R^2=0.981  -> power law

RAPM+prior (n=50 positive ranks):
  exponent alpha=0.42  R^2=0.965  -> power law

O-RAPM+prior (n=50 positive ranks):
  exponent alpha=0.46  R^2=0.952  -> power law

D-RAPM+prior (n=50 positive ranks):
  exponent alpha=0.32  R^2=0.974  -> power law

Power-law systems (R^2 >= 0.95): Game Score, PER, Win Shares, BPM, OBPM, DBPM, VORP, O-RAPM, D-RAPM, RAPM+prior, O-RAPM+prior, D-RAPM+prior
Bend instead of a straight line: WS/48, RAPM

─── RANK-VS-VALUE GAP (RANK 1-15 vs RANK 50-65) ─────────────────
Comparing the rank 1-15 value gap to the rank 50-65 value gap for every system reaching rank 65.

Game Score: rank 1=28.68  rank 15=19.73  rank 50=15.00  rank 65=13.84
  top gap=8.95  mid gap=1.16  ratio=7.69x

PER: rank 1=32.16  rank 15=22.55  rank 50=19.49  rank 65=18.66
  top gap=9.61  mid gap=0.83  ratio=11.64x

Win Shares: rank 1=15.66  rank 15=8.74  rank 50=6.83  rank 65=6.34
  top gap=6.92  mid gap=0.49  ratio=14.06x

WS/48: rank 1=0.35  rank 15=0.27  rank 50=0.20  rank 65=0.17
  top gap=0.08  mid gap=0.02  ratio=3.56x

BPM: rank 1=11.43  rank 15=4.27  rank 50=2.59  rank 65=2.16
  top gap=7.17  mid gap=0.43  ratio=16.54x

OBPM: rank 1=10.16  rank 15=4.02  rank 50=2.12  rank 65=1.67
  top gap=6.14  mid gap=0.46  ratio=13.48x

DBPM: rank 1=3.89  rank 15=1.97  rank 50=1.20  rank 65=0.92
  top gap=1.92  mid gap=0.28  ratio=6.78x

VORP: rank 1=7.73  rank 15=3.55  rank 50=2.03  rank 65=1.76
  top gap=4.18  mid gap=0.27  ratio=15.64x

RAPM: rank 1=10.98  rank 15=6.37  rank 50=3.87  rank 65=3.24
  top gap=4.61  mid gap=0.63  ratio=7.33x

O-RAPM: rank 1=8.51  rank 15=4.37  rank 50=2.64  rank 65=2.28
  top gap=4.14  mid gap=0.36  ratio=11.47x

D-RAPM: rank 1=7.86  rank 15=3.71  rank 50=2.23  rank 65=2.03
  top gap=4.15  mid gap=0.21  ratio=19.85x

RAPM+prior: rank 1=10.95  rank 15=4.39  rank 50=2.80  rank 65=2.24
  top gap=6.56  mid gap=0.56  ratio=11.62x

O-RAPM+prior: rank 1=9.42  rank 15=4.27  rank 50=1.92  rank 65=1.53
  top gap=5.14  mid gap=0.39  ratio=13.29x

D-RAPM+prior: rank 1=5.25  rank 15=2.46  rank 50=1.53  rank 65=1.15
  top gap=2.78  mid gap=0.39  ratio=7.21x

Smallest ratio: WS/48 (3.56x)
Largest ratio: D-RAPM (19.85x)

─── RANK NOISE (SEASON-TO-SEASON SWING BANDS) ───────────────────
Swing = RMS year-over-year change of each metric among regulars (1000+ min both seasons).
Players closer than one swing reshuffle season to season, so their order is not stable.

BPM: swing +/-1.71 over 279 regulars
  middle (rank 139): ranks 72-224 within one swing (153 players)
  near the top (rank 5): ranks 4-6 within one swing (3 players)

RAPM: swing +/-3.52 over 279 regulars
  middle (rank 139): ranks 37-238 within one swing (202 players)
  near the top (rank 5): ranks 1-36 within one swing (36 players)

─── RANK AGREEMENT (SPEARMAN CORRELATIONS) ──────────────────────
  Game Score vs PER: r=0.862
  Game Score vs Win Shares: r=0.671
  Game Score vs WS/48: r=0.385
  Game Score vs BPM: r=0.739
  Game Score vs OBPM: r=0.806
  Game Score vs DBPM: r=0.102
  Game Score vs VORP: r=0.786
  Game Score vs RAPM: r=0.343
  Game Score vs O-RAPM: r=0.438
  Game Score vs D-RAPM: r=0.028
  Game Score vs RAPM+prior: r=0.709
  Game Score vs O-RAPM+prior: r=0.787
  Game Score vs D-RAPM+prior: r=0.129
  PER vs Win Shares: r=0.764
  PER vs WS/48: r=0.659
  PER vs BPM: r=0.901
  PER vs OBPM: r=0.895
  PER vs DBPM: r=0.288
  PER vs VORP: r=0.891
  PER vs RAPM: r=0.359
  PER vs O-RAPM: r=0.418
  PER vs D-RAPM: r=0.073
  PER vs RAPM+prior: r=0.830
  PER vs O-RAPM+prior: r=0.854
  PER vs D-RAPM+prior: r=0.248
  Win Shares vs WS/48: r=0.781
  Win Shares vs BPM: r=0.716
  Win Shares vs OBPM: r=0.614
  Win Shares vs DBPM: r=0.414
  Win Shares vs VORP: r=0.786
  Win Shares vs RAPM: r=0.448
  Win Shares vs O-RAPM: r=0.419
  Win Shares vs D-RAPM: r=0.209
  Win Shares vs RAPM+prior: r=0.718
  Win Shares vs O-RAPM+prior: r=0.628
  Win Shares vs D-RAPM+prior: r=0.356
  WS/48 vs BPM: r=0.667
  WS/48 vs OBPM: r=0.524
  WS/48 vs DBPM: r=0.485
  WS/48 vs VORP: r=0.617
  WS/48 vs RAPM: r=0.393
  WS/48 vs O-RAPM: r=0.301
  WS/48 vs D-RAPM: r=0.255
  WS/48 vs RAPM+prior: r=0.674
  WS/48 vs O-RAPM+prior: r=0.524
  WS/48 vs D-RAPM+prior: r=0.451
  BPM vs OBPM: r=0.888
  BPM vs DBPM: r=0.498
  BPM vs VORP: r=0.964
  BPM vs RAPM: r=0.427
  BPM vs O-RAPM: r=0.427
  BPM vs D-RAPM: r=0.172
  BPM vs RAPM+prior: r=0.915
  BPM vs O-RAPM+prior: r=0.845
  BPM vs D-RAPM+prior: r=0.399
  OBPM vs DBPM: r=0.089
  OBPM vs VORP: r=0.866
  OBPM vs RAPM: r=0.328
  OBPM vs O-RAPM: r=0.460
  OBPM vs D-RAPM: r=-0.014
  OBPM vs RAPM+prior: r=0.791
  OBPM vs O-RAPM+prior: r=0.948
  OBPM vs D-RAPM+prior: r=0.066
  DBPM vs VORP: r=0.466
  DBPM vs RAPM: r=0.303
  DBPM vs O-RAPM: r=0.047
  DBPM vs D-RAPM: r=0.415
  DBPM vs RAPM+prior: r=0.503
  DBPM vs O-RAPM+prior: r=0.092
  DBPM vs D-RAPM+prior: r=0.802
  VORP vs RAPM: r=0.439
  VORP vs O-RAPM: r=0.452
  VORP vs D-RAPM: r=0.170
  VORP vs RAPM+prior: r=0.886
  VORP vs O-RAPM+prior: r=0.832
  VORP vs D-RAPM+prior: r=0.365
  RAPM vs O-RAPM: r=0.714
  RAPM vs D-RAPM: r=0.678
  RAPM vs RAPM+prior: r=0.645
  RAPM vs O-RAPM+prior: r=0.438
  RAPM vs D-RAPM+prior: r=0.509
  O-RAPM vs D-RAPM: r=0.036
  O-RAPM vs RAPM+prior: r=0.532
  O-RAPM vs O-RAPM+prior: r=0.618
  O-RAPM vs D-RAPM+prior: r=0.037
  D-RAPM vs RAPM+prior: r=0.378
  D-RAPM vs O-RAPM+prior: r=-0.004
  D-RAPM vs D-RAPM+prior: r=0.732
  RAPM+prior vs O-RAPM+prior: r=0.830
  RAPM+prior vs D-RAPM+prior: r=0.567
  O-RAPM+prior vs D-RAPM+prior: r=0.070

─── HOW MUCH EACH SYSTEM OVERLAPS THE OTHERS ────────────────────
Regression R² of each system on all others, with its own algebraic
kin (offense/defense halves, rescalings) held out. High = redundant;
low = carries signal the other systems miss.
  OBPM: overlap R² = 0.961
  O-RAPM+prior: overlap R² = 0.959
  RAPM+prior: overlap R² = 0.949
  PER: overlap R² = 0.945
  BPM: overlap R² = 0.943
  D-RAPM+prior: overlap R² = 0.905
  VORP: overlap R² = 0.895
  Game Score: overlap R² = 0.893
  DBPM: overlap R² = 0.823
  D-RAPM: overlap R² = 0.719
  Win Shares: overlap R² = 0.709
  RAPM: overlap R² = 0.677
  WS/48: overlap R² = 0.661
  O-RAPM: overlap R² = 0.635

─── CONSENSUS RATING — TOP 20 ───────────────────────────────────
   1. Nikola Jokić                    Consensus z = 3.99
   2. Shai Gilgeous-Alexander         Consensus z = 3.34
   3. Victor Wembanyama               Consensus z = 2.82
   4. Giannis Antetokounmpo           Consensus z = 2.70
   5. Luka Dončić                     Consensus z = 2.58
   6. Kawhi Leonard                   Consensus z = 2.36
   7. Jalen Duren                     Consensus z = 2.22
   8. Cade Cunningham                 Consensus z = 1.84
   9. Paul Reed                       Consensus z = 1.78
  10. Alperen Sengun                  Consensus z = 1.72
  11. Donovan Mitchell                Consensus z = 1.72
  12. Karl-Anthony Towns              Consensus z = 1.64
  13. Donovan Clingan                 Consensus z = 1.59
  14. Tyrese Maxey                    Consensus z = 1.58
  15. LaMelo Ball                     Consensus z = 1.57
  16. Neemias Queta                   Consensus z = 1.52
  17. Mitchell Robinson               Consensus z = 1.48
  18. Jamal Murray                    Consensus z = 1.48
  19. Chet Holmgren                   Consensus z = 1.48
  20. Jalen Johnson                   Consensus z = 1.48

─── WINS-PREDICTIVE RATING — TOP 20 ─────────────────────────────
   1. Nikola Jokić                    Wins-predictive z = 4.52
   2. Shai Gilgeous-Alexander         Wins-predictive z = 4.24
   3. Victor Wembanyama               Wins-predictive z = 3.67
   4. Giannis Antetokounmpo           Wins-predictive z = 3.64
   5. Luka Dončić                     Wins-predictive z = 3.33
   6. Kawhi Leonard                   Wins-predictive z = 3.28
   7. Jalen Duren                     Wins-predictive z = 2.39
   8. Donovan Mitchell                Wins-predictive z = 2.31
   9. Paul Reed                       Wins-predictive z = 2.12
  10. Cade Cunningham                 Wins-predictive z = 2.11
  11. Tyrese Maxey                    Wins-predictive z = 1.99
  12. Chet Holmgren                   Wins-predictive z = 1.96
  13. Stephen Curry                   Wins-predictive z = 1.84
  14. Jimmy Butler III                Wins-predictive z = 1.81
  15. Jamal Murray                    Wins-predictive z = 1.80
  16. LaMelo Ball                     Wins-predictive z = 1.79
  17. Joel Embiid                     Wins-predictive z = 1.76
  18. Kevin Durant                    Wins-predictive z = 1.69
  19. Anthony Edwards                 Wins-predictive z = 1.60
  20. Jalen Johnson                   Wins-predictive z = 1.59

─── COMPARISON: CONSENSUS vs. WINS-PREDICTIVE ───────────────────
  Spearman correlation between consensus and wins-predictive: 0.981 [95% CI 0.975, 0.985] (p=0.000)
  Players rated much higher by wins-predictive than consensus:
    Giannis Antetokounmpo           diff = +0.94
    Kawhi Leonard                   diff = +0.92
    Shai Gilgeous-Alexander         diff = +0.90
    Victor Wembanyama               diff = +0.85
    Luka Dončić                     diff = +0.75
  Players rated much lower by wins-predictive than consensus:
    Jericho Sims                    diff = -0.67
    Jahmai Mashack                  diff = -0.54
    Dwight Powell                   diff = -0.53
    Kam Jones                       diff = -0.52
    Lonzo Ball                      diff = -0.47

─── UBER RATING CONCENTRATION (GINI vs CENTER-ROBUST STEEPNESS) ─
Gini clips negatives to zero, so it inflates 0-centered metrics (the uber
ratings and the BPM family). The power-law exponent alpha does not depend on
where zero sits, so it is the fair cross-system concentration read.

Consensus: Gini=0.753 (inflated), top-5% share=31.7%, alpha=0.38

Wins-Predictive: Gini=0.752 (inflated), top-5% share=32.8%, alpha=0.43

─── POWER-LAW / TAIL ANALYSIS ───────────────────────────────────

Cumulative-value metrics:
  Win Shares: Gini=0.353, top-5% hold 13.5% of value
    Skewness: 1.11 (right-skewed)
  VORP: Gini=0.611, top-5% hold 24.5% of value
    Skewness: 2.07 (right-skewed)

Rate metrics:
  PER: Gini=0.160, top-5% hold 8.6% of value
    Skewness: 0.83 (right-skewed)
  BPM: Gini=0.767, top-5% hold 34.3% of value
    Skewness: 2.09 (right-skewed)

─── WHO EACH SYSTEM LOVES vs. CONSENSUS ─────────────────────────

Game Score loves (vs. consensus):
  +1.64  Lauri Markkanen
  +1.47  Keyonte George
  +1.23  Zach LaVine
Game Score discounts (vs. consensus):
  -2.07  Paul Reed
  -1.58  Mitchell Robinson
  -1.54  Clint Capela

PER loves (vs. consensus):
  +1.08  Giannis Antetokounmpo
  +0.90  Joel Embiid
  +0.88  Lauri Markkanen
PER discounts (vs. consensus):
  -0.86  Dorian Finney-Smith
  -0.86  Cason Wallace
  -0.68  Alex Caruso

Win Shares loves (vs. consensus):
  +2.17  Amen Thompson
  +1.94  Donovan Clingan
  +1.91  Rudy Gobert
Win Shares discounts (vs. consensus):
  -1.86  Giannis Antetokounmpo
  -1.62  Jayson Tatum
  -1.40  Stephen Curry

WS/48 loves (vs. consensus):
  +2.76  Steven Adams
  +2.29  Mitchell Robinson
  +2.10  Dylan Cardwell
WS/48 discounts (vs. consensus):
  -1.83  Kawhi Leonard
  -1.80  Luka Dončić
  -1.65  Anthony Edwards

BPM loves (vs. consensus):
  +1.13  Giannis Antetokounmpo
  +0.92  Paul Reed
  +0.83  T.J. McConnell
BPM discounts (vs. consensus):
  -0.88  Jericho Sims
  -0.82  Dwight Powell
  -0.76  Rudy Gobert

OBPM loves (vs. consensus):
  +1.66  Giannis Antetokounmpo
  +1.23  Stephen Curry
  +1.19  Darius Garland
OBPM discounts (vs. consensus):
  -1.49  Ausar Thompson
  -1.45  Lonzo Ball
  -1.21  Dwight Powell

DBPM loves (vs. consensus):
  +2.66  Alex Caruso
  +2.34  Cason Wallace
  +2.34  Dru Smith
DBPM discounts (vs. consensus):
  -2.81  Nikola Jokić
  -2.55  Giannis Antetokounmpo
  -2.22  Lauri Markkanen

VORP loves (vs. consensus):
  +1.78  Shai Gilgeous-Alexander
  +1.60  Nikola Jokić
  +1.44  Luka Dončić
VORP discounts (vs. consensus):
  -0.80  Giannis Antetokounmpo
  -0.79  Mitchell Robinson
  -0.77  Steven Adams

─── RETRODICTION: WHICH RATING REBUILDS TEAM RESULTS ────────────
Each system's player ratings are minutes-weighted to the team level, then
fit to team point differential per game across the 30 teams. R² is the
in-sample fit; CV R² is leave-one-team-out (the honest out-of-sample read).
Systems marked [team-fit] are built using team or lineup point
differential, so a high score is partly mechanical. Systems marked
[outcome-blind] never saw who won; their score is the genuine test.

  [team-fit]     BPM            R²=1.000  CV R²=1.000
  [team-fit]     RAPM+prior     R²=0.965  CV R²=0.961
  [team-fit]     RAPM           R²=0.950  CV R²=0.942
  [team-fit]     VORP           R²=0.948  CV R²=0.939
  [team-fit]     DBPM           R²=0.834  CV R²=0.815
  [team-fit]     O-RAPM+prior   R²=0.809  CV R²=0.782
  [team-fit]     D-RAPM+prior   R²=0.791  CV R²=0.769
  [team-fit]     D-RAPM         R²=0.771  CV R²=0.746
  [team-fit]     WS/48          R²=0.773  CV R²=0.743
  [team-fit]     OBPM           R²=0.784  CV R²=0.741
  [team-fit]     O-RAPM         R²=0.761  CV R²=0.729
  [outcome-blind] PER            R²=0.771  CV R²=0.727
  [team-fit]     Win Shares     R²=0.734  CV R²=0.690
  [outcome-blind] Game Score     R²=0.521  CV R²=0.471

BPM sits on top at CV R²=1.000, but only
mechanically: the team-margin anchor builds the box metrics to sum to
team point differential (BPM equals it exactly). Among the ratings that
never saw who won, PER leads, rebuilding 73% of the team point-differential spread
out of sample.

─── NEXT-SEASON RETRODICTION (PREDICTING THIS SEASON FROM LAST) ─
Last season's (2024-25) player ratings are
distributed across this season's rosters (weighted by this season's minutes)
and fit to this season's team point differential. Because each metric's team
adjustment is fit to its own season, predicting the next season removes the
in-sample circularity. Describing the season just played and forecasting the
next are different tests, and they reward different metrics.

Prior-rating coverage: 88% of this season's team minutes
were played by players who also carried a rating last season.

                   describes  predicts
  system           (same yr) (next yr)
  [team-fit]     RAPM+prior       0.961     0.581
  [team-fit]     VORP             0.939     0.519
  [team-fit]     BPM              1.000     0.519
  [team-fit]     O-RAPM+prior     0.782     0.450
  [team-fit]     O-RAPM           0.729     0.444
  [team-fit]     Win Shares       0.690     0.371
  [team-fit]     OBPM             0.741     0.345
  [team-fit]     WS/48            0.743     0.318
  [outcome-blind] Game Score       0.471     0.318
  [team-fit]     RAPM             0.942     0.259
  [outcome-blind] PER              0.727     0.222
  [team-fit]     D-RAPM+prior     0.769     0.162
  [team-fit]     DBPM             0.815     0.156
  [team-fit]     D-RAPM           0.746    -0.086

Best forecaster of next season: RAPM+prior (CV R²=0.581). Best description of
the season itself: BPM.
PER falls from 0.73 describing the season to 0.22
forecasting the next: a strong descriptor, a weak predictor.

─── MULTI-SEASON DESCRIBE vs FORECAST (FULL PANEL) ──────────────
The single pair above is one season. This pools the same two tests
across every season in the cache: 30 seasons
(1996-97 through 2025-26) for the describe test and
the 29 consecutive season-pairs for the forecast test.
Each number below is the average R² across all of those seasons (describe)
or pairs (forecast), with the season-to-season range in brackets. Pooling
this way shows whether the one-season flip is a fluke or a standing pattern.

                     describes    predicts
  system             (same yr)   (next yr)
  [team-fit]     VORP            0.907 [0.83,0.96]   0.446 [0.17,0.70]
  [team-fit]     BPM             0.999 [1.00,1.00]   0.429 [-0.14,0.70]
  [outcome-blind] Game Score      0.385 [0.09,0.62]   0.334 [0.02,0.55]
  [team-fit]     Win Shares      0.562 [0.29,0.72]   0.324 [0.10,0.54]
  [team-fit]     OBPM            0.614 [0.27,0.79]   0.276 [-0.29,0.64]
  [team-fit]     WS/48           0.573 [0.08,0.81]   0.196 [-0.47,0.59]
  [team-fit]     DBPM            0.490 [0.16,0.82]   0.150 [-0.16,0.48]
  [outcome-blind] PER             0.636 [0.17,0.81]  -2.816 [-65.85,0.44]

Across 30 seasons the best description is BPM; across
29 pairs the best forecast is VORP.
PER averages 0.64 describing but only -2.82 forecasting,
the same collapse the single pair showed, now seen across 29 pairs.
In the typical (median) pair PER describes 0.68 and forecasts 0.10.
BPM forecasts better than PER in 28 of 29 pairs.

─── IMPACT-ERA PANEL: BOX SCORES vs RAPM (EQUAL SEASONS) ────────
The panel above runs 30 seasons, but RAPM can only be computed for the
29 seasons with cached play-by-play (1997-98 through 2025-26).
This second panel scores the box-score systems AND RAPM over those same
seasons, so the comparison is even. RAPM is built from lineup point
differential, so its DESCRIBE score (rebuilding the same season's team
margin) is partly mechanical; the FORECAST score (prior-season RAPM onto
next season's rosters) is the honest read.

                     describes    predicts
  system             (same yr)   (next yr)
  [team-fit]     RAPM+prior      0.942       0.472
  [team-fit]     VORP            0.906       0.446
  [team-fit]     BPM             0.999       0.426
  [outcome-blind] Game Score      0.387       0.332
  [team-fit]     Win Shares      0.560       0.322
  [team-fit]     RAPM            0.916       0.317
  [team-fit]     OBPM            0.610       0.273
  [team-fit]     WS/48           0.571       0.192
  [team-fit]     DBPM            0.482       0.146
  [outcome-blind] PER             0.634      -2.920

Over these 28 pairs RAPM forecasts 6 of 10; the best forecaster is RAPM+prior.
RAPM_MY forecasts 1 of 10 (bare RAPM was 6).

─── PLAYER RATING STABILITY (YEAR OVER YEAR) ────────────────────
A different lens: not how well a rating predicts team results, but how
much a player's own rating carries from one season to the next. For every
pair of seasons, players who qualified (500+ minutes) in both are
matched, and each system gets two numbers: the correlation between a
player's rating this season and next (1.0 = perfectly sticky, 0 = a coin
flip), and the share of the top 20 one season still in the top
20 the next. Stability is persistence, not quality: a rating can be
sticky because it tracks a real, lasting trait or because it is slow to
move. These box scores also share inputs (points, rebounds, assists), so
some of the shared stickiness is mechanical.

  system            year-to-year   top-20 kept
  Game Score          0.847 [0.81,0.89]        68%
  WS/48               0.812 [0.74,0.87]        47%
  PER                 0.803 [0.76,0.85]        64%
  VORP                0.789 [0.71,0.83]        58%
  OBPM                0.763 [0.71,0.81]        62%
  BPM                 0.750 [0.67,0.80]        59%
  Win Shares          0.724 [0.64,0.79]        54%
  DBPM                0.674 [0.58,0.73]        39%

Steadiest year to year: Game Score (corr 0.85). Jumpiest: DBPM (corr 0.67).
Best at keeping the same names in the top 20: Game Score (68%), against a chance level near 5%.

─── REGULAR SEASON vs PLAYOFFS (RATE-METRIC DELTAS) ─────────────
Players with >= 150 playoff minutes: 103
Rate metrics compared (each normalized within its season type): PER, WS/48, BPM, OBPM, DBPM
Delta = playoff minus regular season. 'adj' subtracts the average delta
among this qualified pool, so a riser is measured against the other
rotation players who also advanced. The composite shift z averages the
standardized adjusted deltas of PER, WS/48, and BPM, so a riser needs the
three box formulations to agree.
Two reliability guards: the shift is shrunk toward zero by playoff
minutes (half weight at 200 min) so a short, lucky
sample can't top the list, and a game-level bootstrap re-draws each
player's games 1000 times to give a 2.5-97.5 range
([lo, hi], on the shrunk scale). A shift is 'clear' when that range
excludes zero. Risers and fallers below are ranked by the shrunk shift.
Note: BPM here is our recompute, validated against Basketball-Reference
(see the BPM-validation section); the playoff BPM is anchored to each
team's playoff point margin.
Shifts whose range clears zero (not just game noise): 16 of 103.

Biggest playoff RISERS (raised their level above their regular-season form):
   1. OG Anunoby                 NYK  shift = +1.56 [+0.66, +2.43]  (585 po min; raw z +2.09; PER +8.0)
   2. Cason Wallace              OKC  shift = +1.14 [+0.49, +1.75]  (374 po min; raw z +1.75; PER +5.8)
   3. Jayson Tatum               BOS  shift = +1.12 [+0.27, +1.96]  (218 po min; raw z +2.15; PER +8.6)
   4. Karl-Anthony Towns         NYK  shift = +1.03 [+0.08, +2.02]  (577 po min; raw z +1.38; PER +2.5)
   5. Rui Hachimura              LAL  shift = +1.01 [+0.50, +1.52]  (386 po min; raw z +1.53; PER +5.5)
   6. Mike Conley                MIN  shift = +0.89 [+0.25, +1.52]  (167 po min; raw z +1.95; PER +6.2)
   7. Tari Eason                 HOU  shift = +0.87 [-0.13, +2.26]  (195 po min; raw z +1.77; PER +6.8)
   8. Alex Caruso                OKC  shift = +0.85 [-0.15, +1.84]  (352 po min; raw z +1.33; PER +6.5)
   9. Marcus Smart               LAL  shift = +0.81 [-0.36, +2.02]  (344 po min; raw z +1.28; PER +4.7)
  10. Collin Murray-Boyles       TOR  shift = +0.78 [+0.17, +1.45]  (190 po min; raw z +1.60; PER +7.3)

Biggest playoff FALLERS (dropped below their regular-season form):
   1. Jalen Duren                DET  shift = -1.60 [-2.35, -0.79]  (422 po min; raw z -2.35; PER -10.4)
   2. Nikola Jokić               DEN  shift = -1.34 [-2.19, -0.53]  (237 po min; raw z -2.46; PER -7.0)
   3. Nickeil Alexander-Walker   ATL  shift = -1.07 [-1.57, -0.52]  (212 po min; raw z -2.07; PER -7.4)
   4. Jalen Suggs                ORL  shift = -1.02 [-1.90, -0.17]  (248 po min; raw z -1.84; PER -6.5)
   5. Julius Randle              MIN  shift = -0.99 [-1.66, -0.18]  (399 po min; raw z -1.49; PER -6.1)
   6. Jamal Murray               DEN  shift = -0.85 [-1.58, -0.19]  (238 po min; raw z -1.57; PER -5.1)
   7. Keldon Johnson             SAS  shift = -0.83 [-1.58, -0.13]  (410 po min; raw z -1.24; PER -5.0)
   8. James Harden               CLE  shift = -0.83 [-1.71, +0.07]  (671 po min; raw z -1.08; PER -3.9)
   9. Shai Gilgeous-Alexander    OKC  shift = -0.82 [-1.72, +0.15]  (544 po min; raw z -1.12; PER -4.6)
  10. Donovan Mitchell           CLE  shift = -0.77 [-1.63, +0.06]  (652 po min; raw z -1.00; PER -3.1)

Regular-season consensus #1 Nikola Jokić: playoff shift = -1.34 [-2.19, -0.53] (faller rank 2 of 103)

─── SEASON-OVER-SEASON CHANGE (PREVIOUS → CURRENT) ──────────────
Players qualified in both 2024-25 and 2025-26: 290
Consensus rank agreement 2024-25 → 2025-26: 0.75
Mean box-score agreement: 2024-25 0.71, 2025-26 0.75

  2025-26 consensus top 5:
   1. Nikola Jokić
   2. Shai Gilgeous-Alexander
   3. Victor Wembanyama
   4. Giannis Antetokounmpo
   5. Luka Dončić

  2024-25 consensus top 5:
   1. Nikola Jokić
   2. Shai Gilgeous-Alexander
   3. Giannis Antetokounmpo
   4. Luka Dončić
   5. Ivica Zubac

  Biggest consensus risers 2024-25 → 2025-26:
   1. Stephon Castle  +1.38
   2. Micah Potter  +1.37
   3. Kawhi Leonard  +1.37
   4. Victor Wembanyama  +1.28
   5. Neemias Queta  +1.19

  Biggest consensus fallers 2024-25 → 2025-26:
   1. Ivica Zubac  -1.59
   2. Domantas Sabonis  -1.49
   3. Jaren Jackson Jr.  -1.28
   4. Anthony Davis  -1.26
   5. De'Andre Hunter  -1.24

─── PLAYOFF-WEIGHTED VALUE (REGULAR SEASON + PLAYOFFS) ──────────
Playoff pool: 103 players with >= 150 playoff minutes.
PWV = minutes-weighted blend of regular-season and playoff BPM, playoff minutes weighted 2x (primary).

Top 10 by Playoff-Weighted Value (playoffs x2):
   1. Nikola Jokić               PWV +10.19  (reg +11.4 → playoff +4.3)
   2. Victor Wembanyama          PWV +8.83  (reg +8.9 → playoff +8.8)
   3. Shai Gilgeous-Alexander    PWV +8.56  (reg +10.4 → playoff +4.6)
   4. Karl-Anthony Towns         PWV +5.23  (reg +3.9 → playoff +8.0)
   5. Cade Cunningham            PWV +4.24  (reg +5.3 → playoff +2.2)
   6. Jayson Tatum               PWV +4.21  (reg +3.0 → playoff +5.6)
   7. Jalen Brunson              PWV +3.83  (reg +3.4 → playoff +4.6)
   8. Donovan Mitchell           PWV +3.76  (reg +5.2 → playoff +1.3)
   9. Chet Holmgren              PWV +3.73  (reg +4.1 → playoff +2.8)
  10. Jaylen Brown               PWV +3.65  (reg +4.0 → playoff +2.0)

Jalen Brunson: regular-season BPM +3.4, playoff BPM +4.6.
  PWV rank as the playoffs are weighted more: 15th (1x) → 7th (2x) → 7th (3x), of 103.

─── EXAMPLE PLAYERS (ARCHETYPES) ────────────────────────────────
Agreed elite (best worst-rank across 5 systems): Nikola Jokić (worst rank 1).
Defense-driven star (top-12 BPM, highest DBPM): Victor Wembanyama (BPM +8.9, of which DBPM +3.9).
High-usage scorer the metrics split on: Pascal Siakam (USG 30%, PER rank 45 vs BPM rank 126).
  Split scorer bare-RAPM rank: 80
Biggest playoff riser (top composite shift): OG Anunoby (shift +1.56 [+0.66, +2.43]).
  Brunson impact ranks: OBPM 12, BPM 29, RAPM 169, RAPM+prior 57 (scoring outruns net on-court impact)
Saved → docs/player_rating_overview_facts_reference.md