Minor League Stuff+ Leaderboards By Age In 2024
Image credit: DETROIT, MI - SEPTEMBER 25: Detroit Tigers pitcher Jackson Jobe (21) pitches in the ninth inning in his major league debut during the Detroit Tigers versus the Tampa Bay Rays game on Wednesday September 25, 2024 at Comerica Park in Detroit, MI. (Photo by Steven King/Icon Sportswire)
Yesterday, we published the Hit+ leaders in the minor leagues by age, using minor league statcast data. In this companion piece, we move to the pitching side of things.
Pitch-level data allows us to add context to the difference between two pitches using our internal Stuff+ model. For example, for a four-seam fastball, metrics such as average velocity, induced vertical break, extension, vertical approach angle, and horizontal break result in a “stuff” score that is correlated to run value, whiff rate, and xwOBA against. We repeat this process for each pitch in a pitcher’s arsenal–using the specific metrics that inform that pitch type’s stuff score–and then an overall “stuff” score for the pitcher is created based on weighting each pitch’s stuff by the frequency in which it is thrown.
There are two Stuff scores shown: The raw “STF+” score and the normalized stuff score (nSTF+). The normalized STF+ score results by rebalancing the STF+ of each pitch type against the average STF+ for that pitch type. In other words, because the average slider has a STF+ of 110, if a pitcher has a slider with a STF+ of 110, it is an “average” and would therefore be rebalanced to 100. The weighted average of each pitcher’s normalized arsenal is the nSTF+ score.
Note also that the scores below do not consider the actual strikeout, walk or whiff rates that each pitch generated, except indirectly from the previous training results.
For a review of pitchers and the actual results that their arsenals produced, see part one and part two.
Below are the top 10 pitchers per STF+ by age, minimum 1000 pitches thrown.
Age 18 (min 1000 pitches):
Name | ORG | Throws | STF+ | nSTF+ |
Steven Echavarria | OAK | R | 108 | 110 |
Trevor Harrison | TBR | R | 108 | 109 |
Raimy Rodriguez | HOU | R | 107 | 107 |
Josh Knoth | MIL | R | 103 | 101 |
Alex Clemmey | WAS | L | 99 | 99 |
Manuel Rodriguez | MIL | R | 99 | 96 |
Charlee Soto | MIN | R | 99 | 105 |
Jeremy Pilon | TBR | L | 98 | 101 |
Franklin Gomez | NYM | L | 96 | 98 |
Keyner Benitez | MIA | L | 95 | 102 |
Age 19 (min 1000 pitches):
Name | ORG | Throws | STF+ | nSTF+ |
Santiago Suarez | TBR | R | 113 | 113 |
Eliazar Dishmey | MIA | R | 112 | 111 |
Didier Fuentes | ATL | R | 109 | 109 |
Thomas White | MIA | L | 109 | 113 |
Yeferson Vargas | LAA | R | 108 | 107 |
Noble Meyer | MIA | R | 108 | 110 |
Zander Mueth | PIT | R | 106 | 108 |
Barrett Kent | LAA | R | 104 | 105 |
Christian Zazueta | LAD | R | 103 | 105 |
Gary Gill HIll | TBR | R | 101 | 102 |
Age 20 (min 1000 pitches):
Name | ORG | Throws | STF+ | nSTF+ |
Tyler Gough | SEA | R | 118 | 119 |
Noah Schultz | CHW | L | 116 | 118 |
Alessandro Ercolani | PIT | R | 115 | 114 |
Jarlin Susana | WAS | R | 114 | 112 |
Denis Reguillo | BOS | R | 113 | 111 |
Ashton Izzi | SEA | R | 112 | 113 |
Adam Serwinowski | CIN | L | 112 | 110 |
Welinton Herrera | COL | L | 109 | 107 |
Payton Martin | LAD | R | 108 | 106 |
Karson Milbrandt | MIA | R | 108 | 109 |
Age 21 (min 1000 pitches):
Name | ORG | Throws | STF+ | nSTF+ |
Jackson Jobe | DET | R | 116 | 119 |
Moises Chace | PHI | R | 116 | 118 |
Luis Morales | OAK | R | 114 | 118 |
Yoniel Curet | TBR | R | 114 | 115 |
Bubba Chandler | PIT | R | 113 | 114 |
Edgar Portes | BAL | R | 113 | 113 |
Miguel Mendez | SDP | R | 112 | 113 |
Xavier Meachem | MIA | R | 111 | 110 |
Drew Gray | CHC | R | 110 | 110 |
Isaiah Lowe | SDP | R | 110 | 110 |
Age 22 (min 1000 pitches):
Name | ORG | Throws | STF+ | nSTF+ |
Jacob Misiorowski | MIL | R | 119 | 119 |
Josh Ekness | MIA | R | 119 | 119 |
Levi Wells | BAL | R | 116 | 116 |
Junior Flores | SFG | R | 116 | 115 |
Logan Martin | KCR | R | 114 | 116 |
Nolan McLean | NYM | R | 114 | 113 |
Brody Hopkins | TBR | R | 114 | 112 |
Juan Carela | CHW | R | 114 | 111 |
Chase Dollander | COL | R | 113 | 114 |
Miguel Ullola | HOU | R | 112 | 112 |
Age 23 (min 1000 pitches):
Name | ORG | Throws | STF+ | nSTF+ |
Luis Mey | CIN | R | 122 | 124 |
Zach Maxwell | CIN | R | 120 | 118 |
German Fajardo | SEA | R | 118 | 119 |
Connor Phillips | CIN | R | 117 | 116 |
Devereaux Harrison | TOR | R | 116 | 114 |
Chris Campos | LAD | R | 114 | 113 |
Blade Tidwell | NYM | R | 114 | 112 |
Blake Burkhalter | ATL | R | 113 | 109 |
Josh Harlow | CLE | R | 112 | 110 |
David Sandliin | BOS | R | 111 | 108 |
Age 24 (min 1000 pitches):
Name | ORG | Throws | STF+ | nSTF+ |
Andrew Moore | CIN | R | 120 | 117 |
Brandyn Garcia | SEA | R | 113 | 113 |
Jack Leiter | TEX | R | 113 | 112 |
Jake Smith | LAA | R | 112 | 114 |
Zebby Matthews | MIN | R | 112 | 110 |
Juan Mercedes | SEA | R | 112 | 109 |
Danny Kirwin | BOS | R | 112 | 105 |
Zach Fruit | BAL | R | 111 | 113 |
Wyatt Olds | BOS | R | 111 | 108 |
Ryan Long | BAL | R | 110 | 112 |