Automated Fastball Velocity Increase Detection

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:
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 |
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:
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:
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 |
Avg. Change seems to be calculating differently in the full bottom table than in the sample in the top. Is this intentional?
Good catch. I had the columns switched around. Updates made. Thanks for pointing it out.