Garrett Kennedy
| Year | Age | Lvl / Team | PA | AVG/OBP/SLG | HR | SB | wRC+ | WAR | MLE AVG/OBP/SLG |
|---|---|---|---|---|---|---|---|---|---|
| 2016 | 23 | A+/A2 orgs | 300 | .195/.276/.311 | 5 | 1 | 18 | — | .145/.202/.232 |
| 2017 | 24 | AA/A+2 orgs | 290 | .230/.324/.385 | 8 | 0 | 40 | — | .167/.237/.266 |
| 2018 | 25 | AAA/A+2 orgs | 166 | .193/.319/.286 | 2 | 0 | 31 | — | .160/.247/.247 |
Career Stats + Projections
Methodology▸ how these numbers are built
All seasons translated to park-neutral MLB-equivalent (MLE) and combined per year. 2027 = full-season projection (no games played yet). 2028+ via Advanced Marcel + aging curve. Catcher framing: only 2027 Statcast framing is modeled (Baseball Savant server-caches the leaderboard to the current season); prior-year framing is unmodeled — projections for established framers may run 1-3 WAR low.
| Year | Age | Lvl | Team | MLB% | PA | AB | H | 2B | 3B | HR | BB | SO | HBP | SB | CS | AVG | OBP | SLG | OPS | ISO | BABIP | K% | BB% | wOBA | wRC+ | BAT | RUN | FLD | POS | REP | WAR |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ▸ Career — actual stats, one row per stint (as recorded, no adjustments) | |||||||||||||||||||||||||||||||
| 2015 | 22 | A | Great Lakes Loons | — | 63 | 57 | 13 | 4 | 0 | 1 | 6 | 11 | 0 | 0 | 0 | 228 | 302 | 351 | 652 | 123 | 267 | 17 | 10 | 296 | 38 | — | — | — | — | — | — |
| 2015 | 22 | ROK | Ogden Raptors | — | 80 | 68 | 18 | 7 | 1 | 0 | 10 | 7 | 0 | 1 | 0 | 265 | 359 | 397 | 756 | 132 | 286 | 9 | 12 | 333 | 48 | — | — | — | — | — | — |
| 2016 | 23 | A+ | Rancho Cucamonga Quakes | — | 242 | 220 | 40 | 11 | 1 | 3 | 18 | 67 | 1 | 0 | 1 | 182 | 247 | 282 | 529 | 100 | 243 | 28 | 7 | 239 | 3 | — | — | — | — | — | — |
| 2016 | 23 | A | Great Lakes Loons | — | 58 | 47 | 12 | 3 | 0 | 2 | 11 | 12 | 0 | 1 | 0 | 255 | 397 | 447 | 843 | 191 | 303 | 21 | 19 | 380 | 83 | — | — | — | — | — | — |
| 2017 | 24 | AA | Tulsa Drillers | — | 141 | 123 | 24 | 5 | 1 | 4 | 14 | 29 | 1 | 0 | 0 | 195 | 283 | 350 | 632 | 154 | 217 | 21 | 10 | 280 | 26 | — | — | — | — | — | — |
| 2017 | 24 | A+ | Rancho Cucamonga Quakes | — | 149 | 129 | 34 | 8 | 0 | 4 | 16 | 40 | 4 | 0 | 0 | 264 | 362 | 419 | 781 | 155 | 353 | 27 | 11 | 353 | 53 | — | — | — | — | — | — |
| 2018 | 25 | AAA | Tacoma Rainiers | — | 102 | 90 | 19 | 2 | 1 | 2 | 12 | 29 | 0 | 0 | 0 | 211 | 304 | 322 | 626 | 111 | 288 | 28 | 12 | 288 | 36 | — | — | — | — | — | — |
| 2018 | 25 | A+ | Modesto Nuts | — | 64 | 50 | 8 | 1 | 1 | 0 | 12 | 14 | 2 | 0 | 0 | 160 | 344 | 220 | 564 | 60 | 222 | 22 | 19 | 284 | 23 | — | — | — | — | — | — |
| ▸ Career — adjusted (every ACTUAL line translated to park/league-neutral MLB equivalents) | |||||||||||||||||||||||||||||||
| 2015 | 22 | A MLE | Great Lakes Loons | — | 63 | 59 | 11 | 3 | 0 | 1 | 4 | 14 | 0 | 0 | 0 | 186 | 238 | 288 | 526 | 102 | 222 | 22 | 6 | 224 | 38 | — | — | — | — | — | — |
| 2015 | 22 | ROK MLE | Ogden Raptors | — | 80 | 73 | 14 | 5 | 1 | 0 | 5 | 10 | 0 | 1 | 0 | 192 | 244 | 288 | 531 | 96 | 211 | 12 | 6 | 239 | 48 | — | — | — | — | — | — |
| 2016 | 23 | A+ MLE | Rancho Cucamonga Quakes | — | 242 | 226 | 30 | 8 | 1 | 2 | 12 | 92 | 1 | 0 | 1 | 133 | 180 | 204 | 383 | 71 | 202 | 38 | 5 | 173 | 3 | — | — | — | — | — | — |
| 2016 | 23 | A MLE | Great Lakes Loons | — | 58 | 51 | 10 | 2 | 0 | 2 | 7 | 16 | 0 | 1 | 0 | 196 | 293 | 353 | 646 | 157 | 270 | 28 | 12 | 291 | 83 | — | — | — | — | — | — |
| 2017 | 24 | AA MLE | Tulsa Drillers | — | 141 | 128 | 19 | 4 | 1 | 2 | 9 | 37 | 1 | 0 | 0 | 148 | 210 | 242 | 452 | 94 | 181 | 26 | 6 | 206 | 26 | — | — | — | — | — | — |
| 2017 | 24 | A+ MLE | Rancho Cucamonga Quakes | — | 149 | 135 | 25 | 5 | 0 | 3 | 10 | 54 | 4 | 0 | 0 | 185 | 262 | 289 | 551 | 104 | 283 | 36 | 7 | 247 | 53 | — | — | — | — | — | — |
| 2018 | 25 | AAA MLE | Tacoma Rainiers | — | 102 | 94 | 17 | 2 | 1 | 2 | 8 | 36 | 0 | 0 | 0 | 181 | 245 | 287 | 532 | 106 | 256 | 35 | 8 | 222 | 36 | — | — | — | — | — | — |
| 2018 | 25 | A+ MLE | Modesto Nuts | — | 64 | 55 | 7 | 1 | 1 | 0 | 7 | 19 | 2 | 0 | 0 | 127 | 250 | 182 | 432 | 55 | 187 | 30 | 11 | 202 | 23 | — | — | — | — | — | — |
| 2015 | 22 | ROK MLE | 2 teams | — | 143 | 132 | 25 | 8 | 1 | 1 | 9 | 24 | 0 | 1 | 0 | 189 | 241 | 288 | 529 | 98 | 220 | 17 | 6 | 232 | 43 | — | — | — | — | — | — |
| 2015 | 22 | ROK RAW | 2 teams | — | 143 | 125 | 31 | 11 | 1 | 1 | 16 | 18 | 0 | 1 | 0 | 248 | 333 | 376 | 709 | 128 | 278 | 13 | 11 | 317 | 43 | — | — | — | — | — | — |
| 2016 | 23 | A+ MLE | 2 teams | — | 300 | 277 | 41 | 11 | 1 | 4 | 19 | 108 | 1 | 1 | 1 | 148 | 205 | 238 | 444 | 90 | 222 | 36 | 6 | 196 | 19 | — | — | — | — | — | — |
| 2016 | 23 | A+ RAW | 2 teams | — | 300 | 267 | 52 | 14 | 1 | 5 | 29 | 79 | 1 | 1 | 1 | 195 | 276 | 311 | 587 | 116 | 254 | 26 | 10 | 266 | 19 | — | — | — | — | — | — |
| 2017 | 24 | A+ MLE | 2 teams | — | 290 | 263 | 45 | 9 | 1 | 6 | 19 | 91 | 5 | 0 | 0 | 171 | 240 | 281 | 522 | 110 | 232 | 31 | 7 | 227 | 40 | — | — | — | — | — | — |
| 2017 | 24 | A+ RAW | 2 teams | — | 290 | 252 | 58 | 13 | 1 | 8 | 30 | 69 | 5 | 0 | 0 | 230 | 324 | 385 | 709 | 155 | 282 | 24 | 10 | 318 | 40 | — | — | — | — | — | — |
| 2018 | 25 | AAA MLE | 2 teams | — | 166 | 149 | 23 | 3 | 1 | 2 | 15 | 55 | 2 | 0 | 0 | 154 | 241 | 228 | 469 | 74 | 228 | 33 | 9 | 214 | 31 | — | — | — | — | — | — |
| 2018 | 25 | AAA RAW | 2 teams | — | 166 | 140 | 27 | 3 | 2 | 2 | 24 | 43 | 2 | 0 | 0 | 193 | 319 | 286 | 605 | 93 | 263 | 26 | 14 | 286 | 31 | — | — | — | — | — | — |
| 2015 | 22 | ROK MLE | 2 teams | — | 143 | 133 | 25 | 8 | 1 | 1 | 9 | 24 | 0 | 1 | 0 | 188 | 241 | 286 | 527 | 98 | 216 | 17 | 6 | 232 | 43 | — | — | — | — | — | — |
| 2016 | 23 | A+ MLE | 2 teams | — | 300 | 277 | 41 | 11 | 1 | 4 | 19 | 108 | 1 | 1 | 1 | 148 | 205 | 238 | 444 | 90 | 215 | 36 | 6 | 196 | 19 | — | — | — | — | — | — |
| 2017 | 24 | A+ MLE | 2 teams | — | 290 | 264 | 45 | 9 | 1 | 6 | 19 | 91 | 5 | 0 | 0 | 170 | 240 | 280 | 521 | 110 | 233 | 31 | 7 | 227 | 40 | — | — | — | — | — | — |
| 2018 | 25 | AAA MLE | 2 teams | — | 166 | 148 | 23 | 3 | 1 | 2 | 15 | 55 | 2 | 0 | 0 | 155 | 241 | 230 | 471 | 74 | 229 | 33 | 9 | 214 | 31 | — | — | — | — | — | — |
| ▸ Career Totals | |||||||||||||||||||||||||||||||
| Career | — | MLE | — | 899 | 821 | 134 | 31 | 4 | 13 | 62 | 278 | 8 | 2 | 1 | 163 | 229 | 258 | 487 | 95 | 226 | 31 | 7 | 215 | 32 | -73 | +0 | +0 | +16 | +19 | -3.8 | |
| / 162G | — | MLE | — | 650 | 594 | 96 | 22 | 3 | 9 | 45 | 201 | 6 | 1 | 1 | 162 | 228 | 254 | 482 | 93 | 224 | 31 | 7 | 215 | 32 | -53 | -0 | +0 | +12 | +14 | -2.8 | |
How the minor-league lines were translated
One row per minor-league stint. Open a row to see each step: the raw rate, the park adjustment, the league/level factor, the age adjustment (hitters) and the resulting MLE rate. Factors are the same ones listed on the MLE Factors page.
2018 AAATacoma Rainiers · 102 PAwOBA .281 → .222 (−59)K% 28.4% → 35.6%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 28.43% | ÷1.031 | ×1.290 | — | — | 35.56% |
| BB% (unintentional) /PA | 11.76% | ÷1.103 | ×0.710 | — | ×1.018 | 7.71% |
| HBP% /PA | 0.00% | — | ×0.980 | — | ×1.018 | 0.00% |
| Singles /BIP | 22.95% | ÷1.006 | ×0.900 | ×0.978 | ×1.018 | 20.45% |
| Doubles /BIP | 3.28% | ÷0.885 | ×0.810 | ×0.978 | ×1.018 | 2.99% |
| Triples /BIP | 1.64% | ÷0.900 | ×0.810 | ×0.978 | ×1.018 | 1.47% |
| Home runs /BIP | 3.28% | ÷0.918 | ×0.780 | — | ×1.018 | 2.84% |
Factors used: league row PCL. Park (home-season share, regressed): HR 84, 1B 101, 2B 77, 3B 80, K 106, BB 121 — applied at half strength. Age: age 26 vs a level average of 27.2 → +1.8% on BB/HBP/hit rates (1.2 yr younger than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.978.
Result: wOBA .281 → .222; ISO .111 → .093; BABIP .288 → .256. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2018 A+Modesto Nuts · 64 PAwOBA .278 → .202 (−76)K% 21.9% → 29.6%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 21.88% | ÷0.990 | ×1.340 | — | — | 29.61% |
| BB% (unintentional) /PA | 18.75% | ÷1.106 | ×0.710 | — | ×0.968 | 11.65% |
| HBP% /PA | 3.12% | — | ×0.790 | — | ×0.968 | 2.39% |
| Singles /BIP | 16.67% | ÷1.003 | ×0.910 | — | ×0.968 | 14.63% |
| Doubles /BIP | 2.78% | ÷0.951 | ×0.820 | — | ×0.968 | 2.32% |
| Triples /BIP | 2.78% | ÷1.150 | ×0.760 | — | ×0.968 | 1.78% |
| Home runs /BIP | 0.00% | ÷0.925 | ×0.920 | — | ×0.968 | 0.00% |
Factors used: league row CAL. Park (home-season share, regressed): HR 85, 1B 101, 2B 90, 3B 130, K 98, BB 121 — applied at half strength. Age: age 26 vs a level average of 22.8 → −3.2% on BB/HBP/hit rates (3.2 yr older than average).
Result: wOBA .278 → .202; ISO .060 → .042; BABIP .222 → .187. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2017 A+Rancho Cucamonga Quakes · 149 PAwOBA .344 → .247 (−97)K% 26.8% → 36.3%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 26.85% | ÷0.990 | ×1.340 | — | — | 36.35% |
| BB% (unintentional) /PA | 10.74% | ÷1.099 | ×0.710 | — | ×0.978 | 6.79% |
| HBP% /PA | 2.68% | — | ×0.790 | — | ×0.978 | 2.07% |
| Singles /BIP | 24.72% | ÷1.006 | ×0.910 | ×0.950 | ×0.978 | 20.77% |
| Doubles /BIP | 8.99% | ÷1.064 | ×0.820 | ×0.950 | ×0.978 | 6.44% |
| Triples /BIP | 0.00% | ÷1.150 | ×0.760 | ×0.950 | ×0.978 | 0.00% |
| Home runs /BIP | 4.49% | ÷1.085 | ×0.920 | — | ×0.978 | 3.73% |
Factors used: league row CAL. Park (home-season share, regressed): HR 117, 1B 101, 2B 113, 3B 130, K 98, BB 120 — applied at half strength. Age: age 25 vs a level average of 22.8 → −2.2% on BB/HBP/hit rates (2.2 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.950.
Result: wOBA .344 → .247; ISO .155 → .111; BABIP .353 → .283. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2017 AATulsa Drillers · 141 PAwOBA .274 → .206 (−68)K% 20.6% → 26.3%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 20.57% | ÷0.955 | ×1.220 | — | — | 26.27% |
| BB% (unintentional) /PA | 9.22% | ÷1.058 | ×0.700 | — | ×0.998 | 6.09% |
| HBP% /PA | 0.71% | — | ×0.870 | — | ×0.998 | 0.62% |
| Singles /BIP | 14.89% | ÷1.005 | ×0.920 | ×0.950 | ×0.998 | 12.93% |
| Doubles /BIP | 5.32% | ÷1.000 | ×0.840 | ×0.950 | ×0.998 | 4.24% |
| Triples /BIP | 1.06% | ÷1.150 | ×0.940 | ×0.950 | ×0.998 | 0.82% |
| Home runs /BIP | 4.26% | ÷1.295 | ×0.800 | — | ×0.998 | 2.62% |
Factors used: league row TL. Park (home-season share, regressed): HR 159, 1B 101, 2B 100, 3B 130, K 91, BB 112 — applied at half strength. Age: age 25 vs a level average of 24.8 → −0.2% on BB/HBP/hit rates (0.2 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.950.
Result: wOBA .274 → .206; ISO .154 → .106; BABIP .217 → .181. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2016 A+Rancho Cucamonga Quakes · 242 PAwOBA .235 → .173 (−62)K% 27.7% → 37.9%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 27.69% | ÷0.979 | ×1.340 | — | — | 37.88% |
| BB% (unintentional) /PA | 7.44% | ÷1.046 | ×0.710 | — | ×0.988 | 4.99% |
| HBP% /PA | 0.41% | — | ×0.790 | — | ×0.988 | 0.32% |
| Singles /BIP | 16.34% | ÷1.043 | ×0.910 | ×0.972 | ×0.988 | 13.70% |
| Doubles /BIP | 7.19% | ÷0.938 | ×0.820 | ×0.972 | ×0.988 | 6.03% |
| Triples /BIP | 0.65% | ÷1.142 | ×0.760 | ×0.972 | ×0.988 | 0.42% |
| Home runs /BIP | 1.96% | ÷1.003 | ×0.920 | — | ×0.988 | 1.78% |
Factors used: league row CAL. Park (home-season share, regressed): HR 101, 1B 109, 2B 88, 3B 128, K 96, BB 109 — applied at half strength. Age: age 24 vs a level average of 22.8 → −1.2% on BB/HBP/hit rates (1.2 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.972.
Result: wOBA .235 → .173; ISO .100 → .076; BABIP .243 → .202. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2016 AGreat Lakes Loons · 58 PAwOBA .371 → .291 (−79)K% 20.7% → 28.4%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 20.69% | ÷0.990 | ×1.360 | — | — | 28.41% |
| BB% (unintentional) /PA | 18.97% | ÷1.011 | ×0.690 | — | ×0.980 | 12.68% |
| HBP% /PA | 0.00% | — | ×0.780 | — | ×0.980 | 0.00% |
| Singles /BIP | 20.00% | ÷0.977 | ×0.920 | — | ×0.980 | 18.45% |
| Doubles /BIP | 8.57% | ÷0.961 | ×0.830 | — | ×0.980 | 7.25% |
| Triples /BIP | 0.00% | ÷0.900 | ×0.910 | — | ×0.980 | 0.00% |
| Home runs /BIP | 5.71% | ÷0.960 | ×0.800 | — | ×0.980 | 4.67% |
Factors used: level-wide A factors (no league-specific row for this league/era). Park (home-season share, regressed): HR 92, 1B 95, 2B 92, 3B 80, K 98, BB 102 — applied at half strength. Age: age 24 vs a level average of 22.0 → −2.0% on BB/HBP/hit rates (2.0 yr older than average).
Result: wOBA .371 → .291; ISO .191 → .155; BABIP .303 → .270. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2015 ROKOgden Raptors · 80 PAwOBA .328 → .239 (−90)K% 8.8% → 12.6%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 8.75% | ÷1.000 | ×1.440 | — | — | 12.60% |
| BB% (unintentional) /PA | 11.25% | ÷1.000 | ×0.610 | — | ×0.965 | 6.62% |
| HBP% /PA | 0.00% | — | ×0.720 | — | ×0.965 | 0.00% |
| Singles /BIP | 16.39% | ÷1.000 | ×0.820 | ×0.985 | ×0.965 | 12.78% |
| Doubles /BIP | 11.48% | ÷1.000 | ×0.720 | ×0.985 | ×0.965 | 7.86% |
| Triples /BIP | 1.64% | ÷1.000 | ×0.720 | ×0.985 | ×0.965 | 1.12% |
| Home runs /BIP | 0.00% | ÷1.000 | ×0.750 | — | ×0.965 | 0.00% |
Factors used: league row PIO. Park (home-season share, regressed): no park row on file (treated as neutral) — applied at half strength. Age: age 23 vs a level average of 19.5 → −3.5% on BB/HBP/hit rates (3.5 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.985.
Result: wOBA .328 → .239; ISO .132 → .096; BABIP .286 → .211. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2015 AGreat Lakes Loons · 63 PAwOBA .288 → .224 (−64)K% 17.5% → 22.8%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 17.46% | ÷1.039 | ×1.360 | — | — | 22.85% |
| BB% (unintentional) /PA | 9.52% | ÷1.028 | ×0.690 | — | ×0.990 | 6.33% |
| HBP% /PA | 0.00% | — | ×0.780 | — | ×0.990 | 0.00% |
| Singles /BIP | 17.39% | ÷1.028 | ×0.920 | ×0.973 | ×0.990 | 14.99% |
| Doubles /BIP | 8.70% | ÷1.026 | ×0.830 | ×0.973 | ×0.990 | 6.77% |
| Triples /BIP | 0.00% | ÷0.978 | ×0.910 | ×0.973 | ×0.990 | 0.00% |
| Home runs /BIP | 2.17% | ÷0.894 | ×0.800 | — | ×0.990 | 1.93% |
Factors used: level-wide A factors (no league-specific row for this league/era). Park (home-season share, regressed): HR 79, 1B 106, 2B 105, 3B 96, K 108, BB 106 — applied at half strength. Age: age 23 vs a level average of 22.0 → −1.0% on BB/HBP/hit rates (1.0 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.973.
Result: wOBA .288 → .224; ISO .123 → .098; BABIP .267 → .222. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).