Dane przedstawiaja informacje o transakcjach w sklepie internetowym

dane <- load("C:/Users/maria/Downloads/shopping_behaviour.rdata")

Chcemy zbudowac model dla zmiennej zaleznej : wybrana metoda platnosci 1) Jest to zmienna jakosciowa, ale bez skali porzadkowej (nie mozna sensownie uszeregowac wartosci)

  1. Dodatkowo, dla kazdej konkretnej transakcji mamy okreslony wiek klienta/wartosc transakcji/subscription: takie same niezaleznie od rodzaju platnosci (niespecyficzne dla poszczegolnych kategorii zm. zaleznej).

Bedzie to zatem tzw. wielomianowy model logitowy (multinomial logit) zapoznaj sie z rozkladami dostepnych zmiennych:

head(shop)
## # A tibble: 6 x 5
##   customerid   age purchaseamountusd subscription paymentmethod
##        <dbl> <dbl>             <dbl>        <dbl> <chr>        
## 1        983    35                12            1 PayPal       
## 2        753    39                15            1 PayPal       
## 3       3062    33                17            0 PayPal       
## 4        729    29                18            1 PayPal       
## 5        867    67                19            1 PayPal       
## 6       3084    22                20            0 PayPal

multinomial logit oszacujemy rowniez za pomoca komendy mlogit, ktora wymagala jednak okreslonego formatu danych, mozemy przeksztalcic dane do “rozciagnietego” formatu korzystajac z funkcji pomocniczej:

shop_long <- dfidx(data=shop, shape='wide'  , 
                   choice='paymentmethod')   
library(mlogit)

porownaj strukture danych shop i shop_long:

head(shop)
## # A tibble: 6 x 5
##   customerid   age purchaseamountusd subscription paymentmethod
##        <dbl> <dbl>             <dbl>        <dbl> <chr>        
## 1        983    35                12            1 PayPal       
## 2        753    39                15            1 PayPal       
## 3       3062    33                17            0 PayPal       
## 4        729    29                18            1 PayPal       
## 5        867    67                19            1 PayPal       
## 6       3084    22                20            0 PayPal
head(shop_long)
## ~~~~~~~
##  first 10 observations out of 1095 
## ~~~~~~~
##    customerid age purchaseamountusd subscription paymentmethod    idx
## 1         983  35                12            1         FALSE 1:Cash
## 2         983  35                12            1         FALSE 1:Card
## 3         983  35                12            1          TRUE 1:yPal
## 4         753  39                15            1         FALSE 2:Cash
## 5         753  39                15            1         FALSE 2:Card
## 6         753  39                15            1          TRUE 2:yPal
## 7        3062  33                17            0         FALSE 3:Cash
## 8        3062  33                17            0         FALSE 3:Card
## 9        3062  33                17            0          TRUE 3:yPal
## 10        729  29                18            1         FALSE 4:Cash
## 
## ~~~ indexes ~~~~
##    id1        id2
## 1    1       Cash
## 2    1 Debit Card
## 3    1     PayPal
## 4    2       Cash
## 5    2 Debit Card
## 6    2     PayPal
## 7    3       Cash
## 8    3 Debit Card
## 9    3     PayPal
## 10   4       Cash
## indexes:  1, 2

W jaki sposob dfidx przeksztalcilo dane shop ? jaki format maja nowe dane shop_long? Porownaj z danymi w zadaniu o hotelach.

Szacujemy model przy pomocy mlogit. Mozna tu zmienic kategorie odniesienia lub pominac ten parametr i zostawic domyslna

mlogit<-mlogit(paymentmethod ~ 1 | age + subscription + purchaseamountusd, data=shop_long, 
               reflevel="Cash")

Uwaga: porownaj z uzyciem mlogit z poprzednich zajec, generalnie: mlogit( y ~ zmienne_specificzne_dla_kategorii | zmienne_niespecyficzne_dla_kategorii, data=….. Tym razem zm. objasniajace umieszczamy po prawej stronie “|”, gdyz nie sa specyficzne dla danego wyboru metody platnosci. W zadaniu o hotelach zm. objasniajace umieszczalismy po lewej stronie “|” gdyz byly specyficzne dla kategorii. Mozliwe jest szacowanie modelu mieszanego (mixed) przy pomocy mlogit, w ktorym beda braly udzial oba rodzaje zmiennych objasniajacych. summary(mlogit) skomentuj istotnosc statystyczna oszacowanych wartosci wspolczynnikow … … …

standardowo przechodzimy na ilorazy szans dla latwiejszej interpretacji:

exp(mlogit$coefficients)
##       (Intercept):Debit Card           (Intercept):PayPal 
##                    2.0786056                    3.4981116 
##               age:Debit Card                   age:PayPal 
##                    0.9831696                    0.9857776 
##      subscription:Debit Card          subscription:PayPal 
##                    3.3656490                    2.0013894 
## purchaseamountusd:Debit Card     purchaseamountusd:PayPal 
##                    0.9899866                    0.9872207 
## attr(,"names.sup.coef")
## character(0)
## attr(,"fixed")
##       (Intercept):Debit Card           (Intercept):PayPal 
##                        FALSE                        FALSE 
##               age:Debit Card                   age:PayPal 
##                        FALSE                        FALSE 
##      subscription:Debit Card          subscription:PayPal 
##                        FALSE                        FALSE 
## purchaseamountusd:Debit Card     purchaseamountusd:PayPal 
##                        FALSE                        FALSE 
## attr(,"sup")
## character(0)

lub przy pomocy stargazer:

stargazer(mlogit, coef=list(exp(mlogit$coefficients)), p.auto = FALSE, type='text', se=NULL)  
## 
## ========================================================
##                                  Dependent variable:    
##                              ---------------------------
##                                     paymentmethod       
## --------------------------------------------------------
## (Intercept):Debit Card                  2.079           
##                                        (0.559)          
##                                                         
## (Intercept):PayPal                     3.498**          
##                                        (0.523)          
##                                                         
## age:Debit Card                         0.983*           
##                                        (0.009)          
##                                                         
## age:PayPal                              0.986           
##                                        (0.009)          
##                                                         
## subscription:Debit Card               3.366***          
##                                        (0.279)          
##                                                         
## subscription:PayPal                   2.001***          
##                                        (0.265)          
##                                                         
## purchaseamountusd:Debit Card           0.990*           
##                                        (0.006)          
##                                                         
## purchaseamountusd:PayPal               0.987**          
##                                        (0.005)          
##                                                         
## --------------------------------------------------------
## Observations                             365            
## R2                                      0.040           
## Log Likelihood                        -383.989          
## LR Test                          31.813*** (df = 8)     
## ========================================================
## Note:                        *p<0.1; **p<0.05; ***p<0.01
library(stargazer)

INTERPRETACJA DLA WIEKU: Kategoria odniesienia (pominieta w tabeli) to metoda platnosci = gotowka, zgodnie z tym co ustawilismy jako parametr w mlogit. Zatem: 1) Wraz ze wzrostem wieku klienta o 1 rok, szanse wyboru platnosci karta wzgledem platnosci gotowka maleja o ok. 1.7%, ceteris paribus. [0,983]/ 2) Co prawda wpolcz. dla wieku dla platnosci PayPal nie jest istotny statystycznie (0.265) na zadnym ze standardowych poziomow istotnosci, ale interpretacja wygladadalaby tak: Wraz ze wzrostem wieku klienta o 1 rok, szanse wyboru platnosci PayPal’em wzgledem platnosci gotowka maleja o ok. 1.4%, ceteris paribus.

INTERPRETACJA DLA SUBSKRYBCJI:
1) W przypadku posiadania subskrybcji szansa używania karty wględem gotówki rośnie o 236% 2) W przypadku posiadania subskrybcji szansa używania PayPal względem gotówki rośnie o 100%.

INTERPRETACJA DLA KWOTY ZAMÓWIENIA 1) Wraz ze wzrostem kwoty zamowienia o 1 USD szanse wybroru płatnośi kartą w1zględem gotówki maleją o ok 1%. 2) Wraz ze wzrostem kwoty zamowienia o 1 USD szanse wybroru płatnośi PayPal w1zględem gotówki maleją o ok 1,3%.

Predykcja: Ze wzgledu na specyficzny format danych wesciowych dla mlogit (a wiec i dla predict po mlogit) najlatwiej “wyciac” wektor z danych shop_long i ewentualnie modyfikowac do pozadanych wartosci zm. objasniajacych (np. z wykorzystaniem rep(). Wysstarczy zmodyfikowac tylko zm. objasniajace, reszte kolumn mozna zostawic, gdyz nie biora udzialu w predict).

przyklad<-shop_long[1:3,]
head(przyklad)
##   customerid age purchaseamountusd subscription paymentmethod    idx
## 1        983  35                12            1         FALSE 1:Cash
## 2        983  35                12            1         FALSE 1:Card
## 3        983  35                12            1          TRUE 1:yPal
## 
## ~~~ indexes ~~~~
##   id1        id2
## 1   1       Cash
## 2   1 Debit Card
## 3   1     PayPal
## indexes:  1, 2
predict(mlogit, newdata = przyklad)
##       Cash Debit Card     PayPal 
##  0.1241161  0.4248313  0.4510526

i ewentualnie modyfikowac do pozadanych wartosci zm. objasniajacych (np. z wykorzystaniem rep() ) (wystarczy zmodyfikowac tylko zm. objasniajace, reszte kolumn mozna zostawic, gdyz nie biora udzialu w predict)

Oszacuj prawdopodobienstwa wybrania kazdej z dostepnych metod platnosci dla przykladowych transakcji. Ktora metoda platonosci zostanie wybrana z najwiekszym prawdopodobienstwem w kazdym z przypadkow ?

  1. klient lat 44, bez subskrypcji, kwota transakcji 100 USD …

  2. klient lat 20, bez subskrypcji, kwota transakcji 34 USD …

wykres - jak zmienia sie prawdopodobienstwo dla roznych poziomow wieku i subskrypcji przy pewnym ustalonym poziomie kwoty transakcji

X<-shop_long[1:30,] #. 5 poziomow wieku, 2 kat. subskrypcji, i wszystko x3  = 30
AGE = seq(20,60,10)
USD = 50   # ustalamy kwote transakcji na pewnym poziomie z zakresu np. 50$
SUB = c(0,1)
levels = expand.grid(c(1,2,3),AGE, USD, SUB)
X[2:4]=levels[2:4]
head(X)
## ~~~~~~~
##  first 10 observations out of 30 
## ~~~~~~~
##    customerid age purchaseamountusd subscription paymentmethod    idx
## 1         983  20                50            0         FALSE 1:Cash
## 2         983  20                50            0         FALSE 1:Card
## 3         983  20                50            0          TRUE 1:yPal
## 4         753  30                50            0         FALSE 2:Cash
## 5         753  30                50            0         FALSE 2:Card
## 6         753  30                50            0          TRUE 2:yPal
## 7        3062  40                50            0         FALSE 3:Cash
## 8        3062  40                50            0         FALSE 3:Card
## 9        3062  40                50            0          TRUE 3:yPal
## 10        729  50                50            0         FALSE 4:Cash
## 
## ~~~ indexes ~~~~
##    id1        id2
## 1    1       Cash
## 2    1 Debit Card
## 3    1     PayPal
## 4    2       Cash
## 5    2 Debit Card
## 6    2     PayPal
## 7    3       Cash
## 8    3 Debit Card
## 9    3     PayPal
## 10   4       Cash
## indexes:  1, 2
X2 <- melt(predict(mlogit, newdata = X),  value.name = "probability")
X3 <- cbind(X, X2[order(X2$Var1),])
ggplot(X3, aes(x = age, y = probability, colour = as.factor(subscription))) +
  geom_line() + facet_grid(Var2 ~ .)

Zapoznaj sie z wykresem i zastanow sie, jak polaczyc wnioski wyniesione z wykresu z otrzymanymi wczesniej i zinterpretowanymi ilorazami szans

Sprobuj otrzymac analogiczny wykres, ale prezentujacy zmiany prawdopodobienstw wzdluz zmieniajacej sie kwoty transakcji zamiast wieku klienta na osi poziomej