Loading web-font TeX/Math/Italic

ś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.

Rozwiązanie

Pomijam tym razem pierwszą część kody, która wiele nie różni się od poprzednich. Ponownie zaciągnięto dane z www.football-data.co.uk i po kilku operacjach doprowadzamy zbiór do takiej formy:

idgoalsatakobronahome
10ChievoJuventus1
11JuventusChievo0
22RomaFiorentina1
20FiorentinaRoma0
30AtalantaVerona1
30VeronaAtalanta0

Dane w swojej formie odpowiadają formule, którą zamieściłem we wstępie, gdzie liczba goli w jednym meczu (X_{i,j} i Y_{i,j}) to dwa rzędy z zbiorze. W związku z tym, że X_{i,j} i Y_{i,j} są od siebie niezależne przy szacowaniu są oddzielnymi obserwacjami. Do analizy użyjemy uogólnionego modelu liniowego z rozkładem Poissona (GLM). Anova zastosowana na modelu glm jest testem LR, który już opisywałem wcześniej. Szacujemy model i porządkujemy parametry wrzucając je do jednego data.frame. (Tak nawiasem pisząc - I <3 maggritr.)

Do prognozy wyników 23. kolejki Serie-A użyjemy wbudowanej funkcji predict(). Dane, na których dokonamy prognozy powinny mieć taką samą formę jak te, na których model szacowano. Wynik funkcji predict to logarytm intensywności rozkładu Poissona dla każdego X_{i,j} Y_{j,i} prognozowanych meczów. Intensywność rozkładu Poissona to inaczej średnia liczba bramek strzelonych przez daną drużynę w danym meczu. Dla każdego z prognozowanych meczów intensywności (h i a) wyglądają następująco.

Na podstawie intensywności możemy określić np. prawodpodobieństwo strzelenia określonej liczby bramek przez daną drużynę w danym meczu (dpois). Ważniejsze być może będzie dla nas rozstrzygnięcie spotkania czyli różnica w strzelonych golach. Ponieważ rozstrzygnięcie jest różnicą pomiędzy dwoma rozkładami Poissona, rozkład wyniku będzie miał postać rozkładu Skellama. Skorzystamy z funkcji dskellam() w pakiecie VGAM do określenia prawdopodobieństwa danej różnicy bramek. Ponieważ zwycięstwo gospodarza to różnica X_{i,j} - Y_{j,i} \geqslant 1 musimy zsumować gęstości dla każdego z możliwych wyników, w którym wygrywa gospodarz (od 1 do 30 powinno wystarczyć). Podobnie robimy dla porażek i dla zwycięstw.


idhomeawayhagosc_premis_pgosp_p
1SassuoloFiorentina1,094940721,34195772942,36%27,15%30,49%
2PalermoNapoli1,6609033452,0795597347,76%21,05%31,19%
3MilanEmpoli1,4685060370,81687463520,89%26,56%52,55%
4AtalantaInter0,9523213091,29065764344,27%28,26%27,47%
5GenoaVerona1,9908459190,85072298215,23%20,77%64,00%
6RomaParma2,9556156590,5016450623,82%9,87%86,31%
7TorinoCagliari1,8142613850,96842687619,88%22,87%57,24%
8UdineseLazio1,2371764841,45485357242,17%25,68%32,15%
9ChievoSampdoria0,6692198560,99473986642,22%33,81%23,97%
10CesenaJuventus0,3825026842,74271236586,40%10,36%3,24%


Tak prezentują się parametry siły dla poszczególnych zespołów.


link do pełnego skryptu

Literatura:
Maher, M.J. (1982) Modelling association football scores.Statistica Neerlandica36, 109-118

Brak komentarzy:

Prześlij komentarz