Find the shots worth
a second look.
Which shot situations are outperforming or underperforming expectations—and what should a coach or analyst investigate?
REAL NBA DATA · Loading verified held-out analysis…
Loading real shot data. This can take a moment on slower connections.
Explore the evidence
No shots match these filters. Clear a player, team, or situation filter to broaden your view.
Where outcomes diverge
ZONE COMPARISONField goal make rate (%) · Actual Expected
Shot locations
HALF COURTFeet from basket · Made Missed
Investigation queue
| Situation | Attempts | Games | Actual FG% | Expected FG% | Residual makes | Difference (pp) | Approx. 95% interval |
|---|
Residual = actual − expected makes. Intervals use game-cluster residual totals, need ≥5 games, omit model uncertainty, and are not corrected for multiple comparisons. Rankings are descriptive leads, not causal findings.
A transparent expectation, tested on later games.
Logistic regression uses distance in feet, shot zone, 2PT/3PT type, and period. Training-only scaling and one-hot encoding prevent preprocessing leakage. Player and team identities are excluded. Shot-clock time is unavailable and is omitted.
| Predictor | Brier ↓ | Log loss ↓ | ROC AUC ↑ |
|---|
These metrics use the complete held-out set and stay fixed when filters change. Lower Brier/log loss is better. AUC measures ranking, not calibration.
Inspect coefficients
| Encoded feature | Log-odds coefficient |
|---|
Real data. Reproducible provenance.
2023–24 NBA shot detail archive by Vladislav Shufinskiy, originally collected from NBA statistics sources by the publisher. Dataset: Apache-2.0 · Attribution notice · Code: MIT. This browser dashboard uses the same fitted probabilities as the Python pipeline. No synthetic data or live scraping.
For calibration, full exports, and deeper analysis, run the full Streamlit application. This public version provides filters, shot maps, zone comparisons and situation tables without installation.