I have been using ASL's DFS Lineup Optimizer since early October to enter FanDuel NFL contests. I setup a very modest account of $10.00, and since October I have grown my fund to about $22.00 by winning mostly NFL contests. As I have played, I have adjusted my strategy and created advanced new features in ASL's DFS Lineup Optimizer based on lessons learned.
I present this case study so you can see how the latest features work, and so you can learn with me as we continue to improve.
I decided I would enter 25 $0.05 lineups into the Thursday night Chargers vs Rams game:
First, I download the player list from FanDuel and read it into ASL's Lineup Optimizer by clicking Use Lineup CSV, then I look for players that FanDuel indicates are out, and use the browser search function (Ctrl + f) to see whether those players are in the Available Players table:
The way ASL's optimizer works for single game contests is each instantiation of a player as MVP, PRO, STAR, or AnyFlex is treated as a different player. This is to give you more control on exactly what you want the optimizer to do. However, it also means you must exclude each instantiation of that player.
After excluding all the players that were not going to play, this is how the Excluded Players table appeared:
To generate my lineups I use the default pro options. To set the pro options I click Set Pro Options, generate a template and read it in.
Then I click Generate Lineups to generate a lineup and to seed the multi-lineup generator.
Then at the bottom of the blend table, in the Multiple Lineup CSV section, I enter 25 and click Save.
This causes the multi-lineup generator to run, and while it runs it produces a log of what it is doing and the results:
The top section shows the pro option settings. Auto Max Exposure, Auto Min Exposure, Stack Bonus, and Diversity Bonus are all turned on.
Auto Max Exposure and Auto Min Exposure are ASL's special algorithms to set maximum and minimum exposures based on a rough calculation of the odds a player will be the top performer of his position, which is calculated from his rank and projected fantasy points.
Stack Bonus is a bump up to the projected fantasy points by the bonus percentage when two players with positive performance correlation are in your same lineup. This is ignored in single game contests, so has no affect for this case study. In an NFL contest involving more teams, it would bump up WR and TE 20% if the quarterback in the lineup is on the same team. For details as to why this might help win a tournament style contest see our NBA pre-season case study.
Diversity Bonus is a bump up percentage added to a player's projected fantasy points if they are not in any other lineups. The higher the percentage, the more diverse your lineups will be. By using a bonus, rather than a hard number, the optimizer can trade off diversity versus the cost of diversity.
Below these settings the log shows the max and min exposure settings for each player.
Since a player can be an MVP or an AnyFlex, a player will be listed twice in this section, once for their AnyFlex position and then for their MVP position. Since there are four AnyFlex slots and only one MVP slot, the max and min allocation for the AnyFlex position will be higher than the MVP position. For example, from the log we can see that Justin Herbert has a max/min exposure setting of 23/12 for the AnyFlex slot and 12/5 for the MVP slot.
The algorithm is not fine tuned to understand single game contests, and therefore it can create impossible constraints, such as the min exposure of a player between the MVP and AnyFlex slot add up to more than the number of lineups you are generating. This is okay, as the multi-lineup generator will do its best to meet the constraints, and when it can't it will pick the lineups that produce the most fantasy points.
The multi-lineup generator runs refinement cycles. As it goes through these cycles, it does its best to meet the constraints it has been given. Once it can't make any more refinements, it changes strategy.
For example, in the log file above, it made no progress between iteration 4 and 5, but there were still 7 max exposure violations. So it changed strategy to allow the maximum salary cap to be violated for those lineups with max exposure violations. You can see that in the next iteration, the total fantasy points of all the lineups rose to 1911.33 fantasy points, but now seven lineups have max salary cap violations.
So once it can't improve anymore it switches its algorithm and fixes the max salary violations, but now it doesn't insert any of the players that have hit their max exposure limit.
The log shows that at iteration 8 there are no more violations of any type, and the total fantasy points of all lineups fell from 1911.33 to 1826.21. From there it continues to try to refine the lineups until it can't find any other improvements.
The way I decide if my settings are producing quality lineups is that I look at the difference of Total Value from the beginning of the run to the end of the run. The idea is to create diversity and limit exposures to any single player without losing a lot of total value of all the lineups. I felt this was in an acceptable range. So I uploaded the 25 lineups into FanDuel.
After uploading, I double checked whether there were any questionable players that I needed to review or that were out. I thought everything looked good.
So Friday morning came, and I checked my results.
First, in this game Derek Carr and Hunter Renfrow exited early. My worst lineup had both of them:
Carr was 62.8% owned and Renfrow was 32.0% owned. Carr was in 16 of my 25 lineups (64%), and Renfrow was in 5 of my lineups (20%), so the impact of their injuries should have impacted my results about equal with everyone else.
Overall 8 of my 25 lineups won, or 32%. Out of my $1.25 in entry fees, I lost $0.33. Upon examining the results there was a big gap in fantasy points between my 8th best lineup and my 9th best lineup (82.21 vs 68.46) and looking deeper this was pretty much the split of lineups that had Derek Carr and/or Renfrow versus neither.
The 1st place had Mariota in his lineup (Carr's backup who wasn't expected to play at all):
Mariota was 0.1% owned. I believe if we look over the course of the season, the odds that a back-up quarterback might take over and score significant fantasy points are high enough to consider a strategy around that. In single lineup contests, most lineups have at least one, if not both quarterbacks. So when a starting quarterback goes down, a large number of lineups will be negatively impacted whereas the lineup with the back up in it will rise. Quarterback is the only position where there is such a dramatic shift across all lineups in single game contests.
If one wanted to play this strategy in multi-lineup with ASL's Lineup Optimizer, all one would need do is set the backup quarterbacks to have an AnyFlex min exposure of 1 and check that they aren't both placed in the same lineup (which is unlikely anyway).
Anyway, I continued to examine my results and I found that some players that I would call "punts" (low salary players that aren't expected to do much, but keep more cap space for the rest of the lineup) were placed in the lineups.
Two examples are Bryan Edwards who hasn't scored a fantasy point since Week 12, Jason Witten who hasn't scored a fantasy point since Week 11.
I don't think this changed the outcome much because the Renfrow and Carr injuries were really the dividing line between my winning and losing lineups.
This can happen when diversity is over emphasized. But in this case, I believe it was because I was testing out a new algorithm that allowed the optimizer to place punts in the lineups when fixing salary cap. After seeing these results, I turned that knob in the optimizer off, and pushed a new release to production.
The log file shows the last optimization effort is to "Add punts, if any". This is the only place now that these low-projected players could be added, and they will be added only if a hard diversity constraint has not been met.
So now I am looking forward to seeing how my Thu-Sat and Thu-Mon entries will do, and also to setting some lineups in today's contests.
I will report back and also show my overall winning record soon. I feel a little jinxed right now. I have only lost in three or four multi-lineup contests all season, and now in my two case studies, the other for NBA pre-season, I am reporting losing results.
However, if I won all the time, there wouldn't be any information to learn and improve from, so the $0.33 lesson was worth the fee, especially since it resulted in a change that makes the optimizer better for all of you.