Skip to main content

The 2021-22 Crackdown

When the NBA stopped rewarding ‘non-basketball moves’, who lost the whistle?

The natural experiment

Before the 2021-22 season, the NBA told officials to stop rewarding “non-basketball moves”: abrupt sideways or backward launches into defenders, hooking a defender’s arm, and similar tricks designed to draw a foul rather than score. It is the closest thing basketball has to a policy experiment on exactly the behavior this index measures.

League-wide, the effect was immediate: three-point shooting fouls fell from 1.42 to 1.08 per 100 attempts in one season. The sharper question is whether the rule hit the players who had been leaning on those moves, and whether our index had flagged them in advance.

Design

  • Panel: regular-season player-seasons with 500+ minutes, 2018-19 to 2025-26. The minutes threshold deliberately ignores shot volume, so the sample isn’t filtered on the outcomes being measured. Treated players are those who were qualifying scorers before the rule (237 players).
  • Pre-period 2018-19 to 2020-21; post-period 2021-22 to 2025-26.
  • Treatment intensity: each player’s pooled pre-period three-point shooting-foul rate, standardized (continuous), plus a binary top-quartile version. An alternative uses the index’s own pre-period Whistle Score.
  • Specification: two-way fixed effects (player + season) difference-in-differences with standard errors clustered by player (fixest). Season effects absorb the league-wide drop, so estimates measure the differential change for heavier foul-drawers.

The trap: regression to the mean

Players picked because they drew unusually many fouls in 2018-21 will tend to draw fewer later even with no rule change. Extreme seasons don’t repeat. Two checks separate the rule from that drift:

  1. Placebo: pretend the rule arrived in 2019-20, measuring treatment in 2016-18 and using only pre-rule seasons. Any “effect” there is pure drift.
  2. Separate treatment window: measure foul-drawing in 2016-18, before the outcome window, so mean reversion can’t mechanically create the effect.

Results

Show code
show <- did[outcome %in% c(TF, TS, P75, EX)]
show[, Estimate := fifelse(outcome == TS, 100 * estimate, estimate)]
show[, `95% CI` := fifelse(outcome == TS, sprintf("[%.2f, %.2f]", 100 * ci_lo, 100 * ci_hi), sprintf("[%.3f, %.3f]", ci_lo, ci_hi))]
show[, outcome := fifelse(outcome == TS, "True shooting % (points)", outcome)]
show[, .(Outcome = outcome, Specification = spec, Estimate, `95% CI`, p, N = n)] |>
  gt(groupname_col = "Outcome") |>
  fmt_number(Estimate, decimals = 3, force_sign = TRUE) |> fmt(p, fns = function(x) vapply(x, pval, "")) |>
  tab_style(cell_text(weight = "bold"), cells_body(rows = Specification %in% c("Placebo: fake rule in 2019-20", "Treatment = pre EHI Whistle Score"))) |>
  tab_options(table.width = gt::pct(100), table.font.size = px(13), data_row.padding = px(3))
Specification Estimate 95% CI p N
Excess FT rate
Main: continuous treatment +0.003 [-0.005, 0.010] p = 0.490 1305
Main: binary top-quartile +0.004 [-0.008, 0.017] p = 0.517 1305
Balanced panel +0.003 [-0.005, 0.010] p = 0.491 1250
Age control +0.002 [-0.006, 0.009] p = 0.676 1305
Treatment from 2016-18 (no RTM) +0.005 [-0.004, 0.013] p = 0.274 781
Treatment = pre EHI Whistle Score −0.005 [-0.013, 0.002] p = 0.162 1305
Placebo: fake rule in 2019-20 +0.000 [-0.005, 0.006] p = 0.888 843
3PT shooting fouls per 100 3PA
Main: continuous treatment −0.531 [-0.770, -0.293] p < 0.001 1305
Main: binary top-quartile −1.060 [-1.397, -0.722] p < 0.001 1305
Balanced panel −0.532 [-0.770, -0.293] p < 0.001 1250
Age control −0.526 [-0.764, -0.289] p < 0.001 1305
Treatment from 2016-18 (no RTM) −0.167 [-0.403, 0.069] p = 0.168 779
Treatment = pre EHI Whistle Score −0.352 [-0.532, -0.171] p < 0.001 1305
Placebo: fake rule in 2019-20 −0.382 [-0.595, -0.169] p < 0.001 841
Points per 75 possessions
Main: continuous treatment −0.848 [-1.358, -0.337] p = 0.001 1305
Main: binary top-quartile −1.948 [-2.998, -0.898] p < 0.001 1305
Balanced panel −0.852 [-1.363, -0.340] p = 0.001 1250
Age control −0.449 [-0.890, -0.008] p = 0.047 1305
Treatment from 2016-18 (no RTM) −0.802 [-1.344, -0.260] p = 0.004 781
Treatment = pre EHI Whistle Score −0.264 [-0.851, 0.323] p = 0.379 1305
Placebo: fake rule in 2019-20 −0.321 [-0.740, 0.098] p = 0.135 843
True shooting % (points)
Main: continuous treatment −0.825 [-1.20, -0.45] p < 0.001 1305
Main: binary top-quartile −1.470 [-2.38, -0.56] p = 0.002 1305
Balanced panel −0.828 [-1.21, -0.45] p < 0.001 1250
Age control −0.613 [-0.97, -0.26] p < 0.001 1305
Treatment from 2016-18 (no RTM) −0.554 [-0.97, -0.14] p = 0.010 781
Treatment = pre EHI Whistle Score −0.379 [-0.75, -0.00] p = 0.049 1305
Placebo: fake rule in 2019-20 −0.048 [-0.45, 0.35] p = 0.814 843

Three-point fouls: mostly drift

The headline estimate looks dramatic: each standard deviation of pre-rule foul-drawing predicts -0.53 three-point fouls per 100 attempts afterward (p < 0.001). But the placebo shows -0.38 (p < 0.001) with no rule at all, and measuring treatment in the earlier window shrinks the effect to -0.17 (p = 0.168). Most of the apparent targeting is regression to the mean. The rule clearly lowered three-point fouls for everyone, but this design can’t show it fell disproportionately on the prior foul-drawers.

Event study of three-point shooting fouls per 100 attempts by season, relative to 2020-21, per standard deviation of pre-period foul-drawing.

Efficiency: a real, targeted hit

True shooting tells a cleaner story. Heavier pre-rule foul-drawers lost 0.83 TS points per standard deviation after the rule (p < 0.001). The effect survives every check:

  • the early treatment window (0.55 points, p = 0.010), so it is not mean reversion;
  • an age control (0.61 points, p < 0.001), so it is not aging foul-drawers;
  • while the placebo is flat (-0.05 points, p = 0.814).

Event study of true shooting percentage by season relative to 2020-21; flat before 2021-22, then roughly 0.5 to 0.8 points lower afterward.

The index saw it coming

Using the pre-rule EHI Whistle Score as the treatment, a measure built before and independently of the rule, each standard deviation of whistle-dependence predicts a 0.38-point drop in true shooting after the crackdown (p = 0.049). The players the index labeled as whistle-reliant are the ones whose scoring got less efficient once the league stopped rewarding non-basketball moves. That is external validation of what the Whistle Score measures.

The excess free-throw rate did not fall differentially (+0.003, p = 0.490). One reading: foul-drawers still got to the line on drives and contact at the rim, but lost the cheap jump-shot whistles that had padded their efficiency.

Caveats

  • Event-study pre-trends look flat partly by construction, because treatment is measured over the same pre-period. The placebo and early-window checks carry the identification weight.
  • The sample is small (237 players), and the binary top-quartile group even smaller.
  • Linear age is absorbed by player + season fixed effects; the age control is a quadratic term.
  • Other things changed after 2021-22 (pace, the take-foul rule in 2022-23). They hit all players, and season fixed effects absorb anything common to everyone.