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. 

sobota, 17 stycznia 2015

Duża macierz podobieństwa i wizualizacja gatunków muzycznych w Polsce.

Problem

Poprzednio skorzystaliśmy z dwóch systemów bazo-danowych do przechowywania danych pobranych "na żywca" (Web Scraping) oraz przez WebApi  Przechowywanie dużych zbiorów danych na dysku pozbawia Nas problemu przeładowania pamięci podręcznej, przez co możemy sobie swobodnie wybierać podpróby, tworzyć agregaty, modyfikować dane itd.. Problemem pozostaje jednak poruszanie się w nowym środowisku zastępując część operacji, które wykonalibyśmy w R, zapytaniami w języku SQL i MongoDB (JSON). Ponieważ ani SQL ani MongoDB nie są tak rozbudowane jeżeli chodzi o manipulacją danymi, zaprezentuję R jako dobrego pomocnikia w tworzeniu zapytań. R może znacznie ułatwić workflow z zewnętrznymi bazami danych, uruchamiając całe zestawy wygenerowanych zapytań zamiast pisania kwerend jedna po drugiej.
Drugim problemem jest dalsze postępowanie z wyselekcjonowanymi danymi, które pomimo tego, że są tylko skrawkiem całej bazy nadal pozostają nadal dużym kłopotem. W pierwszej kolejności na przeszkodzie stoi przekształcanie do zbioru finalnego, co z wykorzystaniem popularnych pakietów takich jak np. dplyr czy tidyr jest nie możliwe. Często rozwiązaniem w takich przypadkach jest zejście poziom niżej i inwencja samego programisty. Na szczęście nie jest aż tak źle, bowiem społeczność R-owa dostarcza pakiety, które trochę ułatwiają pracę, cobyśmy nie musieli grzebać w C++ (przynajmniej dzisiaj nie musimy). Dzisiejszym problemem jest analiza podobieństwa pomiędzy wszystkimi tagami z last.fm przypisanymi do wszystkich wykonawców notowanych na liście Olis w całym okresie trwania. Nie komplikując sprawy czyszczeniem, liczebność zbioru tagów to 20573. Oznacza to, że taka macierz podobieństwa miałaby 423mln elementów, jak to zrobić w R? Jak potem wyciągnąć wnioski z takiej macierzy?

poniedziałek, 5 stycznia 2015

Alternatywne sposoby przechowywania dużych zbiorów danych - SQLite i MongoDB

Problem
 
Big Data Dzisiejszy temat pod bardzo popularnym hasłem kluczowym - Big Data. Big Data czyli dane których wolumen, prędkość napływania lub zróżnicowanie przekracza możliwości tradycyjnych metod analizy. Czym jest Big Data dla przeciętnego PC, a czym dla klastrów Amazona. Tajemniczy termin jest często używany przesadnie tłumacząc nieumiejętne zarządzanie danymi (też tak mówiłem). Prawdą jest jest, że przeciętny PC z asystą typowych narzędzi jest w stanie przerobić kupę danych. Nie sposób wyczerpać tak rozległego tematu jednym wpisem. Big Data stanowi problem na każdym etapie procesu analizy danych. Dzisiaj skupię się na przechowywaniu danych, a temat obliczeń poruszę przy nadarzającej się okazji.
R przechowuje dane w RAM'ie co sprawia, że operacje są wykonywane szybciej niż gdyby dane przechowywane były na dysku twardym. Przechowywanie danych w pamięci podręcznej jest jednak mocno ograniczona rozmiarem. Niejednokrotnie zdarzało się, że ładowanie danych do R kończyło się fiaskiem, zwieńczając męki komunikatem "out of memory ...". W zależności od problemu przed jakim stoimy proponuje się różne rozwiązania.