Automated Fastball Velocity Increase Detection

Kamil Krzaczynski-USA TODAY Sports

Using baseball-savant data and some Python code, I have written a script that will loop through a pitcher’s three most recent appearances and flag any pitcher who has shown an increase in their fastball velocity. In raw form, it looks something like this:

Increased Detection System Example
Name Third most recent Second most recent Most recent Most recent increase Second most recent increase Avg_change
Reynaldo López 98.1 98.4 99.2 0.81 0.25 0.532
Carl Edwards Jr. 93.1 93.1 93.9 0.81 0.03 0.422
Carlos Estévez 96.5 96.5 96.7 0.17 0.03 0.097
SOURCE: Statcast

Looking at the table above we can see that each of these three pitchers increased their fastball (“FF” in savant data) consistently over their last three appearances. Don’t believe me? You can check my work with Savant visualizations:

Reynaldo Lopez Velo Increase

While I wrote more specifically about the merits of paying close attention to game-by-game fastball increases, quoting many other studies and great pieces along the way, I won’t be writing about it again here. Instead, I’ll simply show you a list of the starters and relievers who have increased game-by-game average velocity on their four-seamers and hope that you can take it from there. Sure, you could scroll through stacks of player pages to find players who have increased velocity until the cows come home, or you could write some code that will detect those increases and flag those players for you. I chose the second way. If you find it useful, I’ll do it on a more regular basis. That’s it. This post is more about the data than the words:

Three Most Recent Appearances – FF Increasers
Name Third Most Recent Second Most Recent Most Recent Avg. Change
Colin Poche 90.5 92.4 93.1 1.3
Chris Sale 93.0 94.3 94.7 0.8
Anthony Bass 93.2 94.4 94.6 0.7
Evan Phillips 94.2 95.5 95.8 0.8
Tucker Davidson 91.2 92.4 92.6 0.7
Nick Martinez 92.0 92.9 93.0 0.5
Yu Darvish 93.5 94.3 94.7 0.6
MacKenzie Gore 94.1 94.9 95.2 0.6
Ian Kennedy 91.2 91.9 92.6 0.7
Gerrit Cole 96.3 97.0 97.2 0.4
Max Fried 93.5 94.2 94.3 0.4
A.J. Puk 95.0 95.6 96.0 0.5
Kyle Gibson 91.4 92.0 92.0 0.3
Craig Kimbrel 93.9 94.4 94.9 0.5
James Kaprielian 92.8 93.3 93.3 0.2
Giovanny Gallegos 93.0 93.5 94.1 0.6
Logan Gilbert 94.6 95.1 95.6 0.5
Bryce Elder 89.6 90.1 90.6 0.5
Rafael Montero 95.5 95.9 96.3 0.4
Richard Lovelady 89.9 90.3 90.6 0.3
Phil Maton 89.2 89.5 90.5 0.7
Trevor Richards 92.4 92.7 93.0 0.3
Patrick Sandoval 92.6 92.9 92.9 0.2
Emilio Pagán 94.1 94.4 95.7 0.8
Jeurys Familia 93.9 94.2 94.4 0.3
Reynaldo López 98.1 98.4 99.2 0.5
Carlos Carrasco 91.1 91.3 91.7 0.3
Tylor Megill 94.1 94.3 95.0 0.4
Matt Bush 93.2 93.3 94.7 0.8
Enyel De Los Santos 94.7 94.8 94.9 0.1
Drew Rasmussen 95.5 95.6 95.8 0.1
Brusdar Graterol 98.1 98.2 98.8 0.4
Carl Edwards Jr. 93.1 93.1 93.9 0.4
Carlos Estevez 96.5 96.5 96.7 0.1
SOURCE: Statcast





4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Browns0286Member since 2018
1 year ago

Avg. Change seems to be calculating differently in the full bottom table than in the sample in the top. Is this intentional?