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.

loading the SHAP tables…
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.