Keystone Stuff
Pitch quality from physical traits alone, graded so 100 is that season’s league average and 10 points is one standard deviation.
What it predicts
Count-neutral expected run value per pitch, pitcher perspective. Batted balls are replaced by the average outcome for their exit-velocity × launch-angle bin, which removes defense and sequencing luck.
Inputs
- Velocity, spin rate, spin axis, extension, release height and side (arm-side normalized)
- Induced vertical and horizontal break; arm angle
- Vertical approach angle, adjusted for plate location so the model cannot see location
- Velocity, movement, and axis differentials vs. the pitcher’s primary fastball
Method
- Gradient-boosted trees (scikit-learn HistGradientBoosting) on 2024–26 MLB Statcast
- Leave-one-season-out cross-fitting: every graded pitch comes from a model that never saw that season
- A production model trained on all seasons grades hypothetical pitch designs and the Stuff landscape, and grades every season of a player’s own history when Keystone compares his seasons (cross-fit folds differ by season, which would show drift that isn’t his). A change is the production model’s; a level is anchored to the published season grade, so a pitcher-season has one Stuff number everywhere on the site
- The production model was fit on every pitcher it grades, so a Stuff drop is also graded by two pitcher-held-out models (each fit on half the pitchers, grading the other half). Pitch Lab flags a drop of 5+ points only when both agree, and puts runs at stake on the smaller of the two changes
- Aggregated to pitch-type and pitcher level, then scaled within each season: 100 = that season’s league average (scaling all seasons together left 2026 grades about 2 points high)
- Forward test: a model trained on 2024 only grades 2025; that grade tracks 2026 results about as well as 2025 results do (see the Pitch Lab and Track Record). The cross-fit grades’ own next-season correlation is optimistic, because the 2025 fold’s model was trained on 2026
- Unseen pitchers: trained on half the pitchers and tested on the other half, the forward correlation is lower than for pitchers the model has seen, so on a thin sample Stuff is a useful early read, not a better one than results
- Hypothetical shapes (pitch designs, the landscape) get the approach angle their release, velocity and rise imply (a least-squares fit on real pitches), never a blank the model didn’t see in training
- Landscape reality check: a map’s best shapes are compared with the real pitches at that shape and velocity (±2 mph) from similar slots, graded by the same model pitch by pitch. A mark above their 90th percentile, or with fewer than five of them, is labeled on the page as the model extrapolating or untested
- Dead weight: a weak pitch with below-average expected results moves toward his best pitch only against a batter side where that pitch wins by 2+ standard errors (his own results against the side, combined with Stuff and the league’s platoon split for the pitch), valued with those side values, never below 35% fastballs
- Pitch design: a new pitch is built from his own fastball plus comparable pitchers’ typical differences, graded against the pitch it would compete with (never his primary fastball; first his weakest pitch of the same kind that breaks the same way) under the production model and every cross-fit model, and queued only when it wins by 5+ under all of them and grades no higher than the comps’ 90th percentile, both on their published grades and with the comps graded the same way; otherwise it is labeled fragile. Only for arsenals of four or fewer main pitches, never a pitch he has thrown 100+ times, with 15+ comparable pitchers
How well it works
Computed by the pipeline from the data on this site
- Split-half reliability (pitcher level, 250+ pitches per half)
- 2024: r = 0.99 (465)2025: r = 0.99 (466)2026: r = 0.99 (462)
- First-half Stuff → second-half actual run value
- r = 0.46 vs. r = 0.43 for first-half results (267 pitchers)
- Agreement with FanGraphs Stuff+ (independent model)
- r = 0.85 (469 pitchers)
- Pitch-level correlation, out of season
- 2024: r = 0.0422025: r = 0.0442026: r = 0.044
- Forward test: a model trained on 2024 pitches only grades 2025, scored on 2026 run value (324 pitchers)
- Stuff r = .49 vs. r = .45 for 2025 results (difference +0.03, 95% interval −0.07 to +0.13)
- Year over year (same pitchers), r · cross-fit: the grading model had seen the season it’s scored on, so these measure stability, not prediction
- 2024→2025: Stuff r = 0.81 vs. results 0.45; Stuff → next actual r = 0.56 (not a forecast)2025→2026: Stuff r = 0.82 vs. results 0.45; Stuff → next actual r = 0.60 (not a forecast)
Read it this way: graded by a model that never saw the season it forecasts, Stuff predicts next season’s run value about as well as, and a shade better than, last season’s results (r = .49 vs. .45, inside the noise). Its edge is stability: a pitcher’s Stuff repeats at r ≈ .81, his results at about .45, so it diagnoses which pitches to change long before results settle. Single-pitch correlations are low by nature; the signal is in the aggregate.
Data: 3 seasons of MLB Statcast (2024–2026), 2,130,654 pitches.
What it can't see
- Location and command are excluded by design. A pitcher can have great stuff and poor results because of where he throws.
- Sequencing, tunneling, and deception aren’t modeled.
- No biomechanics, so it can’t say whether a design is physically safe for a given arm.
- Pitch-type labels come from MLB’s classifier. Misclassified pitches blur the grades.
- Minor-league grades exist only where Hawk-Eye tracks (Triple-A, parts of the FSL).
- A built pitch design tends to grade high: the typical shape on his fastball out-graded every comp’s real pitch for about two in five of the ideas that passed the every-model test, so those are labeled fragile, and the best of several candidate pitch types is chosen, which flatters the winner a little more.
- A grade isn’t exact: refit the model on different seasons and a pitcher’s grade, and his change since last season, move a few points. The Pitch Lab publishes the measured spread and marks a Stuff alert inside it as borderline.
- For a pitcher whose slot or shape has few neighbours, the published grade leans on his own other seasons: the Pitch Lab marks a leader that a model which never saw him grades 15+ points lower.
How we'd measure impact
- Prospective: run-value change for pitchers given a model-informed plan vs. matched controls
- Retrospective: share of dead-weight flags whose pitch the pitcher later reduced, and the results that followed