Who Has the Best Fantasy Football Projections? 2016 Update
59In prior posts, we demonstrated how to download projections from numerous sources, calculate custom projections for your league, and compare the accuracy of different sources of projections (2013, 2014, 2015). In the latest version of our annual series, we hold the forecasters accountable and see who had the most and least accurate fantasy football projections over the last 4 years.
The R Script
You can download the R script for comparing the projections from different sources here. You can download the historical projections and performance using our Projections tool.
To compare the accuracy of the projections, we use the following metrics:
- R-squared (R2) – higher is better
- Mean absolute scaled error (MASE) – lower is better
Whose Predictions Were the Best?
Source | 2012 | 2013 | 2014 | 2015 | Average | |||||
---|---|---|---|---|---|---|---|---|---|---|
R2 | MASE | R2 | MASE | R2 | MASE | R2 | MASE | R2 | MASE | |
Fantasy Football Analytics: Average | .670 | .545 | .567 | .635 | .618 | .577 | .626 | .553 | .620 | .578 |
Fantasy Football Analytics: Robust Average | .667 | .549 | .561 | .636 | .613 | .581 | .628 | .554 | .617 | .580 |
Fantasy Football Analytics: Weighted Average | .626 | .553 | – | – | ||||||
CBS Average | .637 | .604 | .479 | .722 | .575 | .632 | .500 | .664 | .548 | .656 |
EDS Football | .554 | .651 | .584 | .624 | .569 | .638 | ||||
ESPN | .576 | .669 | .500 | .705 | .498 | .723 | .615 | .585 | .547 | .671 |
FantasySharks | .529 | .673 | – | – | ||||||
FFtoday | .661 | .551 | .550 | .646 | .530 | .659 | .546 | .626 | .572 | .621 |
FOX Sports | .459 | .720 | .550 | .677 | .505 | .699 | ||||
NFL.com | .551 | .650 | .505 | .709 | .518 | .692 | .582 | .632 | .539 | .671 |
numberFire | .486 | .712 | .560 | .643 | .523 | .678 | ||||
RTSports | .547 | .670 | – | – | ||||||
WalterFootball | .472 | .713 | .431 | .724 | .452 | .719 | ||||
Yahoo | .547 | .645 | .635 | .554 | .591 | .600 |
- Fantasy Football Analytics: Average (or Weighted Average)
- Fantasy Football Analytics: Robust Average
- Yahoo
- FFtoday
- EDS Football
- CBS Average
- RTSports
- ESPN
- NFL.com
- FantasySharks
- numberFire
- FOX Sports
- WalterFootball
Notes: CBS estimates were averaged across Jamey Eisenberg and Dave Richard. FantasyFootballNerd projections were not included because the full projections are subscription only. We did not calculate the weighted average prior to 2015. The accuracy estimates may differ slightly from those provided in prior years because a) we now use standard league scoring settings (you can see the league scoring settings we used here) and b) we are only examining the following positions: QB, RB, WR, and TE. The weights for the weighted average were based on historical accuracy (1-MASE). For the analysts not included in the accuracy calculations, we calculated the average (1-MASE) value and subtracted 1/2 the standard deviation of (1-MASE). The weights in the weighted average for 2015 were:
CBS Average: .428
EDS Football: .428
ESPN: .383
FantasyFootballNerd: .428
FFToday: .482
FOX Sports: .428
NFL.com: .384
numberFire: .404
RTSports.com: .428
WalterFootball: .428
Yahoo Sports: .433
Here is a scatterplot of our average projections in relation to players’ actual fantasy points scored in 2015:
Interesting Observations
- Projections that combined multiple sources of projections (FFA Average, Weighted Average, Robust Average) were more accurate than all single sources of projections (e.g., CBS, NFL.com, ESPN) every year. This is consistent with the wisdom of the crowd.
- The simple average (mean) was more accurate than the robust average. The robust average gives extreme values less weight in the calculation of the average. This suggests that outliers may reflect meaningful sources of variance (i.e., they may help capture a player’s ceiling/floor) and may not be bad projections (i.e., error/noise).
- The weighted average was equally accurate compared to the simple average. Weights were based on historical accuracy. If the best analysts are consistently more accurate than other analysts, the weighted average will likely outperform the mean. If, on the other hand, analysts don’t reliably outperform each other, the mean might be more accurate.
- The FFA Average explained 57–67% of the variation in players’ actual performance. That means that the projections are somewhat accurate but have much room for improvement in terms of prediction accuracy. 1/3 to 1/2 of the variance in actual points is unexplained by projections. Nevertheless, the projections are likely more accurate than pre-season rankings.
- The R-squared of the FFA average projection was .67 in 2012, .57 in 2013, .62 in 2014, and .63 in 2015. This suggests that players are more predictable in some years than others.
- There was little consistency in performance across time among sites that used single projections (CBS, NFL.com, ESPN). In 2012, CBS was the most accurate single source of projection but they were the least accurate in 2013. Moreover, ESPN was among the least accurate in 2014, but they were among the most accurate in 2015. This suggests that no single source reliably outperforms the others. While some sites may do better than others in any given year (because of fairly random variability–i.e., chance), it is unlikely that they will continue to outperform the other sites.
- Projections were more accurate for some positions than others. Projections were much more accurate for QBs and WRs than for RBs. Projections were the least accurate for Ks, DBs, and DSTs. For more info, see here. Here is how positions ranked in accuracy of their projections (from most to least accurate):
- QB: R2 = .71
- WR: R2 = .57
- LB: R2 = .56
- TE: R2 = .54
- DL: R2 = .48
- RB: R2 = .47
- K: R2 = .38
- DB: R2 = .32
- DST: R2 = .15
- Projections over-estimated players’ performance by about 4–10 points every year across most positions (based on mean error). It will be interesting to see if this pattern holds in future seasons. If it does, we could account for this over-expectation in players’ projections. In a future post, I hope to explore the types of players for whom this over-expectation occurs.
Conclusion
Fantasy Football Analytics had the most accurate projections over the last four years. Why? We average across sources. Combining sources of projections removes some of their individual judgment biases (error) and gives us a more accurate fantasy projection. No single source (CBS, NFL.com, ESPN) reliably outperformed the others or the crowd, suggesting that differences between them are likely due in large part to chance. In sum, crowd projections are more accurate than individuals’ judgments for fantasy football projections. People often like to “go with their gut” when picking players. That’s fine—fantasy football is a game. Do what is fun for you. But, crowd projections are the most reliably accurate of any source. Do with that what you will! But don’t take my word for it. Examine the accuracy yourself with our Projections tool and see what you find. And let us know if you find something interesting!
Worth noting that Yahoo is actually Pro Football Focus.
Yes, Yahoo gets their projections from PFF. More people are familiar with Yahoo than PFF, so that’s why we used the Yahoo designation.
Great to know. I’d love to know how RotoViz stacks up. I understand the concepts involved, but I’m not a programmer or statistics brain. As such, I don’t know how to put all this info together.
We can try to include them this season. Where are their 2017 projections?
Is there any chance you could calculate FantasyOmatic as part of your list? I’ve always found there info pretty good and was wondering where they would rank.
Sorry…should’ve been their info…not there info
Hey Nick,
What’s the link to where we can download their seasonal projections (projected stats, not projected points)?
Thanks,
Isaac
I couldn’t find anything on their site that had the pre season projections. Just the weekly projections at the end of the season. Maybe I’ll send them an e-mail to see if they can help me get that info.
Thanks, do you have the link for weekly projected stats (not projected points)?
Hi, are you going to add an option in the projections for two QB leagues?
Hey Jason,
You can specify two starting QBs in our Auction Draft optimizer (http://apps.fantasyfootballanalytics.net/?app=lineupoptimizer). For Snake Drafts, you can change the VOR baseline values for QBs in the Snake Draft tool (http://apps.fantasyfootballanalytics.net/) based on the VOR baseline you expect for 2-QB leagues (e.g., how many QBs you expect to be drafted within the top 100 picks for a 10 team league). For more info, see here:
https://fantasyfootballanalytics.net/2013/09/win-your-fantasy-football-snake-draft.html
Hope that helps,
Isaac
Is the projections tool fully updated yet because I cannot find the 2016 season on there. Also, how do I calculate the VOR baseline and what is Impute Replacement-Level Points for Missed Games? Thanks!
We hope to release 2016 projections soon. See below for more in info on VOR baseline and imputing replacement-level points for missed games:
https://fantasyfootballanalytics.net/2014/06/custom-rankings-and-projections-for-your-league.html
Also, why isn’t FantasyPros not on the list?
We plan to include FantasyPros this season. To our knowledge, we already include all sources that FantasyPros includes.
Interesting that you dropped FantasyPros this year. You included them in your charts for 2014 and 2015 but dropped them this year. As your previous article showed their projections were more accurate in 2012 and equal to yours in MASE in 2013. You beat them in 2014, now I’m wondering who won in 2015???
Hey Andy,
Good question. We did not download FantasyPros projections last year unfortunately, so we don’t know. It was an oversight, and we will definitely include FP projections this season. In any case, there’s no reason to think we had less accurate projections than FP because we included every source that they did, along with additional sources.
Thanks,
Isaac
I suspect the Average Draft Positions follow the rankings very closely, but do wonder how they would compare with expert rankings. If the wisdom of the crowd is best, then having all the fantasy football players should be more accurate then preseason rankings from a smaller group of experts. I think Fantasy Pros has a consensus ADP that would be a good number to check.
Good question–will put this on our list of things to examine! In general, though, projections are more accurate than rankings:
https://fantasyfootballanalytics.net/2016/04/accuracy-of-rankings-vs-projections.html
Isaac, fantastic work here…I’ve been trying to do this myself and in a more rudimentary way among the various sources I use (Rotopass – therefore ESPN, PFF, Football Guys) but I am thrilled that you have such a refined tool already available. Curious, when I setup my league scoring settings – how do I identify flex positions? My league has both WR/RB/TE flex, as well as and OP flex (QB, WR, RB, TE)? Also, how do I include football guys scoring, or another source like John Paulson at 4for4? Love this…keep it up!
Also…one more thing I’m curious about, and I apologize in advance if you answer this in your site already (it’s quite comprehensive), but how can I account for keepers or projected keepers? The reason I would like to consider this is to include scarcity at a particular position, which I think you consider in your algorithm, but you use the stopover in projection against the entire population, whereas with keepers it bay be even more drastic. Thoughts? Thanks again!
FYI…not too be posted but I noticed autocorrect changed drop off to stopover in my previous post…sorry for only noticing it now. Take care.
Hi Mark,
You can account for flex players by changing the VOR baseline numbers. For more info on VOR, see here:
https://fantasyfootballanalytics.net/2013/04/win-your-snake-draft-calculating-value.html
We have plans to include subscription sources of projections. In the meantime you can download our projections (using the Download button in the top right), and combine them manually with your other projections sources.
How would you propose to account for keepers? I’m not familiar with any/many projections for keepers.
Hope that helps!
-Isaac
Regarding keepers, my 10-team league can have up to 30 keepers (3 per owner). I can predict who owners will keep fairly well by looking at player projections and figuring out what makes sense but I don’t know a way to otherwise predict keepers. Before the draft, I manually remove keepers from the pool (keepers are announced a few days before our draft) so I can adjust accordingly. Obviously, this could result in a large difference for a non-keeper originally projected for the 5th round now being valued in the 2nd round but I believe the numbers are adjusted as players are removed. Isaac, do the dropoff values adjust to reflect the changes as players are removed from the pool? Another challenge is determining what position is likely to be drafted as the draft proceeds (an owner keeping 3 RBs will not be likely to draft that position until filling in the other positions).
Dropoff is currently static, but we can add that to our to-do list.
Thanks,
Isaac
This is great as always. I notice that the projections for 2016 so far only draw from ESPN and FantasySharks. Do you know when the tool will draw from a larger number of sites?
We’re actively working on adding additional sources (and waiting for additional sources to release projections).
Cheers!
-Isaac
Just added several more sites!
Thanks! Your rankings helped me make the playoffs in both my leagues last year.
The projections tool still shows “Last updated” at 5/15/2016. Are these new sites included? And how often typically is the data updated?
Great work!
Hi Josh,
We’re working on updating the projections and adding additional sources.
https://fantasyfootballanalytics.net/about-the-site/faq#updateOften
Thanks!
-Isaac
What makes Fantasy Football Analytics better than FantasyPros when comparing the rankings/projections? I am just wondering because both of the sites use multiple sources for their rankings/projections.
1) We include more sources of projections than FantasyPros, 2) we have plans to include subscription sources of projections (unlike FP), 3) we calculate projections customized to your league settings (unlike FP), 4) we consider variability (floor and ceiling), and 5) we have more advanced metrics (e.g., VOR, risk, dropoff, more to come).
Have you ever looked at projections for only the highest projected players? For example only players projected to score over 50 or 100 points per season? I think it would make for more meaningful accuracy ratings for these sites, since a site who’s accurate with high scoring players is much more useful than a site who’s accurate with low scoring players.
Good suggestion, Matt. We’ll add that to our to-do list.
Thanks!
-Isaac
Totally agreed, Matt. I’m noticing how sites like Yahoo have projections for the very lowest players and this skews their R^2 higher compared to sites that only project the top players. Seeing these numbers exclusively for “fantasy-relevant” players would be great!
In my years of playing the greatest game on earth I have found that two things win championships 1) The Draft 2) picking up one to three free agents that can make the whole year! Which site has the best pre draft rankings and ( I know this is hard to research) Which Site identifies the breakout players sooner and more accurately?
Hi Bruce,
We can add the examination of accuracy of breakout players (sleepers) to our to-do list. Note that we strongly recommend using projections over rankings:
https://fantasyfootballanalytics.net/2014/08/use-projections-not-rankings.html
Hope that helps!
-Isaac
Hey Isaac, love your site and I really enjoy using R for fantasy football analysis.
No other site I’m aware of has historical *projections*. I can download projections for 2014 and 2015 from your app, but any year prior returns an error. When I select 2013 (or earlier) in the projections app, Chrome returns an error dialog:
> Only defined on a data frame with all numeric variables
>
> In call:
> FUN(X[[i]];
Do you know about this error or is it because historical projections don’t exist prior to 2014?
FYI, using the past two years of auction data from my league, I find a very strong correlation between auction price and projected points. The relationship is much weaker (virtually non-existent) between auction price and actual points.
Based on this observation, I am exploring an auction strategy based “probability to outperform projections” (actual – expected). This is different than looking at the distribution of projections for a particular player in order to identify upside potential. My hypothesis continues that drafting a player with a very high projected point total has very little probability to outperform (conversely, a high probability to underperform).
A little exploratory data analysis on 2014 and 2015 historical projections is revealing that there’s a certain band of players in the third quartile of projected point totals (at least for RBs) where potential to outperform is greatest and thus yield the best value in an auction.
Thanks for all the work! Hoping those historical projections exist so I can make my analysis a little more robust.
-dan
Hey Dan,
Thanks for catching the error! We do have historical projections prior to 2014 in the app, so we’ll work on fixing the error.
Thanks!
-Isaac
In the meantime, you can get the historical projections by only selecting QB/RB/WR/TE for pre-2014 years. Hope that helps!
-Isaac
This should be fixed now.
Cheers!
-Isaac
Hi Isaac, looks like the simple average tends to perform best. Do you prefer the simple average over the robust or weighted averages?
Best,
Jones
Hi Jones,
See #3 of the Interesting Observations section. Personally, I prefer the mean over the weighted average because I believe that much of the variation in accuracy is due to luck. I suspect that there aren’t many sources that consistently do better than the others. That being said, if you feel there are sources that reliable do better than the others, you can go with the weighted average. Either way, simple average vs weighted average doesn’t appear to make a big difference.
Hope that helps,
Isaac
Hello,
great info. please forgive me if this is a stupid question, but does the ‘Projections’ link take me to the “Fantasy Football Analytics: Average” that has been deemed as the most accurate?
thanks!
Hi Randy,
To get the “Fantasy Football Analytics: Average” projections, go to the Projections Tool:
http://apps.fantasyfootballanalytics.net/
Then click “Change Data Settings” and change “Calculation Type” to “Average”. The default is the “Weighted Average” based on historical accuracy.
Hope that helps!
-Isaac
thanks Isaac. love the site, especially the projections. I will be using them at my drafts this season!
Hi, I wrote a comment yesterday but it never went through. Perhaps there was an email issue.
Is there any way you guys can add a column and accuracy chart for Fantasy Points per Game? If not, maybe add the average replacement points on to the the player’s actual value. Tony Romo’s data point and Andrew Luck’s data point for 2015 were way off projected value, but those two were injured players. In fantasy football, those weeks do not give us zeroes in our lineup. All (well most) of us will pick up a replacement and fill those positions and points.
For example, Keenan Allen was a beast before his injury. I think the fantasy experts who recommended him should have a higher accuracy rating than those who said he was going to do poorly. Fantasy owners who drafted Keenan Allen surely benefited for all the games he played. After his injury, players could have picked up other viable options via free agency.
Julian Edelman was a MUCH better receiver than Pierre Garcon. He won weeks for many owners whereas Pierre Garcon did not. Yet because of Edelman’s injury, he finished with less points than Garcon. Does it really make sense if Yahoo predicts a higher projection for Edelman and gets penalized for it?
I think adding a FP/G column & chart will fix this problem. It’s a very simple fix. Adding replacement points is a better solution but will require more work. There is a box in settings that mentions replacement points but it did not change any of the actual numbers. Other than that, I love this site & very impressed with all the work that you guys have done.
Your comment was posted here:
https://fantasyfootballanalytics.net/2015/07/accuracy-of-fantasy-football-projections-interactive-scatterplot-in-r.html#comment-17706
FantasyLabs?
What is the publicly available URL that we can use to download their projections?
Isaac,
Would it make mathematical sense to take the VOR of the customized projections and then multiply them by the R^2 value?
My thinking is that it would normalize the projections by position while accounting for unexplained variance. For example, if you have a QB and an RB projected to score 100 VOR points, you would value the QB at 71 VOR Pts and the RB at 47 VOR points (I’ve actually developed my own VOR, called Points Above Replacement or PAR, but we can save that for a rainy day), thus you’d be willing to pay more for / draft the QB higher than the RB with the same number of points.
Am I on the right track here?
Rob
Hi Rob,
Interesting idea. I personally don’t like r-squared too much, but I like your general idea. R-squared is very sensitive to other factors that may explain differences between positions beyond just “predictability”. For example, clusters with more players at the extremes tend to have higher r-squared values than positions with fewer players at the extreme. This is demonstrated by looking at the r-squared for the top 20 players (or so) at a position, which is generally higher than the r-squared for all of the players at the position. In sum, I think it’s an interesting idea in principle. Would be interested to see how it performs in practice!
-Isaac
Thanks for the quick reply!
Any thoughts or ideas on what else you could use to improve the data from a position by position basis?
It’s quite clear that certain positions are easier to predict than others (i.e. QB vs RB) due to a number of factors (usage, injury, etc.) and I would like to take advantage of this as I prepare for my drafts.
Also, FWIW, I determined a formula to value players in Auctions leagues (regardless of scoring, positions, etc.). It may help make your “Projections” tool more robust. For context, I’m using this formula in conjunction with the r2 currently to better determine the value.
The projections app is down
So is the auction draft optimizer.
Error
An unexpected error has occurred. Please contact the system administrator.
Exception: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Controller: lineupoptimizer
Action: Index
at MySql.Data.MySqlClient.ExceptionInterceptor.Throw(Exception exception)
at MySql.Data.MySqlClient.MySqlConnection.Throw(Exception ex)
at MySql.Data.MySqlClient.MySqlConnection.HandleTimeoutOrThreadAbort(Exception ex)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at Dapper.SqlMapper.d__61`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType)
at ffanalytics.Data.Dapper.Repository.c.b__12_0(IDbConnection c)
at ffanalytics.Data.Dapper.BaseRepository.GetConnection[T](Func`2 getData)
at ffanalytics.Data.Dapper.Repository.GetAllFormOptions()
at ffanalytics.Controllers.LineupOptimizerController.Index()
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.c__DisplayClass46.b__3f()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass33.b__32(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass21.c__DisplayClass2b.b__1c()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass21.b__1e(IAsyncResult asyncResult)
I’m getting an error message when trying to load the data for the lineup optimizer:
“nvalid class “MySQLResult” object invalid object for slot “Id” in class “MySQLResult”; got class “character”, should be or extend class “integer”
Won’t allow me to populate the lineups with highest points or highest floor.
Terrelle Pryor’s projected fantasy points seem way too low (at least for draftkings – only one I checked)
DraftKings doesn’t provide projections (only cap values). You might check the underlying sources of projections: https://fantasyfootballanalytics.net/about-the-site/faq#incorrectProjection