Product / Model Cards
Model cards Pitch Lab · Development

Keystone Location & Pitching

Location grades where pitches were thrown for the count, on one height-based zone; Pitching combines that with Stuff. Each season is centered on its own league.

Supports: Whether a pitcher’s problem is the pitches or where he throws them, and what to work on first. Refresh: Nightly in season; retrain each offseason Open Pitch Lab

What it predicts

The same count-neutral expected run value as Stuff (batted balls replaced by the average outcome for their exit velocity and launch angle).

Inputs

  • Location: horizontal position relative to the batter (inside/away), height on a height-based strike zone (27% to 53.5% of the batter’s listed height, the 2026 ABS zone, used for every season so 2024–25’s taller stance-based zone doesn’t read as a different place), balls and strikes, pitch family, same- or opposite-handed matchup
  • Pitching: every Stuff input plus the location and count inputs
  • Location values are centered within pitch family and batter-side matchup, so throwing more breaking balls isn’t counted as “command”

Method

  • Location: gradient-boosted trees fit within each season and cross-fit by game (three folds), so each season’s value surface is that season’s own called zone. Location’s inputs don’t identify a pitcher, so fitting within a season doesn’t learn individuals. A model trained on other seasons misgraded 2026’s high pitches
  • Pitching: gradient-boosted trees, leave-one-season-out (its physical inputs do identify pitchers)
  • Pitch-level predictions averaged by pitch type and pitcher, then scaled within each season: 100 = that season’s average, 10 points = 1 SD. On the old pooled scale and stance-based zone, 2026 averaged about 91 and every pitcher’s Location fell about 15 points from 2025
  • Location calibration check every build: in each season, actual minus predicted run value is near zero in every height band from below the zone to above it (Pitching isn’t held to it; see blind spots)
  • Validated against walk rate, next-season walk rate, K−BB% and FIP, side by side with Stuff
  • Time-ordered test: Stuff and Pitching trained on 2024 only; Location fit within 2025 (cross-fit by game), so it sees no 2026 pitch. All three grade 2025 and are scored on 2026. Location predicts next season’s walk rate but not its runs; Pitching adds nothing to Stuff for next season’s runs

How well it works

Computed by the pipeline from the data on this site

Does Location measure command?
r = −0.69 with same-season walk rate (Stuff: 0.11; 469 pitchers)
Reliability: split-half, within season
2024 Location 0.66 · Pitching 0.832025 Location 0.66 · Pitching 0.812026 Location 0.71 · Pitching 0.83
Forward test: 2025 grades scored on 2026 results (324 pitchers). Stuff and Pitching trained on 2024 pitches only; Location fit within 2025 on that season's other games (cross-fit by game), centered on 2025; it sees no 2026 pitch
Next season’s run value Pitching r = .48 vs. Stuff .49; Location alone −.03 Next season’s walks Location r = .46 vs. .53 for last season’s walk rate
Stability, season to season · cross-fit: each grading model had seen the season it’s scored on, so the run-value columns aren’t forecasts
2024→2025 Location YoY 0.67 · Stuff 0.81; with next season’s run value: Stuff 0.56, Pitching 0.48, Location 0.00, last season’s results 0.45 (311 pitchers)2025→2026 Location YoY 0.70 · Stuff 0.82; with next season’s run value: Stuff 0.60, Pitching 0.51, Location −0.03, last season’s results 0.45 (324 pitchers) Location is a stable skill; going forward it adds nothing to Stuff for predicting runs. We publish that rather than force a combined grade.

Data: 3 seasons of MLB Statcast (2024–2026), 2,130,654 pitches.

What it can't see

  • No intended target: the model grades where the pitch ended up, not where the catcher set up, so it can’t separate a bad plan from a missed spot.
  • Location says almost nothing about next season’s run prevention beyond what Stuff already says. Use it to diagnose walks, not to project ERA.
  • Sequencing and tunneling (how pitches look out of the hand together) aren’t modeled.
  • Each season’s called zone (2026’s ABS challenges included) is folded into the outcome, so Location rewards hitting that season’s zone; it can’t separate a pitcher’s command from how the zone was called.
  • Zone heights come from listed heights, not measured ones (the 2026 Statcast zone matches 53.5% of listed height to within 0.02 ft).
  • Pitching is fit leave-one-season-out, so each season is graded by a model of other seasons’ called zones. Its grades for pitches at the top of the zone are off by up to about 2 runs per 100 pitches in 2026 (graded too well) and up to about 1 in 2024–25 (graded too poorly), because the called zone changed in 2026. It is shown as a percentile and drives no decision.

How we'd measure impact

  • Walk-rate change for pitchers given a command plan vs. matched controls
  • Share of “command work” pitchers whose Location grade improves the next season
Keystone is an independent portfolio project. It is not affiliated with Major League Baseball or any club. Data: MLB Stats API, Baseball Savant, FanGraphs. Used under their terms for individual, non-commercial use.