In a previous post, I showed how to determine the best starting lineup to draft in an auction draft using an optimizer tool. In this post, we use an OpenCPU app in R to determine the best possible players to pick in a fantasy football snake draft. 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 you should draft to maximize your players’ value over typical replacement players at their respective positions. It also allows you to change your risk tolerance to avoid picking risky players. 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 it Works
First, we use a script to scrape player’s projected points from numerous sources using R. Second, based on the user’s league scoring settings, we calculate players’ projections using an average of the analysts’ projections (by default, the sources are weighted according to historical accuracy). You can choose which projection sources to include, modify the weights, and choose to calculate a mean, weighted average, or robust average. A robust average is less affected by outliers (crazy projections). Third, we calculate the value of each player over a typical replacement player at his position (VOR) to determine player rankings. In addition, we calculate players’ risk levels, as defined by the average of: 1) injury risk from Sports Injury Predictor, and 2) the standard deviation of the players’ projected points and rankings across analysts. Note that risk is standardized to have a mean of 5 and a standard deviation of 2. We also display the “dropoff” in projected points for the next best 2 players at the same position. If a player has a high dropoff, you should consider targeting him because that position drops in value very quickly. For more info on how projected cost is calculated, see here. Using the custom rankings for your league settings, we also calculate the difference between a player’s overall rank and his average draft position (ADP). Positive values mean the player’s rank for your league is higher than ADP (i.e., he is under-valued according to ADP and you should consider drafting him). Negative values mean the player’s rank for your league is lower than ADP (i.e., he is over-valued according to ADP and will likely be drafted by others in your league too early in the draft).
Note on risk: although bench players are important in the case of a starter’s injury or under-performance, it is generally best to draft starters with minimal risk to ensure solid, if not superior, performance. On the other hand, one should accept more risk with 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 upside. We include players’ upside potential (ceiling) in the output, as defined by the players’ upper bound of their 95% confidence interval of their projected points.
Note on VOR: you may notice that the top Defenses and Kickers have a negative VOR value. Why? We added a penalty to the VOR values for DSTs and Kickers to make the rankings more realistic and to reflect the fact that DSTs and Kickers are the least predictable. The penalty was based on where the DST and K were placed before penalty. The Ks were about 17–20 points over where the Expert Consensus Ranking (ECR) would have placed them and DSTs were 5–7 points over, so the VOR penalty is -18 for Kickers is -6 for DSTs.
- Draft your offensive starting lineup first before drafting bench players. Save Kickers and Defenses for later rounds because they are less predictable and score fewer points.
- For starters, pick the player with the highest value (over a typical replacement) who has a low risk and a high floor.
- For bench players, pick the player with the highest value (over a typical replacement) who has a high risk and a high ceiling.
- Give players more weight if they have either:
- a high dropoff (the player is projected to score many more points than the next best players at the same position), or
- a high ADP Difference score (i.e., the player tends to be under-valued compared to ADP and you might be able to draft him in a later round).
Season: which season of projections to use.
Positions: which positions of players to include in calculations.
VOR Baseline: the position rank set to be the “typical replacement player” for each position. We set the default baseline VOR value as the number of players drafted at each position within the top 100 picks, based on ADP on MyFantasyLeague.com. You can modify the VOR baseline values. For info on how to select a typical replacement for each position, see here.
Calculation Type: The type of average to calculate: mean, weighted average, or robust average. By default, a weighted average is used with analysts weighted by their historical accuracy. You can modify the weights in the weighted average. The mean is equivalent to a weighted average where all analysts are equally weighted (weight = 1). The robust average gives less weight to outliers (crazy projections).
Analysts: Select which analysts to include and, if weighted average, the weights for each analyst (i.e., how much weight to give each source of projections when calculating projected points). For instance, if you want to exclude ESPN projections, you would give them a weight of 0. If you want to give Yahoo projections twice the weight of CBS, you would give Yahoo a weight of 2 and CBS a weight of 1.
Scoring Settings: specify the number of points for each statistical category and position.
Positions: specify which positions of players to display.
Only sleepers (max per position): specify how many sleepers at each position to display. Sleepers were selected as the players with the greatest risk who had a ceiling > 80 and where (ceiling – points)/points * 100 > 10. In other words, sleepers are players with a high degree of uncertainty and high ceiling.
Compare Players: specify specific players to compare.
Exclude Players: specify players to exclude.
Rank: Overall rank by VOR.
VOR: Value Over Typical Replacement Player. Used to rank players across positions. Calculated by comparing players’ projected points to a “typical” replacement player at the same position (determined by VOR baseline values). For more info on how VOR is calculated, see here.
Points: Average projected points for a player across analysts.
Ceiling: A player’s upside, calculated as the upper bound of the player’s 95% confidence interval of projected points across analysts.
Floor: A player’s downside, calculated as the lower bound of the player’s 95% confidence interval of projected points across analysts.
ECR Rank: Expert Consensus Ranking from FantasyPros.
Pos Rank: Position rank.
ADP: Average draft position.
ADP Diff: The difference between ranking and ADP (higher values reflect more under-valued players that are better to target).
AAV: Average auction value.
Dropoff: The “dropoff” in projected points for the next best 2 players at the same position.
Risk: Risk of injury and degree of uncertainty of players’ projected points, calculated as the average of: 1) injury risk from Sports Injury Predictor, and 2) the standard deviation of the players’ projected points and rankings across analysts. Standardized to have a mean of 5 and a standard deviation of 2 (higher values reflect greater risk).
The Snake Optimizer App
For the Snake Optimizer App, go to: http://apps.fantasyfootballanalytics.net/projections