Data Collection
This study combines two data sources. Secondary market get-in prices were collected from ticket listing data stored in a JSON file. Game results and DNP logs were scraped from Basketball Reference using cloudscraper and BeautifulSoup, targeting the official box score page for each game. A HumanDelay class was used to randomize request timing and avoid rate limiting, with randomized pauses between requests, periodic short breaks, and occasional long breaks to simulate natural browsing behavior.
After scraping, games with missing box score data were flagged as NOT_FOUND and removed during a cleaning step. An additional deduplication pass removed 797 duplicate rows, and 150 rows with malformed team names (tournament-prefixed entries like "NBA Cup -") were filtered out, leaving 2,353 usable games.
- Ticket data: JSON file → secondary market get-in prices per game
- Boxscore scraper: cloudscraper + BeautifulSoup → scores, DNP logs, active rosters
- Cleaning: Remove NOT_FOUND rows, malformed team names (150 dropped), duplicates (797 dropped)
- Output: bbref_games_cleaned.csv → 2,353 games ready for analysis
The Problem
Load management has become one of the most debated topics in the NBA, and for good reason. When you buy a ticket to see a star player and that player sits out, you already paid. There is no refund. The secondary market priced that ticket assuming the star would play, and when he doesn’t, that premium is gone. I wanted to put a number on exactly how much value fans are losing.
Secondary market data is ideal here because prices move in real time as fans react to lineup news. If a star gets ruled out before tip-off, resale prices drop immediately. The market is telling you what that player’s presence was actually worth.
Data Methodology
Season stats were aggregated using pandas after loading from CSV. Player names were standardized by stripping punctuation and converting to lowercase before merging across files. DNP records from Basketball Reference were parsed by splitting semicolon-delimited entries and extracting the player name from each entry.
I hand-curated 45 All-Stars across three seasons tiered by selection type. Each tier was assigned a value share based on sports economics research on how much individual star players drive attendance and willingness to pay. The value loss for any game is calculated by multiplying the ticket price by the tier share for each star who sat out.
Tier System
Tier 3 (Fan Vote Starters): 20% of ticket value. Tier 2 (Coaches’ Selection): 12%. Tier 1 (Replacement Selections): 6%. These are conservative priors grounded in sports economics literature, not estimates derived from this dataset.
Value Loss Formula
Per-ticket loss = ticket price × tier value share, summed across all home star DNPs. Only home star DNPs are counted. Home fans paid specifically for their own team’s stars. Away DNPs are tracked separately in the road resting analysis.
Why Normalize?
Absolute dollar losses are mechanically correlated with ticket price by construction: loss = price × share. Without normalizing, ranking teams by dollar loss just ranks them by ticket price. Cross-team comparisons use loss as a % of ticket price to remove that bias.
Regression Approach
OLS with home team fixed effects. The outcome is log(price), which is standard in hedonic pricing models. Coefficients read as % change in ticket price per unit change in each predictor, controlling for team identity, score margin, and total DNP count.
| Metric | Value |
|---|---|
| Total games analyzed | 2,353 |
| Games with any DNP | 2,218 (94.3%) |
| Games with any star DNP | 235 (10.0%) |
| Games with home star DNP | 127 (5.4%) |
| Games with away star DNP | 116 (4.9%) |
| Avg total DNPs per game | 4.91 |
| Mean ticket price | $65.02 |
| Median ticket price | $34.00 |
| Ticket price range | $4 – $1,672 |
| Avg price — no star DNP (n=2,118) | $66.79 |
| Avg price — star DNP (n=235) | $49.12 |
Data Modeling
I ran two OLS models. The first uses log(price) as the outcome, which is the standard hedonic pricing approach in sports economics. This keeps results interpretable as percentage changes and handles the right-skew in ticket prices caused by a small number of very high-demand games. The second model uses normalized value loss % as the outcome so I can make fair cross-team comparisons that are not inflated by market-size differences.
Why log(price)? Ticket prices are right-skewed — most games land between $30–$150 but some spike past $1,000. Using the logarithm compresses that skew, stabilizes variance, and produces coefficients that read as “this factor changed price by X%” rather than an unstable dollar figure that shifts with market conditions.
The away star DNP result is the headline finding. When the visiting star sits out, secondary market prices drop by 30.5% on average, and that holds after controlling for team identity, score margin, and total DNP count. The home star effect is negative at −13.3% but does not clear statistical significance. The most likely reason is that home fans often buy tickets in advance and the secondary market does not fully re-price before game time.
The positive coefficient on Total DNPs is a confound worth flagging. Games with more DNPs tend to happen late in the season when playoff races drive demand regardless of who is sitting out. The positive Score Margin result confirms something intuitive: close games have higher secondary market value than blowouts.
Results — Per-Team Breakdown
Teams are ranked by normalized loss %, value destroyed as a share of what fans paid. This removes the mechanical correlation between dollar losses and ticket prices. Without this adjustment, you would simply be ranking teams by how expensive their tickets are rather than by how badly their fans actually got shortchanged.
The key finding: Portland ranks #1 in fan shortchanging despite having the lowest average ticket price in the dataset at $25.29. The New York Knicks rank #7 despite having the highest average price at $284.57. The Knicks’ raw dollar loss per ticket ($3.23) looks worse than Portland’s ($1.39), but their normalized loss (1.379%) is a third of Portland’s (4.829%). That reversal is not a data quirk; it is the entire point of normalizing.
| # | Team | Games | Avg Price | DNP Rate | Loss / Ticket | Loss % | Arena Loss / Game |
|---|---|---|---|---|---|---|---|
| 1 | Portland Trail Blazers | 82 | $25.29 | 30.5% | $1.39 | 4.829% | $24,398 |
| 2 | Miami Heat | 84 | $42.15 | 26.2% | $1.44 | 3.571% | $25,200 |
| 3 | Philadelphia 76ers | 86 | $33.73 | 16.3% | $0.61 | 2.930% | $10,703 |
| 4 | Atlanta Hawks | 89 | $41.21 | 22.5% | $1.30 | 2.697% | $22,781 |
| 5 | Detroit Pistons | 91 | $32.76 | 12.1% | $0.64 | 2.286% | $11,192 |
| 6 | Boston Celtics | 83 | $177.43 | 7.2% | $1.65 | 1.446% | $28,801 |
| 7 | New York Knicks | 87 | $284.57 | 6.9% | $3.23 | 1.379% | $56,523 |
| 8 | Golden State Warriors | 82 | $143.94 | 4.9% | $1.48 | 0.976% | $25,866 |
| 9 | Cleveland Cavaliers | 82 | $43.60 | 4.9% | $0.57 | 0.927% | $9,988 |
| 10 | Indiana Pacers | 88 | $63.81 | 3.4% | $0.10 | 0.727% | $1,782 |
| 11 | Oklahoma City Thunder | 84 | $88.08 | 2.4% | $0.12 | 0.429% | $2,150 |
| 12 | Memphis Grizzlies | 82 | $15.06 | 2.4% | $0.04 | 0.293% | $691 |
| 13 | LA Clippers | 86 | $53.45 | 2.3% | $0.06 | 0.279% | $1,050 |
| 14 | Milwaukee Bucks | 84 | $31.45 | 1.2% | $0.10 | 0.238% | $1,833 |
| 15 | Toronto Raptors | 87 | $58.37 | 1.1% | $0.12 | 0.207% | $2,172 |
| 16 | Washington Wizards | 80 | $32.40 | 1.2% | $0.01 | 0.150% | $158 |
| 17 | Dallas Mavericks | 81 | $94.31 | 2.5% | $0.08 | 0.148% | $1,439 |
| 18 | Denver Nuggets | 88 | $72.94 | 1.1% | $0.04 | 0.136% | $740 |
| 19–28 | Brooklyn Nets, Chicago Bulls, Houston Rockets, Orlando Magic, Minnesota Timberwolves, New Orleans Pelicans, Sacramento Kings, Phoenix Suns, San Antonio Spurs, Utah Jazz — 0.000% home star DNP rate in this dataset window | ||||||
Results — Most DNP’d All-Stars
Of the 45 All-Stars tracked, these players missed the most games across the dataset combining both home and away absences. Road resting, sitting out specifically on away trips, is arguably the more damaging behavior since it denies the home crowd the marquee visiting matchup they paid for. On the road specifically, Tyrese Maxey led with 11 road DNPs, Cade Cunningham had 10, and Jaylen Brown and Damian Lillard each had 9.
Results — Worst-Value Games
These are the games where home fans lost the highest percentage of their ticket’s value based on star DNPs. Multiple All-Stars sitting out simultaneously compounds the loss sharply. The 32% ceiling you see in the top three games is the model’s mathematical maximum for two Tier 2 stars sitting out at the same time (12% + 12% + 8% for the second home Tier 2 = 32% when one is a Tier 3 and one is Tier 2: 20% + 12% = 32%).
Results — Season Trends
Star DNP rates have climbed every season in the dataset, going from 6.8% of games in 2023–24 to 12.4% in 2025–26. That is nearly double in two years. Average ticket prices have declined over the same window, which is consistent with the secondary market adjusting to growing uncertainty around star availability.
| Season | Games | Star DNP % | Avg Price | Avg Loss / Ticket | Avg Loss % |
|---|---|---|---|---|---|
| 2023–24 | 632 | 6.8% | $77.14 | $3.21 | 7.86% |
| 2024–25 | 1,001 | 10.3% | $70.62 | $6.40 | 9.09% |
| 2025–26 | 720 | 12.4% | $46.61 | $3.47 | 8.31% |
Aggregate Value Loss Estimates
Across the 235 star DNP games in the dataset, fans paid an average of $4.71 per ticket in estimated value they did not receive. Scaling to a standard arena attendance of 17,500, the estimated total fan-facing loss across all games in the dataset exceeds $19.3 million. This is a conservative estimate since it only counts home star DNPs. Including away star DNPs would push this figure considerably higher.
| Metric | Value |
|---|---|
| Star DNP games | 235 |
| Avg per-ticket loss (affected games) | $4.71 |
| Avg per-ticket loss % (affected games) | 8.57% |
| Max per-ticket loss (single game) | $86.00 |
| Total per-ticket loss (all games) | $1,106 |
| Est. total fan-facing loss (~17,500 tickets/game) | $19,353,600 |
Limitations & Future Work
The tier value shares (20%, 12%, 6%) are informed assumptions grounded in sports economics literature, not estimates derived from this dataset. A more rigorous approach would use an event-study design that measures secondary market price movements in the hours immediately after a DNP announcement to empirically derive each player’s individual value share. That is the logical next step for this project.
The normalized loss model’s R² of 0.946 is inflated because value_loss_pct is constructed from price, and price is a regressor in the model. The log-price model’s R² of 0.42 is the more meaningful fit statistic. The model also does not account for opponent difficulty, game schedule position, or in-season tournament games, all of which influence ticket demand independently of star availability.
Finally, worst-game loss percentages are bounded by the model’s assumptions. The maximum observable loss is the sum of tier shares for the stars who sat out. Two Tier 2 stars = 24% ceiling. One Tier 3 and one Tier 2 = 32% ceiling. These are construction ceilings, not empirical observations of maximum possible loss.

