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)
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 ?
klient lat 44, bez subskrypcji, kwota transakcji 100 USD …
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