X

Sekretess & Cookies

denna webbplats använder cookies. Genom att fortsätta godkänner du deras användning. Läs mer, inklusive hur du kontrollerar cookies.

Fick Det!

annonser

Notera 1: Detta är del 1 av ett tvådelat inlägg om att bygga fantasy league-lag. Läs detta först och läs sedan Del 2 här.

anm. 2: Även om titeln säger” Fantasy Football”, kan modellen jag beskriver nedan i princip modifieras för att passa alla fantasy league för alla sporter.

football jag har nyligen kontaktats av flera personer (vissa studenter, några vänner) angående skapandet av optimala lag för fantasifotbollsligor. Med den senaste tidens ökning av vadslagningssidor Som Fan Duel och Draft Kings har detta blivit en miljon (eller ska jag säga miljarder?) dollar industrin. Så jag tänkte att jag skulle skriva ner ett enkelt recept för att hjälpa alla ut. Vi håller på att använda Prescriptive Analytics för att satsa på sport. Är du redo? Låt oss göra det här! Jag börjar med matematikmodellen och visar sedan hur du får allt att fungera med ett kalkylblad.

reglerna

fantasy football team regler anger att ett lag måste bestå av:

  • 1 quarterback (QB)
  • 2 running backs (RB)
  • 3 breda mottagare (WR)
  • 1 tight end (TE)
  • 1 kicker
  • 1 försvar

vissa ligor har också vad som kallas en ”flex player”, som kan vara antingen en RB, WR, eller te. Jag förklarar hur man hanterar flexspelaren nedan. Dessutom har spelarna en kostnad och personen som skapar laget har en budget, kalla det B, att följa (vanligtvis B är $50,000 eller $60,000).

Data

för varje spelare i får vi kostnaden som nämns ovan, kalla den c_i och en punktprojektion p_i. Det senare är en uppskattning av hur många poäng vi förväntar oss att spelaren ska göra mål under en viss vecka eller spel. När det gäller försvaret, även om det inte alltid gör poäng, finns det också ett sätt att beräkna poäng för det (t.ex. poäng förhindrade). Hur beräknas dessa punktprognoser, kanske du frågar? Det är här prediktiv analys spelar in. Det är i huvudsak prognoser. Du tittar på tidigare / senaste prestanda, du tittar på den kommande motståndaren, du tittar på spelarnas hälsa etc. Det finns webbplatser som ger dig dessa prognoser, eller så kan du beräkna din egen. Ju mer exakt du är på dessa förutsägelser, desto mer sannolikt är det att du tjänar pengar på satsningarna. Här tar vi dessa siffror som givna.

Optimeringsmodellen

de viktigaste besluten som ska fattas är enkla: vilka spelare ska vara i vårt lag? Detta kan modelleras som en ja / nej beslutsvariabel för varje spelare. Så låt oss skapa en binär variabel som heter x_i som bara kan ta två värden: det är lika med värdet 1 När spelare i är på vårt lag, och det är lika med värdet noll när spelare i inte är på vårt lag. Värdet i(spelar-ID) varierar från 1 till det totala antalet spelare som är tillgängliga för oss.

vårt mål är att skapa ett team med största möjliga sammanlagda värdet av projicerade poäng. Det vill säga, vi vill maximera summan av punktprognoser för alla spelare vi inkluderar i laget. Denna formel ser ut så här:

\max \displaystyle \sum_{\text{all } i} p_i x_i

formeln ovan fungerar eftersom när en spelare är i laget (x_i=1) multipliceras dess p_i med en och läggs till summan, och när en spelare inte är i laget (x_i=0) blir dess p_i multiplicerad med en och läggs till summan, och när en spelare inte är i laget ( x_i = 0 ) blir p_i multipliceras med noll och läggs inte till den slutliga summan. Mekanismen jag just beskrivit är huvudtanken bakom vad som gör att alla formler i denna modell fungerar. Till exempel, om punktprognoserna för de första 3 spelarna är 12, 20 och 10, börjar maximeringsfunktionen som:  \ max 12x_1 + 20x_2 + 10x_3 + \cdots

budgetbegränsningen kan skrivas genom att säga att summan av kostnaderna för alla spelare i vårt lag måste vara mindre än eller lika med vår budget B, så här:

\displaystyle \sum_{\text{all }i} c_i x_i \leq B

till exempel, om de första 3 spelarna kostar 9000, 8500 och 11000, och vår budget är 60 000, skulle ovanstående formel se ut så här:  9000x_1 + 8500x_2 + 11000x_3 + \cdots \leq 60000.

för att genomdriva att laget har rätt antal spelare i varje position gör vi det position för position. Till exempel, för att kräva att laget har en quarterback, skriver vi:

\displaystyle \ sum_ {\text{all } i \ text{ som är quarterbacks}} x_i = 1

för att kräva att laget har två löpande ryggar och tre breda mottagare skriver vi:

\displaystyle \ sum_ {\text{all } i \ text{ som körs ryggar}} x_i = 2

\displaystyle \ sum_ {\text{all } i \ text{ som är breda mottagare}} x_i = 3

begränsningarna för de återstående positionerna skulle vara:

\displaystyle \ sum_ {\text{all } i \ text{ som är snäva ändar}} x_i = 1

\displaystyle \ sum_ {\text{all } i \ text{ som är kickers}} x_i = 1

\displaystyle \ sum_ {\text{all } i \ text{ som är försvar}} x_i = 1

det nyfikna fallet med Flex Player

flex player lägger till en intressant twist till denna modell. Det är en spelare som, om jag förstår rätt, tar platsen för kicker (vilket betyder att vi inte skulle ha kicker-begränsningen ovan) och kan vara antingen en RB, WR eller TE. Därför har vi genast ett nytt beslut att fatta: vilken typ av spelare ska flex vara? Låt oss skapa tre nya ja / nej-variabler för att representera detta beslut:  f_ {\text{RB}},  f_{\text{WR}}och f_{\text{te}}. Dessa variabler betyder respektive: är flex RB?, är flex WR?, och är flex TE? För att indikera att endast en av dessa saker kan vara sant, skriver vi begränsningen nedan:

 f_ {\text{RB}} + f_ {\text{WR}} + f_ {\text{TE}} = 1

att ha en flex-spelare motsvarar dessutom att öka den högra sidan av begränsningarna som räknar antalet RB, WR och TE med en, men bara för en enda av dessa begränsningar. Vi uppnår detta genom att ändra dessa begränsningar från det format de hade ovan till följande:

\displaystyle \ sum_ {\text{all } i \ text{ som körs ryggar}} x_i = 2 + f_ {\text{RB}}

\displaystyle \ sum_ {\text{all } i \ text{ som är breda mottagare}} x_i = 3 + f_ {\text{WR}}

\displaystyle \ sum_ {\text{all } i \ text{ som är snäva ändar}} x_i = 1 + f_ {\text{TE}}

Observera att eftersom endast en av variablerna f kan vara lika med 1, kommer endast en av de tre begränsningarna ovan att ha sin högra sida ökad från sitt ursprungliga värde på 2, 3 eller 1.

andra potentiella krav

på grund av personliga preferenser, insiderinformation eller andra esoteriska överväganden kanske man vill inkludera andra krav i denna modell. Om jag till exempel vill ha det bästa laget som inkluderar spelarnummer 8 och utesluter spelarnummer 22, måste jag helt enkelt tvinga X-variabeln för spelare 8 att vara 1 och X-variabeln för spelare 22 att vara noll. En annan begränsning som kan komma till nytta är att säga att om spelare 9 är i laget, måste spelare 10 också vara i laget. Detta uppnås genom:

 x_9 \ leq x_{10}

om du ville ha det motsatta, det vill säga om spelare 9 är på laget så är spelare 10 inte på laget, du skulle skriva:

x_9 + x_{10} \ leq 1

andra förhållanden längs dessa linjer är också möjliga.

att sätta ihop allt

om du var tålmodig nog att hålla fast vid mig hela vägen här, är du angelägen om att få denna matte att fungera. Låt oss göra det med Microsoft Excel. Börja med att ladda ner det här kalkylbladet och öppna det på din dator. Här är vad den innehåller:

  • kolumn A: lista över spelarnamn.
  • kolumn B: ja/nej beslut om huruvida en spelare är i laget (det här är de X-variabler som Excel Solver kommer att beräkna för oss).
  • kolumnerna C till H: flaggor som anger om en spelare är av en viss typ (0 = Nej, 1 = ja).
  • kolumnerna i och J: kostnad och punkt prognoser för varje spelare.

bläddra nu ner så att du kan se raderna 144 till 150. Cellerna i kolumn B är för närvarande tomma eftersom vi inte har valt vilka spelare som ska läggas till i laget än. Men om dessa val hade gjorts (det vill säga om vi hade fyllt kolumn B med 0 och 1), multiplicerar kolumn B med kolumn C på ett cellvis sätt och lägger till allt upp skulle berätta hur många quarterbacks du har. Jag har inkluderat denna multiplikation i cell C144 med SUMPRODUCT-formeln. På liknande sätt beräknar celler D144:H144 hur många spelare av varje slag vi skulle ha när cellerna i kolumn B får värden. Beräkningarna av total lagkostnad och totala projicerade poäng för laget är analoga med tidigare beräkningar och använder också SUMPRODUCT-formeln (se cellerna i144 och J144). Du kan försöka välja några spelare för hand (sätta 1 i vissa celler i kolumn B) för att se hur värdena på cellerna i rad 144 kommer att förändras.

om du nu öppnar Excel Solver-fönstret (under fliken Data, om ditt Solver-tillägg är aktivt) ser du att jag redan har hela modellen inställd för dig. Om du aldrig har använt Excel-lösare tidigare kommer följande tvådelade video att komma igång med det: del 1 och del 2.

objektivcellen är J144, och det är vad vi vill maximera. Variablerna (aka ändra celler) är spelarval i kolumn B, plus besluten flex-player typ (celler D147:F147). Begränsningarna säger att: (1) det faktiska antalet spelare av varje typ (C144:H144) är lika med önskat antal för varje typ (C146:H146), (2) den totala kostnaden för laget (i144) överstiger inte budgeten (i146), (3) de tre flex-player binära variablerna lägger till upp till 1 (D150 = F150), och (4) alla variabler i problemet är binära. (Jag ställer in det önskade antalet kickers i cell G146 till noll eftersom vi använder flex-player-alternativet. Om du kan ha både en flex-spelare och en kicker, skriv bara a 1 i cell G146.) Om du klickar på ”Lös” – knappen ser du att det bästa svaret är ett lag som kostar exakt $50 000 och har ett totalt projicerat poängvärde på 78,3. Dess flex-spelare slutade vara en RB.

den här modellen är tillräckligt liten för att jag kan lösa den med den kostnadsfria studentversionen av Excel Solver (som kommer som standard med alla kontorsinstallationer). Om du råkar ha fler spelare och ditt totala variabla antal överstiger 200, fungerar den fria lösaren inte. Men förtvivla inte! Det finns ett bra Lösningstillägg för Excel som också är gratis och har ingen storleksgräns. Det heter OpenSolver, och det kommer att fungera med exakt samma inställning som jag har här.

Articles

Lämna ett svar

Din e-postadress kommer inte publiceras.