News
nbaanalysis2026-08-12

Why we simulate a game instead of predicting a score

Our NBA model's total-points error was 15.17 vs the market's 14.36 across 1,070 games. That gap is exactly why we stopped predicting scores.

XRedditText

A prediction is a point. A simulation is a distribution. The difference decides whether you have anything to bet.

What we found

We ran our NBA model against 1,070 completed games and scored it the naive way: mean absolute error on the game total. Our model landed at 15.17 points. The closing market landed at 14.36. We were worse than the number we were trying to beat, on the metric most people would grade us on.

That result is easy to read as failure, and on that metric it is one. But it is also the wrong metric, and understanding why is the whole argument for simulation.

A point estimate answers one question: what is the most likely total? A market has already answered that question, and across 1,070 games it answered it better than we did. If your entire model output is a number, you are competing directly against the sharpest consensus available, on its home turf, and our 0.81-point deficit is what that competition looks like.

A simulation answers a different question: across thousands of synthetic versions of this game, how often does each outcome occur? Run a baseball game ten thousand plate appearances at a time — walk, strikeout, single, double, out, inning over — and you do not get a score. You get a run distribution. That single object prices the moneyline, the run line, the total, the first five, and the no-run-first-inning simultaneously, because all of them are just different slices of the same distribution. One pass, five markets, internally consistent by construction.

That consistency matters more than accuracy at the center. A model that is slightly worse at the median can still be better at the tails, and the tails are where the mispricing lives.

What it means

We grade ourselves on closing line value, not on how close we came to the final score. Our paper record is 2133-2403-64 at -0.11% ROI. Average CLV is 0.0011 and we beat the close 46.8% of the time — under the 52.38% breakeven a bettor needs. We are not yet where we need to be, and we publish that in the same breath as the method.

Those two facts sit together honestly. The simulation approach is defensible on structure — it produces coherent prices across correlated markets that a score prediction cannot. It has not yet produced a demonstrated edge. Our 428 indexed data points and 9 agents exist to close that gap, not to prove it is already closed.

The honest version of the pitch is this: we build distributions because distributions are the only object that lets you disagree with a market on one market while agreeing on another. Whether we disagree correctly is an open empirical question, and our current CLV says the answer is not yet.

What would change our mind: if beat-close stayed under 52.38% over another several thousand graded bets, the problem would be the model's calibration, not its framing — and we would rebuild the simulation's inputs rather than defend the architecture.

21+ where legal.

Want tonight's slate?

Our number against the market on every game, updated all day. Free.

Get access ›

Diamond Labs publishes statistical research. Nothing here is betting advice or a guarantee of any outcome — projections are estimates from a model and can be wrong. 21+ where sports wagering is legal.