niedziela, 19 lipca 2015

Podstawowe narzędzia wspomagające pracę w Rstudio

Na rynku znaleźć możemy wiele aplikacji edytorskich w których zaimplementowano silnik R. Szukanie najlepszego IDE spośród alternatyw jest dosyć proste, bowiem najbardziej popularne RStudio okazuje się być najlepsze i najprostsze w użyciu. Ja sam w R nie piszę zbyt długo, a moje poszukiwania za najlepszym edytorem często kończyły się zawodem po kilku tygodniach użytkowania aplikacji (Emacs z silnikiem R, Eclipse z pluginem StatET i inne mniej znane). Co jest przekonywującego w RStudio? Jest zbudowany tylko dla R z domyślną konfiguracją zawierającą wszystko co potrzebuje mistrz danych. Nie musimy grzebać w ustawieniach żeby uruchomić widok zmiennych, odczytać coś w oknie pomocy, czy zobaczyć jakie pakiety mamy do dyspozycji, wszystko jest nam dane na starcie. Na tym się nie kończą możliwości RStudio, który oferuje dodatkowo kilka pomocnych tricków, a co najbardziej zrewolucjonizowało moją pracę to edycja w trybie vim.
Na chwilę obecną Rstudio jest dla Mnie kompletnym narzędziem, które spełnia prawie wszystkie widzi misie. Poniżej wypisałem podstawowe funkcjonalności, które w pewnej części mogą być wręcz trywialne, zapewniam jednak, że część może okazać się miłym zaskoczeniem.

niedziela, 26 kwietnia 2015

7 kroków do usprawnienia pracy w R

Problem

Codzienna praca analityka z pewnością wygląda różnie. Są miejsca, w których spędza się długi czas nad jednym projektem, gdzie dużą wagę przykłada się do każdego detalu jak również są miejsca, w których wykonuje się kilka zadań dziennie wspomagając bieżące funkcjonowanie biznesu. Obojętnie, w której z tych skrajnych sytuacji zawsze trzeba mieć wszystko dobrze poukładane. Warto wyrobić sobie rutynę organizowania systemu plików, dokumentacji, sposobu nazewnictwa plików, funkcji, zmiennych tak aby zawsze nie było problemu w poruszaniu się po naszym warsztacie analitycznym. Skrypty pisane przez nas powinny być dokumentem rejestrującym kolejno wszystkie czynności popełnione w trakcie realizacji projektu. To wymaga pewnych umiejętności i nauki wielu 'niepotrzebnych' technik aby zaprogramować każdy etap generowania raportu od plików wejściowych do plików z wynikami i wizualizacjami. Takie podejście nosi miano reproducible research (jaki jest polski odpowiednik? Odtwarzalne analizy?). Reproducible research jest niezwykle cenione w środowisku analitycznym, gdzie proces badawczy musi być rzetelny i wiarygodny dla osób, które na ich podstawie będą podejmować decyzje.

środa, 11 lutego 2015

Modelowanie liczby bramek w Serie-A - rozkład Poissona i rozkład Skellam

Problem

Wszystkie dotychczas przedstawione sposoby modelowania wyników wydarzeń sportowych oparte były na regresji logistycznej. Modelowaliśmy siłę drużyn, także rozróżniając ich jakość w zależności od tego czy dana drużyna była gospodarzem. Dzisiejszy wpis zakłada inny sposób mierzenia jakości drużyn, w którym bierzemy pod uwagę liczbę strzelonych i straconych bramek. Liczba bramek jaką strzela drużyna i-ta jest uzależniona od siły ofensywnej drużyny $\alpha_i$, słabości defensywny przeciwnika $\beta_j$, ewentualnego wsparcia kibiców $\gamma$ oraz innych czynników, których nie znamy albo za krótko zastanawialiśmy się nad problemem żeby zjawisko do końca zrozumieć. Przy modelowaniu liczby bramek musimy założyć właściwy rozkład, który byłby dyskretny i nieujemny - rozkład Poissona. Rozkładem Poissona opisujemy intensywność badanych zdarzeń w określonej jednostce czasu. W naszym przypadku intensywnością jest liczba bramek strzelonych przez gospodarze $X_{i,j}$ oraz liczba bramek strzelonych przez gościa $Y_{i,j}$.

$X_{i,j} \sim Poisson(\alpha_i \beta_j \gamma)$
$Y_{i,j} \sim Poisson(\alpha_j \beta_i)$

Powyższy jest modelem bazowym, zaproponowanym przez Maher (1982), w którym liczba strzelonych i liczba straconych bramek przez gospodarza są niezależne od siebie i podążają rozkładem Poissona. Warto mieć na uwadze dodatkowe założenia $\alpha_i, \beta_i, \gamma > 0, \forall_i$.
Tak to robi R.

poniedziałek, 2 lutego 2015

Wizualizacja sił drużyn serie-A w latach 1994-2014 - d3.js w akcji.

Problem

Doszliśmy do momentu, w którym odstawiamy R na bok, klepiąc przyjacielsko po ramieniu mówiąc "zrobiłeś wszystko co w Twojej mocy, dziękuję". Pakiety do wizualizacji danych takie jak ggplot2 czy lattice są świetnym asystentem w trakcie pracy z danymi, pozwalają na szybki podgląd w trakcie wyjaśniania jakiegoś zjawiska. Statyczność, brak możliwości interakcji, ograniczone możliwości animacyjne raczej ograniczają R do wizualizacji na użytek własny lub prezentacje na mniejszą skalę. Być może wspomniana "wizualizacja na mniejszą skalę" jest dla wielu wystarczająca, bowiem seria dostępnych pakietów robi dobre wrażenie - ggplot2, lattice, plotly, shiny, animation, iplot, svgGrid i coś co mi podoba się najbardziej, czyli połączenie slidify i rCharts. Prawdopodobnie nie wymieniłem wszystkich pakietów i być może są gdzieś dobrze skrojone biblioteki pozwalające na dosyć dużą swobodę w kształtowaniu formy. Wątpię jednak żeby była biblioteka dająca pełną swobodę. Ja sam jestem zwolennikiem rozszerzania horyzontów i uważam, że lepiej nawet dla czystego sportu nauczyć się JavaScript, HTML5 oraz CSS3 i tworzyć od podstaw szalone wizualizacje, niż ograniczać się do granic narzuconych przez biblioteki R. Wpis jest pewną propozycją, próbą zainteresowania, a nie koniecznie wskazaniem bezwarunkowego rozwiązania. Zapewniam również, że zestaw R-owych pakietów, które wymieniłem wystarczą mistrzom danych do sprawnego prezentowania wyników analiz czy nawet schludnego dziennikarstwa.
Zaletą JavaScript jest to, że jest językiem przeglądarek internetowych, oznacza to, że każdy może otworzyć Naszą wizualizację nawet na urządzeniach mobilnych. Jak dotąd nie zanosi się żeby JavaScript miał stracić monopol na przeglądarki. Z pewnością JS to technologia, która będzie powszechna jeszcze przez wiele lat, co więc stoi na przeszkodzie żeby przeznaczyć kilka dni na naukę nowego środowiska? 
JavaScript nie koniecznie można uznać za trudny język, jest on jednak zupełnie inaczej skonstruowany niż R i trzeba po prostu przez to przebrnąć. Do rozpoczęcia programowania w JS wystarczy notatnik i przeglądarka np. z dodatkiem firebug. Być może duża część z Was już kiedyś pisała strony w HTML i CSS, dodając czasem jakieś drobne funkcjonalności używając JavaScript (np. "onclick"). Spora część z pewnością zjadła zęby na WebScrapingu . Być może ktoś już korzystał z jQuery, jeżeli tak - nie ma przeszkód żeby użyć d3.js i sprawić żeby Nasza usługa cieszyła oko odbiorcy.

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.

czwartek, 29 stycznia 2015

Modele wydarzeń sportowych - Bieżący ranking drużyn serie-A (cz. 2)

Problem

W poprzednim tygodniu zaprezentowałem rozszerzony model BT z parametrami siły poszczególnych drużyn i dodatkowym stałym parametrem dla wszystkich drużyn promującym gospodarzy. Prognoza wyznaczona na weekend okazała się trafiona w 60%. Wynik prognozy poniżej oczekiwań, bowiem zakładaliśmy przynajmniej 70% prawdopodobieństwo poprawnego wyniku. Oczywiście przy prawdopodobieństwie p=70% sześć sukcesów na dziesięć prób to wciąż bardzo prawdopodobne powołując się na rozkład dwumianowy. Siedem sukcesów to tylko średnia w dziesięciu próbach - czasem trafimy siedem, czasem więcej, czasem mniej.

Abstrahując od rozkładów prawdopodobieństwa, prognozowana kolejka serie A wskazała, że być może warto się zastanowić nad Naszym modelem i poprawić ewentualne błędy. Zastanówmy się jeszcze raz nad założeniami - czy stały parametr reprezentujący atut własnego boiska rzeczywiście jest właściwy? Czy w ogóle cały model jest dobrze dopasowany? Porównajmy tabelę dla meczów u siebie i na wyjeździe - zauważamy teraz, że niektóre drużyny mają zupełnie różne lokaty w tabelach home i away. Zakładając, że atut własnego boiska jest jednakowy dla wszystkich to i ranking powinien być mniej więcej taki sam - a nie jest. Dlatego proponuję modyfikację poprzedniego modelu, zastępując go poniższym:

$p_i=\frac{e^{\beta_{i_{home}}}}{e^{\beta_{i_{home}}}+e^{\beta_{j_{away}}}+e^{\nu \frac{1}{2} (\beta_{i_{home}}+\beta_{j_{away}})}}$

czwartek, 22 stycznia 2015

Modele wydarzeń sportowych. Bieżący ranking drużyn Serie-A

Po krótkim wprowadzeniu do pozyskiwania i przechowywania danych czas przejść do analiz. Tematy muzyczne porzucam na bliżej nieokreślony czas by zająć Czytelników tym czym interesuję się od dłuższego czasu i z czym część z Was może Mnie kojarzyć - modelowanie preferencji i wyborów oraz modelowanie i prognozowanie wydarzeń sportowych.
Z punktu widzenia ekonometryka modelowanie wydarzeń sportowych oraz preferencji i wyborów mają ze sobą wiele wspólnego. W obydwu dziedzinach modeluje się najczęściej zdarzenia dyskretne, będące wynikiem konkurowania ze sobą określonych jednostek. Np. w piłce nożnej konkurują ze sobą dwie drużyny, gdzie zdarzeniem jest wynik w postaci wygranej drużyny A, remisu, bądź wygranej drużyny B. W teorii preferencji posłużę się książkowym (Greene) przykładem dotyczącym wyboru rodzaju transportu do podróży, gdzie konkurentami są samochód, samolot, pociąg i autobus. Celem Naszych poszukiwań jest ukryty zestaw parametrów reprezentujących jakość konkurujących ze sobą jednostek. Nie twierdzę jednak, że modelowanie wydarzeń sportowych niczym nie różni się od modelowania preferencji wyborów. Sport ma to do siebie, że jest w szczególny sposób zorganizowany, gdzie system rozgrywek z góry determinuje konfigurację próby, tym samym wymuszając stosowanie odpowiednich metod, a tych literatura naukowa dostarcza bardzo dużo.
Dzisiaj konkretnie, skupimy się na rozegranych dotychczas meczach Serie A w sezonie 2014/15, w celu wyłonienia statystycznej jakości drużyn uczestniczących w rozgrywkach.