Predicting High-K Fantasy Viability

Credit: Nathan Ray Seebeck-Imagn Images

Continuing my recent theme of diving deeper into topics I’ve covered previously, I wanted to revisit my analysis looking at the impact of debut k-rate on the probability of fantasy viability.

Back in June, I found that, unsurprisingly, k-rate had a marked impact on whether or not a player would reach various measures of viability. This was particularly stark (again, unsurprisingly) at higher k-rates:

Probability of Viability, Over/Under 35% K-Rate
Group $1+ $5+ $10+ $20+
< 35% 38.5% 36.9% 28.4% 18.0%
>= 35% 12.5% 13.3% 10.7% 5.9%
Source: Retrosheet, FanGraphs
Predicted probability for a 2019 debutant. All results significant to p < .001 level.

That’s basically where that analysis ended though. I paid some brief lip service to the notion of back-testing by looking roughly at incidence rates of viability from 2020+ debutants, but it wasn’t a particularly robust exercise and it didn’t say anything about what traits eventually lead to viability despite a penchant for strikeouts nor about the individual prospects of recent high-k debutants.

So while it’s great to confirm what our eyes and common sense tell us, I wanted to go one step further. I think I’ve been pretty successful even if the results are likewise fairly straightforward (TL;DR: old prospects bad, power good). Read on to find out more.

Research Question and Data Issues

Before getting too deep in the weeds for this article, I strongly recommend at least skimming the one I wrote earlier in the summer for explanations for how I measure fantasy viability, what a logistic regression is, and some other background analysis. I also recommend looking into my treatise on relievers (already linked above) to refresh yourself on the analysis techniques you’ll find below.

…

You Aren't a FanGraphs Member
It looks like you aren't yet a FanGraphs Member (or aren't logged in). We aren't mad, just disappointed. We get it. You want to read this article. But before we let you get back to it, we'd like to point out a few of the good reasons why you should become a Member. 1. Ad Free viewing! We won't bug you with this ad, or any other. 2. Unlimited articles! Non-Members only get to read 10 free articles a month. Members never get cut off. 3. Dark mode and Classic mode! 4. Custom player page dashboards! Choose the player cards you want, in the order you want them. 5. One-click data exports! Export our projections and leaderboards for your personal projects. 6. Remove the photos on the home page! (Honestly, this doesn't sound so great to us, but some people wanted it, and we like to give our Members what they want.) 7. Even more Steamer projections! We have handedness, percentile, and context neutral projections available for Members only. 8. Get FanGraphs Walk-Off, a customized year end review! Find out exactly how you used FanGraphs this year, and how that compares to other Members. Don't be a victim of FOMO. 9. A weekly mailbag column, exclusively for Members. 10. Help support FanGraphs and our entire staff! Our Members provide us with critical resources to improve the site and deliver new features! We hope you'll consider a Membership today, for yourself or as a gift! And we realize this has been an awfully long sales pitch, so we've also removed all the other ads in this article. We didn't want to overdo it. In case you didn't read all that, here's the short version. Membership includes:
✓Ad-free browsing
✓Unlimited FanGraphs & RotoGraphs articles
✓Historical & platoon projections
✓Leaderboard & player-page stat heatmaps
✓One-click data exports
✓Customizable player-page dashboards
✓Dark & Classic site modes
✓Weekly Members-only mailbag
✓FanGraphs Walk-Off, your year in review
✓Optional homepage photo removal
✓Gift articles to non-members

Are you back? Great. The question I wanted to answer here is twofold:

  • Among the high-k rate debutant population, what other traits are associated with fantasy viability?
  • How can we use that information to model the likelihood of recent debutants to reach fantasy viability?

Once I started specifying some models I immediately ran into a problem: rising strikeout rates over time. Because strikeouts are proliferating to such a high degree, there is a “rising tides shift all boats” effect. In other words, eventual fantasy viability is becoming more frequent among high k-rates debutants:

This created a host of issues. For one, it was clustering all of my “hits” in the back end of the data sample. Mechanically, this was a problem because it only gave my training sample scraps to work with. But even more sinister was that it was introducing bias into the model because the sort of player getting caught in a “>35% k-rate” net in 2020 is generally much different than a player from much earlier in the sample. This caused my blind model tests to significantly underestimate instances of viability across the board, and caused my sparser viability models (particularly $20) to have trouble even rank ordering probabilities correctly, let alone measuring them with any sort of precision.

In my previous analysis, I battled these year effects by controlling for them in the regression, and presented “predicted” results by calibrating on a base year of 2019. This technique worked because, as I mentioned before, my “blind test” wasn’t very rigorous, and served mainly as a footnote for the rest of the causal inference-lite exercise. Because my current substantive aim is prediction, controlling for year in the same manner would be problematic because while my coefficients on each year’s environment would do a great job of removing the impact of any given year on how k-rate interacts with viability, they wouldn’t say anything about how future years’ k-rate environments will look.

One way to account for that is to try model it explicitly by introducing a trend or making some other assumption about how we expect league strikeout rates to behave over the coming years. I took a couple rough stabs at it by using basic trend line and rolling average models but that wasn’t successful and I eventually scrapped it. What I settled on was side-stepping the problem, in a way: turning each player’s debut k-rate into a z-score.

To this end, I split Retrosheet event data into 60-PA samples for all players in each year, and calculated the mean and standard deviation strikeout rates for these samples. Now, since players overwhelmingly don’t finish their seasons with plate appearance totals that are multiples of 60, I had to devise a way to account for this. I set the code to take the remainder n after dividing a player’s plate appearances by 60, and randomly select an offset from 0 to n, and start the 60-plate appearance counts from there. I would then discard the plate appearances from before the offset start, and after the last multiple of 60 finished grabbing PAs.

To put some actual numbers on it, consider a player with 579 plate appearances. The remainder is 579 – [ 9 * 60 ] = n = 39. Take a random number between 0 and 39, start collecting plate appearances from that number, and once the ninth batch of 60 is tabulated, discard the remaining. This mechanic might seem trivial but it’s important because if I don’t incorporate it then the plate appearance samples aren’t random; they would most likely be systematically leaving out some not insignificant number of plate appearances toward the end of the season across the league.

One note: this measure is still imperfect. You might still introduce some bias in this measure if we expect players who do not accrue at least 60 plate appearances in a given year to strike out in a manner different from players who do. I looked into it, and unsurprisingly, these players do. This is relevant because 44% of 60-PA debuts (and 59% of high-K debuts) overlap between two seasons, which means they are not being caught in the calculation pool.

But – plate appearances from players who don’t accrue 60 in a season only constitute roughly 2% of the total in all non-shortened seasons across the sample (strike and Covid years run higher to varying degrees). These exclusions are also going to be balanced out by the plate appearances being excluded by the “remainder” calculation as well. Overall, this results in block means generally not greater than .1% or .2% (e.g. 14.1% vs. 14.3%) lower than the league k-rate in a given year, so any effect this has is going to be small. Further, it doesn’t, in my opinion, invalidate the results. My aim with this measure is to account for the effect of a particular season’s strikeout environment, which this still does. If you, dear reader, are fluent in predictive modeling and have a better suggestion, I’m happy to take it in the comments.

In any case, once I made this adjustment, I looked at what the modern k-rate environment looks like translated into z-scores:

2025 K-Rate Environment
z-Score First-60 K%
-3.0 Below 0%
-2.5 2.10%
-2.0 6.00%
-1.5 10.00%
-1 13.90%
-0.50 17.90%
0 21.80%
0.50 25.80%
1.0 29.70%
1.5 33.70%
2.0 37.60%
2.5 41.60%
3.0 45.50%
Source: Retrosheet, FanGraphs, Chadwick Register
Retrosheet event data for 2026 are not released yet

From these data I ultimately settled on 1.5 standard deviations above the mean as my 35% k-rate cutoff replacement. I could have used 1.67, which is what 35% more cleanly translates to, but I like round numbers and, full transparency, using 1.5 resulted in slightly cleaner (but not directionally different) model results. So that’s what I went with. Here is what that mark looks like over time:

This helps illustrate what I was talking about earlier; my sample was getting heavily biased because a 35% k-rate was probably closer to 2.5 or 3 standard deviations above the mean in the earlier years of my sample but is only approximately 1.5 above the mean in more recent seasons. Looking at the proportion of viable fantasy performers over time by this measure (1.5 standard deviations) instead:

These trends are so beautifully flat that they could bring a tear to your eye. There are some quirks in the data – the bands of variance, interestingly, are notably tighter around Y2K – but using this variable should (and did) significantly improve our model results (for technical reasons about why this is the case, you can read up on stationarity).

Using this measure also had the added benefit allowing me to reach further back in time to build a bigger sample. I chose players who debuted in 1977 or later somewhat arbitrarily, but also because that was when the league expanded to 26 teams. Replacement levels get weird around expansion eras and the preceding decade and a half prior to that point featured twice as much expansion as we’ve seen in the five since. So using 1977 as a cutoff felt as good as any other year.

Variable Choice

Circling back to my first question above:

  • Among the high-k rate debutant population, what other traits are associated with fantasy viability?

I kept my scope here pretty narrow. I wanted the statistics I used to be readily available over a long history (so no Statcast), easily interpreted, and the densest store of potential information. To accomplish this, I gathered z-score scaled versions of k-rate, bb-rate, and ISO. I also used age at debut as a potential independent variable. My thinking here was that k-rate and bb-rate tell us how discerning a player is at the plate, and ISO is a great, if blunt, tool to measure a player’s contact quality. I didn’t use other rate stats like batting average, OBP, slugging, or OPS because the information gleaned from each of those should mostly be contained within the variables I chose. K-rate will be heavily correlated with batting average, walk rate will be heavily correlated with OBP and OPS, ISO likewise with all of the above.

ISO and age turned out to be the most promising independent variables, and we actually didn’t need fancy analysis to ascertain that:

Unsurprisingly, being younger and hitting for more power upon your debut portends better odds for fantasy viability. If you wanted to stop here (please don’t) you could and still have a decent takeaway. Among players whose strikeout rate is greater than 1.5 standard devations above league average, approximately 40% of those who debut at 21 or younger eventually return a $10 viable season, as do about a quarter of those who are simply above average in ISO for their first batch of plate appearances. The story here is pretty clean – age is a useful proxy for prospect status while ISO is not just a proxy but a literal manifestation of a player’s ability to hit for meaningful power. If there are going to be any clues about how they’ll fare, these two stats are probably about as meaningful as any.

Regarding the other two – k-rate and walk rate, I played around with them in the models but ultimately found that they weren’t adding material value to the results so I largely scrapped them from the analysis. This also makes sense to me; by already filtering on k-rate, we’ve preemptively chopped out a lot of meaningful variance the stat can offer, and walk rate is notably noisier in small samples.

Model Results

Onto the meat and potatoes of this analysis. My approach was basically the same as in my tome on relievers – elastic net logistic regressions that I evaluated using a combination of cross validation and back-testing techniques. Here are the base viability frequencies for different levels across different sample populations:

Hit Frequency
Sample Players $1+ $5+ $10+ $20+
Cross-Validation (1977-2020) 628 164 139 114 69
Back-Test Train (1977-2002) 341 90 77 60 40
Back-Test Test (2008-2020) 213 53 43 37 17
Outlook (2021-2025) 74 11 10 8 3
Source: Retrosheet, FanGraphs, Chadwick Register

One thing to note – these ranges are for debutant seasons, meaning they use players whose debuts fell within the year range depicted. It still takes information from outside the range (for example, 2021+ for the cross validation) to determine whether a player ever becomes fantasy viable. This results in a couple of quirks. First, my cross-validation sample ends at 2020. This means that, for cross-validation, I am not looking at players who’ve debuted later than that point. In my initial k-rate analysis, I found that players rarely take more than six seasons to ever achieve fantasy viability, so that’s where I had to cut the sample off to avoid truncation bias.

The second is that there is a six-year gap between the end of the training data and the beginning of the back-test sample. This is for basically the same reason. Back-testing isn’t really valuable unless it’s blind, and if I’m pretending that I’m in 2008 predicting the next decade and change of debutants, I can’t leverage data from recent years prior to that because I’ll be truncating my training sample.

I see both positives and negatives resulting from this. On the negative side, if I eventually want to predict 2026 debutants, by this setup, I can’t leverage data on debutants from after 2020. But on the flipside, as you’ll see, these models still perform pretty well despite this issue. I take this as a sign that the conclusions I’ve drawn are fairly robust. In any case, cross-validation looked pretty good. As a reminder, you can think of the cross validation as using hitters that the model does know about to predict hitters that it doesn’t. The cross validation results are importantly not blind to the time horizon, though.

Cross Validation Model Performance
Target AUC Brier Top-20% Capture
$1+ 0.745 (0.704 to 0.788) 0.164 (0.148 to 0.180) 40.9% (35.1% to 46.5%)
$5+ 0.754 (0.709 to 0.798) 0.147 (0.130 to 0.165) 42.3% (36.1% to 49.4%)
$10+ 0.757 (0.711 to 0.800) 0.130 (0.112 to 0.146) 44.0% (37.2% to 52.6%)
$20+ 0.754 (0.698 to 0.811) 0.088 (0.072 to 0.107) 47.2% (37.5% to 58.2%)
Source: Retrosheet, FanGraphs, Chadwick Register
95% CI in parenthesis

We have AUC values within a pretty tight band all well above a baseline rate of 0.5, and are clustering a plurality of our hits in the bucket that the model rates as the likeliest to succeed. The Brier scores all check out relatively well relative to a baseline rate:

Cross Validation Brier Scores
Target Model Brier Base-Rate Brier Brier Skill
$1+ 0.1639 (0.1485 to 0.1801) 0.1930 (0.1762 to 0.2097) 0.151 (0.099 to 0.205)
$5+ 0.1471 (0.1302 to 0.1646) 0.1724 (0.1537 to 0.1919) 0.146 (0.085 to 0.204)
$10+ 0.1295 (0.1117 to 0.1456) 0.1486 (0.1273 to 0.1679) 0.128 (0.065 to 0.186)
$20+ 0.0884 (0.0716 to 0.1069) 0.0978 (0.0792 to 0.1177) 0.096 (0.033 to 0.162)
Source: Retrosheet, FanGraphs, Chadwick Register
95% CI in parenthesis

And our tiers are fairly well differentiated with instances of probability that are likewise pretty good:

Cross Validation Tier Capture
Tier Players $1+ Predicted (Actual) $5+ Predicted (Actual) $10+ Predicted (Actual) $20+ Predicted (Actual)
1 of 5 (Highest) 126 53.0% (52.4%; 66) 48.2% (46.8%; 59) 41.7% (38.9%; 49) 27.1% (26.2%; 33)
2 of 5 126 33.2% (34.1%; 43) 28.0% (30.2%; 38) 22.6% (25.4%; 32) 13.0% (14.3%; 18)
3 of 5 126 22.8% (21.4%; 27) 18.3% (15.1%; 19) 14.3% (12.7%; 16) 8.0% (7.1%; 9)
4 of 5 125 14.7% (17.6%; 22) 11.3% (16.8%; 21) 8.6% (13.6%; 17) 4.8% (7.2%; 9)
5 of 5 (Lowest) 125 6.7% (4.8%; 6) 4.8% (1.6%; 2) 3.6% (0.0%; 0) 2.0% (0.0%; 0)
Source: Retrosheet, FanGraphs, Chadwick Register

Here are the players that our cross-validation model rated as most likely to eventually succeed:

Most Likely Cross Validation Testing Sample
Rank (out of 628) Name Debut Age ISO ISO z K% K% z P($1+) P($5+) P($10+) P($20+) Highest Reached Peak $
1 Tom Brunansky 1981 20 .320 +2.55 21.7% +1.71 82.8% 80.8% 80.4% 68.4% $5+ $7.98
2 Carlos Delgado 1993 21 .481 +3.60 26.7% +1.83 81.7% 79.6% 75.9% 59.4% $20+ $30.80
3 Fred Manrique 1981 19 .158 +0.50 28.3% +2.85 79.2% 77.4% 71.2% 56.0% None -$0.76
4 Justin Upton 2007 19 .214 +0.55 28.3% +1.68 77.7% 75.3% 70.7% 54.6% $20+ $31.42
5 Jason Heyward 2010 20 .306 +1.64 30.0% +1.67 78.4% 74.5% 68.9% 55.6% $10+ $19.76
6 Matt Kemp 2006 21 .434 +2.66 26.7% +1.53 75.7% 73.9% 66.8% 51.7% $20+ $61.76
7 Rick Ankiel 1999 19 .164 -0.06 28.3% +1.91 74.1% 70.5% 64.5% 49.0% $1+ $1.16
8 Alex Rodriguez 1994 18 .000 -1.58 33.3% +2.71 70.9% 68.5% 63.3% 41.3% $20+ $60.33
9 Bobby Estalella 1996 21 .365 +1.92 28.3% +1.80 71.3% 67.7% 61.7% 45.4% None -$7.96
10 Dean Palmer 1989 20 .200 +0.88 35.0% +3.04 73.1% 67.9% 61.5% 45.4% $10+ $16.55
Source: Retrosheet, FanGraphs, Chadwick Register

This tracks neatly; for example, we have a list of 10 players who are all between 68% and 81% likely to hit $5 viability and seven did. The players who the model rated as least likely, correspondingly, are who you’d most expect.

Least Likely Cross Validation Testing Sample
Rank (out of 628) Name Debut Age ISO ISO z K% K% z P($1+) P($5+) P($10+) P($20+) Highest Reached Peak $
628 Alan Zinter 2002 34 .138 -0.25 41.7% +3.66 0.1% 0.1% 0.1% 0.0% None -$18.16
627 Eddy Alvarez 2020 30 .094 -0.83 36.7% +1.71 0.8% 0.5% 0.4% 0.2% None -$24.03
626 Randy Ruiz 2008 30 .091 -0.70 28.3% +1.60 0.8% 0.5% 0.4% 0.2% None -$39.02
625 Jorge Brito 1995 29 .055 -1.04 30.0% +2.11 1.2% 0.8% 0.6% 0.3% None -$22.95
624 Anthony Bemboom 2019 29 .123 -0.66 36.7% +1.87 1.4% 0.8% 0.6% 0.4% None -$14.82
623 Mandy Romero 1997 29 .105 -0.56 35.0% +2.79 1.4% 1.0% 0.7% 0.4% None -$17.15
622 Chris Colabello 2013 29 .105 -0.49 31.7% +1.64 1.3% 1.0% 0.7% 0.3% $1+ $1.33
621 Aaron Guiel 2002 29 .137 -0.25 30.0% +1.99 1.6% 1.1% 0.8% 0.4% None -$7.09
620 D. T. Cromer 2000 29 .196 +0.21 28.3% +1.88 2.0% 1.2% 0.9% 0.5% None -$41.39
619 Matt Skole 2018 28 .075 -0.98 33.3% +1.51 2.1% 1.3% 0.9% 0.6% None -$38.66
Source: Retrosheet, FanGraphs, Chadwick Register

I have generally not heard of these guys. We do have one $1 viability hit from Chris Colabello, but otherwise, this basically checks out too.

We can also find out which of the two independent variables is adding more value to the forecast by looking at how much AUC drops if we remove it:

Cross Validation Variable Importance
Target Variable Coefficient AUC Drop
$1+ Debut Age -0.516 0.202
$1+ First-60 ISO (z) 0.417 0.042
$5+ Debut Age -0.545 0.225
$5+ First-60 ISO (z) 0.451 0.048
$10+ Debut Age -0.542 0.224
$10+ First-60 ISO (z) 0.448 0.045
$20+ Debut Age -0.530 0.199
$20+ First-60 ISO (z) 0.465 0.052
Source: Retrosheet, FanGraphs, Chadwick Register

First, looking at the sign of the coefficients, it confirms what logic would tell us: higher age upon debut, lower probability. Higher ISO, greater probability. We can also see that debut age comes out to be roughly four to five times more important than ISO in these regressions. This result surprised me at first because I added age into the regressions as a “why not” sort of afterthought. Lo and behold, it ended up the much more powerful predictor of the two. This is intuitive based on the bar charts I showed previously; the differences as age increases are stark. A player goes from roughly 40% likely at age 21 or younger upon debut to 0% at age 25 or older. The difference in ISO, meanwhile, is present but much more muted.

Transitioning to back-testing, where I’m trying to blindly predict the successes of 2008 to 2020 debutants, the variable importance is similar but noisier:

Back-Test Variable Importance
Target Variable Coefficient AUC Drop
$1+ Debut Age -0.550 0.174
$1+ First-60 ISO (z) 0.461 0.043
$5+ Debut Age -0.517 0.215
$5+ First-60 ISO (z) 0.438 0.058
$10+ Debut Age -0.471 0.223
$10+ First-60 ISO (z) 0.406 0.058
$20+ Debut Age -0.532 0.152
$20+ First-60 ISO (z) 0.348 0.080
Source: Retrosheet, FanGraphs, Chadwick Register

The coefficients are directionally the same and in the same ballpark of magnitude. Likewise, the AUC drops are roughly similar except for the $20 viability model. Going into the more detailed picture of back-test performance, the story basically stays the same:

Back-Test Model Performance
Target AUC Brier Top-20% Capture
$1+ 0.719 (0.636 to 0.798) 0.163 (0.130 to 0.198) 43.4% (32.3% to 54.4%)
$5+ 0.775 (0.694 to 0.849) 0.133 (0.101 to 0.163) 51.2% (37.1% to 63.6%)
$10+ 0.783 (0.703 to 0.856) 0.121 (0.089 to 0.154) 54.1% (38.6% to 67.7%)
$20+ 0.717 (0.587 to 0.838) 0.069 (0.042 to 0.096) 47.1% (22.2% to 70.0%)
Source: Retrosheet, FanGraphs, Chadwick Register
95% CI in parenthesis

Here, we have similar point estimates but wider confidence bands, particularly for the $20 model. Our Brier scores, again, tell a similar picture:

Back-Test Brier Scores
Target Model Brier Base-Rate Brier Brier Skill
$1+ 0.1630 (0.1304 to 0.1984) 0.1871 (0.1605 to 0.2138) 0.129 (0.038 to 0.229)
$5+ 0.1327 (0.1013 to 0.1630) 0.1617 (0.1333 to 0.1901) 0.179 (0.087 to 0.272)
$10+ 0.1210 (0.0893 to 0.1540) 0.1435 (0.1101 to 0.1740) 0.157 (0.083 to 0.240)
$20+ 0.0691 (0.0422 to 0.0963) 0.0748 (0.0496 to 0.1000) 0.076 (-0.012 to 0.175)*
Source: Retrosheet, FanGraphs, Chadwick Register
95% CI in parenthesis

Our tier capture is likewise also well differentiated for the top bucket, but our probabilities are drifting; some are close, some are not. This is particularly the case for the top bucket of the $5 and $10 hit rates, which significantly underestimated the instance of viability in the sample. The discrimination between the middle buckets begins to blur a bit as well.

Back-Test Tier Capture
Tier Players $1+ Predicted (Actual) $5+ Predicted (Actual) $10+ Predicted (Actual) $20+ Predicted (Actual)
1 of 5 (Highest) 43 44.5% (53.5%; 23) 38.3% (51.2%; 22) 29.6% (46.5%; 20) 20.0% (18.6%; 8)
2 of 5 43 25.3% (18.6%; 8) 21.2% (18.6%; 8) 16.2% (14.0%; 6) 10.0% (7.0%; 3)
3 of 5 43 16.6% (27.9%; 12) 14.0% (16.3%; 7) 10.9% (14.0%; 6) 6.2% (4.7%; 2)
4 of 5 42 10.1% (16.7%; 7) 8.5% (11.9%; 5) 6.9% (11.9%; 5) 3.7% (9.5%; 4)
5 of 5 (Lowest) 42 4.3% (7.1%; 3) 3.7% (2.4%; 1) 3.2% (0.0%; 0) 1.6% (0.0%; 0)
Source: Retrosheet, FanGraphs, Chadwick Register

In short, for this back-testing sample, everything is directionally similar to the cross-validation result but just a little worse across the board. To see if this was something unique to the era window that I was testing, I also performed a series of alternate back-test windows to see how the model did at differing cutoff points:

Rolling Back-Test Results
Target Test Debuts Trained Through Train n (Hits) Test n (Hits) AUC Top-20% Capture Brier Skill Mean Predicted Actual
$1+ 1996-2000 1977-1990 161 (52) 74 (13) 0.831 (0.722 to 0.920) 46.2% (22.2% to 72.7%) 0.241 (0.050 to 0.418) 26.90% 17.60%
$1+ 2001-2005 1977-1995 234 (69) 76 (19) 0.702 (0.571 to 0.820) 42.1% (20.0% to 60.0%)* 0.098 (-0.060 to 0.239)* 23.80% 25.00%
$1+ 2006-2010 1977-2000 308 (82) 83 (21) 0.728 (0.592 to 0.842) 42.9% (23.1% to 58.8%) 0.170 (0.000 to 0.339) 23.00% 25.30%
$1+ 2011-2015 1977-2005 384 (101) 72 (19) 0.740 (0.590 to 0.874) 47.4% (30.0% to 68.8%) 0.155 (-0.008 to 0.323)* 21.00% 26.40%
$1+ 2016-2020 1977-2010 467 (122) 89 (23) 0.696 (0.559 to 0.821) 43.5% (22.6% to 57.1%) 0.091 (-0.055 to 0.242)* 20.00% 25.80%
$1+ All Windows Varies Varies 394 (95) 0.729 (0.672 to 0.782) 42.1% (33.3% to 49.0%) 0.146 (0.079 to 0.214) 22.90% 24.10%
$5+ 1996-2000 1977-1990 161 (44) 74 (12) 0.802 (0.697 to 0.897) 41.7% (16.6% to 70.0%)* 0.150 (-0.047 to 0.328)* 22.50% 16.20%
$5+ 2001-2005 1977-1995 234 (58) 76 (17) 0.675 (0.538 to 0.802) 41.2% (16.7% to 61.1%)* 0.061 (-0.087 to 0.202)* 19.70% 22.40%
$5+ 2006-2010 1977-2000 308 (70) 83 (17) 0.740 (0.595 to 0.859) 47.1% (21.4% to 66.7%) 0.182 (0.004 to 0.355) 19.60% 20.50%
$5+ 2011-2015 1977-2005 384 (87) 72 (16) 0.778 (0.652 to 0.896) 50.0% (30.0% to 75.0%) 0.173 (0.036 to 0.317) 18.10% 22.20%
$5+ 2016-2020 1977-2010 467 (104) 89 (19) 0.769 (0.635 to 0.882) 52.6% (28.0% to 69.2%) 0.157 (0.031 to 0.286) 17.00% 21.30%
$5+ All Windows Varies Varies 394 (81) 0.752 (0.697 to 0.805) 44.4% (33.8% to 53.3%) 0.144 (0.080 to 0.212) 19.30% 20.60%
$10+ 1996-2000 1977-1990 161 (35) 74 (10) 0.820 (0.712 to 0.918) 50.0% (20.0% to 80.0%)* 0.154 (0.001 to 0.293) 18.30% 13.50%
$10+ 2001-2005 1977-1995 234 (45) 76 (14) 0.706 (0.555 to 0.840) 35.7% (15.8% to 63.7%)* 0.081 (-0.046 to 0.202)* 15.30% 18.40%
$10+ 2006-2010 1977-2000 308 (55) 83 (15) 0.790 (0.647 to 0.904) 53.3% (26.3% to 73.4%) 0.210 (0.053 to 0.379) 15.50% 18.10%
$10+ 2011-2015 1977-2005 384 (69) 72 (14) 0.781 (0.642 to 0.912) 50.0% (28.6% to 77.8%) 0.155 (0.030 to 0.288) 14.20% 19.40%
$10+ 2016-2020 1977-2010 467 (84) 89 (16) 0.783 (0.659 to 0.886) 56.2% (28.6% to 73.3%) 0.140 (0.026 to 0.259) 13.40% 18.00%
$10+ All Windows Varies Varies 394 (69) 0.774 (0.722 to 0.827) 46.4% (37.5% to 57.1%) 0.148 (0.093 to 0.208) 15.30% 17.50%
$20+ 1996-2000 1977-1990 161 (24) 74 (7) 0.770 (0.618 to 0.902) 42.9% (0.0% to 85.9%)* 0.051 (-0.135 to 0.189)* 12.60% 9.50%
$20+ 2001-2005 1977-1995 234 (32) 76 (6) 0.705 (0.484 to 0.913)* 33.3% (0.0% to 86.8%)* 0.075 (-0.099 to 0.252)* 10.60% 7.90%
$20+ 2006-2010 1977-2000 308 (39) 83 (9) 0.793 (0.625 to 0.945) 55.6% (22.2% to 88.9%) 0.193 (0.013 to 0.382) 10.80% 10.80%
$20+ 2011-2015 1977-2005 384 (45) 72 (6) 0.765 (0.533 to 0.931) 50.0% (0.0% to 100.0%)* 0.086 (-0.045 to 0.241)* 8.70% 8.30%
$20+ 2016-2020 1977-2010 467 (54) 89 (9) 0.693 (0.514 to 0.862) 44.4% (0.0% to 71.4%)* 0.048 (-0.052 to 0.185)* 8.10% 10.10%
$20+ All Windows Varies Varies 394 (37) 0.746 (0.672 to 0.818) 43.2% (28.6% to 58.3%) 0.094 (0.022 to 0.165) 10.10% 9.40%
Source: Retrosheet, FanGraphs, Chadwick Register
* denotes statistical confidence interval lapse to “no skill”

I sound like a broken record, but here, we have a picture that is broadly similar. AUC values are generally in the 0.70 range, and roughly 40% of the hits for each viability level are getting captured in the top quintile of forecasted probabilities. One new piece of information is at the far right of the table: overall predicted instance rates are all pretty close to their observed quantities. I take this cluster of outcomes to indicate that I’m genuinely on to something here but the model could still use some tweaks. That said, I do think it’s saying something about the power of these two variables (ISO and age) that we can build models with data that are (in a sense) quite stale and still get useful, if imperfect results.

Outlook on Recent Debutants:

Going back to the second part of my research question:

  • How can we use that information to model the likelihood of recent debutants to reach fantasy viability?

Here is what you all have been waiting for: a list of recent debutants and their respectively probabilities. Please note that 2026 event data are not available from Retrosheet yet, so anyone whose 2025 debut stretched into 2026, or for whom 2026 encompassed their entire debut sample will not be in the analysis. Once Retrosheet releases the data, I will run the model on those players and publish an update.

2021-2025 Debutants
# Name Debut Age ISO ISO z K% K% z P($1+) P($5+) P($10+) P($20+) Highest Reached Peak $
1 Jackson Holliday 2024 20 0.182 0.23 41.70% 2.49 66.20% 62.50% 55.40% 38.10% N/A ($2.78)
2 Akil Baddoo 2021 22 0.386 2.2 43.30% 2.62 61.30% 57.60% 50.30% 34.80% N/A $0.00
3 Jhonkensy Noel 2024 22 0.327 1.76 36.70% 1.85 56.90% 52.70% 45.40% 30.30% N/A ($28.71)
4 Liover Peguero 2022 21 0.196 0.44 38.30% 2.04 56.10% 51.40% 44.20% 28.60% N/A ($26.42)
5 Eguy Rosario 2022 22 0.304 1.6 35.00% 1.62 55.30% 50.90% 43.70% 28.80% N/A ($35.09)
6 Oneil Cruz 2021 22 0.276 1.06 35.00% 1.58 49.80% 44.90% 37.80% 24.00% $10+ $11.71
7 Jordan Lawlar 2023 20 0 -1.76 38.30% 2.02 46.20% 40.40% 33.60% 19.60% N/A ($34.64)
8 Carson Williams 2025 22 0.196 0.37 38.30% 2.09 42.60% 37.30% 30.80% 18.60% N/A ($44.63)
9 Julio Rodríguez 2022 21 0.055 -1.11 41.70% 2.46 40.20% 34.60% 28.30% 16.30% $20+ $33.72
10 Grant McCray 2024 23 0.246 0.9 43.30% 2.71 35.70% 30.50% 24.70% 14.70% N/A ($36.84)
11 Taylor Trammell 2021 23 0.212 0.4 41.70% 2.41 31.10% 26.00% 20.80% 12.00% N/A ($29.03)
12 Dérmis Garcia 2022 24 0.302 1.58 41.70% 2.46 30.60% 25.70% 20.60% 12.20% N/A ($36.03)
13 Bo Naylor 2022 22 0.073 -0.91 38.30% 2.04 30.40% 25.10% 20.10% 11.20% N/A ($12.75)
14 Nick Kurtz 2025 22 0.075 -0.91 38.30% 2.09 30.40% 25.10% 20.00% 11.20% $10+ $17.20
15 Elehuris Montero 2022 23 0.172 0.17 36.70% 1.83 29.10% 24.10% 19.20% 11.00% N/A ($23.85)
16 Graham Pauley 2024 23 0.172 0.13 36.70% 1.85 28.70% 23.70% 18.90% 10.80% N/A ($27.85)
17 Shea Langeliers 2022 24 0.276 1.3 41.70% 2.46 28.20% 23.40% 18.60% 10.90% $10+ $17.59
18 Alexander Canario 2023 23 0.179 0.09 38.30% 2.02 28.40% 23.40% 18.60% 10.60% N/A ($26.55)
19 Nick Pratto 2022 23 0.16 0.04 35.00% 1.62 28.00% 23.00% 18.30% 10.40% N/A ($27.51)
20 Everson Pereira 2023 22 0.056 -1.19 40.00% 2.23 28.10% 22.90% 18.10% 10.00% N/A ($34.67)
21 Edouard Julien 2023 24 0.275 1.09 36.70% 1.81 26.40% 21.70% 17.20% 10.00% N/A ($7.77)
22 Sebastián Rivero 2021 22 0.037 -1.4 35.00% 1.58 26.30% 21.20% 16.70% 9.10% N/A ($26.49)
23 Jordan Beck 2024 23 0.133 -0.28 38.30% 2.07 25.40% 20.50% 16.20% 9.10% $1+ $1.66
24 Tyler Locklear 2024 23 0.13 -0.32 38.30% 2.07 25.10% 20.30% 16.00% 8.90% N/A ($39.60)
25 Coby Mayo 2024 22 0 -1.68 46.70% 3.14 24.10% 19.20% 15.10% 8.10% N/A ($5.30)
26 Garrett Mitchell 2022 23 0.111 -0.49 43.30% 2.67 23.80% 19.00% 15.00% 8.30% N/A $0.36
27 Colby Thomas 2025 24 0.222 0.64 43.30% 2.72 23.00% 18.50% 14.50% 8.30% N/A ($26.27)
28 Matthew Lugo 2025 24 0.22 0.62 36.70% 1.88 22.80% 18.40% 14.40% 8.20% N/A ($31.68)
29 Josh Jung 2022 24 0.207 0.55 43.30% 2.67 22.30% 17.90% 14.00% 7.90% $5+ $6.27
30 Josh Lowe 2021 23 0.094 -0.81 36.70% 1.79 21.40% 16.90% 13.20% 7.20% $10+ $16.50
31 Brandon Marsh 2021 23 0.075 -1.01 35.00% 1.58 20.10% 15.70% 12.20% 6.60% N/A $0.35
32 Matt Wallner 2022 24 0.17 0.15 40.00% 2.25 19.50% 15.40% 12.00% 6.70% N/A ($14.07)
33 Jordyn Adams 2023 23 0.053 -1.22 38.30% 2.02 18.70% 14.50% 11.30% 6.10% N/A ($36.82)
34 Jerar Encarnacion 2022 24 0.155 -0.01 41.70% 2.46 18.50% 14.50% 11.20% 6.20% N/A ($30.37)
35 Justyn-Henry Malloy 2024 24 0.157 -0.03 40.00% 2.28 18.40% 14.40% 11.20% 6.20% N/A ($30.56)
36 Brenton Doyle 2023 25 0.281 1.15 35.00% 1.6 18.10% 14.20% 11.00% 6.30% $10+ $16.46
37 Jarren Duran 2021 24 0.158 -0.16 38.30% 1.99 17.70% 13.70% 10.60% 5.90% $20+ $31.66
38 Zach Dezenzo 2024 24 0.14 -0.21 35.00% 1.64 17.40% 13.40% 10.40% 5.70% N/A ($29.90)
39 Wade Meckler 2023 23 0.019 -1.56 40.00% 2.23 16.70% 12.70% 9.80% 5.20% N/A ($20.52)
40 Stuart Fairchild 2021 25 0.241 0.7 36.70% 1.79 15.50% 11.90% 9.20% 5.20% N/A ($24.43)
41 Ryan Ritter 2025 24 0.111 -0.54 38.30% 2.09 15.50% 11.80% 9.10% 5.00% N/A ($40.25)
42 Dalton Rushing 2025 24 0.094 -0.71 46.70% 3.14 14.50% 11.00% 8.50% 4.60% N/A ($8.16)
43 Blake Sabol 2023 25 0.214 0.46 45.00% 2.87 14.20% 10.80% 8.30% 4.70% N/A ($12.33)
44 Niko Kavadas 2024 25 0.185 0.26 40.00% 2.28 13.30% 10.00% 7.70% 4.30% N/A ($37.03)
45 Owen Miller 2021 24 0.073 -1.03 41.70% 2.41 13.00% 9.70% 7.40% 4.00% N/A ($19.38)
46 Blake Dunn 2024 25 0.16 0 38.30% 2.07 12.00% 9.00% 6.90% 3.80% N/A ($34.45)
47 Johnathan Rodríguez 2024 24 0.04 -1.26 38.30% 2.07 11.90% 8.80% 6.70% 3.60% N/A ($33.56)
48 Jacob Melton 2025 24 0.037 -1.32 40.00% 2.3 11.70% 8.60% 6.60% 3.50% N/A ($33.64)
49 Connor Wong 2021 25 0.154 -0.2 35.00% 1.58 11.20% 8.30% 6.30% 3.50% $5+ $6.45
50 Dillon Dingler 2024 25 0.138 -0.23 36.70% 1.85 11.10% 8.20% 6.30% 3.40% $20+ $21.14
51 Peyton Burdick 2022 25 0.135 -0.24 38.30% 2.04 11.00% 8.20% 6.20% 3.40% N/A ($30.44)
52 DJ Peters 피터스 2021 25 0.137 -0.37 43.30% 2.62 10.50% 7.70% 5.90% 3.20% N/A ($23.77)
53 Jacob Amaya 2023 24 0.018 -1.58 35.00% 1.6 10.60% 7.70% 5.90% 3.10% N/A ($39.65)
54 Tim Elko 2025 26 0.236 0.79 35.00% 1.67 10.20% 7.60% 5.80% 3.20% N/A ($40.45)
55 Joey Loperfido 2024 25 0.111 -0.51 36.70% 1.85 10.00% 7.30% 5.60% 3.00% N/A ($26.24)
56 René Pinto 2022 25 0.103 -0.58 46.70% 3.09 9.70% 7.10% 5.40% 2.90% N/A ($23.45)
57 Bryce Teodosio 2024 25 0.074 -0.9 36.70% 1.85 8.60% 6.20% 4.70% 2.50% N/A ($32.45)
58 Denzel Clarke 2025 25 0.069 -0.98 53.30% 3.99 8.40% 6.00% 4.50% 2.40% N/A ($29.11)
59 Zack Short 2021 26 0.178 0.05 40.00% 2.2 7.70% 5.50% 4.20% 2.30% N/A ($28.88)
60 Braxton Fulford 2025 26 0.123 -0.41 36.70% 1.88 6.50% 4.50% 3.40% 1.90% N/A ($27.88)
61 Trey Cabbage 2023 26 0.123 -0.49 43.30% 2.65 6.30% 4.40% 3.30% 1.80% N/A ($40.71)
62 Jermaine Palacios 2022 25 0 -1.7 35.00% 1.62 6.30% 4.40% 3.30% 1.80% N/A ($40.15)
63 Oliver Dunn 2024 26 0.105 -0.57 36.70% 1.85 6.10% 4.20% 3.20% 1.80% N/A ($35.45)
64 Blaine Crim 블레인 2025 28 0.327 1.75 35.00% 1.67 5.70% 4.10% 3.10% 1.80% N/A ($36.89)
65 Luken Baker 2023 26 0.07 -1.03 36.70% 1.81 5.10% 3.50% 2.60% 1.40% N/A ($38.25)
66 Will Wilson 2025 26 0.058 -1.1 40.00% 2.3 4.90% 3.40% 2.60% 1.40% N/A ($33.68)
67 Nick Sogard 2024 26 0.019 -1.48 36.70% 1.85 4.20% 2.90% 2.20% 1.20% N/A ($20.73)
68 José Godoy 2021 26 0.018 -1.6 35.00% 1.58 4.10% 2.70% 2.10% 1.10% N/A ($26.70)
69 Cody Thomas 2022 27 0.091 -0.71 35.00% 1.62 3.50% 2.40% 1.80% 1.00% N/A ($34.86)
70 Tristan Gray 2023 27 0.088 -0.85 38.30% 2.02 3.30% 2.20% 1.70% 0.90% N/A ($37.45)
71 Will Robertson 2025 27 0.018 -1.52 36.70% 1.88 2.50% 1.60% 1.20% 0.70% N/A ($37.66)
72 Mason McCoy 2023 28 0.038 -1.36 35.00% 1.6 1.60% 1.00% 0.80% 0.40% N/A ($48.12)
73 Jack López 2021 28 0.037 -1.4 40.00% 2.2 1.60% 1.00% 0.80% 0.40% N/A ($35.73)
74 Jake Hager 2021 28 0.02 -1.57 43.30% 2.62 1.50% 0.90% 0.70% 0.40% N/A ($40.27)
Source: Retrosheet, FanGraphs, Chadwick Repository

Note that in a group of 76 players, roughly the top 15 or 16 would constitute the top 20% as it’s measured in the analyses above. There are a couple of pretty interesting things about this list, but the main takeaway is that I’d probably sell on most of the top 15. I think Jackson Holliday will eventually cross one of these thresholds – he’s already gotten close and is at an age where a lot of top prospects are still in AA or AAA. I was also encouraged by Jordan Lawlar’s production last season. If he can stay healthy for a full year, I bet he ends up fantasy relevant at some point too. If you take those two and think one of the other guys will break through or find some adjustment later in their 20s to eventually register a viable season, this list would start looking a lot better. We do have three clear hits at the $10 level – a 37.5% capture rate – and I’d probably buy Nick Kurtz and Oneil Cruz to eventually crest $20 as well. I think it’s also fair to claim partial credit on Shea Langeliers, who, while not strictly in the top 15, is a whisker away and is within the same general probability tier as Kurtz. It’s also worth noting that all of the hits but Dillon Dingler are in the top half of these rankings. If you cut the board in half and threw a dart, you’d have a ~25% chance at hitting on a player on at least some viability level.

Final Thoughts

I think it’s too early to say whether the model performed definitively worse on this sample, but it’s something that is definitely worth looking into. As I think more about it, I am realizing that I still may not have avoided truncation bias despite building in a six-year buffer. This is because I only checked for $1 viability, not other levels. It’s plausible that a player might spend most of their 20s in the $1-$5 range and spike a $7 or $12 season at age 29 or 30 before falling off again. This would lead to underestimates of higher viability levels, which we did see in the back-test sample. I also think that Covid might have done something weird with the player pool. I postulated about this in my initial k-rate study:

The 2020 season saw by far the highest number of debutant hitters as a percentage of games played. In addition to this, there could be a selection bias in the group of players who were debuting. Teams may have been selective about which players they promoted, and some players simply skipped the season outright. If the type of prospect who did not play in 2020 was on average more talented than one who did, this will dilute the talent pool more than a typical season of debutants would. In 2021, the number of debutants was the second-lowest in the sample (excluding 2020), which could point to teams continuing to be circumspect with their prospects. Then, in 2022, we saw the highest raw number of debutants in the sample. These players could likewise have had their development negatively impacted by the pandemic. This could create a sort of expansionary effect if we assume the debuting players are generally worse than established players, or, at least worse than they otherwise would have been.

If power goofs are being brought up to fill rosters and are facing weaker pitching competition, it follows that their debut might run hot before being figured out by the league. Their probability in a model that isn’t trained on the Covid data would likewise run high. This is something I definitely want to examine in future research – perhaps withholding debutants from 2020 to 2022 will improve the models.

I’m still encouraged by the results here, though. While not entirely surprising, it’s clear that debut age and ISO can help us get a long way toward predicting which players who struggle initially will eventually figure it out enough to help our fantasy teams. And, as with much of the research I’ve done for RotoGraphs, opening this one door could lead to many more: I’m already percolating on how to improve this model, how to build one that could help us parse which players will jump between viability tiers (and when they might do it), and also coming to terms with the fact that I think I need to do an extended look into the impact of Covid on fantasy viability generally. Stay tuned for more in the coming weeks and months.





Jonathan is a contributor for RotoGraphs. He is a Tigers fan living in Philadelphia with his wife and dog and requests that you leave your best pizza topping combinations in the comments.

0 Comments
Oldest
Newest Most Voted