Asset Valuation Part 3: Finding Bargains

Ignore Kohl’s in the distance. That’s out of our price range.
Part 1 of this series earlier in the month laid out some groundwork and provided a few basic examples of the benefits of striving to value fantasy assets more rigorously. Part 2 illustrated some of the differences in player value across different types of league settings, and taught you how to construct that analysis for yourself. In this article, I aim to build on those concepts to show you how to hunt for bargains in the draft.
Introduction
The concept at play here is surplus value. The underlying idea is simple: getting more value for something than what you paid for it. As it relates to fantasy, this is the benefit you reap from unearthing a waiver gem, hitting a late-round pick, or winning a trade.
As a brief note, I’m mainly going to focus here on identifying bargains for draft leagues as opposed to auctions. Auctions, while not without nuance, are relatively more straightforward when it comes to determining a bargain: either a player is going for below what you’d be willing to pay or they’re not. If you’re looking for tips on auction strategy, look no further than our own Beat the Shift podcast; the February 20 episode provides an excellent treatment on the topic.
And while I regret that this analysis is coming several months following draft season, I think the general concepts can still reasonably help owners down the stretch and will obviously help as reference material going into next year’s draft.
Data and Methodology
Now, in order to find draft bargains, you must first to create a baseline for what you expect draft picks to be worth. To calculate the expected value for a draft pick, I’m using pre-season 2026 projections with the following Auction Calculator settings:

This is not exactly what I did in Part 1 when I presented draft pick values because these are slightly different exercises. By pulling a range of historical data, my goal was to provide a relatively durable demonstration of the value of a draft pick agnostic to year. That way, you can use the values when thinking about trades involving picks in drafts from any year at any point in the season.
This analysis, though, is looking specifically within the context of 2026 drafts to find bargains. It could be that any year’s draft takes a slightly different shape in one way or another relative to recent history. Pick values based on historical data will miss this nuance. We accept this at other points in the season because there is not more precise future data available, but once projections for the following season are released, and ADP data are available, it makes more sense to use them when considering matters for that season’s draft.
Now, in theory, it would be perfectly valid to craft pick values based on historical projections data, but those data are harder to find (FanGraphs maintains past ZiPS and Steamer forecasts for members, though!) and using historical actual performance presented some other benefits which I will explain in greater detail in a subsequent article. For now, you’ll have to trust me that using projected values to bargain hunt will work just as well, if not better, than using historical data.
For each setting, I’ve matched players to their place in consensus ADP data and run a series of spline regressions with ADP as the regressor (independent variable, x-axis) and dollar value as the regressand (dependent variable, y-axis). This allows me to create the expected dollar value for each value of ADP order. Again, I will explain this methodology more clearly in a future article. For now, what matters is creating a reasonable enough baseline which we can use to spot a few outliers. In general, they are similar regardless of league type:
| Round | 5×5 Roto – AVG | 5×5 Roto – OBP | ESPN Points | Yahoo Points |
|---|---|---|---|---|
| 1 | $41.30 | $41.77 | $37.56 | $35.45 |
| 2 | $35.17 | $35.44 | $32.27 | $31.07 |
| 3 | $29.80 | $29.89 | $27.59 | $27.15 |
| 4 | $25.12 | $25.07 | $23.48 | $23.65 |
| 5 | $21.07 | $20.92 | $19.89 | $20.54 |
| 6 | $17.60 | $17.38 | $16.79 | $17.79 |
| 7 | $14.65 | $14.38 | $14.11 | $15.36 |
| 8 | $12.17 | $11.88 | $11.82 | $13.21 |
| 9 | $10.10 | $9.81 | $9.86 | $11.33 |
| 10 | $8.39 | $8.11 | $8.18 | $9.66 |
| 11 | $6.97 | $6.73 | $6.75 | $8.18 |
| 12 | $5.79 | $5.59 | $5.51 | $6.85 |
| 13 | $4.79 | $4.65 | $4.42 | $5.64 |
| 14 | $3.92 | $3.85 | $3.42 | $4.51 |
| 15 | $3.13 | $3.11 | $2.48 | $3.43 |
| 16 | $2.35 | $2.40 | $1.53 | $2.37 |
| 17 | $1.52 | $1.64 | $0.55 | $1.29 |
| 18 | $0.60 | $0.77 | $-0.53 | $0.16 |
| 19 | $-0.45 | $-0.23 | $-1.72 | $-1.04 |
| 20 | $-1.62 | $-1.35 | $-3.01 | $-2.29 |
| 21 | $-2.86 | $-2.56 | $-4.36 | $-3.57 |
| 22 | $-4.14 | $-3.81 | $-5.72 | $-4.85 |
| 23 | $-5.44 | $-5.08 | $-7.07 | $-6.11 |

The graph is hiding some nuance, though. Below, I have also plotted the difference for each predicted value of draft position with respect to the value for 5×5 roto with average, which is represented by the dashed line at zero.

Here, any place where a line is lower than zero represents a place of ADP where a pick in that setting is worth less than the roto (average) pick in the same slot. Likewise, any place the line rises above the dash, it is worth more. Notably, Yahoo starts the lowest, but eventually cross over to be worth more than the typical roto pick in the middle rounds. Yahoo also has the flattest decline until it converges with the others a bit beyond the 100-pick mark:

Based on this, if you are in a 5×5 league, you should value your early picks slightly more than you would in a points league, particularly with Yahoo’s default setting. They are both more valuable and decline more quickly until the middle of the draft.
How-To
Now, I did promise that I’d show you how to do this at home. I realize that a spline regression and matching consensus ADP from an outside source would generally require fluency in statistics and a programming language like R or Python. For those of you who are not as familiar with these concepts and tools, a version of this analysis can be done in Excel. In fact, I’d recommend it as a start, and would call back to something I said in Part 1:
Do not let the perfect get in the way of the good. The variance involved in predicting the outcome of any sport is sufficiently high that if your analysis ends up in the correct general magnitude and direction more often than not, over time, you will be successful.
In Excel, you can build a linear regression model that will suit well enough. If you export Auction Calculator rankings for your league settings (I use 5×5 roto with average below), there is a built-in ADP column you can use. This ADP comes from NFBC. I like using consensus ADP because there are certain nuances to NFBC leagues that will affect values, but for the purposes of getting started, it works just fine.
First, cut your sample off at a reasonable place (I have used the top 400 ranked players by ADP in my analysis). As a note, we don’t have to worry about replacement value because, as long as you set your team size in Auction Calculator correctly, the machines take care of that nuance for us. We just need to have a pool of players which we can reasonably expect to be considered for a 276-player draft.
With the data in place, we are seeking to create a formula that hearkens back to high school algebra:
Y = mx + b
Here, we have the formula for a straight line, and you are going to use Excel to find the best linear fit (i.e. a straight line) for your data with the INTERCEPT and SLOPE functions. Each of these functions works the same; you need to specify the y values (dollar values) and x values (ADP). For the SLOPE function, the value returned is m in the equation above. INTERCEPT creates b. You already have x (ADP)
With this, you can sub in to create predicted Y values for each value of ADP. This equation will yield the following line (compared to the scatterplot of dollar values):

source: FanGraphs, FantasyPros
Now, this isn’t perfect, particularly at the beginning of the draft. Therefore, I would caution against using it to find bargains in the top 40 or so picks. But beyond that, it fits pretty well. You can manually adjust your slope or intercept values to fit the distribution a bit better if you choose. Changing the slope will effect the tilt of the line, and changing the intercept will move it up or down along the y-axis. Overall though, this is a great starting point for this style of analysis. With the expected pick values in hand, you can simply subtract a player’s expected value from their projected value to derive the surplus they provide in that draft slot.
Diving In
There are, however, a few points of caution. The first is that my pick models exhibit a classic case of heteroskedasticity. This word sounds intimidating, but the concept is straightforward: the notion that, in addition to your dependent variable, your expected error also changes as the independent variable changes. The “error” in this framework is the extent to which a player is or is not a bargain. As you go later in the draft, the projected values for players in those slots varies further from the fitted line.

In each plot, you can see this based on the cone-shaped splay of dots spreading out as you increase ADP. It is especially evident in the drafts for points leagues.
The presence of heteroskedasticity in these data makes intuitive sense. Variance (or lack thereof) is one of the factors we consider when drafting a player. Players for whom the market is less certain in their performance will be penalized in this respect and therefore drafted later.
It doesn’t threaten the validity of our analysis in the same way it would in one which relies on constant errors, like using linear models to discern causal inference. But it might make identifying bargains difficult, because the typical variance around pick 200 seems to be different than the typical variance around pick 50. If this is true and you allow the higher variance of later rounds to influence analysis on earlier-round players, your thresholds for what constitutes a bargain will be too high and you will miss on some players.
To flag bargains I grouped players into buckets of 100 sorted by ADP and measure the standard deviations of both expected dollar difference within the bucket, with the intention of eventually creating leaderboards based on a pool of players greater than one standard deviation from the mean. Before I made my leaderboards though, I checked the standard deviation data to see if it aligned with the intuition I described above (variance increases as ADP increases):
| ADP Bucket | 5×5 Roto – AVG | 5×5 Roto – OBP | ESPN Points | Yahoo Points |
|---|---|---|---|---|
| 1-100 | $7.21 | $7.79 | $8.69 | $6.70 |
| 101-200 | $6.00 | $6.25 | $8.15 | $6.98 |
| 201-300 | $6.51 | $6.36 | $10.77 | $9.39 |
These results surprised me. Dollar variance in roto categories is actually highest for early picks! And that the variance for picks in the middle band is actually the lowest. This finding was consistent even as I flexed some of the specification details of my fit lines. Looking back at my scatterplots, this pattern is evident: there seems to be a pinched cluster of observations toward the middle in the roto plots, with variance fanning out in the beginning and end of the draft. This is interesting!
I’m not going to elaborate further on this yet because the magnitude of difference demonstrated isn’t large enough to influence this particular analysis. Because the remainder of this article and the next one focus on outliers, the specific value of the standard deviation doesn’t really matter. If a player is rated as a $15 bargain, they will show up on any leaderboard I create, regardless of whether the true standard deviation cutoff should be $7.01 or $7.49 or $6.28. I will, however, put this on a front burner to look at in future analysis.
Leaderboards:
Here we are though, nigh 2000 words into this article about finding bargain players and I haven’t even provided one single leaderboard let alone insinuated whether or not any player was, in fact, a bargain. I will remedy the former but leave you with a promise to address the latter in an article later in the week. Please find below a series of leaderboards featuring the top five (or fewer, if there weren’t five) bargains greater than one standard deviation from the mean. I have omitted the 5×5 roto OBP pitchers because it’s the same list as the 5×5 roto avg. pitchers:
| Name | Position | ADP | Bucket | Bargain $ | SD Above | Proj $ | Exp $ | YTD $ |
|---|---|---|---|---|---|---|---|---|
| Aaron Judge | OF/DH | 2 | 1-100 | $9.08 | 1.26 | $52.85 | $43.77 | $18.35 |
| Miguel Vargas | 1B/3B | 279 | 201-300 | $7.29 | 1.12 | $1.00 | $-6.29 | $24.45 |
| Ezequiel Tovar | SS | 213 | 201-300 | $7.01 | 1.08 | $7.45 | $0.44 | $-18.61 |
| Name | Position | ADP | Bucket | Bargain $ | SD Above | Proj $ | Exp $ | YTD $ |
|---|---|---|---|---|---|---|---|---|
| Tarik Skubal | SP | 7 | 1-100 | $30.83 | 4.27 | $71.84 | $41.01 | $5.62 |
| Zack Wheeler | SP | 125 | 101-200 | $19.65 | 3.27 | $26.80 | $7.16 | $27.76 |
| Paul Skenes | SP | 9 | 1-100 | $20.09 | 2.79 | $60.03 | $39.94 | $25.66 |
| Nathan Eovaldi | SP | 129 | 101-200 | $14.23 | 2.37 | $20.96 | $6.73 | $-1.46 |
| Griffin Jax | RP | 218 | 201-300 | $14.56 | 2.24 | $14.57 | $0.01 | $-8.75 |
| Name | Position | ADP | Bucket | Bargain $ | SD Above | Proj $ | Exp $ | YTD $ |
|---|---|---|---|---|---|---|---|---|
| Aaron Judge | OF/DH | 2 | 1-100 | $15.54 | 2 | $59.87 | $44.34 | $24.23 |
| Juan Soto | OF | 4 | 1-100 | $12.26 | 1.57 | $55.43 | $43.17 | $23.68 |
| Miguel Vargas | 1B/3B | 279 | 201-300 | $9.57 | 1.5 | $3.65 | $-5.92 | $32.55 |
| Matt Wallner | OF | 297 | 201-300 | $8.72 | 1.37 | $1.00 | $-7.72 | $-31.83 |
| Munetaka Murakami | 1B | 181 | 101-200 | $7.69 | 1.23 | $10.45 | $2.76 | $24.35 |
| Name | Position | ADP | Bucket | Bargain $ | SD Above | Proj $ | Exp $ | YTD $ |
|---|---|---|---|---|---|---|---|---|
| Juan Soto | OF | 4 | 1-100 | $18.00 | 2.07 | $56.73 | $38.72 | $24.54 |
| Luis Arraez | 1B/DH | 229 | 201-300 | $20.69 | 1.92 | $18.34 | $-2.35 | $25.18 |
| Steven Kwan | OF | 146 | 101-200 | $14.81 | 1.82 | $19.65 | $4.84 | $-5.04 |
| Yandy Diaz | 1B/DH | 124 | 101-200 | $12.44 | 1.53 | $19.50 | $7.06 | $27.41 |
| Alex Bregman | 3B | 88 | 1-100 | $12.09 | 1.39 | $24.38 | $12.29 | $6.73 |
| Name | Position | ADP | Bucket | Bargain $ | SD Above | Proj $ | Exp $ | YTD $ |
|---|---|---|---|---|---|---|---|---|
| Tarik Skubal | SP | 7 | 1-100 | $17.08 | 1.97 | $54.39 | $37.31 | $-4.09 |
| Abner Uribe | RP | 189 | 101-200 | $15.65 | 1.92 | $17.02 | $1.37 | $0.36 |
| Bryan Abreu | RP | 231 | 201-300 | $19.15 | 1.78 | $16.59 | $-2.56 | $-13.64 |
| Edwin Diaz | RP | 49 | 1-100 | $15.33 | 1.76 | $36.82 | $21.49 | $-25.50 |
| Mason Miller | RP | 42 | 1-100 | $15.32 | 1.76 | $38.97 | $23.65 | $38.45 |
| Name | Position | ADP | Bucket | Bargain $ | SD Above | Proj $ | Exp $ | YTD $ |
|---|---|---|---|---|---|---|---|---|
| Juan Soto | OF | 4 | 1-100 | $11.47 | 1.71 | $47.89 | $36.42 | $18.41 |
| Aaron Judge | OF/DH | 2 | 1-100 | $11.25 | 1.68 | $48.46 | $37.21 | $17.50 |
| Miguel Vargas | 1B/3B | 279 | 201-300 | $14.54 | 1.55 | $7.61 | $-6.93 | $26.34 |
| Ian Happ | OF | 145 | 101-200 | $7.78 | 1.11 | $14.00 | $6.22 | $24.84 |
| Matt Chapman | 3B | 122 | 101-200 | $7.73 | 1.11 | $16.47 | $8.75 | $4.57 |
| Name | Position | ADP | Bucket | Bargain $ | SD Above | Proj $ | Exp $ | YTD $ |
|---|---|---|---|---|---|---|---|---|
| Mason Miller | RP | 42 | 1-100 | $16.40 | 2.45 | $40.19 | $23.79 | $34.03 |
| Edwin Diaz | RP | 49 | 1-100 | $16.34 | 2.44 | $38.26 | $21.92 | $-15.30 |
| Tarik Skubal | SP | 7 | 1-100 | $16.31 | 2.43 | $51.57 | $35.25 | $-3.42 |
| Devin Williams | RP | 89 | 1-100 | $15.94 | 2.38 | $29.43 | $13.49 | $6.75 |
| Cade Smith | RP | 60 | 1-100 | $15.43 | 2.3 | $34.68 | $19.25 | $32.17 |
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.
Which projection(s) did you use for this?
Thanks for the Q. I used ATC. Check out Part 1 for some clarifying details on this and other methodological choices.