Model Drilldown
Why a pitch grades the way it does. Pick a season, a pitcher and a pitch type to see its Stuff+ or PLV+ (or any of their outcome probabilities) split into what each trait adds or takes away, and then see where each trait sits against the league.
Against the league
Every row's SHAP value for each pitch in the comparison group, coloured by that pitch's own input, with this pitch marked. Hover a dot for the pitcher; click to open them.
Where the probability goes
A pitch's nine outcome probabilities always sum to 100%, so any rise in one comes out of the others. Each row takes probability from the outcomes on the left and gives it to those on the right.
How it works
Models: Stuff+ grades a pitch on its shape, release, spin and how it plays off the
pitcher's primary fastball, assuming a league-average location and count. PLV+ adds where the pitch was
thrown (x_b, z_n) and the count it was thrown in. Both are on a 100 ± 15 scale
per pitcher, season, and pitch type. Each also gives nine outcome probabilities (ball+HBP, called strike,
swinging strike, foul, in-play out, single, double, triple, home run). wOBA on contact is built from
the batted-ball outcomes (0.9 * 1B_prob + 1.25 * 2B_prob + 1.6 * 3B_prob + 2 * HR_prob) / in_play_prob.
SHAP values: neither model is a single tree model, so for each model, target and pitch group ×
matchup, an XGBoost proxy was trained to reproduce the final output from the same inputs. Its held-out R² is 0.965 or
higher for Stuff+/PLV+ and 0.906 or higher for every probability. TreeSHAP on that proxy splits every
pitch's value into one contribution per input, and a pitcher's pitch type is the average over its pitches.
Its value then adds up exactly: league + pitch group & matchup + Σ features + residual,
where the residual is the proxy's miss.
Waterfall chart: starting at the league reference (100, or the league rate), adds Pitch Group & Matchup (what that pitch type is worth given its share of same-handed batters), then each input, largest first. It shows up to the eight largest features: any others (or any under 1 plus-scale point / 0.1 percentage points / .002 wOBAcon) are folded into Other, along with the season and the residual, so the bars end on the actual value. Gold helps the pitcher and teal hurts. Click a row to see it against the league. Each dot is another pitcher's version of the same pitch, with its input on the x-axis and its SHAP on the y-axis, and the white line is the binned mean; for Other, each dot is that pitch's sum of the same folded rows, plus its own season and residual. Click a pitch type under Pitches to switch to it.
Location+: what the location adds: PLV minus Stuff at the count the pitch was thrown in, on the same 100 ± 15 scale. It is split by outcome only.
Model ERA: Stuff ERA and PLV ERA turn each model's run values into runs per nine innings: a season constant, minus nine times the pitch's run value per pitch times the pitches per inning its predicted outcomes imply. The waterfall starts at the season's league ERA, and lower is better.
By outcome: the (outcomes) target splits the Stuff+ or PLV+ score another way, with no proxy. Each of the nine outcomes contributes its predicted rate times its average run value, and the nine add up to the score. PLV+ prices outcomes at the count each pitch was thrown in, and the difference is shown as Count Leverage. Every outcome gets a bar, and the league charts plot each one against the pitch's predicted rate of it.