Matchup Engine
Pitch-type profiles for every pitcher and hitter plus the league platoon split, combined into a calibrated edge.
What it predicts
Run value per pitch in a batter–pitcher matchup.
Inputs
- Pitcher usage by batter side and expected run value by pitch group (2025–26)
- Hitter run value vs. each pitch group by pitcher hand (2025–26)
- The Winter Plan’s 2027 bullpen and lineup (decisions feed); each rival’s pending free agents
Method
- Hierarchical: each value = overall quality (shrunk with ballast measured from how profiles repeat 2024 → 2025) + the pitch-type interaction (shrunk with the ballast that predicted 2025 best)
- Platoon: a hitter’s split by pitcher hand is shrunk toward the league’s split for hitters on his side, by pitch group, not toward zero (the earlier design got same-side matchups backwards)
- Edge = Σ usage × (pitcher value − hitter value)
- Calibration factor set on 2024 → 2025; tested forward on 2025 profiles → 2026 outcomes, with bootstrap intervals for what the platoon split and the pitch-type layer each add
- Recency: a weight on the later profile season (1×–3×) tuned on 2023–24 profiles → 2025 (2023 Statcast, every setting re-measured on 2023 → 2024) and tested on 2024–25 → 2026 against equal pooling; adopted only if it wins out of sample
- Their staff: a rival’s pitchers who are pending free agents are left out by default, so the lineup view weights arms under control for 2027
- Bullpen grid: “best fit” = a reliever’s edge against this hitter minus his usual edge, the matchup-specific part
How well it works
Computed by the pipeline from the data on this site
- Backtest: 2025 profiles → 2026 matchups
- 20,170 pairs, 305,778 pitches
- Correlation with outcomes
- Overall quality only r = 0.0789 · + league platoon split r = 0.0853 · + pitch types (the full model) r = 0.0855 What the platoon split adds: +0.0017 to +0.0110 in r, clear of zero. What pitch types add: −0.0007 to +0.0012, not distinguishable from zero (95% intervals, 500 bootstrap resamples of pairs).
- Calibration
- Every displayed edge is scaled by 0.79, set on 2024 → 2025 (raw edges were too large). On 2026, actual edges ran 0.91× the displayed ones: still about 9% large.
- Recency weighting: tuned on 2023–24 profiles → 2025, tested on 2024–25 → 2026 (21,151 pairs)
- Tuning: 1.00× r = 0.0942 · 1.25× r = 0.0952 · 1.50× r = 0.0959 · 2.00× r = 0.0963 · 3.00× r = 0.0961. Test: equal pooling r = 0.0865, slope 0.89; 2.00× r = 0.0864, slope 0.86 (r gain −0.0023 to +0.0023, 95%). The page keeps equal pooling: the weight did no better out of sample.
Data: Statcast 2024–26: shrinkage set on 2024 → 2025, scored on 20,170 2026 batter–pitcher pairs (305,778 pitches).
What it can't see
- Sequencing, location and fatigue aren’t modeled; there is no day-of availability (the data end with the season).
- Single matchups are noisy; edges matter only when the decision is otherwise close.
- The pitch-type layer isn’t distinguishable from zero in the forward test: most of any edge is who’s better, then platoon.
- Pitchers’ own platoon splits aren’t modeled beyond the league split.
- Profiles pool 2025 and 2026 pitches equally unless a recency weight beats that out of sample (the test is below and on the Matchup Engine page). Hitter values aren’t park-neutral and pitch values aren’t count-adjusted; neither is tested.
How we'd measure impact
- Run value of matchup-driven bullpen choices vs. the manager’s defaults
- Same-side vs. opposite-side outcomes against the model, 2027