1 Úvod

V tejto práci pracujeme s datasetom hotel_bookings.csv. Dataset obsahuje informácie týkajúce sa hotelových rezervácií v sledovaných hoteloch v časovom období rokov 2015 až 2017. Na základe zozbieraných dát vieme sledovať a odhadnúť správanie zákazníka.

Ako?

Dobrá otázka.

Predstavme si napríklad, že máme zákazníka, ktorý v minulosti zrušil veľa rezervácií. Zvyšuje to pravdepodobnosť, že zruší aj túto? Alebo, hovorí nám niečo údaj o zrušených minulých rezerváciách o čase, ako vopred si zákazník pred pobytom ubytovanie rezervuje? Existuje možno nejaký vzťah medzi ročným obdobím a dĺžkou rezervačného obdobia?

Analýza takýchto údajov môže hotely lepšie pripraviť na dopyt zákazníkov. Vedieť odhadnúť správanie zákazníka vytvára pre hotely príležitosť robiť ekonomicky výhodnejšie rozhodnutia a umožňuje strategickejšie plánovanie.

2 Naše dáta

Databáza hotel_bookings.csv obsahuje veľké množstvo údajov. Zo sledovaných kategórií:

##  [1] "hotel"                          "is_canceled"                   
##  [3] "lead_time"                      "arrival_date_year"             
##  [5] "arrival_date_month"             "arrival_date_week_number"      
##  [7] "arrival_date_day_of_month"      "stays_in_weekend_nights"       
##  [9] "stays_in_week_nights"           "adults"                        
## [11] "children"                       "babies"                        
## [13] "meal"                           "country"                       
## [15] "market_segment"                 "distribution_channel"          
## [17] "is_repeated_guest"              "previous_cancellations"        
## [19] "previous_bookings_not_canceled" "reserved_room_type"            
## [21] "assigned_room_type"             "booking_changes"               
## [23] "deposit_type"                   "agent"                         
## [25] "company"                        "days_in_waiting_list"          
## [27] "customer_type"                  "adr"                           
## [29] "required_car_parking_spaces"    "total_of_special_requests"     
## [31] "reservation_status"             "reservation_status_date"

sa v našej práci budeme zameriavať len na tie najvýraznejšie, teda na kategórie, kde nám logicky dávajú zmysel, že by mohli mať o správaní zákazníka výpovednú hodnotu. Budeme teda hlavne pracovať s nejakou kombináciou údajov:

## [1] "is_canceled"                    "lead_time"                     
## [3] "arrival_date_week_number"       "arrival_date_day_of_month"     
## [5] "stays_in_weekend_nights"        "stays_in_week_nights"          
## [7] "previous_cancellations"         "previous_bookings_not_canceled"

kde údaje vyzerajú asi takto:

Tieto údaje hovoria o tom, či bola rezervácia zrušená (is_canceled), ako skoro bola rezervácia spravená pred pobytom (lead_time), v ktorý týždeň v roku a deň v mesiaci sa zákazník rozhodol svoj v hoteli ubytovať (arrival_date_week_number a arrival_date_day_of_month), koľko pracovných a víkendových dní v hoteli strávi (stays_in_week_nights a stays_in_weekend_nights), a počet predošlých zrušených a nezrušených rezervácií (previous_cancellations a previous_bookings_not_canceled).

2.1 Základné štatistiky

Pre lepší nadhľad nad dátami si môžeme spraviť základnú deskriptívnu štatistiku našich údajov.

Dokopy v pôvodnej databáze pracujeme s informáciami o 119390 rezerváciach. 44224 rezervácií z toho bolo zrušených, zatiaľ čo zvyšných 75166 bolo naplnených.

Table 2.1: Základné popisné štatistiky
Statistic lead_time arrival_date_week_number arrival_date_day_of_month stays_in_weekend_nights stays_in_week_nights previous_cancellations previous_bookings_not_canceled
Min. 0.0000 1.00000 1.00000 0.0000000 0.000000 0.0000000 0.0000000
1st Qu. 18.0000 16.00000 8.00000 0.0000000 1.000000 0.0000000 0.0000000
Median 69.0000 28.00000 16.00000 1.0000000 2.000000 0.0000000 0.0000000
Mean 104.0114 27.16517 15.79824 0.9275986 2.500301 0.0871178 0.1370969
3rd Qu. 160.0000 38.00000 23.00000 2.0000000 3.000000 0.0000000 0.0000000
Max. 737.0000 53.00000 31.00000 19.0000000 50.000000 26.0000000 72.0000000

Máme zozbieraných dostatočne veľa údajov na to, aby sme mohli urobiť relatívne všeobecnú štatistiku, a teda, že

  • v priemere si človek robí rezerváciu cca 104 dní pred pobytom

  • hotely majú najvyťaženejší 27.-28. týždeň v roku, čo vychádza na prvú polovicu júla

  • ľudia najčastejšie v hoteli ostávajú na 1 víkendovú a 2 pracovné noci

  • menej ako 1/4 zákazníkov v databáze má predošlé rezervácie alebo predošlé zrušené rezervácie.

2.1.1 Testy

Čo nás ešte zaujíma, je, či je nejaký výrazný rozdiel v dátach pre zrušené a pre nezrušené rezervácie. Náš hlavný predpoklad by v tomto prípade bol ten, ktorý sa snažíme vyvrátiť, a teda, že údaje nemajú o tom, či bude rezervácia zrušená, alebo nie, výpovednú hodnotu. Teda by sa dalo povedať, že naše hypotézy budú pre štatistické testy vyzerať takto:

H\(_0\) : Medzi zrušenými a nezrušenými rezerváciami neexistuje štatisticky významný rozdiel v analyzovaných dátach, a teda všeobecné štatistiky dát nemajú výpovednú hodnotu o zrušení rezervácie.

H\(_1\) : Medzi zrušenými a nezrušenými rezerváciami existuje štatisticky významný rozdiel v analyzovaných dátach, a teda všeobecné štatistiky dát majú výpovednú hodnotu o zrušení rezervácie.

2.1.2 Hypotéza 1

Hypotézy budeme testovať pomocou klasického t-testu. Zameriame sa na hodnoty premennej lead_time, kde teda H\(_0\) bude hovoriť, že medzi hodnotami času medzi spravením rezervácie a pobytom (teda lead_time) nie je štatisticky významný rozdiel pre kategórie zrušenej a nezrušenej rezervácie.

## 
##  Welch Two Sample t-test
## 
## data:  lead_time by is_canceled
## t = -99.075, df = 74936, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
##  -66.14733 -63.58092
## sample estimates:
## mean in group 0 mean in group 1 
##        79.98469       144.84882

Z výsledku testu vidíme, že hypotézu H\(_0\) môžeme v tomto prípade zamietnuť. Test nám ukazuje štatisticky významný rozdiel v priemeroch hodnôt lead_time.

  • priemerný lead_time pre kategóriu nezrušených rezervácií je cca 80 dní

  • priemerný lead_time pre kategóriu zrušených rezervácií je cca 145 dní

2.1.3 Hypozéza 2

Overíme si ešte jednu hypotézu H\(_0\) pomocou t-testu, a to, že nie je štatisticky významný rozdiel medzi počtami predošlých zrušených rezervácií pre momentálnu zrušenú a nezrušenú rezerváciu.

## 
##  Welch Two Sample t-test
## 
## data:  previous_cancellations by is_canceled
## t = -30.026, df = 46409, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
##  -0.2051264 -0.1799870
## sample estimates:
## mean in group 0 mean in group 1 
##      0.01579171      0.20834841

Po zbehnutí t-testu vieme konštatovať, že existuje štatisticky významný rozdiel medzi týmito hodnotami, a teda hypotézu H\(_0\) zamietame.

  • priemerný počet predošlých zrušených rezervácií pre nezrušenú rezerváciu je 0.015

  • priemerný počet predošlých zrušených rezervácií pre zrušenú rezerváciu je 0.2

Toto zároveň potvrdzuje logickú úvahu, že ľudia s históriou rušenia rezervácií sú viac náchylní zrušiť aj momentálnu rezerváciu.

2.2 Grafy

Vráťme sa znova na chvíľu k údajom z tabuľky. Pri niektorých týchto údajoch vidíme zaujímavých outlierov. Na lepšie zobrazenie, ako extrémni títo outlieri sú, alebo ako častí sú, si zostavíme boxploty. Konkrétne boxploty údajov lead_time, stays_in_weekend_nights, stays_in_week_nights a previous_cancellations.

## [1] 4

Boxploty krásne vykresľujú stav jednotlivých premenných. Najviac výrazné sú outliery tam, kde ľudia príliš často rušia rezervácie, alebo využívajú hotel namiesto prenájmu apartmánu na dlhú dobu.

Môžeme sa pozrieť, či je nejaký viditeľný vzťah medzi hodnotami, a primárne outliermi údajov lead_time a previous_cancellations.

Z grafu vidíme, že rezervácie robené najviac vopred spadajú do kategórie zákazníkov s 0 predošlými zrušenými rezerváciami. Najviac vopred rezervované pobyty sú teda robené precíznymi zákazníkmi, ktorí dôkladne plánujú a rezervácie nerušia, alebo zákazníkmi, ktorí nezvyknú cestovať, a teda vo všeobecnosti nemajú predošlé zrušené/nezrušené rezervácie.

Najviac rušené rezervácie sú rezervácie robené cca 150-300 dní vopred.

3 Výskumné hypotézy

V tejto práci sa budeme ďalej snažiť vytvoriť model, ktorý by nám nejakým spôsobom spoľahlivo vysvetľoval správanie údajov, a teda vedel predpovedať správanie údajov v budúcnosti. Ako vysvetľovanú premennú tohoto modelu si určíme premennú lead_time.

lead_time je počet dní medzi spravením rezervácie a začiatkom pobytu. Vystavanie modelu predpovedajúceho lead_time by hotelovému priemyslu mohlo pomôcť správne nastaveniť ceny hotelových izieb v rôznych obdobiach roka. Vedeli by odhadnúť, koľko vopred si ich zákazníci robia rezervácie, a spolu s vedomím, aké majú zákazníci tendencie rušiť rezervácie a kedy im vrcholí sezóna, by mohli zefektívniť veškerú svoju prípravu.

lead_time budeme teda modelovať podľa premenných arrival_date_week_number, stays_in_weekend_nights, stays_in_week_nights, previous_cancellations a previous_bookings_not_canceled.

\[ lead\_time_i = \beta_0 + \beta_1 arrival\_date\_week\_number_i + \beta_2 stays\_in\_weekend\_nights_i + \beta_3 stays\_in\_week\_nights_i + \beta_4 previous\_cancellations_i + \beta_5 previous\_bookings\_not\_canceled_i + u_i \]

Tieto premenné sme vybrali intuitívne. Každú z nich vieme nejako logicky odôvodniť, prečo by mohla alebo mala mať vplyv na lead_time.

  • Na letné dovolenky ľudia zvyknú plánovať detailnejšie, ako na spontánne výletu uprostred roka, takže sme začlenili arrival_date_week_number.

  • Počas víkendov môže viac ľudí cestovať. Cestovanie počas týždňa je náročnejšie a vyžaduje si dôkladnejšiu prípravu (ako napríklad zariadenie si dovolenky v robote). Preto sme do modelu pridali stays_in_weekend_nights a stays_in_week_nights.

  • Predošlé správanie zákazníkov ohľadom rušenia rezervácií by teoreticky malo mať výpovednú hodnotu o tom, či si svoje výlety plánujú detailne, alebo robia nepremyslené rezervácie na poslednú chvíľu, ktoré potom rušia. Preto sme do modelu pridali previous_cancellations a previous_bookings_not_canceled.

tak sa teda dostávame k:

Hypotéza:

Predpokladáme štatisticky významné vzťahy \(\beta_1 > 0\), \(\beta_2 < 0\), \(\beta_3 > 0\), \(\beta_4 > 0\), \(\beta_5 < 0\), ktoré budeme testovať s pomocou t-testov štatistickej významnosti regresných koeficientov.

4 Základný model

Model spočiatku odhadneme v jeho základnom tvare, pričom

## 
## Call:
## lm(formula = lead_time ~ +1 + arrival_date_week_number + stays_in_weekend_nights + 
##     stays_in_week_nights + previous_cancellations + previous_bookings_not_canceled, 
##     data = udaje5)
## 
## Coefficients:
##                    (Intercept)        arrival_date_week_number  
##                        55.6129                          0.9372  
##        stays_in_weekend_nights            stays_in_week_nights  
##                         0.1169                          9.0130  
##         previous_cancellations  previous_bookings_not_canceled  
##                        12.1448                         -5.5534

V našom odhade koeficientov sme mali pravdu pri \(\beta_1\), \(\beta_3\), \(\beta_4\) a \(\beta_5\).

\(\beta_2\) má, na rozdiel od nášho odhadu, kladný vplyv na model, ale veľmi nevýrazne vplyvný oproti ostatným koeficientom. Pre tento model bude teda pravdepodobne najmenej relevantný údaj stays_in_weekend_nights .

Table 4.1: Regresné koeficienty modelu počtu dní medzi rezerváciou a začiatkom pobytu
Odhady koeficientov
term estimate std.error statistic p.value
(Intercept) 55.6129 0.7808 71.2249 0.0000
arrival_date_week_number 0.9372 0.0221 42.3786 0.0000
stays_in_weekend_nights 0.1169 0.3474 0.3367 0.7364
stays_in_week_nights 9.0130 0.1818 49.5728 0.0000
previous_cancellations 12.1448 0.3604 33.6951 0.0000
previous_bookings_not_canceled -5.5534 0.2034 -27.3023 0.0000

V tejto tabuľke vidíme prehľadne zobrazené koeficienty jednotlivých premenných a ich “významnosť”.

  • arrival_date_week_number
    • Koeficient tejto premennej je kladný a štatisticky významný. To znamená, že s postupujúcim týždňom v roku sa rezervácie realizujú skôr vopred, teda počet dní medzi rezerváciou a pobytom sa mierne zvyšuje. Inými slovami, rezervácie na neskoršie obdobia v roku bývajú plánované s väčším predstihom.
  • stays_in_weekend_nights
    • Táto premenná nie je štatisticky významná (p-hodnota > 0,05), čo naznačuje, že počet nocí strávených počas víkendu nemá preukázateľný vplyv na to, ako dlho vopred je rezervácia vytvorená.
  • stays_in_week_nights
    • Koeficient je kladný a štatisticky významný. Vyšší počet nocí počas pracovných dní je spojený s dlhším časovým predstihom rezervácie, čo naznačuje, že dlhšie pobyty sú spravidla plánované skôr než krátkodobé pobyty.
  • previous_cancellations
    • Premenná má výrazný kladný a štatisticky významný vplyv. Hostia, ktorí v minulosti častejšie rušili rezervácie, majú tendenciu vytvárať nové rezervácie s väčším časovým odstupom od začiatku pobytu.
  • previous_bookings_not_canceled
    • Táto premenná má záporný a štatisticky významný koeficient. Vyšší počet predchádzajúcich nezrušených rezervácií je spojený s kratším časovým odstupom medzi rezerváciou a pobytom. To môže naznačovať, že skúsení a „spoľahliví“ zákazníci rezervujú pobyty bližšie k dátumu nástupu.
Table 4.2: Kvalita vyrovania modelu počtu dní medzi rezerváciou a začiatkom pobytu
Statistic Value
N (Observations) 119390.0000
R-squared 0.0559
Adjusted R-squared 0.0559
F-statistic 1413.6256
F-test p-value 0.0000
AIC 1447432.3579
Residual Std. Error 103.8357

Hodnota \(R^2\) je dosť nízka, a teda model nevysvetľuje variabilitu lead_time dostatočne spoľahlivo. Rovnako aj Ajusted \(R^2\) má nízke hodnoty. Taktiež hodnota odchýlky je príliš veľká vzhľadom na to, že hodnoty lead_time sa v našich dátach pohybujú v rozmedzí cca 0-700 dní.

4.1 Model 1

V ďalšom pokračovaní tejto práce budeme teda hľadať lepší, spoľahlivejší model. Vytvoríme si taký, ktorý nebude obsahovať stays_in_weekend_nights.

\[ lead\_time_i = \beta_0 + \beta_1 arrival\_date\_week\_number_i + \beta_2 stays\_in\_week\_nights_i + \beta_3 previous\_cancellations_i + \beta_4 previous\_bookings\_not\_canceled_i + u_i \]

## 
## Call:
## lm(formula = lead_time ~ +1 + arrival_date_week_number + stays_in_week_nights + 
##     previous_cancellations + previous_bookings_not_canceled, 
##     data = udaje5)
## 
## Coefficients:
##                    (Intercept)        arrival_date_week_number  
##                        55.6431                          0.9372  
##           stays_in_week_nights          previous_cancellations  
##                         9.0434                         12.1443  
## previous_bookings_not_canceled  
##                        -5.5548
Table 4.3: Regresné koeficienty modelu počtu dní medzi rezerváciou a začiatkom pobytu 2
Odhady koeficientov
term estimate std.error statistic p.value
(Intercept) 55.6431 0.7757 71.7369 0
arrival_date_week_number 0.9372 0.0221 42.3857 0
stays_in_week_nights 9.0434 0.1577 57.3509 0
previous_cancellations 12.1443 0.3604 33.6942 0
previous_bookings_not_canceled -5.5548 0.2034 -27.3147 0
Table 4.4: Kvalita vyrovania modelu počtu dní medzi rezerváciou a začiatkom pobytu
Statistic Value
N (Observations) 119390.0000
R-squared 0.0559
Adjusted R-squared 0.0559
F-statistic 1767.0168
F-test p-value 0.0000
AIC 1447430.4712
Residual Std. Error 103.8353

Z tabuliek pre tento model vidíme, že hoci sú všetky naše vysvetľujúce premenné pre model štatisticky významné, presnosť a spoľahlivosť modelu sme vôbec nezlepšili.

4.1.1 Interpretácie reziduí

Na nasledovných obrázkoch sa pozrieme na správanie sa reziduí v našom aktuálnom modeli.

Diagnostické grafy regresného modelu

Figure 4.1: Diagnostické grafy regresného modelu

Z grafu Residuals vs Fitted je vidieť, že rezíduá nie sú náhodne rozptýlené okolo nuly a vytvárajú určitý tvar, čo naznačuje, že lineárny model nemusí úplne zachytávať vzťah medzi vysvetľujúcimi premennými a závislou premennou.

Q-Q graf rezíduí ukazuje výrazné odchýlky od diagonály, najmä v okrajových častiach rozdelenia. To naznačuje, že rezíduá nemajú normálne rozdelenie, čo je však pri veľkom počte pozorovaní očakávané, a my máme naozaj veľa pozorovaní.

Zo Scale-Location grafu je zrejmé, že rozptyl rezíduí sa s rastúcimi predikovanými hodnotami mení, čo poukazuje na prítomnosť heteroskedasticity v modeli.

Graf Residuals vs Leverage naznačuje, že v dátach sa nachádzajú niektoré pozorovania s vyššou pákou, avšak žiadne z nich výrazne neprekračuje hranice Cookovej vzdialenosti, a preto nepredstavujú zásadný problém pre stabilitu modelu.

4.2 Outlier test

Aj v grafoch sme videli, že naše údaje majú výrazných outlierov. Overíme si teda, či by mohli tieto dáta výrazne vplývať na výsledky nášho modelu.

##       rstudent unadjusted p-value Bonferroni p
## 2     6.319290         2.6369e-10   3.1482e-05
## 65232 5.318021         1.0509e-07   1.2547e-02
## 65236 5.318021         1.0509e-07   1.2547e-02
## 65033 5.259615         1.4461e-07   1.7264e-02
## 65035 5.259615         1.4461e-07   1.7264e-02
## 65238 5.230884         1.6899e-07   2.0175e-02
## 65239 5.230884         1.6899e-07   2.0175e-02
## 65240 5.230884         1.6899e-07   2.0175e-02
## 65241 5.230884         1.6899e-07   2.0175e-02
## 65242 5.230884         1.6899e-07   2.0175e-02

Outlier test identifikoval niekoľko pozorovaní s extrémnymi hodnotami rezíduí, ktoré sa štatisticky významne odlišujú od zvyšku dát. Aj po Bonferroniho korekcii zostávajú tieto pozorovania významné, čo naznačuje prítomnosť extrémnych hodnôt v dátach. O týchto dátach sme intuitívne už vedeli, ale teraz to máme aj štatisticky potvrdené.

4.3 Model 2 - Logaritmický model

Kvôli chybám v normalite reziduí a aj outlierom vytvoríme model, kde sa pokúsime eliminovať odľahlé hodnoty. Použijeme transformáciu našich údajov \(log(1 + x)\), keďže naše premenné často obsahujú hodnotu 0, ktorá je vo všetkých prípadoch relevantným údajom. Transformujeme všetky údaje okrem arrival_date_week_number, ktoré neobsahujú nulové hodnoty, ani výrazných outlierov. Do tohoto modelu sme taktiež vrátili údaje stays_in_weekend_nights.

## 
## Call:
## lm(formula = log1p(lead_time) ~ arrival_date_week_number + log1p(stays_in_weekend_nights) + 
##     log1p(stays_in_week_nights) + log1p(previous_cancellations) + 
##     log1p(previous_bookings_not_canceled), data = udaje5)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.3130 -0.8519  0.2739  1.0611  5.8140 
## 
## Coefficients:
##                                         Estimate Std. Error t value Pr(>|t|)
## (Intercept)                            2.3479101  0.0135768  172.94   <2e-16
## arrival_date_week_number               0.0087383  0.0003112   28.08   <2e-16
## log1p(stays_in_weekend_nights)         0.3592200  0.0086663   41.45   <2e-16
## log1p(stays_in_week_nights)            0.9359726  0.0087023  107.56   <2e-16
## log1p(previous_cancellations)          1.3006694  0.0215572   60.34   <2e-16
## log1p(previous_bookings_not_canceled) -1.1768330  0.0165400  -71.15   <2e-16
##                                          
## (Intercept)                           ***
## arrival_date_week_number              ***
## log1p(stays_in_weekend_nights)        ***
## log1p(stays_in_week_nights)           ***
## log1p(previous_cancellations)         ***
## log1p(previous_bookings_not_canceled) ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.457 on 119384 degrees of freedom
## Multiple R-squared:  0.1813, Adjusted R-squared:  0.1812 
## F-statistic:  5286 on 5 and 119384 DF,  p-value: < 2.2e-16
Table 4.5: Kvalita vyrovania logaritmovaného modelu počtu dní medzi rezerváciou a začiatkom pobytu
Statistic Value
N (Observations) 119390.0000
R-squared 0.1813
Adjusted R-squared 0.1812
F-statistic 5285.9365
F-test p-value 0.0000
AIC 428634.8760
Residual Std. Error 1.4566

Model je ako celok štatisticky významný, čo potvrdzuje F-test (p-hodnota < 0,05). Hodnota koeficientu determinácie \(R^2=0,1813\) naznačuje, že model vysvetľuje približne 18 % variability počtu dní medzi rezerváciou a začiatkom pobytu, čo predstavuje výrazné zlepšenie oproti pôvodnému lineárnemu modelu.

Znamienka koeficientov sa zachovali, avšak teraz sú všetky premenné štatisticky významné pre regresný model. Celkovo možno konštatovať, že logaritmická transformácia premenných viedla k zlepšeniu kvality modelu a k jasnejšej interpretácii vzťahov medzi sledovanými premennými.

Diagnostické grafy regresného modelu 2

Figure 4.2: Diagnostické grafy regresného modelu 2

4.3.1 Interpretácie reziduí logaritmického modelu

V porovnaní s pôvodným lineárnym modelom vykazujú diagnostické grafy logaritmického modelu mierne zlepšenie správania rezíduí.

Z grafu Residuals vs Fitted je vidieť, že systematický tvar rezíduí je menej výrazný než v predchádzajúcom modeli, hoci úplne náhodné rozptýlenie okolo nuly stále nie je splnené. To naznačuje, že logaritmická transformácia závislej premennej pomohla lepšie zachytiť vzťah medzi premennými, aj keď nie úplne.

Q-Q graf rezíduí ukazuje, že rozdelenie rezíduí je bližšie k normálnemu rozdeleniu než v pôvodnom modeli, najmä v strednej časti rozdelenia. Odchýlky v okrajových častiach však pretrvávajú, čo je pri veľkom počte pozorovaní očakávané.

Zo Scale-Location grafu je zrejmé, že heteroskedasticita je v porovnaní s predchádzajúcim modelom slabšia, aj keď rozptyl rezíduí stále mierne rastie s hodnotami predikcie. Logaritmická transformácia teda prispela k stabilnejšiemu rozptylu rezíduí.

Graf Residuals vs Leverage naznačuje, že v modeli sa síce nachádzajú pozorovania s vyššou pákou, avšak žiadne z nich výrazne neprekračuje hranice Cookovej vzdialenosti. To znamená, že jednotlivé pozorovania nemajú neprimerane silný vplyv na výsledky modelu.

5 Heteroskedasticita

Prítomnosť heteroskedasticity (t. j. nekonštantného rozptylu náhodnej zložky) môže spôsobovať skreslené vyhodnocovanie t-testov významnosti jednotlivých regresných koeficientov. Preto je dôležité heteroskedasticitu odhaliť — či už vizuálne alebo pomocou formálnych testov — a v prípade jej výskytu model vhodne upraviť.

Aj v našom prípade sa snažíme vizuálne posúdiť, či sa heteroskedasticita vyskytuje. Slúžia nám na to diagnostické grafy, najmä graf Scale–Location, ktorý ukazuje, či sa rozptyl reziduí mení spolu s veľkosťou predikovaných hodnôt.

V ďalšom kroku sa preto pozrieme na to, ako sa heteroskedasticita správa v dvoch rôznych modeloch — v pôvodnom modeli (bez stays_in_weekend_nights) a v modeli so zlogaritmovanými premennými (so stays_in_weekend_nights). Model 2 využíva logaritmickú transformáciu vybraných premenných, aby sa znížil vplyv extrémnych hodnôt a stabilizoval rozptyl. Táto úprava bola zvolená práve kvôli tomu, že pôvodné dáta obsahovali veľa veľmi nízkych a zároveň veľmi vysokých hodnôt, čo často vedie k heteroskedasticite. Model 1 je teda pôvodný lineárny model, zatiaľ čo Model 2 je jeho transformovaná verzia.

Pre testovanie heteroskedasticity upravíme sledované dáta pre Model 1 aj Model 2 iba na údaje o rezerváciach, pri ktorých existovali minulé zrušené a nezrušené rezervácie, teda hodnoty týchto údajov neboli nulové. Toto rozhodnutie robíme na základe nepredvídateľnosti správania sa pri first-time customers, a z dôvodu zníženia počtu sledovaných údajov. Naša databáza je príliš veľká a zaťažujúca pre počítačový program. Model sledovaných premenných však ostáva rovnaký, ako doteraz, len s prispôsobenými koeficientami.

Upravený Model 1 a Model 2

Table 5.1: Regresné koeficienty Modelu 1 počtu dní medzi rezerváciou a začiatkom pobytu
Odhady koeficientov
term estimate std.error statistic p.value
(Intercept) 55.6431 0.7757 71.7369 0
arrival_date_week_number 0.9372 0.0221 42.3857 0
stays_in_week_nights 9.0434 0.1577 57.3509 0
previous_cancellations 12.1443 0.3604 33.6942 0
previous_bookings_not_canceled -5.5548 0.2034 -27.3147 0
Table 5.2: Regresné koeficienty Modelu 2 počtu dní medzi rezerváciou a začiatkom pobytu
Odhady koeficientov
term estimate std.error statistic p.value
(Intercept) 55.6431 0.7757 71.7369 0
arrival_date_week_number 0.9372 0.0221 42.3857 0
stays_in_week_nights 9.0434 0.1577 57.3509 0
previous_cancellations 12.1443 0.3604 33.6942 0
previous_bookings_not_canceled -5.5548 0.2034 -27.3147 0
Table 5.3: Kvalita vyrovania Modelu 1 počtu dní medzi rezerváciou a začiatkom pobytu
Statistic Value
N (Observations) 647.0000
R-squared 0.2062
Adjusted R-squared 0.2012
F-statistic 41.6826
F-test p-value 0.0000
AIC 6910.6952
Residual Std. Error 50.2110
Table 5.4: Kvalita vyrovania logaritmovaného Modelu 2 počtu dní medzi rezerváciou a začiatkom pobytu
Statistic Value
N (Observations) 647.0000
R-squared 0.1723
Adjusted R-squared 0.1659
F-statistic 26.6883
F-test p-value 0.0000
AIC 2279.8918
Residual Std. Error 1.4005
Diagnostické grafy regresného modelu 1 (upravený)

Figure 5.1: Diagnostické grafy regresného modelu 1 (upravený)

Diagnostické grafy regresného modelu 2 (upravený)

Figure 5.2: Diagnostické grafy regresného modelu 2 (upravený)

Upravené modely vykazujú lepšiu kvalitu vyrovnania a priaznivejšie diagnostické vlastnosti, avšak problém heteroskedasticity zostáva prítomný. Podarilo sa nám však, okrem jednoduchšieho spracovania, dosiahnuť spoľahlivejšie modely, a navyše s oveľa nižšou chybovou odchýlkou.

Heteroskedasticita

Heteroskedasticitu budeme sledovať pri premenných previous_cancellations a previous_bookings_not_canceled, a to z dôvodu, že pri týchto premenných dochádza k najrôznejším odchýlkam. Hodnoty týchto údajov sú veľmi závislé na type zákazníka.

Skúmanie heteroskedasticity 1

Figure 5.3: Skúmanie heteroskedasticity 1

Z grafov je vidieť, že rozptyl rezíduí nie je konštantný a mení sa s hodnotami oboch premenných. Pri previous_cancellations môžeme vidieť, že pri vyšších hodnotách sa rozptyl rezíduí zväčšuje, čo naznačuje heteroskedasticitu. Podobne pri previous_bookings_not_canceled sa rozptyl rezíduí mení v závislosti od hodnoty premennej a nie je rovnomerný v celom rozsahu dát.

Červená krivka v oboch grafoch ukazuje mierny trend, čo potvrdzuje, že variabilita chýb závisí od vysvetľujúcich premenných. Celkovo teda grafy naznačujú prítomnosť heteroskedasticity, aj keď jej intenzita nie je extrémna.

Skúmanie heteroskedasticity 2

Figure 5.4: Skúmanie heteroskedasticity 2

Po logaritmickej transformácii oboch premenných je vidieť, že rozptyl rezíduí je o niečo stabilnejší než v pôvodných grafoch, no úplne rovnomerný stále nie je. Pri log1p(previous_cancellations) sa pri vyšších hodnotách opäť objavuje mierny nárast variability rezíduí, čo naznačuje, že heteroskedasticita úplne nezmizla.

Pri log1p(previous_bookings_not_canceled) je rozptyl rezíduí vyrovnanejší v strednej časti rozsahu, avšak na okrajoch sa stále objavujú odchýlky. Celkovo teda logaritmická transformácia heteroskedasticitu zmiernila, ale neodstránila.

6 Špecifikácia modelu

Aj v tejto časti práce budeme pracovať s dátami upravenými tak, aby pre premenné previous_cancellations a previous_bookings_not_canceled boli údaje nenulové.

Pracovať budeme s novou verziou modelu, do ktorej skúsime pridať viac sledovaných údajov, ktoré by mohli byť relevantné. Pozeráme sa na vzťah medzi lead_time, teda čas urobenia rezervácie pred začiatkom pobytu, a ostatných premenných. Model lineárnej regresie teda vyzerá nasledovne:

\[ lead\_time_i = \beta_0 + \beta_1 arrival\_date\_week\_number_i + \beta_2 arrival\_date\_day\_of\_month_i + \beta_3 stays\_in\_weekend\_nights_i + \beta_4 stays\_in\_week\_nights_i + \beta_5 is\_repeated\_guest_i + \beta_6 previous\_cancellations_i + \beta_7 previous\_bookings\_not\_canceled_i + u_i \]

## 
## Call:
## lm(formula = lead_time ~ +1 + arrival_date_week_number + arrival_date_day_of_month + 
##     stays_in_weekend_nights + stays_in_week_nights + is_repeated_guest + 
##     previous_cancellations + previous_bookings_not_canceled, 
##     data = udaje7)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -100.373  -21.442   -8.445    4.564  309.289 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      0.52933    7.51078   0.070 0.943837    
## arrival_date_week_number         0.45626    0.13330   3.423 0.000659 ***
## arrival_date_day_of_month        0.04418    0.22907   0.193 0.847137    
## stays_in_weekend_nights         13.21855    2.78788   4.741 2.62e-06 ***
## stays_in_week_nights             9.57520    1.56698   6.111 1.73e-09 ***
## is_repeated_guest              -14.67823    5.39897  -2.719 0.006732 ** 
## previous_cancellations           7.21382    0.77572   9.299  < 2e-16 ***
## previous_bookings_not_canceled  -0.94936    0.15481  -6.132 1.52e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 49.03 on 639 degrees of freedom
## Multiple R-squared:  0.2465, Adjusted R-squared:  0.2383 
## F-statistic: 29.87 on 7 and 639 DF,  p-value: < 2.2e-16

Vidíme, že hoci väčšina veličín je pre náš model štatisticky významná, model nie je optimálny. Podľa našich výsledkov napríklad deň v mesiaci nemá významný vplyv na to, ako skoro človek robí rezevráciu.

Na zlepšenie nášho modelu využijeme test RESET.

6.1 Test RESET

Ide o najštandardnejší formálny test nesprávnej špecifikácie funkčnej formy, ale dá sa použiť aj pre prípady, ak sme nešpecifikovali všetky vysvetľujúce premenné.

Myšlienka: Nech pôvodný model má tvar \[y_t = \beta_0 + \beta_1 x_{t10} + \dots +\beta_k x_{tk} + u_t\] Ak je náš model správne špecifikovaný, potom pridaním mocnín vyrovnaných hodnôt (napr. \(\hat y_t^2\), \(\hat{y}_t^3\)) by sa pôvodný model nemal podstatne zlepšiť, teda budeme testovať pôvodný model uvedený vyššie a model

\[y_t = \beta_0 + \beta_1 x_{t10} + \dots +\beta_k x_{tk} + \gamma_2\hat y_t^2 + \gamma_3\hat{y}_t^3 + u_t\] Budeme testovať hypotézu

\(H_0:\) model je správne špecifikovaný (\(\gamma_2 = \gamma_3 = 0\))

oproti

\(H_1:\) model je nesprávne špecifikovaný (\(\gamma_2 \ne 0 \quad \text{alebo} \quad \gamma_3 \ne 0\))

## 
##  RESET test
## 
## data:  model3
## RESET = 11.036, df1 = 2, df2 = 637, p-value = 1.943e-05

Po zbehnutí Reset testu v Rku nám p-value v modeli vychádza < 0.05, teda zamietame hypotézu \(H_0\). Náš model je zle špecifikovaný, chýbajú mu niektoré dodatočné vysvetľujúce premenné, alebo je potrebné urobiť nelineárnu transformáciu používaných premenných.

6.2 Grafická analýza

6.2.1 Graf Residuals vs. Fitted

Grafická analýza vzťahu medzi vyrovnanými hodnotami náhodnej premennej a rezíduami:

Model nám vykazuje nekonštantné reziduá, krivka najprv lineárne klesá a pri vyšších hodnotách stúpa. Z toho nám vyplýva, že model by mohol benefitovať z nelineárnych členov.

6.2.2 Grafy C+R

Táto analýza nám môže pomôcť pri hľadaní odpovede na otázku, ktorú premennú by sme mali transfomovať pomocou nejakej známej funkcie. Vychádzajme z pôvodnej rovnice

\[y_t = \beta_0 + \beta_1 x_{t1} + \dots +\beta_k x_{tk} + u_t\] Túto rovnicu najprv odhadneme a potom vykresľujeme grafy, kde výraz component+residual (C+R) plot vykresľuje na zvislej osi \(\hat{\beta}_ix_{ti}+e_t\) a na vodorovnej osi vykresľuje hodnoty \(x_{ti}\)

Tieto grafy pomáhajú identifikovať nelineárne vzťahy pre každý regresor.

Vidíme, že najviac sa nám od priamky odkláňajú veličiny stays_in_weekend_nights” stays_in_week_nights a previous_cancellations. Tieto premenné skúsime nejako nelineárne v modeli upraviť.

6.3 Porovnanie základného a modifikovaného modelu

Predpokladajme, že sa pri nelineárnych úpravách pôvodnej rovnice dostaneme k zavedeniu kvadrátu premennej stays_in_weekend_nights, stays_in_week_nights a previous_cancellations, pri ktorých sa krivka najviac líši od priamky.

## 
## Call:
## lm(formula = lead_time ~ +1 + arrival_date_week_number + arrival_date_day_of_month + 
##     stays_in_weekend_nights + stays_in_week_nights + is_repeated_guest + 
##     previous_cancellations + previous_bookings_not_canceled + 
##     I(stays_in_weekend_nights^2) + I(stays_in_week_nights^2) + 
##     I(previous_cancellations^2), data = udaje7)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -103.598  -21.541   -5.584    6.815  300.568 
## 
## Coefficients:
##                                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      8.581430   8.370285   1.025 0.305647    
## arrival_date_week_number         0.539925   0.131477   4.107 4.54e-05 ***
## arrival_date_day_of_month        0.011556   0.224529   0.051 0.958970    
## stays_in_weekend_nights         27.234390   6.264363   4.348 1.60e-05 ***
## stays_in_week_nights            12.574622   3.456371   3.638 0.000297 ***
## is_repeated_guest              -14.007796   5.296977  -2.644 0.008383 ** 
## previous_cancellations          -8.654769   3.467859  -2.496 0.012823 *  
## previous_bookings_not_canceled  -0.458599   0.189878  -2.415 0.016006 *  
## I(stays_in_weekend_nights^2)    -7.144605   3.043809  -2.347 0.019218 *  
## I(stays_in_week_nights^2)        0.009575   0.550682   0.017 0.986133    
## I(previous_cancellations^2)      1.276130   0.275876   4.626 4.52e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 48.01 on 636 degrees of freedom
## Multiple R-squared:  0.2809, Adjusted R-squared:  0.2696 
## F-statistic: 24.84 on 10 and 636 DF,  p-value: < 2.2e-16

Výsledok kvadratického modelu nám ukazuje, že arrival_date_day_of_month stále nie je štatisticky významný pre model. Urobíme teda úpravu, kde túto veličinu z modelu vyhodíme, a taktiež vyhodíme druhú mocninu stays_in_week_nights, ktorá na model tiež nemá významný vplyv.

## 
## Call:
## lm(formula = lead_time ~ +1 + arrival_date_week_number + stays_in_weekend_nights + 
##     stays_in_week_nights + is_repeated_guest + previous_cancellations + 
##     previous_bookings_not_canceled + I(stays_in_weekend_nights^2) + 
##     I(previous_cancellations^2), data = udaje7)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -103.428  -21.587   -5.511    6.797  300.723 
## 
## Coefficients:
##                                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      8.7255     7.3361   1.189  0.23473    
## arrival_date_week_number         0.5408     0.1300   4.161 3.60e-05 ***
## stays_in_weekend_nights         27.2067     6.0532   4.495 8.28e-06 ***
## stays_in_week_nights            12.6230     1.8670   6.761 3.09e-11 ***
## is_repeated_guest              -14.0229     5.2771  -2.657  0.00807 ** 
## previous_cancellations          -8.6645     3.4577  -2.506  0.01246 *  
## previous_bookings_not_canceled  -0.4583     0.1888  -2.428  0.01545 *  
## I(stays_in_weekend_nights^2)    -7.1175     2.6032  -2.734  0.00643 ** 
## I(previous_cancellations^2)      1.2766     0.2753   4.637 4.30e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 47.94 on 638 degrees of freedom
## Multiple R-squared:  0.2809, Adjusted R-squared:  0.2719 
## F-statistic: 31.15 on 8 and 638 DF,  p-value: < 2.2e-16

V tomto modeli sa nám všetky veličiny ukazujú viac alebo menej štatisticky významné. Porovnáme si tento nový kvadratický model s pôvodným lineárnym pomocou anova a reset testu.

Výsledky testov sú zobrazené nižšie.

## 
##  RESET test
## 
## data:  model_schooling_kvadr_2
## RESET = 12.353, df1 = 2, df2 = 636, p-value = 5.456e-06

Z výsledkov anova testu vieme, že nový kvadratický model lepšie popisuje správanie hodnôt, ako pôvodný lineárny. Podľa RESET testu však ani nový kvadratický model nie je špecifikovaný správne a zišli by sa mu nejaké úpravy. Najlepšie bude asi od tohoto experimentu s viacerými premennými upustiť a vrátiť sa k nejakej variante predošlých modelov.

7 Autokorelácia reziduí

Pre účely tohoto cvičenia modelujeme z našej databázy vysvetľovanú premennú lead_time (počet dní medzi urobením rezervácie a pobytom) podľa vysvetľujúcich premenných arrival_date_week_number, arrival_date_day_of_month, previous_cancellations, previous_bookings_not_canceled. Pre jednoduchšie spúšťanie overovacích kódov sme sa v tejto časti rozhodli pracovať iba s dátami z roku 2016.

Naša úvodná hypotéza tvrdí, že všetky premenné by mali mať štatisticky významný vplyv na predstih, v ktorom si ľudia vytvárajú rezervácie.

## 
## Call:
## lm(formula = lead_time ~ arrival_date_week_number + arrival_date_day_of_month + 
##     previous_cancellations + previous_bookings_not_canceled, 
##     data = udaje9, na.action = na.exclude)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -85.607 -20.324  -6.394   4.273 291.476 
## 
## Coefficients:
##                                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    -2.16990    6.13402  -0.354    0.724    
## arrival_date_week_number        0.61131    0.15463   3.953 9.01e-05 ***
## arrival_date_day_of_month      -0.07031    0.26307  -0.267    0.789    
## previous_cancellations          8.09211    0.75070  10.779  < 2e-16 ***
## previous_bookings_not_canceled -0.82653    0.15205  -5.436 9.16e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 45.06 on 430 degrees of freedom
##   (53961 observations deleted due to missingness)
## Multiple R-squared:  0.225,  Adjusted R-squared:  0.2178 
## F-statistic: 31.21 on 4 and 430 DF,  p-value: < 2.2e-16

Podľa výsledkov lineárnej regresie vidíme, že štatisticky významný vplyv na lead_time majú arrival_date_week_number, previous_cancellations a previous_bookings_not_canceled, kde previous_bookings_not_canceled má jediné záporný vplyv. Teda ľudia, ktorí rušia menej rezervácií, zvyknú rezervovať ubytovanie viac v predstihu. To znie rozumne, ide o fixné plány, ktoré sa väčšinou dohadujú viac vopred.

Premenná arrival_date_day_of_month nemá ani v tomto modeli štatisticky významný vplyv na lead_time.

V tejto časti sa pozrieme na ďalší dôležitý predpoklad klasického lineárneho regresného modelu – nezávislosť rezíduí. V časových radoch sa často stáva, že chyba v čase \(t\) je systematicky spätá s chybou v čase \(t-1\), čo nazývame autokoreláciou rezíduí.

Empirické hodnoty lead time vykazujú veľký rozptyl a miestami extrémne vysoké hodnoty, ktoré výrazne vyčnievajú nad bežný priebeh. Vo viacerých týždňoch sú hodnoty koncentrované pri nule, zatiaľ čo v iných sa objavujú prudké nárasty, čo naznačuje výraznú variabilitu v správaní zákazníkov.

Vyrovnaná krivka fitted hodnôt zachytáva len všeobecný trend, no v mnohých úsekoch systematicky podhodnocuje alebo nadhodnocuje empirické dáta. Tieto kompaktné bloky s rovnakým znamienkom odchýlok môžu naznačovať prítomnosť autokorelácie v reziduách alebo nedostatočnú schopnosť lineárneho modelu vystihnúť extrémne hodnoty a sezónnosť v dátach.

7.1 Autocorrelation function

Táto funkcia priradzuje odhad korelácie, ktorá je medzi jednotlivými rezíduami v aktuálnom období a období posunutom (Lag) o \(k\) období späť.

ACF graf ukazuje, že pri posune Lag 1 sa nachádza výrazná a štatisticky významná kladná autokorelácia, ktorá presahuje hranice spoľahlivosti (modré čiarkované línie). To znamená, že reziduá v susedných obdobiach spolu systematicky súvisia, čo porušuje predpoklad nezávislosti náhodných zložiek v lineárnom modeli.

7.2 Testy autokorelácie reziduí

7.2.1 Durbin–Watsonov test

## 
##  Durbin-Watson test
## 
## data:  model4
## DW = 0.89762, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

Na overenie autokorelácie rezíduí bol použitý Durbin–Watson test. Výsledná hodnota testovacej štatistiky je DW = 0,90 a p-hodnota je menšia ako 0,05, čo znamená, že zamietame nulovú hypotézu o neexistencii autokorelácie.

Výsledky testu teda naznačujú prítomnosť pozitívnej autokorelácie rezíduí. Inými slovami, rezíduá v modeli nie sú navzájom nezávislé, ale vykazujú systematickú závislosť, čo porušuje jeden z predpokladov klasického lineárneho regresného modelu.

7.2.2 Breusch–Godfreyov test (BG test)

BG test je formálnym testom autokorelácie (sériovej korelácie) rezíduí regresného modelu:

\[ u_t = \rho_1 u_{t-1} + \rho_2 u_{t-2} + \cdots + \rho_p u_{t-p} + \varepsilon_t \]

Testuje, či rezíduá sú korelované v čase a to aj pre \(p\) posunov (lagov), čo je typické pre časové rady.

## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  model4
## LM test = 132.5, df = 1, p-value < 2.2e-16

Na overenie autokorelácie rezíduí bol použitý aj Breusch–Godfrey test pre autokoreláciu prvého rádu. Hodnota testovej štatistiky je LM = 132,5 a p-hodnota je menšia ako 0,05, čo znamená, že zamietame nulovú hypotézu o neexistencii autokorelácie.

Výsledok testu potvrdzuje prítomnosť sériovej (pozitívnej) autokorelácie rezíduí v modeli.

Oba testy nám dokázali prítomnosť autokorelácie reziduí, ktorú skúsime v ďalšom kroku vyriešiť.

7.3 Riešenie autokorelácie

Koyckova transformácia a Koyckova rovnica

## 
## Call:
## lm(formula = lead_time ~ arrival_date_week_number + arrival_date_day_of_month + 
##     previous_cancellations + previous_bookings_not_canceled + 
##     lead_time_lag1, data = udaje9_koyck, na.action = na.exclude)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -163.454  -14.939   -3.848    5.870  298.592 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    -0.451141   5.276318  -0.086   0.9319    
## arrival_date_week_number        0.328675   0.135061   2.434   0.0154 *  
## arrival_date_day_of_month      -0.005126   0.226346  -0.023   0.9819    
## previous_cancellations          4.212919   0.715392   5.889 7.87e-09 ***
## previous_bookings_not_canceled -0.574244   0.133585  -4.299 2.13e-05 ***
## lead_time_lag1                  0.506596   0.040581  12.484  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 38.67 on 428 degrees of freedom
##   (53962 observations deleted due to missingness)
## Multiple R-squared:  0.4316, Adjusted R-squared:  0.4249 
## F-statistic:    65 on 5 and 428 DF,  p-value: < 2.2e-16
## 
##  Durbin-Watson test
## 
## data:  model4_koyck
## DW = 2.1623, p-value = 0.9403
## alternative hypothesis: true autocorrelation is greater than 0
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  model4_koyck
## LM test = 7.9337, df = 1, p-value = 0.004852

Po pridaní oneskorenej hodnoty závislej premennej sa kvalita modelu výrazne zlepšila, čo je viditeľné najmä na náraste hodnoty \(R^2\). Premenná lead_time_lag1 je štatisticky významná, čo naznačuje, že aktučný časový predstih rezervácie do veľkej miery závisí od jeho predchádzajúcej hodnoty. Ostatné premenné si zachovali očakávané znamienka, pričom arrival_date_day_of_month sa neukázala ako významná.

Z hľadiska autokorelácie došlo k zlepšeniu. Hodnota Durbin–Watson štatistiky sa priblížila k 2, hoci Breusch–Godfrey test ešte naznačuje miernu zvyškovú autokoreláciu. Celkovo však model pôsobí stabilnejšie než pôvodná špecifikácia.

8 Multikolinearita

Po autokoreácii a heteroskedasticite rezíduí je multikolinearita tretím závažným porušením predpokladov použitia metódy najmenších štvorcov. Tu sa okrem iného predpokadá, že matica \(\mathbf X\) je tvorená lineárne nezávislými riadkami a tiež stĺpcami, čo zabezpečí regularitu matice \(\mathbf X^T\mathbf X\) a teda možnosť jej inverzie. Tá sa používa pri odhadoch regresných koeficientov. V praxi sa ale môže stať, že vzniká "takmer singulárna matica \(\mathbf X^T\mathbf X\) ", t.j. matica \(\mathbf X\) je tvorená "približne" lineárne závislými stĺpcami, t.j. existuje taká ich lineárna kombinácia, v ktorej

\[ x_{il} = \alpha_0 + \alpha_1 x_{i1} + \dots + \alpha_{l-1} x_{i,(l-1)} + \alpha_{l+1} x_{i,(l+1)} + \alpha_k x_{i,k} + \nu_i \]

Tu \(\nu_i\) sú rádovo menšie čísla , než regresory \(x_{.}\), t.j. \((\forall i)(\nu_i << x_{.,i})\). V tomto prípade je inverzná matica \((\mathbf X^T\mathbf X)^{-1}\) veľmi nestabilná a obsahuje na hlavnej diagonále veľmi veľké hodnoty. Táto matica sa používa pri výpočtoch \[\hat \beta = (\mathbf X^T\mathbf X)^{-1} \mathbf X^T \mathbf y\] a tiež \[\text{std}(\beta_i) = \sqrt{\sigma^2 (\mathbf X^T \mathbf X)^{-1}_{ii}}.\] To spôsobuje nestabilitu odhadovaných regresných koeficientov a ich nadhodnotené rozptyly.

Tento problém nazývame problémom multikolinearity.


8.1 2. Dôsledky multikolinearity

Multikolinearita patrí medzi najčastejšie problémy viacnásobnej lineárnej regresie.
Je dôležité jasne rozlišovať dva fakty:

  1. Nespôsobuje skreslené (biased) odhady koeficientov
  2. Nadhodnocuje odhady štandardných odchýlok regresných koeficientov a vedie potom k falošnému neprijímaniu alternatívnej hypotézy o štatistickej významnosti jednotlivých regresorov.
  3. Odhadované regresné koeficienty sú nestabilné - pri malej zmene údajov sa sa prudko menia koeficienty ako aj ich znamienka.
  4. Interpretácia regresného modelu je z dôvodu vyššie uvedených dôvodov nespoľahlivá.

8.2 Náš MODEL

\[ lead\_time_i = \beta_0 + \beta_1 arrival\_date\_week\_number_i + \beta_2 arrival\_date\_day\_of\_month_i + \beta_3 previous\_cancellations_i + \beta_4 previous\_booking\__not\_canceled_i + u_i \]

Po všetkých predošlých pokusoch nájsť optimálny model s relevantnými premennými sme sa ustálili na tejto verzii.

## 
## Call:
## lm(formula = lead_time ~ arrival_date_week_number + arrival_date_day_of_month + 
##     previous_cancellations + previous_bookings_not_canceled, 
##     data = udaje, na.action = na.exclude)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -86.222  -0.032  -0.032  -0.032 294.449 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    -10.87357    0.42600 -25.525   <2e-16 ***
## arrival_date_week_number         0.66584    0.01366  48.747   <2e-16 ***
## arrival_date_day_of_month       -0.03851    0.02349  -1.639    0.101    
## previous_cancellations           8.89961    0.05898 150.879   <2e-16 ***
## previous_bookings_not_canceled  -0.78493    0.01350 -58.150   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.03 on 54391 degrees of freedom
## Multiple R-squared:  0.3003, Adjusted R-squared:  0.3002 
## F-statistic:  5836 on 4 and 54391 DF,  p-value: < 2.2e-16

Vo výsledkoch pozorujeme veľké rádové rozdiely v odhade regresných koeficientov.

8.3 Korelačná matica

Korelácia dokáže zachytiť párové vzťahy medzi premennými. Ak medzi niektorými vysvetľujúcimi premennými je vysoká korelácia (signalizujúca multikolinearitu), potom je najjednoduchšie ju zo zoznamu regresorov vylúčiť. Korelácie sa dajú aj testovať, alebo len vyčísliť a potom podľa intuitívneho pravidla vylúčiť jednu premennú, ktorá má koreláciu s inou premennou v absolútnej hodnote vyššiu ako 0.8, resp. 0.9.

##                                arrival_date_week_number
## arrival_date_week_number                          1.000
## arrival_date_day_of_month                         0.201
## previous_cancellations                           -0.141
## previous_bookings_not_canceled                    0.160
##                                arrival_date_day_of_month previous_cancellations
## arrival_date_week_number                           0.201                 -0.141
## arrival_date_day_of_month                          1.000                 -0.108
## previous_cancellations                            -0.108                  1.000
## previous_bookings_not_canceled                     0.053                  0.367
##                                previous_bookings_not_canceled
## arrival_date_week_number                                0.160
## arrival_date_day_of_month                               0.053
## previous_cancellations                                  0.367
## previous_bookings_not_canceled                          1.000

Z výsledkov vieme povedať, že naše premenné nemajú výrazné korelácie. K najvyššej korelácií dochádza medzi previous_cancellations a previous_bookings_not_canceled s hodnotou 0.367, a teda dochádza k veľmi miernej kladnej korelácii.


Korelačný vzťah sa dá vytušiť aj z jednoduchých párových scatterplotov ako je to na nasledujúcom obrázku.

Opticky vidíme miernu koreláciu medzi previous_cancellations a previous_bookings_not_cancelled. Taktiež vidíme veľmi miernu zhodu v niektorých dátach arrival_date_week_number a previous_bookings_not_cancelled. Táto zhoda je však náhodná, a ani logicky nedáva korelácia medzi týmito premennými veľký zmysel.


8.4 VIF

Indikátorom multikolinearity u premennej, ktorá multikolinearitu zapríčiňuje, je Variance Inflation Factor (VIF). Pre premennú \(x_j\) je potom

\[ VIF_j = \frac{1}{1 - R_j^2} \]

kde \(R_j^2\) pochádza z regresie:

\[ X_j = \gamma_0 + \gamma_1 X_1 + \cdots + \gamma_{j-1} X_{j-1} + \gamma_{j+1} X_{j+1} + u. \]

##       arrival_date_week_number      arrival_date_day_of_month 
##                       1.109678                       1.052978 
##         previous_cancellations previous_bookings_not_canceled 
##                       1.225388                       1.224777

Intuitívnym kritériom, ktoré signalizuje prítomnosť multikolinearity, je podmienka VIF > 5 (prísne kritérium), alebo VIF > 10 (menej prísne kritérium). V našom prípade to nespĺňa žiadna z vysvetľujúcich veličín.


8.5 Condition Number

Pri existencii multikolinearity sa model prejavuje tak, že koeficient determinácie je síce vysoký a zdá sa, že model je veľmi dobrý, ale regresné koeficienty nie sú štatisticky významné - t.j. štandardné odchýlky regresných koeficientov sú veľmi veľké. Uvedomíme si to, ak sa pozrieme, ako sa počítajú - t.j. \(\text{std}(\beta_i) = \sqrt{\sigma^2 (\mathbf X^T \mathbf X)^{-1}_{ii}}\), kde rozhodujúci je \(i\)ty prvok hlavnej diagonály matice \((\mathbf X^T \mathbf X)^{-1}\). Tie prvky sú ale v prípade podobnosti vysvetľujúcich premenných mimoriadne veľké. Túto situáciu zachytáva nasledovný ukazovateľ.

Pri výpočte Condition number \(\kappa\) sa používa vzorec

\[\kappa = \frac{\theta_{\text{max}}}{\theta_{\text{min}}}\]

kde \(\theta_.\) sú vlastné čísla matice (vysvetlené nižšie). Conditional number nie je test, je to len indikátor, ktorý posudzuje mieru multikolinearity medzi premennými. Používame intuitívne pravidlo. Ak Conditional number je

  • < 10 → nízka multikolinearita,
  • 10–30 → mierna,
  • 30–100 → silná,
  • 100 → veľmi vážna

V našom prípade to je

## [1] 93.79626

Naše condition_number spadá do intervalu 30-100, a teda signalizuje silnú multikolinearitu.

Vlastné číslo štvorcovej matice \(\mathbf X^T \mathbf X\) je číslo \(\theta_j\), pre ktoré platí \((\mathbf X^T \mathbf X)\mathbf h^j = \theta_i\mathbf h^j\). \(\mathbf h^j\) je tzv vlastný vektor tejto matice. Máme toľko vlastných čísel (teda aj vlastných vektorov), koľko obsahuje matica \(\mathbf X^T \mathbf X\) riadkov (stĺpcov).

Môže sa stať, že VIF faktor nesignalizuje multikolinearitu u žiadnej z vysvetľujúcich veličín, ale sú navzájom prepojené cyklickými lineárnymi závislosťami všetky premenné. To zachytáva práve Condition Number.

Vyzerá to, že práve toto sa deje aj v našom príklade. Poďme sa na to teda pozrieť.


8.6 Riešenia multikolinearity

8.6.1 Vynechanie premennej

Pokúsme sa vynechať postupne dve premenné, ktoré majú najvyšší VIF a porovnajme následne upravené koeficienty determinácie oboch nových modelov.

Premenné s najvyšším VIF sú v našom modeli previous_cancellations a previous_bookings_not_cancelled so skoro identickou hodnotou VIF.

## 
## Call:
## lm(formula = lead_time ~ arrival_date_week_number + arrival_date_day_of_month + 
##     previous_bookings_not_canceled, data = udaje10, na.action = na.exclude)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -15.758  -0.138  -0.138  -0.138 307.117 
## 
## Coefficients:
##                                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     4.90492    0.49185   9.972   <2e-16 ***
## arrival_date_week_number        0.26165    0.01595  16.403   <2e-16 ***
## arrival_date_day_of_month      -0.38874    0.02785 -13.961   <2e-16 ***
## previous_bookings_not_canceled  0.03423    0.01472   2.325   0.0201 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.8 on 54392 degrees of freedom
## Multiple R-squared:  0.007442,   Adjusted R-squared:  0.007387 
## F-statistic: 135.9 on 3 and 54392 DF,  p-value: < 2.2e-16
## 
## Call:
## lm(formula = lead_time ~ arrival_date_week_number + arrival_date_day_of_month + 
##     previous_cancellations, data = udaje10, na.action = na.exclude)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -72.164  -0.023  -0.023  -0.023 290.794 
## 
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)               -11.58417    0.43886 -26.396  < 2e-16 ***
## arrival_date_week_number    0.49453    0.01375  35.977  < 2e-16 ***
## arrival_date_day_of_month  -0.11948    0.02417  -4.943  7.7e-07 ***
## previous_cancellations      7.52004    0.05566 135.116  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.154 on 54392 degrees of freedom
## Multiple R-squared:  0.2568, Adjusted R-squared:  0.2568 
## F-statistic:  6265 on 3 and 54392 DF,  p-value: < 2.2e-16

Tu vidíme, že vynechanie premennej previous_cancellations podstatne znižuje upravený koeficient determinácie, a preto v prípade vynechávania premennej by sme uprednostnili vynechanie premennej previous_bookings_not_canceled.

8.7 Škálovanie premenných

Škálovanie môže byť veľmi efektívne, znižuje ale interpretovateľnosť modelu. Ide o úpravu premenných podľa nasledovného vzorca:

\[x^{scale} = \frac{x-M}{\sqrt{D}}\] kde \(M\) je stredná hodnota (priemer) a \(D\) je rozptyl premennej.

## 
## Call:
## lm(formula = lead_time ~ arrival_date_week_number_c + arrival_date_day_of_month_c + 
##     previous_cancellations_c + previous_bookings_not_canceled_c, 
##     data = udaje10, na.action = na.exclude)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -86.222  -0.032  -0.032  -0.032 294.449 
## 
## Coefficients:
##                                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                       5.14196    0.01728 297.567   <2e-16 ***
## arrival_date_week_number_c        0.88736    0.01820  48.747   <2e-16 ***
## arrival_date_day_of_month_c      -0.02906    0.01773  -1.639    0.101    
## previous_cancellations_c          2.88612    0.01913 150.879   <2e-16 ***
## previous_bookings_not_canceled_c -1.11205    0.01912 -58.150   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.03 on 54391 degrees of freedom
## Multiple R-squared:  0.3003, Adjusted R-squared:  0.3002 
## F-statistic:  5836 on 4 and 54391 DF,  p-value: < 2.2e-16
##       arrival_date_week_number_c      arrival_date_day_of_month_c 
##                         1.109678                         1.052978 
##         previous_cancellations_c previous_bookings_not_canceled_c 
##                         1.225388                         1.224777

Condition Number je

## [1] 1.602874

Vidíme, že Condition number sa výrazne zlepšilo a momentálne vykazuje znak minimálnej až nulovej multikolinearity.

9 Záver

Náš model pôvodne vykazoval znaky multikolinearity. Model vieme vylepšiť vyhodením premennej previous_bookings_not_canceled, ktorá hovorí o počte nezrušených rezervácií daného zákazníka. Táto premenná by síce na prvý pohľad mala byť pre model rovnako relevantná, ako premenná previous_cancellations, ktorá hovorí o počte zrušených rezervácií toho istého zákazníka. Z našich výsledkov však vidíme, že zrušené rezervácie sú pre model oveľa výpovednejšie.

Náš preškálovaný model dosahuje veľmi dobré výsledky, ale jeho interpretovateľnosť sa znižuje. Overíme si teda na záver multikolinearitu nášho modelu bez premennej previous_bookings_not_canceled pomocou condition number.

## [1] 80.17795

Vidíme, že hodnota condition number oproti pôvodnému modelu poklesla, ale stály hovorí o silnej multikolinearite. V rámci nášho modelu by sme si teda radšej vybrali preškálovaný model model_centered.


Na záver tejto práce vieme konštatovať, že sme schopní zostrojiť relatívne spoľahlivý a zmysluplný predikčný model vysvetľovanej premennej lead_time. Najrelevantnejšie vysvetľujúce premenné sú

  • arrival_date_week_number, ktoré vypovedá o ročnom období pobytu. Dátum pobytu zvykne súvisieť s tým, ako detailne je daný pobyt plánovaný, alebo či ide iba o spontánnu rezerváciu v “what-if scenario”.

  • previous_cancellations vypovedá o histórií rušenia rezervácií konkrétneho zákazníka.

  • previous_bookings_not_canceled vypovedá o naplnených rezerváciach konkrétneho zákazníka. Táto premenná je pre model relevantná, len keď sa pozeráme na údaje, kde táto hodnota je > 0. Takto sa zbavujeme nepredvídateľného správania nových zákazníkov.