Pitchers ranked by the Carson Palmquist Model score: who has more Stuff+ in his arm than his current arsenal shows, and what it would take to get it. Columns read left to right: the pitcher today, the pitch-usage lever, the pitch-addition lever, and the regression forecast. Sort any column; the row under the headers filters each column (text columns match text, numeric columns take >5, <=100 or 3..8); click a row for the per-pitch detail.
Stuff+ / Loc+ / Pit+ are FanGraphs. CPM score = z(development engine) + z(actionable), scored across all pitchers. Proj ΔStf+ = next-season Stuff+ change: regression + ½·mix + add EV + drop. Mix ΔStf+ = arsenal gain from re-weighting usage toward better pitches, optimized separately against left- and right-handed batters on platoon-adjusted projected grades with empirical per-side limits; More vs LHH / RHH is the pitch that gains share on each side and the plans show the moves. Backtest, six as-of seasons 2020–25: the top ten by mix gain raised the recommended pitch 10+ pts 26% of the time and gained +2.4 Stuff+ (+4.1 beyond mean reversion) when they did; on a per-side label the top ten acted on at least one side 42% of the time. Open roles = ride / run / cut / slider / sweep / curve / offspeed roles he throws under 5%; Add is the best reachable family in an open role, Prec Stf+ what his 80 nearest arms grade on it, Gain = 0.165 × (Prec Stf+ − 1.5 − Stuff+)⁺, EV = P(add) × Gain. Families are Statcast labels, sweeper (ST) distinct from gyro slider (SL). Mean reversion = what any pitcher at his Stuff+ does next season on average (a line fit on every prior pair, about a fifth of the distance back to 100); Surplus = what his pitch characteristics add to that; Regression ΔStf+ = their sum, the lever-free forecast that anchors Proj ΔStf+.
For every pitcher × pitch (or the whole arsenal) with 8+ graded outings, each outing's Stuff+ (FanGraphs game logs) is matched to that outing's mean Statcast arm angle on the pitch (for the arsenal, the usage-weighted deviation of every pitch from its own season slot). Park is removed first: a league-wide two-way fixed-effects fit (pitcher-season × home park, every outing in 2025–26) gives a Stuff+ park effect per pitch family (Coors: 4-seam -11, sinker -9, changeup -3, arsenal -6), subtracted from every outing grade before anything within-pitcher is fit. Δ (lo − hi) = park-adjusted Stuff+ in his lowest-slot third of outings minus his highest-slot third, so positive means the pitch graded better from the lower slot. Slope = Stuff+ per degree of slot within pitcher (season-demeaned, pitch-weighted). Shrunk Δ, the default sort, is the slope pulled toward zero by its sampling error (empirical Bayes) and re-expressed over his own lo→hi slot range. Slope | velo partials velocity out of both sides to separate slot from tired-arm nights. Within-season slot ranges are small (typically 2–5° between thirds), so these are interpolations inside the range he already throws, not projections of a 10° change; the between-season evidence is in docs/SLOT-DROP-HISTORY.md.
Stf+ @lo / @hi = season Stuff+ on the pitch plus the park-adjusted deviation in the low- / high-slot third; Δvelo, ΔIVB, ΔHB = low-slot third minus high-slot third (what physically changes when he drops); Loc+ / Pit+ slope = the same within-pitcher slope for Location+ and Pitching+; 2025 / 2026 slope = each season alone, the persistence check for a single row. By arsenal, Slot° is the usage-weighted arm angle across all pitches and the thirds are by the usage-weighted deviation.
Outing-to-outing standard deviation of a pitch's Stuff+ (or the arsenal's), with sampling noise removed: across the league the squared deviation of an outing grade from the season mean rises with 1/pitches thrown (E = τ² + σ²/n, fit per family), so Noise SD is what his outing sizes alone would produce and Excess SD = √(SD² − noise²) is real night-to-night variation in the pitch. p90 − mean is the ceiling he has already shown. The Δ columns compare his top-third grade outings with his bottom third — velocity, ride, run, slot, and how much of the gap was park — so you can see what the pitch looks like on the nights it works. Default sort: Excess SD.
Stuff+ is FanGraphs, per outing; sampling noise is large for relievers (10–17 points on a 15-pitch outing), which is why raw SD alone would rank every closer first. Last 3 = mean of his three most recent outings on the pitch.
Data: Statcast 2020–2026 (Chamberlain Pitch Leaderboard v8 extract + pybaseball backfill), Baseball Savant spin-direction leaderboard, FanGraphs Stuff+/Location+/Pitching+ and standard leaderboards. Method and backtests: docs/CARSON-PALMQUIST-MODEL.md, docs/BACKTEST-4WAY.md, docs/MIX-ACTION-BY-RANK.md, docs/ADD-ACTION-BY-RANK.md at github.com/vincepipitone/baseball-slot-sim.