ASL's Founder, Leonard LaPadula, provides an instructive case study for using the advanced multi-lineup features in ASL's DFS Lineup Optimizer for a FanDuel NBA pre-season contest.
As we approach the NBA regular season, I have been using the new multi-lineup features in ASL's DFS Lineup Optimizer in FanDuel NBA pre-season contests. Here is how I set my lineups this evening (December 16, 2020) for the FanDuel Preseason Main $0.05/lineup contest, highlighted in blue below:
First, I enter the contest and download the player list:
Then I start up the DFS Lineup Optimizer and set the slate:
Then I click Set Pro Options to generate the CSV file with the default pro-options settings and read it in:
Then I click Use Lineup CSV to read in the player list that I downloaded from the FanDuel contest.
Next, I go through the top Available Players on the FanDuel site to check the status of all questionable players:
Using Kevin Love as an example, I read his news and decide if I will allow the optimizer to add him to lineups or exclude him:
It looks like he isn't playing, so I click Exclude next to his name in the optimizer:
I quickly find him in the Available Players table by typing Ctrl + f to use the browser search and then typing part of his name.
After I go through the all the questionable players in the slate, I end-up excluding these players:
There are only eight teams playing, so I don't see the need to set 150 lineups. My goal isn't to maximize my chance to hit the top prize, but rather to maximize my winnings.
These are two different goals. The more lineups you enter, the greater the odds are that you will win the top prize, but the less likely you are to have an overall positive result. Let's say a contest allows 1000 lineups, and you are allowed to enter 1000 lineups. If you entered 1000 lineups, you would win first place, but you would also lose money because the cost of entering 1000 lineups is greater than the sum of all your wins. I want to enter some reasonable and diverse lineups, but with only eight teams playing my instinct is that 150 lineups is too many.
So I click Generate Lineups, and then enter 20 and click Save at the bottom of the blended projections.
While the multi-lineup generator runs, it produces a log:
This log provides valuable information to help determine the quality of the lineups. At the top, it shows the settings that were used.
Auto Max Exposure and Auto Min Exposure are ASL's special algorithms to calculate reasonable maximum and minimum exposures for each player based on their ranking and fantasy points. These are turned on in the default Pro Settings template CSV file.
The Stack Bonus gives players on the same team as another player in the same lineup a fantasy point bonus to account for positive cross correlation between their results. In NBA one player might get an assist, while another player makes the shot. The default setting is a 20% bonus. Since I am entering a tournament style contest, the idea is that I want to shoot way up in the rankings. Two players on the same team are more likely to out perform their projected fantasy points than two players on different teams.
For example, if a player has a 1/3rd chance to under perform, a 1/3rd chance to roughly meet expectation, and a 1/3rd chance to over perform, and if players on the same team rise and fall together, then the two players on the same team have a 1/3rd chance that they will both over perform their projection. (This is just an example, cross correlation isn't 100% correlated, but it is positive.) However, the odds that both players on two different teams will over perform are 1/3rd x 1/3rd, or 1/9th, because their relative performance has no correlation. This is why team stacking has value for tournament style contests.
Other optimizers allow you to specify exactly how many players you want to stack and how many teams you want to stack. ASL's optimizer allows you to specify how important stacking is, and then finds various combinations that optimally trade fantasy points for team stacking, rather than just providing a fixed team stacking result. You can increase or decrease how much stacking you want by increasing or decreasing the stack bonus.
The Diversity Bonus is given when the optimizer is considering using a player in a lineup that is not used in any other lineup. The default is to give that player a 7% bonus. This increases the total number of unique players that the optimizer will cause to be used in your multiple lineups. This is desirable because we don't know which players might exceed their projection. Thus, increasing diversity increases the chance that your lineups will include a player that significantly outperforms their projection, hopefully pushing that lineup high into the contest result rankings.
Then the log shows the Max and Min Exposure Settings for each player. You can override these settings for individual players manually in the pro-options file.
Finally, when the optimizer generates lineups, a log is provided that shows what it is doing and what the significant statistics are for each stage of the lineup optimization process.
The multi-lineup generator receives seed lineups from when the single lineup generator runs. The initial starting value of total fantasy points from these seed lineups is generally high because there are usually duplicate lineups (where the same players are in different starter slots which has value for seeding the multiple lineup generator but not for entering contests). After the first optimization, all duplicate lineups are removed, so the fantasy points total generally drops. The initial optimization also trades off fantasy points adding stack bonus and addressing max exposure, min exposure, and diversity.
So you can see in the log that after the initial optimization, total fantasy points went down, stack bonus went up, total value went up, the number of max and min exposure violations went down, and total number of players went up.
This is just a first pass optimization. Then the multi-lineup generator uses various algorithms to further optimize the lineups. Spreading max exposure is done to try to prevent the same top players from always being together. Of course you want the top players to be together in some lineups, but you don't want lineups with all top tier players and the remainder of the lineups to use only lower tier players because the later lineups will likely all fail to have value. You are looking for an unexpected player or two to pop, not every player in the lineup. So to give any one lineup the best probability to succeed it is important to spread the top tier players around.
It keeps running adjusting the underlying algorithm at various points until it can't find any more improvements.
If the final total fantasy points or final total value drops significantly from the initial optimization stage, then it is likely the pro-options are set too tightly.
The optimizers single best lineup came to 349.1 fantasy points. Here at the end of this log the 20 lineups totaled 6634 fantasy points, or an average of 331.7 fantasy points. The initial optimization totaled 6760 fantasy points, averaging 338.0 fantasy points per lineup.
It's nice that it hit all the max and min exposure settings and that the number of players rose to 26, but I thought I could do better. And then after thinking about it more, I thought it is pre-season so players will be switched in and out more, giving some of the less experienced players more opportunity while not taxing the veterans too much. This would have the effect of reducing the positive cross correlation between players.
So I decided to give it another run. This time I would turn off auto-stacking and auto-diversity, but set diversity to 150% (20 lineups x 150% = 30), so I was setting the goal to include a total of 30 unique players in my 20 lineups. Given that this is the pre-season, I wanted more diversity than usual because player performance is less predictable than usual. This is the log that was generated from that run:
Even though I shutoff auto-team stacking and added only four more unique players to the lineups, the average lineup fell almost another two fantasy points, from 331.7 to 329.9 (6598/20).
I decided I liked the first set of lineups better, but wondered what would happen if I cut the auto-stacking bonus to 10%:
I decided I liked these results the best. Now the average lineup is 332.8 (6657/20) fantasy points. I decided the extra diversity wasn't worth it. To go from 25 players to 30 players I was losing an average of almost 3 fantasy points per lineup, or a total of 58.8 fantasy points. Each added unique player was costing 11.76 fantasy points. I won't want to lose 11.76 fantasy points in a single lineup just to include a player that wasn't in any other lineup.
So I entered the lineups from this run into the FanDuel contest by reading in the lineups CSV. I double checked that all players in the lineups are playing. So the only thing left to do is wait and see the results when the games finish late tonight.
It is now Thursday morning. As promised, I will now give the results, rain or shine. Unfortunately it is rain. My results were not good. Let's take a look at what happened. First here are my results:
Only one of my 20 lineups won. I lost 90% of my entry fee, a whole $0.90. Glad I tested the waters with small entries before diving deep.
From this distribution, it looks like most of my lineups came very close. They were better than average, but I didn't have enough diversity to spread the results out so some would pop up into the winning region.
However, more careful analysis indicates that this is an incorrect way to interpret the above scatter gram. I believe the FanDuel scatter gram is based on fantasy points, not ranking. But contest wins are awarded based on rankings, not fantasy points.
So let's take a look at my results based on ranking. This contest has 59,880 total lineup entries. My results ranked 12486, 19281, 21740, 24724, 26350, 29477, 29997, 34662, 35269, 37079, 37122, 37913, 39313, 45861, 47838, 47875, 50077, 50198, 52895 and 55378. I used MS Excel to generate the following histogram which more accurately represents how the lineups faired based on ranking, the actual win criterion:
Most of the lineups ranked below the 50th percentile centered in the 30 to 40% range (38.65 to be precise). The lineups have a broad distribution. So looking at the results from this perspective, player diversity was fine. The real issue is either that the player projections were poor, or because it is preseason, few average Daily Fantasy Sports player play in these contests, but rather the NBA pre-season contests are dominated by the most ardent and knowledgeable of NBA fans.
The short conclusion is, with the NBA pre-season coming to an end soon, I won't play in anymore pre-season NBA games with the current projections. A lot of projection providers don't provide NBA pre-season projections, and now it seems clear why that is.
Looking a bit deeper, here is the top lineup with the projections from Daily Fantasy Fuel (DFF) and RotoWire (RW) shown on the right:
These projections actually don't look too bad. Coby White was drafted in 40.8% of the total lineups, so RotoWire was a little bit low compared to the norm, but other than that, these really aren't bad projections.
So let's look at my worst lineup and see what happened there?
There were two players that had low ownership that had high to very high projections from Daily Fantasy Fuel and RotoWire, Anthony Davis and Will Barton. We can also look at LeBron James as being highly over-projected, but he had a 58.7% ownership rate, so it seems the fantasy NBA community generally over-projected him for last night's game. Anthony Davis was the overall 2nd highest projected player after LeBron James in our projections last night. Will Barton was the 16th highest projection.
So what clearly killed this lineup, were the over-projections of LeBron James, Anthony Davis and Will Barton. LeBron was in 19 of my 20 lineups, Anthony Davis in 9, and Will Barton in 11.
Clearly the over-projection of LeBron James is the result of not doing a good job anticipating the pre-season rotation and reduced playing time of NBA starters.
A good thing it is Thursday, because I am looking forward to entering my NFL lineups. And the NBA regular season is just around the corner, so I look forward to entering more NBA lineups then.
I plan to write another article about my NFL Week 15 lineups. Hopefully, my results will be consistent with past weeks, so I can show you what winning looks like!
I also hope that his article was helpful for you to understand how the ASL advanced multi-lineup features work and some of the trade-off decisions you can make to increase your odds of winning.