NBA Shot Simulator
Published model · All-or-Nothing Scenarios · Fine-Tuning Simulator →
33,362 three-pointers from the 2014-15 season — made or missed. League average: about 35%. What drove that number — and what could have changed it?
Pin every shot to one chosen condition per factor and see how the overall make rate shifts. Filter to a single player to see how their profile differs from the league.
Curious what's happening inside the model when you apply a scenario? See the companion walkthrough Inside the Model — it traces one shot's conditions through the equation and shows how the league make rate emerges from all 33,362 individual predictions.
How to Use This Tool
Test what drove three-point make rates in the 2014-15 NBA season
How to Use This Tool
Test what drove three-point make rates in the 2014-15 NBA season
1. Choose league or player
Start with All 3-point shots to use the league-wide published model, or pick a player like Stephen Curry. When you pick a player, the simulator searches for a custom model built on that player's shots only — the variables may differ from the published six. A blue callout names the discovered variables; a gray notice tells you when the sample was too small for a reliable custom model and the published model is being refit on that player's shots instead.
2. Set the scenario
Use the preset buttons for a quick start, or set each dropdown manually. The colored bar under each variable's label shows its model leverage — the make-rate swing between its worst and best levels, holding the others fixed. You can set one factor or several at once; the model accounts for all variables jointly.
3. Run the scenario
Click Run scenario to send your settings through the active model (published or custom, depending on which player is selected). The result shows the projected make rate and a 95% confidence interval. The How certain is this result? chart shows 10,000 simulated outcomes so you can see how much the baseline and your scenario overlap.
4. Explore each factor
Click Explore Each Factor after a run to see every level of every variable holding the rest of the scenario fixed. This is the quickest way to see whether defender distance, shot clock, or shot distance is doing most of the work for the currently active model.
5. Switch to Fine-Tuning
All-or-Nothing pins every shot to one specific value per condition — useful for testing extreme scenarios. If you'd rather shift distributions incrementally (move some attempts from late shot-clock to early, for example), use the Fine-Tuning Simulator link above the scenario panel. Your player selection carries over.
6. Save, share, and reset
Every run is saved to the Saved Scenarios drawer at the bottom of the page — click Load on any card to restore its settings, or Remove to drop it. Use Share scenario to copy a link with your settings encoded, or Reset to baseline to return every dropdown to "No change". The league-wide baseline is ~35%; individual players vary widely.
Loading simulator…
Couldn't load the simulator
Want to shift distributions instead of pinning to one value? Fine-Tuning Simulator →
Set the scenario
The number on each card is the variable's swing on this page — how far the prediction would move if every respondent had this variable's lowest-leverage value versus its highest-leverage value, holding the other variables at their observed values. A bigger swing means a bigger lever.
Predicted outcome
How did you change the survey?
Each pair of bars compares the actual distribution (green) to the distribution under your scenario (red where you changed it). This is what you changed — not the predicted impact, just the input.
How certain is this result?
Every prediction has wiggle room — these histograms show how much. The green bars are the plausible answers for the baseline; the red bars are the plausible answers for your scenario. Where the colors overlap, the two answers are close enough that the model can't cleanly tell them apart.
Set-everyone-to-X table
Click to show predicted outcomes for every level of every variable
Set-everyone-to-X table
Click to show predicted outcomes for every level of every variable
For each variable's level, the predicted outcome if every respondent had that response, all else unchanged. This is the analytic view of the simulator.
Calibration: predicted vs. observed
How closely the model's predicted probabilities track the observed outcome rates, binned by predicted decile. Bubble size shows respondents per bin. The dashed diagonal is perfect calibration; the blue scenario line is your run; the gray line (when present) is the unmodified base model for comparison.
Explore each factor
For each variable, see how the predicted outcome would change if you switched just that one selection — holding all your other selections fixed. Reveals which individual choices have the most leverage given your current scenario.