We Built a Monte Carlo NFL Simulation Engine. Here's How It Works.
In our last post, we introduced 60+ NFL statistics that power our analytics. But stats alone don't tell you who wins. You need a model.
So we built one: a Monte Carlo simulation engine we call the Cadence Model. It turns those 60+ stats into probability distributions by simulating thousands of games.
Here's how it works.
The Core Idea
Every NFL game is a sequence of drives. Each drive ends in one of a few outcomes: touchdown, field goal, punt, turnover, or the clock running out.
If you know the rate at which each outcome occurs, you can simulate games by sampling from those rates. Do it 10,000 times, and you get a distribution of final scores—and probabilities for each team winning.
The challenge is: event rates aren't constant. They vary by team, by opponent, and by game situation.
Step 1: Calculate League Averages
First, we compute league-wide baseline rates for every event type using 27 years of play-by-play data:
- Offensive TD rate — How often does a drive end in a touchdown?
- Field goal rate — How often does a drive end in a made field goal?
- Interception rate — How often does a drive end in a pick?
- Punt rate — How often does a drive end in a punt?
- Fumble rate — How often is possession lost via fumble?
These league averages establish the baseline. The average NFL team, against the average defense, in a neutral situation, produces TDs at rate , punts at rate , etc.
Step 2: Calculate Team Multipliers
This is where the 60+ statistics come in.
Each team gets offensive and defensive multipliers that adjust the league baseline. The multipliers are ratios: how does this team compare to average?
For offense, the touchdown rate multiplier blends two signals:
Points per Drive is the most direct measure of scoring efficiency. EPA (Expected Points Added) captures play-level quality. We blend them for robustness.
Similarly for other events:
| Multiplier | Primary Signal |
|---|---|
| TD Rate | Points per Drive + EPA |
| INT Rate | Turnover Differential |
| Punt Rate | 3rd Down Conversion % |
| Explosive Rate | Explosive Plays |
| Red Zone Efficiency | Red Zone TD % |
For defense, the logic inverts. A good defense reduces the opponent's rates:
Lower points allowed → lower multiplier → opponent scores less often.
Step 3: Calculate Matchup Rates
Here's the key insight: both teams' multipliers apply independently.
When Team A has the ball against Team B:
Let's say DEN is playing BUF:
DEN offense vs BUF defense:
- DEN's offensive stats are close to league average → offensive multiplier ≈ 1.0
- BUF's defensive stats are also close to average → defensive multiplier ≈ 1.0
- Result:
DEN's rates come out at league average because their stats are league average. The model doesn't "pick the better team"—it reflects what the data shows.
BUF offense vs DEN defense:
- BUF's offensive stats are ~9% better than average → offensive multiplier ≈ 1.09
- Result: = 9% above league rate
Step 4: Game State Adjustments
Rates aren't constant throughout a game. Teams behave differently when trailing by 17 vs leading by 3 with 2 minutes left.
We define game state buckets:
| State | Description |
|---|---|
| Neutral | Within 8 points |
| Leading Small | +9 to +16 |
| Leading Big | +17 or more |
| Trailing Small | -9 to -16 |
| Trailing Big | -17 or more |
| Q4 Late | Q4 with ≤5 minutes remaining |
| Q4 Trailing Late | "Comeback mode" |
| Q4 Leading Late | "Clock kill mode" |
Each state has its own multipliers. In Q4 Trailing Late, pass rates spike, punt rates drop, and interception rates increase. The model captures this.
Step 5: Monte Carlo Simulation
Now we simulate.
Starting from kickoff:
- Determine who has the ball
- Sample drive duration and outcome based on effective rates
- Update score and clock
- Repeat until clock expires
We run 10,000 iterations. Each produces a final score. The distribution gives us:
- Win probability — What % of simulations did each team win?
- Score distribution — Expected point totals and spreads
- Margin of victory — How often does each team win by X?
Why This Matters for Edge Detection
The simulation output is a probability distribution, not a point estimate.
If the simulation says BUF wins 62% of the time but the prediction market prices them at 55%, that's a 7-point edge. You're not guessing—you're comparing two quantitative models.
The edge compounds when you combine it with:
- GameStateEdge™ — Historical probabilities from specific game situations
- RecordEdge™ — Historical outcomes based on team records
The simulation gives you a forward-looking estimate. The edge calculations give you historical base rates. When they both agree and diverge from market pricing? That's signal.
Try It Yourself
The NFL Game Simulator is live. Pick any two teams, run the simulation, and see the full probability distribution.
Behind the scenes, it's loading the Cadence Model, pulling each team's 60+ stat profile, calculating matchup-specific event rates, and running 10,000 game simulations in your browser.
All free, no sign-up required.
Related:
- NFL Game Simulator — Run your own simulations
- NFL Stats Dashboard — The stats that power the model
- Live Edge Dashboard — Real-time mispricing detection
All trading involves risk. This is a research tool, not financial advice.