Measuring Pitch Quality

Ethan Moore
Mar 23, 2020 · 9 min read

This is the first post of a four-part series about Pitch Quality and its applications. The subsequent articles can be found here:

Pitch Quality 2: Estimating WAR

Pitch Quality 3: Times Through the Order

Pitch Quality 4: Solving the Times Through the Order Penalty

Calculating the effectiveness of each and every pitch you see on TV seemed like a pipe dream for me when I first started thinking about it about three years ago. My friend and then-Pirates Intern Matt Kane got me thinking about ways to tease out the good pitches from the bad in a statistically rigorous way, and I’ve been thinking about doing so ever since. I know this has been done before, but as I researched more about the public solutions to this question, I decided I’d still like try it out myself and make the results public and transparent.


To put a value on every pitch, I had to start by deriving the run value (aka linear weight) of every pitch of 2019. For those unfamiliar, all you need to know is that events that benefit the offense (hits, errors, balls) have a positive run value, events that benefit the defense (outs, strikes) have a negative run value, and balls and strikes have small run values compared to batted balls.

Even though balls and strikes have run values near 0, their value can add up, as about 75% of all pitches in 2019 were a ball or strike that did not end the at-bat. That’s a lot! Take a look at the distribution of events from last season:

Each non-ball or strike event has a run value (again, also called its linear weight) that tells us how many runs a team can expect to score the rest of the inning after that event occurs. Ball and strike run values are computed in a more complicated manner having to do with the value of moving from the previous count to the new one. Balls good for offense. Strikes (and fouls) bad for offense.

The Model

The idea of this project was to take a pitch “X”, find the 100 most similar pitches to X, (weighted) average the actual run values of those 100 similar pitches, and call that the “expected run value” of pitch X. Thank goodness for the run values from earlier! (Why 100? I toyed with many values and 100 was optimal for model performance.)

For this task, I used the algorithm. Many regression model types can be used to predict the run value of a pitch, but most are a black box to a non-statistician, so I opted for KNN in part due to its interpretability.

I fiddled with several combinations of variables from the public Baseball Savant Statcast data, but ultimately settled on using Release Speed, Release Point (x,y,z), H and V Movement, and Plate Location (x and z). Using all of these features gives me confidence that the model will be comparing pitches that are visually similar to an observer and to a hitter.

Side note

Why would we not just average the run values for each pitcher’s pitches and call it a day? We could certainly do that. That would be a type of “results-based” analysis where we break down the results of what actually happened on the field. When we do that, we can say the following pitchers last season:

Minimum 1000 pitches in ‘19

This list is similar to looking at a list of 2019 ERA leaders. These are the guys who did the best at limiting bad outcomes on their pitches. But who cares? What I want to know, and what is more helpful information going forward, is who should have done well? Like FIP for ERA, we want to know what should have happened, and that’s what my model does that simply looking at outcomes of each pitch does not.


Here is how the distribution of each pitcher’s average expected run value looked:

Pitchers below the red line were very good, those above the red line were very bad, and most pitchers were somewhere near the middle, but still below 0, which is exactly what we would expect.

Who were the pitchers on the far left with the lowest expected run values on their pitches in 2019? Take a look at the leaders and their expected run value percentile among their group:

Leaders for Starters (>2500 pitches)

Leaders for Relievers/Season-Shortened Starters (500<pitches<2500)

The lists check out! We see a lot of familiar names and some new ones, which is always good. When you tell your friends about this list, make sure to tell them that these players weren’t the best pitchers of 2019, but that they were the pitchers who threw the best pitches on average. When interpreting, remember that this is a pitch quality metric, not a player quality metric.

Having the estimated expected run value of every pitch of the 2019 season can be helpful in player evaluation, crafting pitching and offensive game plans, and identifying/developing a pitchers’ strengths and weaknesses by finding where in the zone a pitcher is likely to have success based on past similar pitches.


I want to use some concrete examples to break down what makes a pitch “good” or “bad” according to my model. Click the links to watch the videos.

Best Pitch of 2019

You’re underwhelmed. You were expecting this:

Well, here’s the thing. Bauer’s pitch is great, but no matter how insane it looks, its most similar pitches are *at best* going to be swinging strikes but are likely going to be balls. They will almost never produce an out, and that’s where pitches earn their run value, because outs are worth way more than balls and strikes.

So the profile of the kind of pitch with a very low expected run value is one that is *always* negative, whether it be a strike or an out on contact. Unfortunately for the viewer, this means a well-located fastball makes sense for the top pitch of 2019.

Worst Pitch of 2019

The worst pitch of 2019 was taken for a strike. It’s run value was negative, meaning it helped the pitching team. Going from 0–0 to 0–1 is good! But it’s expected run value was very positive, meaning if he threw that pitch 99 more times…let’s just say Adam Eaton wants that one back. And that’s why we can say that Jose Alvarez started off the 9th with the worst pitch of 2019.

Best Pitches From the Best Pitchers

What to elite individual pitches look like?

Jacob deGrom

Well located slider.

Gerrit Cole

Well located fastball. This one was actually hit! Still, 99 on the outside is not a bad pitch.

Max Scherzer

Well located changeup. Another hit?! That’s a tough pitch to hit, but this time it was no match for Manny “Johnny Hustle” Machado’s blazing speed.

Walker Buehler

Well located slider!

Tyler Glasnow

Well located curveball!

Lots of pitchers have incredible “stuff,” but it doesn’t matter much if they can’t locate it. Looks like my grandpa’s conventional baseball wisdom is actually right about this one.

Best Pitch Types

Overall Trends

In 2019, here is a sorted list of which pitch types were the most effective in a vacuum:

Results are in average expected run value

If the results column is intimidating, simply don’t think too hard about it. The order is what it interesting here. Breaking balls seem to have better expected outcomes for pitchers, which is why so many players are ramping up their usage of those pitches in recent years. A Knuckleball was the only pitch you could throw in 2019 and expect the outcome to help the offense more than it helped your team. Good job Steven Wright.

Individual Best Pitch Types

Submarine Gang Represent

Pooslinger Gang Represent

Submarine Gang Represent…okay so maybe we’re noticing a pattern. As is always a danger with sorted lists, I think all the sidearm guys may have their stats boosted due to a less variable sample of similar pitches. This could be a future adjustment to the model, but for now please let me believe that sidearmers are truly the cream of the pitching crop. In reality, the presence of Scherzer, Chapman, Glasnow, and Castillo’s signature pitches on this list again give me confidence in the results of this model.

The Extremes

Here are some fun things I dug up along the way!

Worst Pitch Resulting in a HR

Kind of surprising here that a 96mph pitch on the inner half had such a bad expected run value, but I guess Christian Walker showed us why.

Best Pitch Resulting in a HR

Again, pretty surprising that an 87mph, belt-high fastball had a good expected run value. But there’s so much going on here! First: Christian Walker hit BOTH the hardest homer and the easiest homer of 2019. What are the odds? Second: This was Kershaw’s BEST PITCH OF THE YEAR! Jeez. Third:

This one goes out to all the Rockies fans out there

Best Swinging Strike

The Eduardo Rodriguez foul ball from earlier feels like cheating, so here’s the top whiff: a class Luis Castillo changeup on the black that had Anthony Rizzo stumbling.

Worst Swinging Strike

I think it’s safe to say Aaron Hicks wasn’t anticipating a letters-high changeup on 3–1.

Thanks for following along and feel free to DM me on Twitter @Moore_Stats with any questions!

Something Tangible

Ethan Moore's musings on the aspects of baseball analytics…

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store