This is perhaps a question that Duke Tobin, the Cincinnati Bengals Director of Player Personnel, is asking himself. However, I am personally interested in this question as an avid fantasy football1 player. Specifically, fantasy football in the dynasty2 format.
In my first dynasty league, I drafted A.J. Green before his rookie season in 2011. He remains on my roster nearly a decade later. Injuries and age have limited his impact in recent years and led to a drastic reduction in his dynasty value. With the benefit of hindsight, it is clear I should have traded Green before the bottom fell out. However, Green was a productive player for many years, which helped me win many fantasy matchups along the way.
A.J. Green
The solution to the question of when the optimal time to have traded Green was must take into account the positive returns of his actual fantasy production over the years and then weigh those against the diminution of his trade value as he aged. The goal will be to find the point where we maximize the combination of the actual fantasy value we captured from his production and the trade value we acheived from trading him (which should then lead to future fantasy production for our dynasty team).
We can analogize a player’s dynasty fantasy football value to the value of a stock. The player’s weekly fantasy production is similar to a dividend, providing an immediate benefit to a dynasty general manager’s team that is “paid out” on game day. Each player also has a trade value because dynasty leagues are typically very active in terms of trade offers, negotiations, and completed trades. In this sense, the player’s trade value is similar to the price of a stock.
Our analysis will require three separate steps and include data from three different sources:
1. Figure out how much actual value Green’s fantasy production has provided over the years by compiling and analyzing the statistics from every game of A.J. Green’s career.
2. Figure out how much dynasty trade value Green had at various points of his career by compiling and analyzing thousands of dynasty drafts to determine what his approximate dynasty trade value was at any given point in time the last six years.
3. Combine Green’s cumulative career production and specific dynasty trade values into a single value to determine the optimal point of time in which we could have maximized our fantasy football returns by trading away Green.
The first step in our analysis is to determine the amount and value of fantasy production3 and the timing of exactly when that value was realized. Put more simply, we are going to go game-by-game through Green’s career and add up how much actual value he added in every single week and then sum those up to figure out his career value.
To do so, we are going to use a data set that includes the statistics and fantasy points scored by every player in every single NFL regular season game from the year 2010 through the year 2019. We need to combine each of the 170 separate .csv files (17 for each of the 10 seasons) into one massive data set. After doing so, we have 47,922 observations of 20 different variables. We are also going to scrape the same data for each of the four primary fantasy positions4 for each of the first five weeks of the 2020 NFL season and combine these 20 smaller data sets into one larger set with 2,039 observations of 12 different variables.
To determine the actual fantasy value for each week, we will compare the actual fantasy production of each player to the “replacement level” production at his position using a series of “ifelse” statements5.
To get an idea of what these fantasy production values actually look like, here are the top fantasy performers through the first five weeks of the 2020 season and their total 2020 fantasy value returned to date:
Getting back to the subject of our original question, we now have enough information to perform the first step of our analysis. We can determine how much value A.J. Green has returned to my fantasy team over the years. The following visualization shows the cumulative fantasy value Green has produced since his rookie season of 2011.
You may note that the cumulative value stops rising at the midpoint of the 2018 season. It was at that time Green suffered a season-ending injury. He also missed the entire 2019 season due to injury and did not add any fantasy value through the first five weeks of the 2020 season.
Now that we have the first piece of the puzzle, we can look at the second piece, which is the dynasty trade value of A.J. Green and other players. We have a data set which contains the average draft position of every player in dynasty leagues from January 1, 2015 through February 1, 2020. We can translate this data regarding the average draft spot of players into a good approximation of each player’s dynasty trade value at the same time6. While this does not cover the entirety of Green’s career, it is sufficient for our analysis given (A) Green’s huge production over the early part of his career and (B) the length of time he was able to maintain an extremely high dynasty trade value. In total, we have 17,220 observations of 11 variables.
By filtering out Green’s average draft position for each month over this five-plus year span, we can see how his dynasty trade value has changed over the years. In this line chart below, we can see how steep the decrease in Green’s dynasty trade value has been in recent years.
We can see Green’s value was consistently high up until late in 2018. He did see a temporary drop late in 2016, which was due to the fact he suffered a season ending injury late in the 2016 season. His value returned to near peak levels again in 2017 before entering a sharp decline phase in early 2018.
With the two above visualizations, we can see that the cumulative total of Green’s fantasy production continually rose while his trade value, with a few temporary upward and downward movements, generally declined. This is to be expected. A player’s dynasty trade value at any given time is essentially the net present value of expected future fantasy production. As a football player ages, his expected future production decreases. The key to long-term success in the dynasty format is capturing as much of that actual fantasy production as possible (i.e. winning your weekly fantasy matchups) while trading away a player before his drop in value exceeds the returns he produces.
Some numbers can clarify the strategy and approach to finding the optimal time to trade a player. Assume Player A’s dynasty trade value entering the 2019 season was 40 but decreased to 35 after the season. However, if he returned 10 points of fantasy value over the 2019 season then it would have been unwise to trade him. His production (10) more than outweighed the loss in overall value (5). However, if that player had instead returned 2 points of fantasy value over the 2019 season then the loss of value (5) was more than the value returned and the optimal move would have been to trade him before the season.
By combining cumulative career production and current dynasty trade values, we can actually determine the optimal time we should have traded a player away to achieve the maximum combination of production realized (think dividend payments in our stock analogy) and trade value (think the price of your stock when you traded it away).
The best day to trade A.J. Green was 2017-12-01.
As we can see in the visualization above, when combining the fantasy value produced and his historical trade values, the optimal time to trade A.J. Green would have been late in 2017. There was also a window late in 2016 (prior to his injury that year) where his total value was nearly as high. Failing to make a trade in 2016 or 2017 was costly. In 2018 and 2019 Green’s loss in trade value was massive and vastly exceeded the actual fantasy value he returned in those years (almost none due to injury).
Theoretically, we could be more precise in some of our calculations. We could refine the replacement level production at each position by making slight adjustments for each season to reflect league-wide averages, for example.
However, a better use of time would be to perform the same analysis we did for Green on every player in our massive data sets. We could then use this information to answer more widely applicable questions. For example, we could try to figure out the best age to trade wide receivers in general to achieve the optimal combination of actual fantasy production and trade value (which is a great approximation of future fantasy production). We could try to subset the data to come up with conditional rules. It may make sense to trade wide receivers whenever their trade value hits 40 for example. Or maybe the optimal approach is a combination of factors (trade value ranges combined with age).
nfl.com provides a good overview of what fantasy football is for those who are unfamiliar: At its core fantasy is a math-based game based on the real-life production of NFL players. Each week you fill out a roster by “starting” players at the various positions allowed based on your league settings. These usually include one quarterback (QB), two running backs (RB), two wide receivers (WR), one tight end (TE), one kicker (K), one defense (D/ST) and one FLEX (usually RB or WR, but some leagues allow for a TE or even a QB to be played here as well). The statistics your starting players accumulate on the field (yards, touchdowns, etc.) contribute to their point total for the week. The point totals of all of the players in your starting lineup are tallied into your weekly score, and if you have a higher total than your opponent (another member of your league) you win that week! Players who you do not start are considered on your “bench.” They’ll still score points like everyone else, but those points will not be counted toward your weekly total.Each week will proceed like this until the end of the fantasy regular season (usually Week 13 or Week 14, depending on your league). At this point, the teams with the best win-loss records will enter the fantasy playoffs for a few more win-or-go-home head-to-head matchups. Whoever wins the remaining games in the playoffs is typically crowned league champion following Week 16.↩︎
Dynasty leagues are a popular subset of fantasy football leagues. The main difference betweeen a dynasty league and a typical league is that instead of starting fresh each season, you retain your entire roster from the previous season. There is a “startup draft” prior to the league’s first season. The players you select in your startup draft remain on your fantasy roster until you cut or trade them. In other words, you can keep a player for his entire career if you choose to. In subsequent years, the only drafts are rookie drafts. Dynasty teams acquire incoming NFL rookies and have those rookies until trading or cutting them.↩︎
Within the fantasy community, there are a number of accepted methods for quantifying player fantasy value. However, the most accurate of these methods is to look at fantasy performance on a game-by-game basis and then compare that production to “replacement level production” at that specific position. For example, if we could easily find a wide receiver who we could put in our lineup who projects to score 10.5 fantasy points that week we would use 10.5 points as our “replacement level” number. Only fantasy points above and beyond what we would expect from a replacement level player at the position actually provide real value to our fantasy football teams.↩︎
Quarterback, Running Back, Wide Receiver, and Tight End↩︎
To figure out a per game value, we will take the “replacement level” production for each position and subtract that number from each weekly fantasy score, keeping only the positive values. It is beyond the scope of our project here, but we have determined elsewhere that the replacement-level production for the wide receiver position is approximately 10.5 PPG. So for example, if a wide receiver had 18.5 fantasy points in a given week, he would add 8 points worth of value for that week. We are going to divide each of these individual weekly values by 16 because each player can play up to 16 games in an NFL season. So in the example of an 18.5 point fantasy performance, the 8 points of value would be divided by 16 and we would end up with 0.5 points worth of value added. We can then add all of these individual game values up to determine a player’s career fantasy value to date.↩︎
By adding a column that provides a corresponding numerical trade value for each observation of draft position. For example, it is assumed that the player who is being drafted first overall at any given date has a trade value of 55 all the way down to 0 for players being drafted at pick 200 or later.↩︎