How Fantasy Football is Like Stock Picking (Including a Shiny App)
30In this post, I compare fantasy football to stock picking. There are important lessons we can learn from financial forecasting that can be applied to forecasting football players’ performance.
Fantasy Football is Like Stock Picking
When picking players for your fantasy team or when picking stocks, your goal is to pick players/stocks that others undervalue. But what’s the best way to do that? You could do lots of research to pick players/stocks with strong fundamentals that you think will do particularly well next year. By picking these players/stocks, you’re predicting that they will outperform their expectations. However, all of your information is likely already reflected in the current valuation of the player/stock, so your prediction is basically a gamble. This is evidenced by the fact that people don’t reliably beat the crowd/market.
Not even so-called experts beat the market reliably. There is little consistency in the performance of mutual fund managers over time. The following charts are from Leonard Mlodinow’s book, “The Drunkard’s Walk: How Randomness Rules Our Lives“. The chart on the left depicts the performance of the top mutual funds from 1991 to 1995. The chart on the right depicts the performance of the same funds in the same order over the subsequent 5 years (1996 to 2000):
The best funds from 1991–1995 weren’t necessarily the best funds from 1996–2000. This suggests that mutual fund managers differ in great part because of luck or chance rather than reliable skill. That’s likely why a cat beat professional investors in a stock market challenge. Although our sample size is much smaller with fantasy football projections, there also appears to be little consistency in fantasy football sites’ rank in accuracy over time, suggesting that the projection sources aren’t reliably better than each other (or the crowd) over time.
The market reflects all of the knowledge of the crowd. One common misconception is that if you go with the market, you will receive “average” returns (by “average”, I mean that you will be in the 50th percentile among investors). This is not true—it has been shown that most mutual funds (about 80%) underperform the average returns of the stock market. So, by going with the market average, you will likely perform better than the “average” fund/investor. Consistent with this, I demonstrated that crowd-averaged fantasy football projections are more accurate than any individual’s projection.
Another important lesson from investing is diversification. If you have too much money in one asset and that asset tanks, you will lose your money. In other words, you don’t want to put all of your eggs in one basket. By owning different asset classes (e.g., domestic and international stocks and bonds), you can limit your downside risk without sacrificing much in terms of expected return. This lesson can also apply to fantasy football. If you draft your starting QB and WR from the same team (e.g., the Cowboys), you are exposing your fantasy team to considerable risk. You can limit your downside risk by diversifying—drafting players from different teams. That way if the Cowboys’ offense does poorly in a given week, your fantasy team won’t be as affected. As Jonathon pointed out, however, sometimes having two players on the same team might be beneficial because some positions may be uncorrelated or even negatively correlated, which can also reduce risk. For instance, the performance of the TE and RB on the same team tends to be slightly negatively correlated, so it might not be a bad idea to start the TE and RB from the same team. For a correlation matrix of all positions on the team, see here.
Why Does This Matter?
Okay, fantasy football might be similar to stock picking, so what? You are most likely to pick the best players if you go with the wisdom of the crowd (e.g., average projections) and diversify. Most projections are public information, so you might wonder whether using crowd projections gains you anything because everybody else has access to public information. However, this is also the case with stocks, and people still consistently perform best over time when they go with the market. We are the only site that creates crowd-averaged projections that are customized for your league settings. Moreover, part of drafting is picking players with the best value. That’s why we also offer value-based drafting tools for auction and snake drafts, and for identifying sleepers.
The Efficient Frontier: A Shiny App
The ultimate goal is to draft players for your starting lineup that provide the most projected points and the smallest downside risk. This is similar to the notion in investing of the efficient frontier, where your goal is to pick funds that have the greatest expected returns for the least risk (where risk is the variability in returns over time). To demonstrate the efficient frontier in investing, I created a Stock Portfolio Analysis tool in Shiny that is based on Michael Kapler’s Systematic Investor Toolbox (see his blog here). The tool downloads returns from Yahoo based on the ticker symbols you enter. Then, it calculates a correlation matrix and the efficient frontier based on funds’ historical returns, and allows you to specify expected future returns and variability to calculate an efficient frontier for future returns. It also determines the maximum Sharpe Ratio (ratio of return to risk), and the portfolio allocation at this ratio. The Stock Portfolio Analysis tool is located here:
http://apps.fantasyfootballanalytics.net/stocks/
An important caveat: I am not providing investing advice, and future returns obviously do not mirror historical returns. I just created the tool to demonstrate some of the risk and reward principles that are similar between fantasy football and investing.
How to Interpret the Graph
The graph depicts the risk vs. reward profile of different stocks/bonds and various portfolio allocations with different combinations of these funds. The x-axis is the day-to-day variability in the returns of an asset, and represents an asset’s risk (volatility). The y-axis is the annual return of an asset, and represents the asset’s reward. Each stock/bond asset has some combination of risk and reward, and is plotted with an empty circle. Often, bond index funds have lower risk and lower potential for reward (bottom left of the graph), whereas stocks tend to have a higher risk and higher potential for reward (top right of the graph).
The solid black circles indicate points along the efficient frontier. The points along the efficient frontier indicate, for a given level of return (reward), what the lowest risk is for a portfolio with some allocation of the various assets. The points along the efficient frontier, therefore, reflect the risk of the “optimal portfolio” for each level of return. The solid red circle indicates the portfolio with the highest reward-to-risk ratio (i.e., the Sharpe ratio). A table in the app indicates the portfolio allocation at the Sharpe ratio (i.e., the percentage of your portfolio that is allocated to each fund).
Conclusion
When picking stocks or fantasy players, you are best off 1) going with the wisdom of the crowd (using average projections; index funds) and 2) diversifying (picking players on different teams or, if from the same team, from positions that aren’t highly positively correlated; having different asset classes). The goal is to pick the funds and fantasy players with the highest projected returns/points and the least risk (except when drafting bench players, see here). Our apps are specifically designed to help you meet these goals to pick the best collection of funds and players.
Very interesting article, and I love the site overall!
One question though: how correlated are players on the same team? For example, what is the covariance between a given team’s QB and RB, or QB and K?
I would definitely think that a team’s QB and WR scores would be positively correlated, since WR points (yards, TDs) are directly related to QB performance. But, performance at RB might be uncorrelated (or even better – negatively correlated!) with the QB on the same team; if the team hands off for a TD, the RB will get points but the QB will get nothing. Likewise, a team’s K might be negatively correlated with the QB on the same team; more FGs mean fewer TD opportunities.
If these positions are negatively correlated, that would help push out the efficient frontier for a given risk tolerance. Have you looked into this at all? Looking forward to hearing your thoughts!
Hi Jonathon,
Excellent point. Players from the same team might be uncorrelated or even negatively correlated depending on the positions (e.g., TE + RB). I updated the article to reflect your point. We haven’t looked at the weekly data yet (we’re in the process of creating the weekly tools), but I found this resource that shows the correlation matrix for all positions on the same team:
http://rotoviz.com/2014/10/correlation-matrix-answers-every-question-youve-ever-dfs-stacking/
Hope that helps!
-Isaac
Hey Isaac,
That is awesome. I just got around to visiting the site again and noticed your comment and link, and it was exactly what I was thinking about. Very interesting! I’d love to see your data when the tools are available, and I can’t wait for the upcoming season!
Thanks,
Jonathan
Very nice implementation in shiny. Will like to talk to you on a specific project that I am doing for my university project. Will you be able to help advice on scripting in shiny ?
Look forward to having a conversation.
Thanks
Apurva
Hi Apurva,
What are you looking to do?
-Isaac
Love the article and the tool.
I’ve long been a proponent of the crowd average beating individual performance, not only in fantasy sports but even in things such as weekly game picking pools.
One of the more interesting facets of using this is not merely to be able to identify who is the best value at a point in time, but it’s also immensely useful in pre-draft strategy.
There are tons of “experts” out there who will tout strategies with regards to what picks to make in what round (from conventional wisdom such as RB/RB/WR or RB/WR/RB… to extremes like zero-RB). But these strategies have the same vulnerability as the individual projections, they rely on the accuracy of the player projections. That is, what good is going with the “right” strategy of RB/RB if it means you overvalued one or both picks.
I’ve experimented with using (relatively) simple spreadsheet goal-solving formulas (ie Excel solver), to project the optimal picks for the first 7 rounds of a draft (presuming for the moment that you’d defer on K/DST), given a set of projections (ie your app). I set it it up to maximize total projected points for these first 7 picks from each draft position (1-12). Basically for each of the first 7 rounds I’d have a best guess at who SHOULD be available at each position for example:
First Position drafting (2014):
Round 1 (pick 1) RB Charles, WR Megatron, QB Peyton, TE Graham
Round 2 (pick 24) RB Ellington, WR Cobb, QB Peyton, TE J Thomas
Round 3 (pick 25) RB Stacy, WR Cobb, QB Brees, TE J Thomas
Round 4 (pick 48) RB C Johnson, WR Crabtree, QB Luck, TE Gronk
Round 5 (pick 49) RB F Gore, WR Harvin, QB Luck, TE Gronk
Round 6 (pick 72) RB F Jackson, WR Maclin, QB Foles, TE J Witten
Round 7 (pick 73) RB F Jackson, WR Maclin, QB Kaepernick, TE Witten
Now here’s the fun part. While I used the Shiny app for projected points, I used ADP (widely available) for who would likely be available at each pick.
Obviously you get less repetition in the middle positions of a snake draft. Next I set up the formula to only allow combinations where you end up with 1QB, 2RB, 3WR, 1TE. And turned it loose to maximize points from each draft position.
While the results pointed at specific players, what it really did was point out which position to target (because while I would know the optimal pick given 10s of thousands of permutations), with your projections in hand I would almost always have a player at each position who should have already been taken). It led to some fascinating results, most notably a ton of “zigging when everyone else is zagging”. From the top 4 draft positions as well as 11/12, you would end up with the traditional 2RB and 1 WR in the first three rounds, but in the middle positions, you maximized projected points by getting 2WR (and sometimes 3!) with the first 3 picks.
It made for one of the least stressful drafts I’ve ever had. No worrying about position runs, or players I like being around. Your tool made it all possible. Thanks!
Hi,
I find these apps to be the best around for Fantasy Football. Have you done any analysis for other sports?
It would be ideal to create an app in which you can remove players as they are being drafted in your league and adjusts calculations on your next pick taking into consideration players in the same team and position correlation. Have you considered this? If so, is it too complicated/reliable?
Thanks, Christian
Hi Christian,
Thanks for the kind thoughts and helpful suggestions. We have some thoughts about how to make the tools “dynamic” during the draft to account for who’s been drafted and who’s left, but we haven’t fully decided on an approach. One option we’re considering is a Dynamic VOR based on a positional need multiplier (see section 6: http://footballguys.com/05vbdrevisited.htm). It’s a complicated process not only mathematically but also practically to update calculations throughout the draft because that requires lots of server calls and when many users are using it simultaneously, that could crash the servers. Thoughts on what calculations you’d update throughout the draft?
Thanks,
Isaac
I will certainly be using your auction draft app this season, since I found your site this past year and can’t get enough of it. In reference to Christian asking about removing players from the app as they get drafted, last year I used a draft app (http://jayzheng.com/ff/#/draft-aid) which made this very simple by just clicking on the players name when they are drafted. I found this to be an extremely convenient and intuitive way to do this, instead of typing in the players name.
Thanks Sean, we’re hoping to build in this functionality to “click to exclude”. We’re looking for a UI developer if you guys know any.
-Isaac
Hey,
I was thinking it would be a lot of help to update based on how many players of the same team you have on your roster and if they share bye weeks with other players, both on your roster and those who haven’t been picked. I will read up on Dynamic VOR. You should also check out http://www.nflproject.com/home.html. These guys started to uses machine learning algorithms and what I believe to be similar data analysis techniques as the ones used on this site to make predictions on NFL games. They were incredibly accurate. Maybe you can contact them and share info/techniques.
Thanks, Christian
Hi Christian,
We have plans to implement Dynamic VOR—see section 6 of this article: http://footballguys.com/05vbdrevisited.htm. It has some technical challenges, though, so it’s lower on our priority list. Thanks for passing on the NFL Project info. Will look into it!
-Isaac
I visited the website that contains the article above and noticed they host a high-stakes fantasy football league. It is a PPR, 12 team league that allows 2 flex positions. I was wondering if you have ever participated/considered participating in this contest. It has a grand prize of $300,000 so I would assume that someone with your skills would be very interested in. You should start a thread on this site discussing strategy on that contest.
-Christian
Hi,
Would it be possible to share your code for Stock Portfolio Analysis shiny application? I found it extremely interesting and more detailed when compared to Michael Kapler’s :).
Hi Blotka,
Glad you like it! Many of the functions are built on Michael Kapler’s tools, and I’d prefer to get his permission first.
-Isaac
Isaac,
Thank you for your reply. Kapler’s version is available to everyone, I downloaded it (server.R, global.R, ui.R), modified it slightly (still leaRning R) and am using it for quite awhile. Your features are very exciting and (more) useful as far as portfolio analysis is concerned.
Thanks a lot!
Hey,
Already tweeted you to this effect, but Polson and Stern’s “The implied volatility of a sports game” reminded me so much of this post, that I thought it’d be worth covering all my bases. (Don’t know if I can post links in a comment, but I’m trying anyhow: http://www.degruyter.com/view/j/jqas.2015.11.issue-3/jqas-2014-0095/jqas-2014-0095.xml).
With Fantasy Basketball season just around the corner, I’m already examining my potential player portfolio, and, with roto categories, it really is very investor-esque.
Hey Isaac,
When it comes to the wisdom of the crowd for stocks, isn’t the market valuation significantly subjective? I don’t have solid math skills, but let me see if I can explain. If I go with the crowd to guess the weight of a cow, then I have a better chance of accuracy using its prediction than guessing the weight myself. The weight of the cow in pounds is the objective measure. With the market, the crowd not only predicts, but can actually change the weight of the cow. It’s rather like bootstrapping with stocks, the crowd both assesses and sets the market value. So with the market, is it less about accurate evaluation and more about following the money (where people are investing) when selecting a market fund that mimics the S&P.
Also, how to you find undervalued stocks if the wisdom of the crowd will always find the optimal price?
Thanks!
Hi Robert,
Good point and good question. I’m not a financial analyst, so I won’t provide financial advice 🙂 In agreement with your point, research has shown that the wisdom of the crowd is more accurate in the case of more objective outcomes. I don’t think many would argue that the wisdom of the crowd (i.e., the market) always reflects the optimal price (i.e., the market is not 100% efficient). For instance, some stocks are under-/over-valued and bubbles occur. Nevertheless, the market does consider expected future performance in its valuation. The broader point is that it’s quite difficult to reliably/consistently outperform the market over time. Even the vast, vast majority “experts” don’t.
Hope that clarifies,
Isaac
Issac – thanks for the site… i was looking at the “fantasy football… like stock picking” tab and found that the link “https://fantasyfootballanalytics.net:3838/Stocks/” wasn’t working… any suggestions?
thanks.
We lost Shiny server when we upgraded our servers. It’s on our to-do list.
Should be up and running again now.
Cheers!
-Isaac
Hey Isaac,
I love reading your posts and using your scripts/editing them. I was wondering if you could put your shiny code out there for your Systematic Investor Toolbox example so that I can peruse your code.
If not, no big deal.
Thanks,
John
Isaac,
I liked reading your plots and data tables.
Is there a written report available showing the formulas used to produce the efficient frontier plots? The downloadable report and data do not appear to have this info.
Thanks,
Ron LaFleur
Hi Ron,
We do not make the scripts for the Shiny app available for various reasons, including that we are incorporating others’ code. Nevertheless, it’s very easy to compute the efficient frontier in R. To compute the efficient frontier from historical data, we use the
portfolioFrontier()
function of thefPortfolio
package. To compute the efficient frontier from expected returns and variability, we use the formulas here:http://www.calculatinginvestor.com/2011/06/07/efficient-frontier-1/
Hope that helps!
-Isaac
Issac,
Thanks for the reply. The link you sent was helpful. I incorporated this approach and reproduced the single graph for four securities, shown by the link, using MATLAB. The code is easily extended to portfolios of any number of securities (and players).
However, I am still unable to reproduce the two graphs you have. I need more information on how your variables are defined (expected annual returns, compound annual growth, variability). I have moved forward with known definitions and can not obtain the efficient frontier curves you show.
As there is a large list of posts by the link to Michael Kapler’s Systematic Investor Toolbox, could you give a specific reference in this list that you used?
Thanks,
Ron LaFleur
I’ll send more info by email.
Isaac,
I was hoping to take a look at this tool to see if there were any applications to daily fantasy but the link seems to be broken again. Please let me know if there is a way to access that I can’t seem to find.
Thanks
Looking into this, thanks!
Are you going to be doing seasonal rankings, because when I choose season for general settings, its not updated. For example, Tyreek Hill is still put in the top 5