Człowiek vs Maszyna & Kapitan DGW26

0
Człowiek vs Maszyna & Kapitan DGW26

Spojrzenie dalej z kanapy, ale tym razem z innej perspektywy. Dla zafascynowanych uczeniem maszynowym i rzecz jasna FPL’em proponuję fuzję i zapraszam do tekstu.

TL;DR

Użyłem Machine Learning do zautomatyzowania wyboru kandydata na najlepszego kapitana w FPL. Lista wybranych przez ML najlepszych kandydatów na C w kolejce DGW26 na końcu artykułu.

A jak chcecie jeszcze więcej machine learning w FPL, to zaobserwujcie autora na twitterze.

Będzie też o FPL’u, ale ‘first things first’

Uczenie maszynowe (ang. Machine Learning, ML) to najprościej rzecz ujmując budowanie modelu matematycznego na podstawie serii danych. Można to ubrać w ładne słówka, powiedzieć, że Machine Learning „rozpoznaje wzorce”, „zapamiętuje zachowania”, jednak na koniec dnia to po prostu złożony model matematyczny, który z możliwie dużą dokładnością odwzorowuje dane (ciąg uczący), które mu przedstawisz. Jeśli ktoś się zgubił na model matematyczny to niech sobie go wyobrazi jako zwykły wzór, funkcję, której wykres łączy pewne punkty w układzie XY. Model Machine Learningowy to taka dużo bardziej złożona funkcja.

Okej, wiemy co to uczenie maszynowe, padły takie sformułowania jak ciąg uczący, model, dorzućmy jeszcze algorytm uczący. Posługując się tymi trzema pojęciami, możemy dodatkowo odpowiedzieć na pytanie – jak to działa? Otóż, przy użyciu algorytmu uczącego, dopasowujemy ciąg wejściowy z możliwie dużą dokładnością do modelu wyjściowego. Po wyłonieniu zwycięskiego modelu, możemy go zastosować do oceny nowej serii danych.

Na co z perspektywy osoby zainteresowanej wykorzystaniem Machine Learningu powinniśmy zwrócić uwagę?

  • ciąg uczący, jakie dane mamy do dyspozycji, czy mamy możliwość określenia oceny dla danej serii danych,
  • algorytm uczący, obecnie już są ich setki, od wiekowej regresji liniowej, przez różne rodzaje drzew decyzyjnych po nowoczesne odmiany algorytmów stochastyczno-gradientowych – w zależności od zadania bardzo ważnym jest wybór odpowiedniego algorytmu uczącego.

Pewnie chcecie powiedzieć, do brzegu mój złoty kapitanie.

Jeśli Machine Learning mogą używać takie firmy jak Netflix (żeby zaproponować Wam nowy serial), lub Spotify (żeby powiedzieć Wam, jaką muzykę lubicie najbardziej), to czemu nie moglibyśmy użyć go do wyboru C w FPL? Fakt, ten serial od Netflixa to czasem się okaże gniotem, ale tylko czasem.

Może lepsze to niż słuchać Filipa 1.5M w overallu?

Ciąg uczący

Przede wszystkim, zanim przejdziemy do procesu uczenia, należy pochylić się nad samym ciągiem uczącym. Jak z kolegą w pubie na piwie (aż się łezka w oku kręci), na co zwracacie uwagę przy wyborze C? Gole? Asysty? Przeciwnik, który lubi wpuścić sporo bramek? Może, coś bardziej nowatorskiego jak expected goals? A może by tak wszystko naraz?

Ludzki mózg ma tendencję do szukania potwierdzenia tez, które sam wcześniej sformułuje. Takie tezy często formuje zresztą błędnie. Na przykład na podstawie jednego meczu, który widzieliśmy 3 kolejki temu, gdzie akurat Sterling zagrał dobry mecz (np. z Liverpoolem), dochodzimy do wniosku, że będzie lepszym wyborem na DGW24 niż Gundo. Model uczenia maszynowego jest niewrażliwy na nasze emocjonalne przywiązania, sympatie, czy przekonanie, że dany klub jest „słaby”.

Do opracowania mojego ciągu uczącego użyłem danych z Understata, takich jak; xG, xA, G, A, rozegrane minuty każdego gracza z x ostatnich kolejek, oraz xGA drużyny przeciwnika danego gracza. Natomiast jako ocenę serii danych potraktowałem zdobyte punkty w FPLu w danej kolejce.

Niewielka przykładowa część jednego z ciągów uczących, które testowałem:

Points xG xA G A xGA Minutes
13 3,84 2,86 3 6 3,85 270
7  3,34 1,83 6 0 5,30 270
6  5,04 0,11 7 0 6,83 270
5  1,64 2,67 3 3 6,83 245
7  3,56 0,75 4 0 5,30 270
11 2,61 1,21 3 2 8,74 270

Ciągi uczące przygotowywałem w różnych konfiguracjach ostatnich meczów, od 2 do 6 dotyczących statystyk graczy oraz od 3 do 7 dotyczących xGA przeciwników danego gracza. Dodatkowo, w ciągu uczącym znalazły się dane dla każdego gracza, który rozegrał w danej kolejce przynajmniej minutę. Dane z obecnego sezonu GW1-GW25.

Uczenie

Co do algorytmu uczącego, w przypadku ciągów uczących składających się z wieloparametrowych danych liczbowych oraz przy stosunkowo niewielkich ciągach uczących, najlepiej sprawdzają się algorytmy uczące modele regresji. Dlatego, w celu przeprowadzenia testów wybrałem trzy algorytmy – SDCA regression, OLS regression oraz Fast tree regression.

Najskuteczniejszy model

Najlepsze wyniki przy symulacji wstecznej uzyskałem dla algorytmu OLS regression oraz ciągu uczącego opracowanego na bazie statystyk z 3 ostatnich meczów danego zawodnika i 7 ostatnich meczów przeciwnika. Wynik ten zawiera w sobie pewnego rodzaju bonus w postaci wskazówki, że przy wyborze kapitana powinniśmy się skupiać głównie na krótkoterminowej formie danego zawodnika.

Poniżej próbka możliwości opracowanego modelu. Kapitanowie w pełni automatycznie wybrani przy użyciu najskuteczniejszego z opracowanych modeli.

Liczby z ostatnich 3 meczów drużyny zawodnika.

Brak opisu.

Zgodnie z powyższą tabelką, najlepsze wybory na C DGW26 (powered by ML ;))

  1. Bruno
  2. Barnes
  3. Aina
  4. Richarlison
  5. Salah

Expected goals against z ostatnich 7 meczów przeciwników.

Name Przeciwnicy xGA
Bruno Fernandes Chelsea – Crystal Palace 4,29 – 14,09
Harvey Barnes Arsenal – Burnley 8,39 – 10,01
Ola Aina Crystal Palace – Tottenham 14,09 – 12,64
Richarlison  Southampton – West Bromwich Albion 13,60 – 10,28
Mohamed Salah Sheffield United – Chelsea 11,26 – 4,29

 

Powodzenia!

Kogo na kapitanie miał lider naszej ligi?