Engine Overview
Baseball is uniquely suited to Monte Carlo simulation because it is a series of discrete, independent events. Every plate appearance has a finite set of outcomes: strikeout, walk, single, double, triple, home run, or out in play. Each outcome has a probability that depends on the specific pitcher-batter matchup, the count, the ballpark, and game context. This discrete structure means a simulation can model every at-bat with high fidelity, producing realistic game scores that capture the full variance of baseball outcomes.
The Elite Matchup V4.2 engine leverages this structure by simulating games at the at-bat level. Each of the roughly 70 plate appearances in a game is resolved using matchup-specific probabilities derived from Statcast data. The starting pitcher faces the lineup in order, bullpen usage follows realistic leverage patterns, and baserunning and defensive outcomes emerge from the simulation mechanics rather than being imposed from above.
How the MLB Simulation Works
1. Pitcher-vs-Batter Matchup Engine
The foundation of the simulation is the pitcher-batter interaction. For each at-bat, the engine calculates outcome probabilities based on:
- Pitcher profile: K%, BB%, HR/9, ground ball rate, pitch mix, velocity trends
- Batter profile: wOBA, strikeout rate, walk rate, ISO (isolated power), sprint speed, platoon splits
- Handedness matchup: Left-on-left, right-on-right, and cross-platoon probabilities differ significantly and are modeled explicitly
- K-BB% differential: The gap between a pitcher's K% and BB% is one of the most stable and predictive metrics in baseball. High K-BB% pitchers consistently suppress offense and are weighted accordingly
These raw matchup probabilities are combined using a log-odds averaging method that weighs the specific pitcher's skill, the specific batter's skill, and the league-average baseline. This Bayesian approach prevents extreme outcomes when a dominant pitcher faces a dominant hitter or when sample sizes are small.
2. Count-State Simulation
At-bat outcomes depend heavily on the count. A hitter batting with a 3-1 count has fundamentally different outcome probabilities than a hitter batting with 0-2. The engine models the full count sequence: each pitch advances the count according to the pitcher's strike rate and the batter's swing tendencies, and the final outcome (strikeout, walk, ball in play) is resolved from the terminal count state.
This matters because pitchers who get ahead in the count early have dramatically better outcomes than pitchers who fall behind. A starter who consistently works 0-1 and 1-2 counts will have a different simulation profile than a starter who walks the leadoff batter in 30% of innings. These sequencing effects cannot be captured by aggregate statistics alone.
3. Catcher Framing
Catcher framing is one of the most underappreciated variables in baseball betting. Elite framers steal 15-20 extra called strikes per 1,000 pitches compared to poor framers. Over a full game, this can shift the balance of 2-3 at-bats from walks to strikeouts, which directly affects run scoring. The engine adjusts each pitch's called strike probability based on the specific catcher's framing metrics from Statcast.
Framing is particularly impactful for pitchers who live on the edges of the strike zone. A soft-tossing command pitcher paired with an elite framer will have materially better simulation outcomes than the same pitcher paired with a below-average framer. This catcher-pitcher interaction is modeled explicitly.
4. Bullpen Fatigue and Leverage
Starting pitchers typically face the lineup 2-3 times before being relieved. The engine models pitch count and efficiency to determine when the starter exits and which relievers enter. Bullpen usage follows leverage-based patterns: high-leverage situations (close games, late innings) trigger the team's best relievers, while blowouts see lower-leverage arms.
Crucially, the engine tracks bullpen fatigue. A closer who pitched in three consecutive games will have degraded performance metrics in the simulation. A setup man who threw 30 pitches the night before will have higher walk and hit rates. This fatigue modeling prevents the simulation from assuming every team has its best bullpen available every night, which is a common flaw in simpler models.
5. Park Factor Adjustments
MLB ballparks have dramatically different effects on run scoring. Coors Field in Denver inflates offense by 10-15% compared to a neutral park. Oracle Park in San Francisco suppresses home runs significantly. The engine applies park-specific adjustments to hit probabilities, home run rates, and total run expectations. These adjustments account for altitude, dimensions, temperature, and humidity where data is available.
6. Bayesian ERA and Regression
Pitcher ERAs fluctuate wildly over small samples. A starter with a 2.50 ERA through 8 starts might have a true talent ERA closer to 3.30. The engine uses Bayesian shrinkage on pitcher performance metrics, pulling extreme values toward league and career averages based on sample size. This prevents the simulation from overreacting to hot or cold streaks and produces more stable projections, especially in the first two months of the season when sample sizes are smallest.
Data Sources
- Statcast (Baseball Savant) — Exit velocity, launch angle, sprint speed, pitch tracking, catcher framing metrics, expected batting averages
- FanGraphs — K-BB%, wOBA, park factors, bullpen usage, pitcher game logs
- ESPN API — Real-time schedules, scores, lineups, and injury reports
- The Odds API — Real-time moneyline, run line, and total odds from multiple sportsbooks
MLB Performance
Why At-Bat Simulation Beats Traditional Baseball Models
Traditional baseball models typically use one of two approaches: Pythagorean win expectation (projecting wins from run differential) or log5 (computing matchup win probability from each team's overall winning percentage). Both approaches treat games as single events and miss the sequential, matchup-specific nature of baseball.
At-bat simulation captures what these methods miss. It knows that a left-handed slugger facing a right-handed sinkerball pitcher will have different outcomes than the same slugger facing a left-handed knuckleballer. It models the specific bullpen arms available and their fatigue states. It produces realistic distributions of run totals, including the common baseball pattern of clustered scoring (multiple runs in a single inning followed by several scoreless innings).
The result is probabilities and edge calculations that account for the actual matchup on the field, not just the teams' aggregate season statistics.
Explore Other Models
NBA Model
Possession MC V5.0.2 — possession-by-possession simulation with Beta shooting distributions.
CBB Model
Savant Ultra v5.0.1 — 5-on-5 player simulation with EvanMiya BPR ratings.
NHL Model
V19.1 Pinnacle — MoneyPuck xG with real danger zones and per-zone goalie modeling.
NFL Model
Elite V1.1 Pinnacle — EPA metrics with CDF edge calculation and drive sequencing.
Soccer Model
V16.3 PBP — FBref xG, isotonic calibration, formation analysis, and BTTS modeling.
LoL Model
Championship v2.1 — 5-layer Glicko-2 with market blend and patch-aware meta.