Identify Fantasy Football Sleepers with this App
48This 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.
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: https://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: https://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!
Good point, R is great for visualizing data. Also, I have written scripts that calculate ADP from thousands of mock drafts on fantasyfootballcalculator.com: https://fantasyfootballanalytics.net/2014/06/identify-sleepers-using-wisdom-crowd.html. Here’s the relevant R script: https://github.com/isaactpetersen/FantasyFootballAnalyticsR/blob/master/R%20Scripts/Calculations/Wisdom%20of%20the%20Crowd.R. You can specify how many drafts to include in your ADP at the top of the script (default is 10,000).
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.
You’ll need to install the XML and ggplot2 packages. They don’t come with R. Here’s how to install them:
http://www.r-bloggers.com/installing-r-packages/
e.g., try:
install.packages(“XML”)
Just updated the sleepers app with sortable projections. Cheers!
Is there a sleepers app for snake? Thanks
This sleepers app can be used for both auction and snake drafts. It identifies the players’ with the greatest likelihood of breaking out (i.e., highest risk) and sorts them by upside potential.
Upgrading our server to handle more traffic. Apps will be down for a bit. Will get the up as soon as possible.
-Isaac
Apps are back up now!
Issac,
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?
Thanks!
Hey Matt, sorry for the error. What inputs did you use? I’ll have to be able to reproduce the problem before I can fix it. Thanks!
Seems to work fine now. Not sure what I was doing wrong before.
FYI, for the link to the app at the bottom of your post the text is correct, but the actual href is for projections, not sleepers.
Thanks, Bruce, just fixed it!
Just updated the data and added return TDs to the draft apps. Go win your draft!
Cheers!
-Isaac
Studying the data that seems to be from last year and I’m impressed! I was just wondering when next year will be ready!
Hey Devin,
We’re working on updating them now. Most sites haven’t released their projections yet for the 2015 season, but hopefully we’ll be ready to go when they do!
-Isaac
Hey Isaac,
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.
Thanks!
Hi Mike,
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!
-Isaac
Hi Mike,
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.
Hope that helps,
Isaac
Isaac,
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.
Thanks for your time!
Hi Mike,
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.
Thanks!
-Isaac
Thank you for taking the time to reply to every comment. Much appreciated!
Hi Mike,
We modified the sleeper criteria so that it shows more sleepers.
Cheers!
-Isaac
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?
Thanks, Max
Hey Max,
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.
Hope that helps!
-Isaac
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
Hi Patrick,
Yes, you can use our Projections tool to find sleepers (http://apps.fantasyfootballanalytics.net/projections). We update the data regularly, and they are up-to-date. For drafting strategy for starters and bench players, see here:
https://fantasyfootballanalytics.net/2013/09/win-your-fantasy-football-snake-draft.html
Good luck in your draft!
-Isaac
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?
Hi Patrick,
We also recommend considering other factors as well, including floor, risk, dropoff, ADP Difference, etc. For more info on strategy, see here:
https://fantasyfootballanalytics.net/2013/09/win-your-fantasy-football-snake-draft.html
Hope that helps,
Isaac
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!
Hi Patrick,
We update the data very regularly and just updated them. The error might have been caused by the heavy load we’ve been experiencing. We’re working on upgrading our servers to keep up with the load.
Thanks,
Isaac
OK…fair enough. But is there any way you can put a note somewhere on the program to denote the last update?
Hi Patrick,
Yes, that’s on our to-do list.
Thanks,
Isaac
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.
Good question, Patrick. VONA sounds similar to our ‘dropoff’ variable:
https://fantasyfootballanalytics.net/2014/06/custom-rankings-and-projections-for-your-league.html
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…
Hey Patrick,
Things look to be calculating correctly. Although ESPN provides projected points on their site (http://games.espn.go.com/ffl/tools/projections?&slotCategoryId=16), they don’t provide projected stats, so we can’t use their estimates in our calculations. The Seahawks are brought down by projections from FantasySharks:
http://www.fantasysharks.com/apps/bert/forecasts/projections.php?Position=6
Hope that clarifies!
-Isaac
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.
Hi Patrick,
Thanks for the kind words and we apologize for the inconvenience. I tried to send a password reset. Let us know if you got it (and check your spam folder). If not, please add noreply@fantasyfootballanalytics.net as a whitelisted email address (http://onlinegroups.net/blog/2014/02/25/how-to-whitelist-an-email-address/), and we can try to re-create the account.
The weekly projections sheet will be free, while the weekly lineup optimizer for DFS leagues will be reserved for FFA Insiders.
Hope that helps!
-Isaac
I created a free account and can now log in, but the info (VORP, ECR, etc.) is blank. Do I have to subscribe (I will) to get this data? Or what am I doing wrong?
Hi Patrick,
You were probably looking at projections for Week 1. Weekly projections do not include VOR, ADP, or ECR Rank. If you change to seasonal projections you should see those.
Hope that helps,
Isaac
Hello Isaac (and any others who wish to comment),
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?
Thanks for any insight,
Forrest
Is it better to identify potential “busts” via calculation (as demonstrated here with sleepers) or by simply limiting risk level in the lineup?