How it works
A game, played out a million times, then checked.
Million Runs takes tonight’s real rosters and plays the game out in code, start to finish, thousands of times. Each run comes out a little different, the way real games do. The share of runs a team wins is how the sim sees the game. The next morning, it gets checked against what actually happened.
What gets simulated
Possession by possession
Every player is built from their own real play-by-play: where they shoot from, how often those shots fall, who they pass to, and how often they rebound, turn it over and foul. Tonight’s injury report decides who plays. Since October 27, each shot also accounts for how tonight’s defense holds that part of the floor.
Second by second
Each team’s shots come from what it has actually done this season against what tonight’s opponent allows. Whether they go in depends on tonight’s goalies, projected unless they’ve been confirmed, and power plays happen at both teams’ real rates.
Snap by snap
Each down comes from what both teams have actually run this season: the run and pass mix by down and distance, gains drawn from real plays in the same spot, fourth-down calls, field goals by distance and the clock. The starting quarterback comes from the depth chart, and inactive players are left out.
Plate appearance by plate appearance
Every batter faces every pitcher based on both of their real seasons, measured against the league. Starters go about as deep as they usually do, then the bullpen takes over.
The game shown
Each video plays out one game from the runs, so you can watch how it could go. It’s one real run, not an average, so its box score adds up like a real game’s. It’s an example, not a predicted score: even the most common final happens in only a few percent of runs, and each game page says how many ended exactly that way.
- What a win looks like (basketball, hockey). A win for the team that won more of the runs. In basketball it’s the run closest to the middle of all of them. In hockey the final is drawn from that team’s wins as often as each score came up.
- The sim’s call (baseball). That team’s most common winning score.
- The typical game (videos before October 28). The run closest to the middle: the median score, the usual leading scorers, the usual way the lead moved.
How it gets scored
The morning after, every sim is checked against the real box score. It gets a ✓ when the team that won more of the runs won the real game. Players are checked one by one: the sim’s median next to what they actually did, and how many runs saw it coming.
The sim that was posted before the game is the one that gets scored, and each game counts once. When a game is re-run before it starts (a late scratch, a confirmed goalie), the video says RE-RUN and so does the game page.
Since October 28, each video also ends on a wild card: one long shot from the far end of the runs, like a player’s 35-point night or a win by 20, with how many runs had it. When it happens, it gets called out.
What it doesn’t know
- A player listed as day-to-day is simulated as playing. If they sit, the sim didn’t know.
- It doesn’t model momentum, the crowd, or a coach’s game plan for one night.
- Early in a season there’s little new data, so players lean on last season until this one catches up.
- A good model still misses a lot. A team that wins 60% of the runs should still lose about 4 games in 10.
Simulated, not a prediction
This is a model playing the game out, for the fun of it and for the numbers. It isn’t advice, and nothing here is a tip. Every number on this site comes straight from a sim or from the real box score. None are typed in by hand.
The models, the code and the videos are built with AI (Claude, by Anthropic), from public play-by-play data.