Cześć.
Co roku FIFA wybiera najlepszego piłkarza na świecie. Mam na myśli ranking, w którym zawsze wygrywa Ronaldo albo Messi, a Neymar jest na trzecim miejscu. Na końcu ostatniego roku, kiedy znowu wybierany był najlepszy piłkarz, pomyślałem o niedoskonałościach sposobu, w jaki jest dokonywany wybór. Najlepszy piłkarz jest wybierany poprzez głosy dziennikarzy i trenerów, więc jeżeli przykładowo najwięcej dziennikarzy jest z Hiszpanii, to największe szanse mają piłkarze z ligi hiszpańskiej (nie wiem dokładnie w jaki sposób to działa, ale na pewno nie jest to doskonały sposób). Pomyślałem o tym, jak to powinno być zrobione i napisałem program, który używa maszynowego uczenia się do tego by nauczyć się, jakie są umiejętności piłkarzy i kto jest najlepszym piłkarzem na świecie.
Co to znaczy, że dany piłkarz jest dobry? Piłka nożna to sport zespołowy, zatem opieram się na założeniu, że najlepszy piłkarz to taki, który najbardziej zwiększa prawdopodobieństwo wygranej drużyny poprzez swoją obecność w składzie.
W tym artykule dzielę się z Wami wynikami wygenerowanymi przez program.
Algorytm przeanalizował 23788 meczy. To są dane, które algorytm otrzymał na temat każdego analizowanego meczu (na podstawie tych danych algorytm stworzył ranking):
- Zawodnicy grający od pierwszej minuty w pierwszym zespole.
- Zawodnicy grający od pierwszej minuty w drugim zespole.
- Wynik meczu.
- Długość meczu (czasami więcej niż 90 minut z powodu dogrywki).
- Dokonane zmiany (kto wszedł, za kogo, w której minucie).
- Gole (która drużyna strzeliła, w której minucie).
- Kiedy odbył się mecz.
Zauważ, że algorytm NIE posiada informacji o tym, kto strzelił gole (posiada tylko informacje, który zespół strzelił gola i w której minucie), który piłkarz jest znany albo który piłkarz jest najbardziej przystojny. Zatem algorytm jest obiektywny. Bierze pod uwagę tylko, kto był na boisku w danej minucie i w jakiej minucie została strzelona bramka dla którego zespołu.
Jak trafna jest ocena algorytmu?
Z jednej strony jest bardziej trafna niż ocena człowieka - algorytm analizuje wszystkie mecze, człowiek ogląda tylko kilka meczy ligi mistrzów. Ocena człowieka jest bardzo subiektywna i jest wiele rzeczy, których człowiek nie zauważa, jak na przykład ciężka praca obrońcy, który regularnie rozgrywa dobre mecze pozostając w cieniu napastników, którzy strzelają bramki.
Z drugiej strony jest wiele rzeczy, których algorytm nie widzi, bo nie ogląda meczu - pomyłki sędziowskie, to że ktoś zaliczył asystę albo że ktoś strzelił bramkę w trudnej sytuacji.
Dlatego należy zsumować wyniki algorytmu z tym co wiemy i wtedy można uzyskać trafną ocenę (sugerując się bardziej tym co wiemy).
Wyniki
Algorytm przeanizował 23788 meczy i wziął pod uwagę 25196 zawodników - wszystkie mecze i wszystkich zawodników z poniższych lig i turniejów w przeciągu ostatnich 5 lat (dane są pobierane z API sportmonks.com):
World Cup Qualification Worldwide (all of the continents) + World Cup, Copa America, European Championship, Champions league (including qualifications), Europa league, English league, German league, French league, Italian league, Spanish league, Brazilian league, Argentinian league, Dutch league, Portuguese leauge, Scottish league, Turkish league, Fifa Club World Cup, Copa Libertadores, CONCACAF Champions League, CONCACAF Gold Cup, Confederations Cup, Africa Cup of Nations.
Jeżeli jakiś piłkarz nie występował w którychś z powyższych rozgrywek w ciągu ostatnich 5 lat, to nie został uwzględniony.
Poniższy ranking pokazuje 10 najlepszych piłkarzy na świecie (stan na 17 kwietnia 2018 r., przed półfinałami ligi mistrzów) wg algorytmu maszynowego uczenia się:
Jak możesz zobaczyć, najlepszym piłkarzem wg algorytmu jest Mohammed Salah z Liverpoolu. Zwróć uwagę, że algorytm wybrał go spośród 25 000 piłkarzy nie posiadając informacji o popularności danego piłkarza ani o tym kto strzelał bramki w danym meczu, posiadając tylko informację o tym kto był na boisku i kiedy padła bramka dla którego zespołu.
Pod tym linkiem możesz znaleźć ranking 50 najlepszych piłkarzy wg algorytmu:
50 najlepszych piłkarzy (2018-04-17)
Chciałbym zaznaczyć, że te wyniki są dosyć płynne, tzn. różnica pomiędzy zawodnikami jest niewielka i pozycje zawodników zmieniają się w krótkim czasie. Piłkarz, który w tej chwili jest na pierwszym miejscu za pół roku może być na 20.
Zaskoczeniem może się się wydawać, że w pierwszej 10 nie ma Leo Messiego (a Neymar jest 12, jakby się ktoś pytał). Algorytm uznał, że Messi ma już swoje najlepsze za sobą i obecnie jest na 28 miejscu. Uruchomiłem program również dla poprzednich lat i gdyby algorytm decydował o tym, kto ma otrzymać złotą piłkę, to Messi otrzymałby ich najwięcej od 2010 roku.
Oto kto otrzymałby Złotą Piłkę wg algorytmu dla każdego roku:
Tak naprawdę powyższa tabela nie pokazuje, kto był najlepszy w całym roku, tylko kto był najlepszym piłkarzem (lub drugim albo trzecim piłkarzem na świecie) na końcu danego roku.
Tutaj możesz znaleźć szczegółowe wyniki dla poprzednich lat:
2010-01-01
2011 01 01
2012 01 01
2013 01 01
2014 01 01
2015 01 01
2016 01 01
2017 01 01
2018 01 01
Na koniec graf pokazujący wynik piłkarzy (ich umiejętności porównując do innych zawodników w danym czasie) w każdym roku. W grafie zostali uwzględnieni wszyscy piłkarze, którzy przynajmniej raz zdobyli Złotą Piłkę wg algorytmu oraz Mohammed Salah, który obecnie jest najlepszym piłkarzem na świecie wg algorytmu.
Jak działa algorytm?
Jeżeli chcesz wiedzieć, jak działa algorytm, to jest to wytłumaczone w pliku Readme.md w repozytorium projektu na Github:
https://github.com/damc/football
Pozdrawiam,
Damian (damianc1092[at]gmail.com).
Komentarze (175)
najlepsze
Komentarz usunięty przez moderatora
@cxnmlhuipwetr: No, i dlatego to są "sieci neuronowe", a nie kaskada ifów. Właśnie dlatego, że algorytm się sam zmienia, bez ingerencji programisty.
Problemem może być natomiast to, czy wybrano optymalną metodę. Przykładowo, użyta wielokrotna regresja liniowa wymaga, żeby zmienne niezależne nie były kolinearne. Czy nie są w przypadku, kiedy wielu piłkarzy z głównego składu jest na boisku w momencie zdobycia bramki mam wątpliwości, a nie
Wytłumaczyłem to w tym komentarzu:
https://www.wykop.pl/link/4297375/comment/54797167/#comment-54797167
- gra najczęściej mecze
- w tych meczach pada dużo goli
Tylko, że skład druzyny wybierany jest przez pewnych ludzi, których liczysz tym algorytmem.
Ale wyniki są interesujące, dlatego że bazują na czymś innym niż na subiektywnej ocenie i mogą dostarczyć informacji, których nie widać z punktu widzenia człowieka (np. z punktu widzenia człowieka nie widać że David Alba jest bardzo dobry, a wg rankingu jest
Jeżeli Mirko Vučinić był najlepszym piłkarzem świata w 2012 roku dlaczego już 2 lata później przeniósł się do ligi w emiratach arabskich?
Ten człowiek nigdy nie wybijał się ponad przeciętność w piłce-bezdyskusyjny fakt.
Skoro to ma być "uczenie maszynowe" to zadam kilka pytań, na które nie znalazłem odpowiedzi w podlinkowanym README.md.
Widzę, że w kodzie są ustawione na sztywno dwa hiperparametry modelu, tj.:
Dlaczego akurat takie, co przemówiło za ich wyborem? Czy został zastosowany jakiś sposób wyznaczenia hiperparametrów? Może dobór hiperparametrów ze przy użyciu zbioru walidującego?
Podobne pytanie dotyczy tej wartości:
Czy były
"Z kodu wynika, że zbioru testującego nie było (testing = False) - dlaczego? Czy wobec braku testu wiadomo jak dobrze/źle generalizuje uzyskany model?"
W finalnej wersji, którą wrzuciłem do repozytorium na GitHubie testing = False, ale wcześniej oczywiście sprawdzałem na danych testowych jakie wartości hiperparametrów dają najlepsze rezultaty (i wtedy ustawiałem testing na True i ustawiałem odpowiedni zbiór testowy). Więc testowałem algorytm z różnymi wartościami hiperparametrów (chociaż muszę przyznać, że
@jacekKobr: Zgadza się - udział zawodnika w meczu nie jest zmienną niezależną od pozostałych. Ale w jaki sposób to się przekłada na rezultaty? W taki sposób, że algorytm nie bada tak naprawdę, jak bardzo dany piłkarz zwiększa szanse wygranej po włożeniu go do losowego zbioru innych piłkarzy, tylko bada jak dobrzy są piłkarze jeżeli grają
Algorytm po prostu pokazuje który zawodnik był na boisku gdy drużyna wygrywa. A właśnie o wygrywanie chodzi i bycie wtedy na boisku ( ͡° ͜ʖ ͡°) Jeżeli nie ma zawodnika na boisku gdy drużyna wygrywa
On był wtedy obciążeniem dla Realu a nie czołowym piłkarzem.
Kaka dużo meczy wchodził z ławy przy rozstrzygniętym wyniku a nie decydował o czymś,
Dostał szanse w meczu z Bayernem i zmarnował setę i przestrzelił karnego.
Skoro był taki to dlaczego rok później odszedł za darmo do Milanu w którym nic nie pokazał?
Te wyniki są złe i tyle.
Nie trać zapału