A pitch-level scouting model for this series: how each lineup handles the other staff's pitch mix, who wins each hitter vs starter matchup, how each manager runs his bullpen, and a plate-appearance-by-plate-appearance simulation of the full series. Every number on this page is rebuilt from raw Statcast data by the pipeline in this repository.
Each row is a pitch type. The grey bar is how often the opposing staff throws it. Next is the lineup's run value per 100 pitches against that pitch type, then the staff's run value with it, shown from the hitter's side so both bars read the same way. The edge column multiplies usage by the difference, so the total is an arsenal-weighted matchup score in runs per 100 pitches. These are raw season values, as Savant reports them.
Each cell is the model's expected wOBA for that plate appearance: the hitter's outcome rates against the pitcher's hand and the pitcher's rates against the batter's side, combined with the odds-ratio method, then tilted by the pitch-mix edge if the backtest says the tilt helps. Click a cell for the outcome probabilities, the pitch-by-pitch breakdown and the zone overlay.
Statcast zones from the catcher's view: 1 to 9 is the strike zone, the four outer blocks are the chase areas. Left is the lineup's run value per 100 by zone, middle is where the opposing staff puts that pitch group, right is the staff's results by zone from the hitter's side.
Cards follow the rotation in the config. The simulator draws each starter's length from his own 2026 batters-faced distribution, capped for planned openers, and pulls him early if he gets hit hard.
Roles come from how each reliever was actually used, not from saves. Leverage index (LI) measures how much a plate appearance could swing the win probability, so a 1.0 is average and 2.0 is twice as important. gmLI is a reliever's average leverage when he entered.
Share of relief appearances in each inning and score state (fielding team's view), smoothed. This table drives reliever choice in the simulator.
All 30 teams. The two series clubs are highlighted.
Statcast park factors, 3-year window (100 = average). The simulator applies these by batter side.
Every simulated game runs plate appearance by plate appearance: outcome probabilities from the model, league-average baserunning, starters pulled on their own usage patterns, relievers chosen by each manager's tendencies, and bullpen fatigue carried across the series calendar. Postseason rules apply, so there is no automatic runner in extra innings. The range comes from rerunning everything on bootstrap resamples of the season's games.
Lower is better. Trained before the split date, scored on plate appearances after it.
Test plate appearances grouped into fifths by arsenal edge. Bars show actual wOBA minus the talent-only model's expected wOBA.
Simulated runs per game on this series' schedule and parks, next to each team's actual 2026 scoring scaled to the same parks. Large gaps would mean the simulator over- or under-rates a side.
Test plate appearances binned by expected wOBA. Points on the diagonal mean the model's probabilities are honest.
Each game below was predicted using only what was known before first pitch: that day's batting orders and starting pitchers, each bullpen as it stood over the previous 30 days, real bullpen fatigue from the previous two days, and a model fit on earlier games only. Playoff games use a model fit on the full regular season. The late-season test fits on games before the split date and predicts every game after it.
Brier score is the average squared error of the win probability (lower is better, a coin flip scores .250). The baselines use the same pregame information: home field alone, and log5 matchups of each team's win percentage or Pythagorean record, each with home field.
Model, market and Pythagorean columns are the home team's pregame win probability. The market is DraftKings' closing moneyline with the bookmaker's margin removed. A call is right when the side the model gave more than 50% won.
Bold marks the best score in each column.
Model Brier minus baseline Brier with a 95% bootstrap interval over games. Left of zero means the model was better. An interval crossing zero means the sample cannot tell them apart.
Past postseasons, each game's actual runs against what the two teams' regular-season runs scored and allowed predicted. A factor below 1 means teams score less in October than their season numbers say. The simulator scales playoff scoring by this factor.
Games grouped by the model's home win probability. Points on the diagonal mean the probabilities were honest.
Data. Every pitch of the season from Baseball Savant's Statcast search, plus Savant's Outs Above Average, sprint speed, catcher framing, baserunning and park factor leaderboards, and the MLB Stats API schedule (day/night, venue, temperature). The pipeline pulls, caches and refreshes them incrementally.
Run value. Change in run expectancy per pitch, summed per 100 pitches. Hitter view: positive means runs for the offense. Pitcher view: positive means runs saved. The model uses expected run value, which swaps each ball in play's actual result for its xwOBA, removing most defense and luck.
Shrinkage. Pitch-type values are regressed in two levels: pitch group toward league average, pitch type toward the player's own group value. Outcome rates use outcome-specific stabilization constants and a two-level platoon structure. Recent games count more (half-life set in the config).
Outcome model. Multinomial odds ratio over K, BB/HBP, 1B, 2B, 3B, HR and outs, with an optional pitch-mix tilt whose size is chosen on a validation window. Park factors apply by batter side, and home batters get a small tilt calibrated to an MLB-typical home win rate.
Caveats. Postseason managing is more aggressive than regular-season usage, which the leverage boost only approximates. Baserunning is league average. Lineups, rotations and bullpens come from the config file and should be updated when rosters are announced.
Sources: Baseball Savant Statcast Search, Savant Park Factors, Savant OAA, MLB Stats API.