poniedziałek, 2 lutego 2015

Modele wydarzeń sportowych - historia sił drużyn serie-A w latach 1994-2014

Problem

Jak dotąd wykorzystaliśmy dwa modele ekonometryczne do oceny rzeczywistej-ukrytej siły poszczególnych drużyn włoskiej Serie-A. Dzisiaj ocenimy jak wyglądała siła wszystkich drużyn serie-A od 1994 roku. Za lepszy model uznaliśmy ten sprzed dwóch tygodni, z jednakowym dla wszystkich drużyn atutem własnego boiska. Model nie tylko wypadł lepiej w teście ale też ze względu na mniejszą liczbę parametrów łatwiej będzie nam ocenić zmiany w badanym okresie. Optymalizację modelu powtórzymy na każdym z sezonów 1994-2014 wykorzystując więcej możliwości procesora, delegując zadania do wszystkich dostępnych rdzeni.

Rozwiązanie


Tym razem przy pomocy R zaciągniemy wszystkie pliki z wynikami dla serie-A znajdujące się na stronie football-data.co.uk. W tym celu musimy stworzyć listę linków, pod którymi zlokalizowane są arkusze danych. Parsujemy kod html podstrony (htmlParse), wyodrębniamy wszystkie linki (atrybut "href" w elemencie "a") i pozostawiamy tylko te, które w nazwie mają końcówkę "I1.csv" (grep). Za pomocą funkcji read.csv, czytamy wszystkie pliki do R jako osobny element listy (lapply).

Następnie do każdego data.frame zapakowanego w liście dodajemy odpowiedni numer sezonu (sezon.no) wyodrębniony powyżej z linków, dodajemy ID dla każdego meczu w sezonie, formatujemy datę (strptime), dodajemy zmienną y wg. takiego samego schematu jak poprzednimi razy ("h" dla zwycięstwa gospodarza, "t"-remis, "a"-zwycięstwo gościa). Pozostawiamy w każdym ze zbiorów tylko sześć zmiennych (select) i filtrujemy obserwacje z błędami (filter). Przeczyszczone dane reorganizujemy w taki sam sposób jak poczyniliśmy w poprzednim wpisie, tworząc dla każdego z sezonów odpowiednio macierz H, A (zero jedynkowe macierze określające, która drużyna gra u siebie, a która na wyjeździe), wektor y (wektor wyniku "h,t,a"), wektor parametrów beta oraz dodatkowo numer sezonu. Wszystko trzymamy w liście, w której każdy z elementów to oddzielny sezon. W Każdym z oddzielnych sezonów mamy listę obiektów H, A, beta, y oraz sezon.

Dla każdego z sezonów estymujemy osobno model, tym razem dokonując obliczeń równolegle na wszystkich dostępnych rdzeniach procesora. Do obliczeń równoległych potrzebny nam będzie pakiet "doParallel" oraz "foreach". Żeby uruchomić pozostałe rdzenie należy najpierw zarejestrować klastry. Funkcja icount jest zmodyfikowanym iteratorem, który przyśpiesza wykonywanie pętli w R. Następnie przy pomocy pętli "foreach" i specjalnego operatora %dopar% uruchamiamy równoległy proces w pętli. Dzięki temu na raz możemy estymować tyle modeli ile zarejestrowaliśmy wątków. W moim czterordzeniowym przypadku cały proces wykonany został dwukrotnie szybciej. Zatem warto przećwiczyć sobie poniższe operacje albo zapamiętać zawczasu o takich możliwościach.

W wyniku iteracji otrzymaliśmy listę parametrów (sił drużyn i atutu własnego boiska) dla każdego z sezonów od 1994 roku. Możemy teraz prześledzić jak kształtowała się jakość poszczególnych drużyn na przestrzeni lat. Przeszło mi przez myśl np. porównanie Interu z czasów świetności (2006 rok) z zeszłorocznym Juventusem i na podstawie ich siły zaprognozować hipotetyczny wynik między tymi dwiema drużynami. Należy jednak zachować szczególną ostrożność w takiej sytuacji. Proszę zwrócić uwagę, że średnia siły drużyn w danym sezonie jest zawsze równa jedności, dlatego porównywanie okres do okresu wiązałoby się z przyjęciem założenia, że średnia jakość drużyn w serie-A nie ulega zmianie. Czy rzeczywiście tak było? Czy Serie-A w 2006 roku było na tym samym poziomie co teraz? Na to pytanie nie odpowiemy, ponieważ każdy z modeli jest szacowany niezależnie i pod uwagę brane są jedynie informacje z danego sezonu.
Nic nie stoi na przeszkodzie do zaprezentowania parametrów w formie graficznej. Ze względu na spory rozmiar kodu kreującego wizualizację musiałem rozbić dzisiejszy wpis na dwie części. Zapraszam do zapoznania się z wizualizacją w drugiej części artykułu.

1 komentarz:

  1. Bardzo ciekawy i rzeczowy wpis. Czy byłaby szansa na poruszenie tematu szkoleń ISTQB z poziomu podstawowego?

    OdpowiedzUsuń