NBA Monte Carlo Simulation: What It Is and How It Predicts Games
Ask ten basketball fans who wins tonight’s game and you get ten answers. Ask a Monte Carlo simulation and you get something different: the Celtics win 64% of the time. That is not an answer to “who wins” — it is an answer to “how often,” and once you see why that is the better question, you will not want to go back.
This post explains what an NBA Monte Carlo simulation is, why it produces probabilities instead of a single score, and how to read what it gives you. It is written for fans, not statisticians. If you want the measured track record of DunkSim’s own engine, that lives on the accuracy page; this post is about the method.
The one idea behind Monte Carlo
A Monte Carlo simulation answers a question by playing it out many times with randomness included, then counting what happened.
The method got its name in the 1940s, when Nicholas Metropolis and Stanislaw Ulam used repeated random sampling to solve problems that had no clean formula. The classic illustration: you want to know the chance of rolling at least one six in four throws of a die. You could do the algebra, or you could roll four dice, note whether a six appeared, and repeat ten thousand times. The share of trials with a six is your answer — about 52%. No formula, just repetition and counting.
The method earns its keep when the algebra is impossible. A basketball game is roughly 200 possessions — about 100 per team, in the standard definition used by basketball analysts — each one a small random event (make, miss, turnover, foul) whose probabilities depend on who is on the floor. No closed-form equation describes the final score of that. But you can play it. Play it once and you get one plausible game. Play it thousands of times and you get the whole range of plausible games — and the share of those games each team wins is the win probability.
That is the entire trick. Everything else is detail about how realistically each possession is played.
Why basketball suits it so well
Three properties make the NBA a natural fit:
Many small repeated events. A football game has about 130 plays; a baseball game about 75 plate appearances; a basketball game about 200 possessions. More events means the randomness of any one possession matters less, and the underlying strength of the teams shows through more clearly. It also means a single game has a lot of possible outcomes, which is exactly what a simulation is built to enumerate.
Outcomes depend on individuals. A trade, an injury, a rest night — any of these changes the game, and a possession-level simulation can model it directly by changing who takes the shots. A team-level rating cannot.
Results are noisy. The average margin of victory in the 2025-26 regular season was 13.3 points, and games that “should” be close routinely are not. A method that outputs a distribution is being honest about this; a method that outputs one score is pretending the noise does not exist.
How an NBA game simulator works, from the outside
Here is the shape of what happens when you press Simulate in DunkSim, described at the level a user sees it. (The engine’s internals are not published; its results are — see below.)
- Each player carries a set of ratings — scoring, rebounding, passing, defense, pace, and so on — estimated from several seasons of box-score data, with more weight on recent games so that form reflects who a player is now, not a career average.
- The game is played possession by possession. Who has the ball, who shoots, whether it goes in, who rebounds: each is drawn from probabilities set by the players on the floor.
- The game is played again. Thousands of times. Each run is a complete, plausible game with its own box score.
- The results are counted. The share of runs a team wins is its win probability. The middle of the margin distribution is the projected margin. How widely the runs vary tells you how uncertain the matchup is.
What you get back is not “Celtics 112, Knicks 105.” It is “Celtics win 64% of runs; typical margin around 5; a 20-point Knicks win happened in about 3% of runs.” That last number is the one no single-score forecast can give you.
Reading the output: three numbers that matter
Win probability is the headline. A 64% team is a favorite, not a lock — it loses that game more than one time in three. The practical question is whether the probability is calibrated: when the engine says 64%, do those teams win about 64% of the time? Calibration, not confidence, is what separates useful forecasters from loud ones — the central finding of Philip Tetlock’s forecasting research. That can be measured, and DunkSim publishes the measurement on the accuracy page — grouped by confidence band, so you can see where the engine is well-calibrated and where it is overconfident.
Projected margin is the center of a wide range. The average margin error across a full season of replayed games was about 15 points — which sounds terrible until you remember real margins vary by 13 points on average. Read the projected score as “the middle of the distribution,” never as “the final score.”
The distribution itself is where simulation beats every other method. How often does the underdog win by double digits? How often does the game go to overtime? What is the chance the combined score clears a threshold you care about? Those are questions about the shape of the outcome range, and they fall straight out of counting runs.
Why more runs help (briefly)
Every simulation run is a sample. The win probability you see is an estimate from those samples, and like any estimate it has sampling error that shrinks as the sample grows — roughly with the square root of the number of runs. Ten times more runs cuts the noise to about a third. For a lopsided matchup a few hundred runs settle the winner; for a coin-flip game with a 51/49 probability you need thousands before the number stops wobbling. A later post explains this properly; the short version is that more runs do not make the engine smarter, they make its answer steadier.
What a simulation cannot do
It is worth being blunt here, because the method’s reputation suffers when people expect the wrong thing.
It cannot remove upsets. DunkSim’s engine named the correct winner in 69.3% of 2025-26 regular-season games in a replay test. That means roughly three games in ten went the other way. No model changes that; basketball is played by people.
It only knows what it is told. A late scratch, a player on a minutes limit, a back-to-back on the road — if those are not in the inputs, they are not in the output. This is also why a replay test (run after the fact, with known lineups) will score a little higher than a live forecast would.
It can be systematically off even when it is right on average. The accuracy page notes that the engine’s projected margins are exaggerated — lopsided matchups come out more lopsided than they turn out — and that it is overconfident in its surest games. A simulation is a model of basketball, not basketball, and a good one tells you where it is wrong.
It is not a reason to do anything with money. DunkSim is a simulation and prediction game for entertainment. There is no wagering in it and it is not built to support any. The number it gives you is a probability about a basketball game — use it to argue, to learn, and to compete with friends on who reads the game better.
How to use it well
A few habits that make simulation output useful instead of merely interesting:
- Think in probabilities, not winners. A 55% team is barely a favorite. Treat 55 and 75 as very different statements, because they are.
- Change one thing and re-run. The point of a simulator is the counterfactual. Take a star out, add a free agent, move a game to the other building — then see how far the probability moves. Small moves on big changes tell you as much as big moves do.
- Compare the engine to the obvious baseline. On the 2025-26 season, simply choosing the team with the better record would have been right 67.0% of the time; the engine scored 69.3%. The gap is real and modest, and knowing it keeps your expectations honest.
- Check the calibration table before trusting a high number. Confidence above 80% is where the engine most overstates itself.
Try it
Simulate any NBA game — today’s matchups, any game from the last 30 years, or two teams that never met. Then check the engine’s public accuracy record and decide for yourself how much weight it can bear.
Frequently asked questions
What is a Monte Carlo simulation in basketball?
A method that predicts a game by playing it out many times with realistic randomness in each possession, then counting how often each outcome happened. The share of runs a team wins is its win probability.
Is a Monte Carlo NBA simulator accurate?
It depends on the engine. DunkSim publishes a measured replay test, 69.3% correct winners across all 1,230 games of the 2025-26 regular season and 63.5% across the 85 playoff games, along with calibration and margin error, on its accuracy page at dunksim.app/accuracy.
Why does the simulator give a probability instead of a score?
Because a single game has many plausible outcomes, and a probability is the honest summary of them. A projected score is shown too, but it is the middle of a wide range, not a forecast of the final.
How many simulations are enough?
Enough that the win probability stops changing when you add more. Lopsided games settle quickly; close games need thousands of runs.
Does DunkSim involve real-money wagering?
No. DunkSim is a simulation and prediction game for entertainment. There is no wagering and no real-money play of any kind.