Research paper
Rest, load and outcomes
The published schedule-fatigue index under review and the load-bearing index in the NBA, with their observation windows kept separate
Abstract
This note originally described two NBA measures. Correction, 2026-09-29: the published Schedule Fatigue Tax (SFT) claimed a points-per-100 offensive-rating unit for its -1.73 anchor, but the cited validation ledger measures average scoring margin on zero rest (-1.41, n=856) versus at least one day of rest (+0.32, n=3876). Its difference is zero-rest minus rested, not an offensive-rating contrast. The derived offensive-rating tax is under review and must not be used as a measured performance cost. The underlying 90 team-season back-to-back counts and frequencies (2023-24 through 2025-26) remain descriptive, as does the separate raw per-36 box-composite comparison (-0.315, 12000 back-to-back player-games versus 40157 rested player-games). The Load-Bearing Index (LBI) separately compares player active-versus-missed outcomes with two estimators from different seasons: Elo on/off for 2024-25 and raw win-rate comparison for 2025-26 through 2026-04-12. They name the same leading player for only 1 of 30 teams. Neither SFT nor LBI establishes a causal effect or a game forecast.
Data integrity
The Schedule Fatigue Tax ORtg estimate is withheld. Its cited -1.73 result measures scoring margin (no-rest minus rested), not offensive rating per 100 possessions. The historical artifact misstates both the unit and subtraction order; its ORtg-derived values cannot be interpreted as validated measurements. Schedule counts and frequencies remain descriptive. The review date is not an observation date.
- novel_schedule_fatigue_tax
1 Question
This note asks how an NBA team's schedule exposure and roster availability relate to observed outcomes. The published Schedule Fatigue Tax claimed a team-season offensive-rating penalty, but that unit is under review; the supported schedule facts are back-to-back counts and frequencies plus a separate raw per-36 box comparison. The Load-Bearing Index uses two different one-season estimators of player dependence and records where they disagree.
The public correction receipt is /data/audits/nba-schedule-fatigue-units.json, reviewed 2026-09-29. That is the audit date, not the observation date of the rest comparison; the source receipt does not publish an as_of timestamp.
Both measures are pre-tip-off conditioning variables. Rest days are fixed once the league schedule is released; which player is or is not available is known, with injury reports, before a game starts. Neither measure is presented here as a forecast, and neither is tested here as a live input to a probability model.
2 Data and definitions
The historical Schedule Fatigue Tax source (novel_schedule_fatigue_tax.json) reports 90 team-seasons from 2023-24 through 2025-26, including back-to-back game count and frequency. Its points-per-100 offensive-rating variant is under review because the cited mechanism receipt measures scoring margin. The source manifest has no as_of date; these seasons are the published observation scope, not a verified computation date.
That module's source_artifacts field points to schedule_density.json, which supplies the underlying per-36 box-composite means by schedule-density state: 12000 back-to-back player-games, 17531 in a 3-in-4 window, 20120 in a 4-in-6 window, and 40157 rested player-games (2 or more days rest, no compression), pooled from 77744 total rows and 7222 team-games across the same three seasons. schedule_density.json's manifest as_of is also not published. Its own methodology states the three density classes overlap -- a back-to-back that closes a cluster is also a 3-in-4 -- so their player-game counts are not additive.
The public mechanism ledger records two b2b_rest_penalty runs on the same corpus tag. The n=4732 run reports average scoring margin -1.41 on zero rest (n=856) versus +0.32 after at least one rest day (n=3876), giving zero-rest-minus-rested -1.73 (p=0.005645490426098632). The n=7192 run reports -1.61 versus +0.35, giving approximately -1.955 (p=0.0001174325580081608). These are scoring-margin associations, not offensive ratings or points per 100 possessions. Neither ledger row has an as_of timestamp, and the overlap of their two samples is unrecorded.
The Load-Bearing Index module (novel_load_bearing_index.json) reports 30 teams, each with two independently sourced estimators: estimator_a is an Elo on/off win-probability comparison for the 2024-25 season, and estimator_b is a raw win-rate comparison between games a player was active and games that player was missed, for the 2025-26 regular season through 2026-04-12. These two as_of windows (as_of.estimator_a, as_of.estimator_b) are printed inside the module itself and are not the same population; that distinction is kept separate throughout this note.
nba_form_curves.json carries no back-to-back, rest, or schedule field in either its insights or showcase build, so it contributes nothing here. nba_consistency_profiles.json (as_of 2026-04-12) does not condition its coefficient-of-variation numbers on rest either, but its own caveat and not_this fields explicitly flag rest as an uncontrolled variable in that module, consistent with the treatment below.
3 Method
The historical SFT source multiplied each team-season's back-to-back frequency by -1.73 and labeled that product a credible points-per-100 offensive-rating tax. That interpretation is unsupported because the anchor came from average scoring margin, not offensive rating. Its team ordering is only a rescaling of back-to-back frequency. Separately, schedule_density.json reports a raw -0.315 box-composite-per-36 difference for back-to-back versus its own rested baseline. That baseline requires at least two rest days and no compression, while the mechanism ledger compares zero rest with at least one day; these are different cohorts and should not be fused into one tested effect.
The rest-state margin test behind the -1.73 anchor compares average scoring margin on zero rest days (a back-to-back) against average margin on one or more rest days, within one corpus of player boxscores. It is not a controlled experiment: the schedule-maker chooses which games fall on a back-to-back, and travel, opponent quality and home-away patterns are not held fixed between the two rest states.
LBI is defined as LBI_a = the largest, over a team's roster, of win probability with a given player minus win probability without that player (Elo on/off), and LBI_b = the largest, over a team's roster, of win rate while a given player was active minus win rate while that player was missed (raw record). Agreement is flagged true only when the two estimators name the same player for a team. Because estimator_a draws on 2024-25 and estimator_b draws on 2025-26, a match or mismatch between them is a directional cross-check across two different one-season samples, not a paired measurement of the same games.
4 Results
The first two tables show the published scoring-margin and raw per-36 rest comparisons. The third lists team-season back-to-back exposure and the separate per-36 descriptive rescaling; it withholds the unsupported offensive-rating tax. The remaining tables show LBI's two estimators.
| Measurement run | Rest state | n (games) | Avg scoring margin | p-value |
|---|---|---|---|---|
| Run 1 (total n=4732) | 0 days rest (back-to-back) | 856 | -1.41 | 0.005645 |
| Run 1 (total n=4732) | 1+ days rest | 3876 | +0.32 | 0.005645 |
| Run 2 (total n=7192) | 0 days rest (back-to-back) | 1278 | -1.61 | 0.000117 |
| Run 2 (total n=7192) | 1+ days rest | 5914 | +0.35 | 0.000117 |
mechanism_ledger_export.json, the two basketball_nba mechanism rows named b2b_rest_penalty. Differences are zero-rest minus at-least-one-day-rest average scoring margin: -1.41 - 0.32 = -1.73 in run 1 and -1.61 - 0.35 is about -1.96 in run 2 (published effect -1.955 reflects unrounded means). Both are CONFIRMED_LOCAL on the same corpus tag. The ledger publishes no confidence interval or as_of date, and neither result is an offensive-rating or possession-based measure.
| Schedule state | n (player-games) | Per-36 composite | Delta vs rested |
|---|---|---|---|
| Rested (baseline, 2+ days, no compression) | 40157 | 13.905 | 0 (baseline) |
| Back-to-back | 12000 | 13.591 | -0.315 |
| 3-in-4 days | 17531 | 13.688 | -0.217 |
| 4-in-6 days | 20120 | 13.712 | -0.193 |
schedule_density.json, per36_deltas and rested_baseline_per36. Classes overlap and are not additive -- a back-to-back closing a cluster is also a 3-in-4. No CI or p-value is published for these pooled per-36 deltas; the source declares them descriptive-only.
The two public rest comparisons both point toward lower recorded outcomes with less rest, but they measure different outcomes and use different rested baselines. The scoring-margin receipt does not validate an offensive-rating tax. Team-season back-to-back frequencies can still be compared directly.
| Team-season | Back-to-back games | Back-to-back frequency | Frequency-weighted composite / 36 |
|---|---|---|---|
| DEN 2025-26 | 17 | 0.218 | -0.0687 |
| ATL 2024-25 | 17 | 0.21 | -0.0662 |
| HOU 2024-25 | 17 | 0.21 | -0.0662 |
| GSW 2023-24 | 17 | 0.207 | -0.0652 |
| LAC 2024-25 | 17 | 0.207 | -0.0652 |
| POR 2024-25 | 13 | 0.159 | -0.0501 |
| BOS 2025-26 | 13 | 0.159 | -0.0501 |
| ATL 2025-26 | 12 | 0.158 | -0.0498 |
| CHI 2025-26 | 12 | 0.158 | -0.0498 |
| MEM 2025-26 | 12 | 0.156 | -0.0491 |
novel_schedule_fatigue_tax.json, results[] (historical source). These selected rows are ordered by back-to-back frequency, the only team-specific input. The raw per-36 companion is descriptive and uses the separate schedule_density.json baseline. The original points-per-100 offensive-rating field and its chart are under review and omitted here.
The Load-Bearing Index results below rank the same 30 teams under each estimator separately. Only 1 of 30 teams is named by both estimators (IND, Pascal Siakam), an agreement rate of 0.0333 (agreement_summary.n_agree over agreement_summary.n_teams_both_estimators).
| Team | Most load-bearing player | Delta win probability | On/off net rating delta |
|---|---|---|---|
| DEN | Nikola Jokic | 0.5822 | 23.713 |
| OKC | Shai Gilgeous-Alexander | 0.5171 | 15.763 |
| LAL | Dorian Finney-Smith | 0.4656 | 14.944 |
| MIL | Giannis Antetokounmpo | 0.4441 | 14.231 |
| LAC | Ivica Zubac | 0.4051 | 11.965 |
| MIN | Naz Reid | 0.2092 | 5.85 |
| WAS | Richaun Holmes | 0.2032 | 14.126 |
| CHA | Moussa Diabate | 0.1505 | 7.99 |
| DET | Tobias Harris | 0.1447 | 4.139 |
| PHI | Guerschon Yabusele | 0.1371 | 5.279 |
novel_load_bearing_index.json, results[].estimator_a_elo_onoff (top five and bottom five of 30 teams). Estimator A does not publish a game-count denominator for this comparison; read the win-probability delta and net-rating delta together, without a sample-size column, and see Limitations.
| Team | Most load-bearing player | Delta win rate | Games active (n) | Games missed (n) |
|---|---|---|---|---|
| CHA | Brandon Miller | 0.4543 | 65 | 17 |
| LAC | Brook Lopez | 0.4038 | 75 | 7 |
| POR | Rayan Rupert | 0.3988 | 48 | 7 |
| MIL | Kyle Kuzma | 0.3659 | 69 | 12 |
| DET | Duncan Robinson | 0.3532 | 77 | 5 |
| TOR | Immanuel Quickley | 0.169 | 70 | 12 |
| SAC | Maxime Raynaud | 0.1588 | 74 | 8 |
| PHX | Ryan Dunn | 0.1548 | 70 | 12 |
| MIN | Jaden McDaniels | 0.1027 | 73 | 8 |
| BOS | Neemias Queta | 0.0842 | 76 | 5 |
novel_load_bearing_index.json, results[].estimator_b_raw_withwithout (top five and bottom five of 30 teams). Games active plus games missed is each player's own available games inside that tenure window, not a full 82-game schedule; teams differ in total games covered.
CHA, LAC, MIL and DET each appear in the estimator B top five while sitting outside the estimator A top five for the same team, which illustrates that the two estimators frequently disagree on magnitude as well as on which player is named.
5 Robustness and what would falsify this
The validation ledger records two negative zero-rest-minus-rested average scoring-margin differences, -1.73 (n=4732, p=0.005645490426098632) and -1.955 (n=7192, p=0.0001174325580081608). Both share one corpus tag, and their row overlap is unrecorded, so the second is not an independent out-of-sample replication. They do not measure offensive rating. The published SFT offensive-rating variant is under review; a fresh possession-based receipt would be needed to support that unit.
A team-by-schedule interaction analysis would test whether the observed margin association differs by team. No such test is published. The historical SFT ranking simply rescales each team's back-to-back frequency, so it cannot establish which team is more fatigue-prone.
For LBI, a robustness check would run both estimators on the same season for the same 30 teams; the agreement rate would be expected to rise if the underlying signal were estimator-independent. At 1 of 30 (3.33 percent) across two different seasons, the current data does not support treating either estimator's top-named player as validated. Running estimator B on the 2024-25 season, matching estimator A's window, would be the natural next check.
6 Limitations
This note does not establish a team-specific or causal fatigue effect. The source rest receipt measures scoring margin, while the published SFT variant mislabeled its derived values as offensive rating; that variant is under review. The separate per-36 box composite uses another rested baseline and is unadjusted for roster, opponent, minutes, and venue. The two LBI estimators remain associational and cover different NBA seasons.
- The historical SFT numerical ranking is a constant times back-to-back frequency. It is not a validated points-per-100 offensive-rating ranking; compare the supported back-to-back frequencies directly.
- The two b2b_rest_penalty runs (n=4732 and n=7192) share one corpus tag and the overlap between their rows is not recorded, so they are not two independent samples; rest days are chosen by the schedule-maker rather than assigned at random, so either run is an association, not a randomized comparison.
- The two LBI estimators cover different seasons (2024-25 versus 2025-26 through 2026-04-12), so their 1-of-30 agreement is cross-season corroboration, not a paired estimate.
- Both measures aggregate to the team level and do not adjust for roster changes, opponent strength, minutes distribution, or blowout-driven lineup substitutions.
- Estimator A publishes no game-count denominator, so its ranking cannot be weighted by sample support the way estimator B's active and missed game counts allow.
7 How to read this on the site
Read the source rest-margin receipt and raw schedule-density rows alongside this paper. The historical SFT module and chart retain under-review offensive-rating values for audit, not as current performance claims; use its back-to-back counts and frequencies for descriptive schedule comparison. The nba-schedule-compression-profile analysis is a different summary of schedule shape. The LBI estimators should be read with their separate season windows and player support counts.
Evidence
- novel_schedule_fatigue_tax.jsondate not publishedSource path: /analytics/m/novel_schedule_fatigue_tax/
Evidence field inventory (20 paths)
- results[].team
- results[].season
- results[].b2b_games
- results[].b2b_freq
- results[].sft_credible_pts_per100_ortg
- results[].sft_descriptive_composite_per36
- schedule_inequality.n_team_seasons
- schedule_inequality.sft_credible_min
- schedule_inequality.sft_credible_max
- schedule_inequality.sft_credible_range
- schedule_inequality.sft_credible_std
- schedule_inequality.b2b_freq_min
- schedule_inequality.b2b_freq_max
- schedule_inequality.per_season_b2b_freq_range
- mechanism_receipt.effect_cited_from_receipt
- b2b_ortg_effect_pts_per100
- composite_per36_delta_vs_rested
- formula
- declared_confounds
- headline
- schedule_density.jsondate not publishedSource path: /analytics/m/schedule_density/
Evidence field inventory (16 paths)
- input_coverage.rows
- input_coverage.team_games_total
- input_coverage.team_seasons_reported
- input_coverage.player_games_pooled
- input_coverage.rested_player_games
- rested_baseline_per36.composite_per36
- per36_deltas.b2b.n_player_games
- per36_deltas.b2b.composite_per36
- per36_deltas.b2b.composite_per36_delta_vs_rested
- per36_deltas.3in4.n_player_games
- per36_deltas.3in4.composite_per36
- per36_deltas.3in4.composite_per36_delta_vs_rested
- per36_deltas.4in6.n_player_games
- per36_deltas.4in6.composite_per36
- per36_deltas.4in6.composite_per36_delta_vs_rested
- not_this
- mechanism_ledger_export.jsondate not publishedSource path: /analytics/m/mechanism_ledger_export/
Evidence field inventory (4 paths)
- headline_insight
- what_it_means
- cited[]
- as_of
- mechanism_ledger_export.jsondate not publishedSource path: /analytics/m/mechanism_ledger_export/
Evidence field inventory (14 paths)
- source
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty].mechanism
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.73].effect
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.73].p
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.73].corpus
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.73].evidence
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.73].verdict
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.73].as_of
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.955].effect
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.955].p
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.955].corpus
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.955].evidence
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.955].verdict
- by_sport.basketball_nba.mechanisms[mechanism=b2b_rest_penalty,effect=-1.955].as_of
- novel_load_bearing_index.jsondate not publishedSource path: /analytics/m/novel_load_bearing_index/
Evidence field inventory (16 paths)
- as_of.estimator_a
- as_of.estimator_b
- agreement_summary.n_teams_both_estimators
- agreement_summary.n_agree
- agreement_summary.agree_rate
- results[].team
- results[].estimator_a_elo_onoff.player_name
- results[].estimator_a_elo_onoff.delta_winprob
- results[].estimator_a_elo_onoff.on_off_net_rating_delta
- results[].estimator_b_raw_withwithout.player_name
- results[].estimator_b_raw_withwithout.delta_win_rate
- results[].estimator_b_raw_withwithout.n_active
- results[].estimator_b_raw_withwithout.n_missed
- results[].agreement_same_player
- declared_confounds
- headline
- nba_consistency_profiles.jsonas_of 2026-04-12Source path: /analytics/m/nba_consistency_profiles/
Evidence field inventory (2 paths)
- methodology.caveat
- not_this[]