Fantasy Football Draft
Optimization in R
Ed Goodwin, CFA
What is this fantasy football
stuff anyway?
• All participants compete in a league, and draft
players from the NFL in a virtual draft. Based
on the real life performance of the athletes,
participants score points. Each league can have
different rules around scoring, drafting, and
trading players.
Our League Rules
• Snake draft
• Standard ESPN scoring
• 9 starter players, and 7 bench players
Number of hours of football Ed watched last season
0
The problems to solve?
• How do we rank players for each position?
• How do we choose the best team?
• How do we handle the realities of a live draft?
Everyone is trying to draft the best available
players every round.
Workflow
• Think about the problem and
come up with some initial
thoughts
• Read a lot of blogs on fantasy
football
• Prototype and iterate
• Test
• Revise
Constraints
• Time
• Knowledge
Initial Thoughts
• Where do we get data? Screen scraping
• How to determine the best players to draft?
Use historic data to forecast performance
• How do we pick the best team? Optimize for the
best risk adjusted score (whatever that means)
• How do we handle the draft? Need to
recalculate the best team based on who has been
selected already
Exploratory Graphics
• ggplot2
and dplyr
Some good sources for
fantasy football optimization
• fantasyfootballanalytics.com
• advancedfootballanalytics.com
• thehuddle.com
• fftoday.com
My Solution
csv
Data
File
MySQL
Sequel
Pro (UI)
R Linear
Optimizer
ESPN
Draft
Site
MySQL Database
Linear Optimizer
• Uses RMySQL package to connect to database
• Uses Rglpk to run the linear optimization
Linear Optimizer Logic
• Select two sets of players from the database
• Players that are still available to draft
• Players that I have drafted
• Set rules based on whether I am filling my starting lineup or filling my bench
• Based on the number of open slots I have on my team, select players to
draft for the open slots that
• Maximizes my expected points
• Keeps my risk within a stated threshold
• Satisfies the rules about what positions can make up a team
RMySQL
• Package to connect to
MySQL databases
• Use dbConnect()
function to establish
connection
• Use dbGetQuery()
function to run SQL
statements against
database
Rglpk - R/GNU Linear
Programming Kit
• Tools to create generalized linear models in R
• Rglpk_solve_LP() function used to solve for
optimization with constraints
Rglpk_solve_LP() requires:
• obj vector you are trying to maximize
• mat matrix of constraints
• dir vector of constraint “directions” (i.e. “>=“, “==“, or “<“,
etc.)
• rhs vector of right hand side of the constraints
• types vector of character types of constraints (“B” for binary,
“C” for continuous, “I” for integer)
• max specifies whether the goal is to maximize (“TRUE”) or
minimize (“FALSE”) the solution
Set your constraints
Set rhs constraints
Optimized Starter Team
Lessons Learned
• Scrub your data
• Run mock drafts ahead of time
• Vet out your assumptions
• Think through the correlations
• Replacement value more important than point
value
Lessons Learned
• Shake out the optimization
rules
• Don’t weight one team too
heavy in your lineup
• There’s still a lot of luck
involved (Andrew Luck)
Next Steps
• Weekly projections to optimize waiver wire
trades
• Screen scraping
• Bench optimization

Fantasy Football Draft Optimization in R - HRUG

  • 1.
  • 2.
    What is thisfantasy football stuff anyway? • All participants compete in a league, and draft players from the NFL in a virtual draft. Based on the real life performance of the athletes, participants score points. Each league can have different rules around scoring, drafting, and trading players.
  • 3.
    Our League Rules •Snake draft • Standard ESPN scoring • 9 starter players, and 7 bench players
  • 4.
    Number of hoursof football Ed watched last season 0
  • 5.
    The problems tosolve? • How do we rank players for each position? • How do we choose the best team? • How do we handle the realities of a live draft? Everyone is trying to draft the best available players every round.
  • 6.
    Workflow • Think aboutthe problem and come up with some initial thoughts • Read a lot of blogs on fantasy football • Prototype and iterate • Test • Revise
  • 7.
  • 8.
    Initial Thoughts • Wheredo we get data? Screen scraping • How to determine the best players to draft? Use historic data to forecast performance • How do we pick the best team? Optimize for the best risk adjusted score (whatever that means) • How do we handle the draft? Need to recalculate the best team based on who has been selected already
  • 9.
  • 12.
    Some good sourcesfor fantasy football optimization • fantasyfootballanalytics.com • advancedfootballanalytics.com • thehuddle.com • fftoday.com
  • 13.
    My Solution csv Data File MySQL Sequel Pro (UI) RLinear Optimizer ESPN Draft Site
  • 14.
  • 16.
    Linear Optimizer • UsesRMySQL package to connect to database • Uses Rglpk to run the linear optimization
  • 17.
    Linear Optimizer Logic •Select two sets of players from the database • Players that are still available to draft • Players that I have drafted • Set rules based on whether I am filling my starting lineup or filling my bench • Based on the number of open slots I have on my team, select players to draft for the open slots that • Maximizes my expected points • Keeps my risk within a stated threshold • Satisfies the rules about what positions can make up a team
  • 18.
    RMySQL • Package toconnect to MySQL databases • Use dbConnect() function to establish connection • Use dbGetQuery() function to run SQL statements against database
  • 19.
    Rglpk - R/GNULinear Programming Kit • Tools to create generalized linear models in R • Rglpk_solve_LP() function used to solve for optimization with constraints
  • 20.
    Rglpk_solve_LP() requires: • objvector you are trying to maximize • mat matrix of constraints • dir vector of constraint “directions” (i.e. “>=“, “==“, or “<“, etc.) • rhs vector of right hand side of the constraints • types vector of character types of constraints (“B” for binary, “C” for continuous, “I” for integer) • max specifies whether the goal is to maximize (“TRUE”) or minimize (“FALSE”) the solution
  • 21.
  • 23.
  • 24.
  • 25.
    Lessons Learned • Scrubyour data • Run mock drafts ahead of time • Vet out your assumptions • Think through the correlations • Replacement value more important than point value
  • 26.
    Lessons Learned • Shakeout the optimization rules • Don’t weight one team too heavy in your lineup • There’s still a lot of luck involved (Andrew Luck)
  • 27.
    Next Steps • Weeklyprojections to optimize waiver wire trades • Screen scraping • Bench optimization