Identify Fantasy Football Sleepers with this App

This post describes a Shiny app that identifies fantasy football sleepers (players who are likely to exceed their statistical expectations and have a breakout season). The app includes the most accurate fantasy football projections available, and calculates a robust average of more sources of projections than any other website using a robust average (see here for a list of the sources of projections). You can even choose how much weight to give each source. Based on your league settings, it determines which players are most likely to be sleepers. Best of all, the app updates the selections automatically with your inputs, and you can download the data for yourself. So let’s get to it. Here’s a more thorough description:

How We Identify Sleepers

Sleepers are players that have the potential to greatly outperform their expected level of production. To identify sleepers, we calculate players’ risk levels, as defined by the standard deviation (uncertainty) around the players’ ranks and projections across sources from experts and the wisdom of the crowd. Note that risk is standardized to have a mean of 5 and a standard deviation of 2. When the user checks the button to display sleepers, we display the number of sleepers at each position specified by the user. We define sleepers as those players with the highest uncertainty risk (not injury risk) whose ceiling is at least 80 points and who have a low position rank (ranked lower than 80% of the VOR baseline for each position, except for Kickers and DST, for whom the player’s position rank is lower than 8). Finally, the players are ranked by their ceiling (upside). In other words, sleepers are players with a high degree of uncertainty, high ceiling, and low position rank.

When to Draft Sleepers

Sleepers should be drafted later in the draft as bench players because such a move has a low risk, high reward potential. For bench players, value over replacement may be less important than a player’s ceiling because they only contribute to the team’s points if they score enough points to be on the starting lineup. We include players’ ceiling (upside potential) in the output, as defined by the upper bound of the 95% confidence interval around analysts’ projections for a given player.

The OpenCPU App

The app is located here. For a more thorough description of how to use the app, see here.

Share this:

Related

My name is Isaac and I’m an assistant professor with a Ph.D. in Clinical Psychology. Why am I writing about fantasy football and data analysis? Because fantasy football involves the intersection of two things I love: sports and statistics. With this site, I hope to demonstrate the relevance of statistics for choosing the best team in fantasy football.

48 Comments

I love how you are applying so much statistical analysis to fantasy football. Reminds me of Money Ball. Are these apps difficult to make? How much time did it take you to learn R and apply it to creating applications like these? Thanks, keep up the awesome work!

Hey Marco,
Thanks for your interest! R and Shiny have a bit of a learning curve, but there is a large online community using them, so there are many great, free online resources to help you learn. Here are some resources for learning R: http://fantasyfootballanalytics.net/2014/06/learn-r.html. Basically, anything you write in R can be turned into an app with Shiny. Here is a tutorial for creating apps with Shiny: http://shiny.rstudio.com/. There are so many benefits to using R over Excel and other software: http://fantasyfootballanalytics.net/2014/01/why-r-is-better-than-excel.html. I’ve been working with R for a while now, but the great thing about it is that its packages are developed by stats experts in the community, so its functionality is constantly upgrading, and I’m continuously learning new things!
Best,
Isaac

I appreciate the response! I am definitely going to look into using R. I need to find a good way to organize and display data on my site, so It may be able to help me in that regard. Also, you could probably make an awesome Average Draft Position analysis with data scraping. Not sure if you have already but its just an idea!

When attempting to run the scripts you have uploaded, i find that my Rstudio says “no package called “XML”, “no package called ggplot2”. Is there something that i need to modify in the script to personalize it for my Rstudio/computer. I’m new to the program and I’m just learning the coding behind it through the datacamp course.

I really appreciate all the time you put into these apps and offering all of this great information for free. I just tried this sleeper app, but I’m getting an error “replacement has 0 rows, data has 288” Any idea what I may be doing wrong?

First of all I want to say fantastic website! I’ll be using these tools for sure so thank you!

In regards to the sleepers, was the calculation to determine sleepers changed from last year to this year? I ask because last years system gave some very impressive results especially after tweaking them further (for ex. only positive ADP dif values). Using the new updated projection tool that has the sleepers built into it, when you go back and look at the 2014 data the sleeper lists are smaller, different, and frankly not as accurate as they were before the update. Has anything changed in the way these sleepers lists are determined? They should be the same players providing my inputs are the exact same as last years and I made sure to save them before the update.

We’ve tweaked the calculation of sleepers, though it’s mostly the same. I think the primary difference you’re seeing is because of some duplicate rows that are messing with the calculation. We’re working on fixing it right now!

Okay, we removed the messy calculations owing to the duplicates, so the data should be much cleaner now. The formula is somewhat different from last year (see the section in the above article on how we identify sleepers), but the approaches are very similar so the results shouldn’t be drastically different. We define sleeper different than being “under-valued” that you would get with positive values on ADP Diff. If you want the most under-valued players, you could sort by ADP Diff. Rather, we define sleepers as those players with the greatest uncertainty and, therefore, the greatest chance to greatly outperform expectations. But they obviously could also underperform expectations, and that’s why we suggest drafting these high-risk, high-reward players later in the draft after you draft your starters.

Thanks for clearing that up and it’s good to know that it has been tweaked. My concern was that last years formula generated a lot more sleepers. I remember there being around 30 or so WR’s and now with the same settings I get around 13. Sorry for the bad example before as I didn’t word it properly. What I meant was that after seeing the list of those 30 sleeper WR’s, I noticed that players with positive ADP values and higher dropoff values were more likely to “hit” as sleepers and thus narrowing down the list of 30 to about 5-10 but with better odds of success. Of course this was only just one season so that’s certainly not conclusive but the results we’re impressive, especially for RB’s.

I noticed you include injury chance into the risk number now, is this new for this year or was it included last year as well? I think it’s brilliant by the way but maybe that could be a reason for the change in results.

You can change the number of sleepers displayed by increasing the number in the grid filters (default is 5). I will look into modifying the calculation so it outputs more than 13 WRs. Yes, risk now averages uncertainty risk and injury risk. Uncertainty risk influences sleeper status but injury risk does not.

Hey Isaac,
Just had a quick question about sleepers in the Excel sheet. When you download the Excel sheet, there is a sleeper column. For some players in says “null” but for others there is a number. Could you explain what those numbers represent and what a good value is?

The number in the sleeper column is the sleeper rank. Players meeting the sleeper criteria (defined by the criteria in the above article) are ranked by risk. If the value is null then the player is not considered a sleeper by our criteria. I would focus more on risk and ceiling than on sleeper rank.

Ugh! I am clueless about this “R” stuff and too old to attempt to figure it out. But my son wants me to play FF and, of course, I want to kick his a**!
I understand the VOR now and want to draft using this strategy. Can I just use your “sleeper” as my best guide to VOR? I understand I’ll have to do it manually, but it sure sounds easier than learning “R”.
If so, do you ever update the sleeper app?
Thanks do much.
Patrick

Thanks so much for this information. I certainly feel this is a situation where the more I know the more questions I have.
So, if I’m understanding this VOR stuff adequately, are you saying that you’d pick Antonio Brown (currently #5 VOR) over M. Lynch (#6) with the first pick of a draft strictly based on the better VOR number for Brown?

How often is your projections app updated? Hourly, daily, weekly, or otherwise?
I’ve been doing some mock drafts on fantasy pros and your VOR numbers look good – especially after they’ve been updated.
Also, when I change data inputs (particularly on the last two weekends) an error occurred but it was OK by Monday. Just curios why and since our draft is this Sunday maybe I should print out those numbers on Friday as they might not be available over the weekend.
Thanks again, this has been an education!

Would you (or anyone esle smarter than me!) give me your thoughts on VONA (Value of next available) versus VOR (Value over replacement)? Other websites have programs that can calculate VONA and wondering if you think this approach might lead to better results…everything else being equal.

Thanks Isaac. That certainly makes sense. Would you think that VONA (assuming it could be done “on the fly”) would yield the same, better, or worse results. It seems a more aggressive approach to me and wondering if you agree?
Also, in the “Change Data” section under “Analysts”, why does the FantasyPros box show a zero?

We’d have to have a prediction algorithm for which players would be available at your next pick to calculate VONA. It’s a good idea, we can put it on our to-do list. FantasyPros shows a default weight of zero because we are already including all of their sources (CBS, ESPN) in our projections, so it would be double counting CBS and ESPN to give FP a weight above 0. You can certainly do so, though, if you’d like.

On your raw projection sheet the Seahawks Defense is rated #6 (6/24 Update). After switching to an ESPN scoring system Seattle’s defense falls to #19. Would you say the program is calculating things correctly? Or is this an internal error? I don’t think the wisdom of the masses really believe this…

Hello Isaac,
I’m glad you’ll have an opportunity to make some money with this information. I’m sure a lot of this has been a labor of love and I hope the amount of money you’ll be getting will justify all the time spent.
I have already created a username and password, but it is a little unclear as to what the monthly fee will get me (probably because I’m new at this FFL stuff). Will the projection sheet remain free? If so, being that football season is almost here, will the projections be updated more frequently? (Well, since our draft is next Tuesday how about at least updating it then!) Thanks again for the education and your patience. Good luck.

Fantastic work. In addition to sleepers, I’m wondering if you have any advice for identifying potential busts, perhaps using similar methods, or whether you feel the concept of “busts” should be taken into account at all when making draft selections. Though the arguments analysts make in identifying busts seem compelling in themselves, there seems to be little science involved, and excluding every player identified as a potential bust would quickly eliminate the majority of players from selection.

Opposite sleepers, if I tested for a high risk factor but with low upside and greater downside, do you feel this might accomplish this?