library(readxl)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(DescTools)
library(epitools)
# *Găn dữ liệu BikeSales cho biến shop1*
shop1 <- read_excel("D:/RStudio/CustomerShopping.xlsx", sheet =1)
# *Gắn tên viết tắt cho các biến để dễ thao tác*
names(shop1)
## [1] "DATE" "ID" "GENDER" "AGE" "CATEGORY" "QUANTITY" "PRICE"
## [8] "PAYMENT" "AREA"
names(shop1) <- c("DATE", "ID", "GD", "AGE", "CATE", "QT", "PRI", "PAY", "AREA")
head(shop1)
## # A tibble: 6 x 9
## DATE ID GD AGE CATE QT PRI PAY AREA
## <dttm> <chr> <chr> <dbl> <chr> <dbl> <dbl> <chr> <chr>
## 1 2021-11-05 00:00:00 C414588 M 50 Cosmetics 2 81.3 Cash Othe~
## 2 2021-11-05 00:00:00 C109553 F 27 Other products 1 11.7 Cash Othe~
## 3 2021-11-05 00:00:00 C272095 F 65 Food & Bevera~ 2 10.5 Cash Othe~
## 4 2021-11-05 00:00:00 C254603 F 19 Clothing 1 300. Cash Mall~
## 5 2021-11-05 00:00:00 C534710 F 51 Food & Bevera~ 4 20.9 Cash Othe~
## 6 2021-11-05 00:00:00 C211570 F 46 Clothing 1 300. Cash Othe~
qt <- cut(shop1$QT, breaks = c(1,2,5), labels=c("ít","nhiều"))
qt <- ifelse(qt == "nhiều",1,0)
table(qt)
## qt
## 0 1
## 12186 36845
Ước lượng hàm hồi quy cho biến Gender (Giới tính) phụ thuộc vào các biến độc lập bao gồm biến Age, biến Quantity và biến Price.
Đối với biến Gender phạm trù thứ hai của biến nhị phân thể hiện cho “thành công” ở đây là “For Sale”, thể hiện mục đich sử dụng căn hộ.
GD <- shop1$GD
AGE <- shop1$AGE
PR <- shop1$PRI
CATE <- shop1$CATE
PAY <- shop1$PAY
ARE <- shop1$AREA
# Xác định thứ tự các phạm trù của biến Quantity:
levels(factor(qt))
## [1] "0" "1"
# Ước lượng
purch1 <- glm(factor(qt) ~ GD + AGE + PR + CATE + PAY + ARE , family = binomial(link = 'logit'), data = shop1)
summary(purch1)
##
## Call:
## glm(formula = factor(qt) ~ GD + AGE + PR + CATE + PAY + ARE,
## family = binomial(link = "logit"), data = shop1)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.447e-02 5.061e-02 0.484 0.6287
## GDM -5.561e-02 2.191e-02 -2.538 0.0111 *
## AGE 4.874e-04 7.175e-04 0.679 0.4970
## PR 1.058e-03 2.437e-05 43.402 <2e-16 ***
## CATECosmetics 9.788e-01 3.834e-02 25.532 <2e-16 ***
## CATEFood & Beverage 1.094e+00 4.033e-02 27.127 <2e-16 ***
## CATEOther products 3.769e-01 3.034e-02 12.420 <2e-16 ***
## PAYCredit Card -3.820e-05 2.426e-02 -0.002 0.9987
## PAYDebit Card -4.615e-03 2.894e-02 -0.159 0.8733
## AREMall of Istanbul -1.995e-02 3.402e-02 -0.586 0.5576
## AREOther places -2.300e-02 2.794e-02 -0.823 0.4105
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 54985 on 49030 degrees of freedom
## Residual deviance: 51596 on 49020 degrees of freedom
## (12139 observations deleted due to missingness)
## AIC: 51618
##
## Number of Fisher Scoring iterations: 5
Ta có hàm dữ liệu nhị phân logit:
logit(π) = - (5,561e-02).GDM +(1,058e-03).PR + (9,788e-01). CATECosmetics + (1.094e+00). CATEFood & Beverage + (3.769e-01).CATEOther products
# Ước lượng
purch2 <- glm(factor(qt) ~ GD + AGE + PR + CATE + PAY + ARE, family = binomial(link = 'probit'), data = shop1)
summary(purch2)
##
## Call:
## glm(formula = factor(qt) ~ GD + AGE + PR + CATE + PAY + ARE,
## family = binomial(link = "probit"), data = shop1)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.299e-01 2.897e-02 4.484 7.32e-06 ***
## GDM -3.230e-02 1.294e-02 -2.496 0.0126 *
## AGE 2.612e-04 4.237e-04 0.617 0.5375
## PR 5.600e-04 1.201e-05 46.637 < 2e-16 ***
## CATECosmetics 5.031e-01 2.174e-02 23.145 < 2e-16 ***
## CATEFood & Beverage 5.593e-01 2.268e-02 24.661 < 2e-16 ***
## CATEOther products 1.055e-01 1.656e-02 6.374 1.84e-10 ***
## PAYCredit Card -4.008e-04 1.432e-02 -0.028 0.9777
## PAYDebit Card -4.450e-03 1.708e-02 -0.261 0.7945
## AREMall of Istanbul -1.154e-02 2.007e-02 -0.575 0.5653
## AREOther places -1.330e-02 1.648e-02 -0.807 0.4196
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 54985 on 49030 degrees of freedom
## Residual deviance: 51638 on 49020 degrees of freedom
## (12139 observations deleted due to missingness)
## AIC: 51660
##
## Number of Fisher Scoring iterations: 6
Ta có hàm dữ liệu nhị phân probit:
probit(π) = (1.299e-01) - (3.230e-02).GDM +(5.600e-04).PR + (5.031e-01). CATECosmetics + (5.031e-01). CATEFood & Beverage + (1.055e-01).CATEOther products
# Ước lượng
purch3 <- glm(factor(qt) ~ GD + AGE + PR + CATE + PAY + ARE, family = binomial(link = 'cloglog'), data = shop1)
summary(purch3)
##
## Call:
## glm(formula = factor(qt) ~ GD + AGE + PR + CATE + PAY + ARE,
## family = binomial(link = "cloglog"), data = shop1)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.075e-01 2.628e-02 -4.090 4.32e-05 ***
## GDM -2.839e-02 1.199e-02 -2.367 0.01794 *
## AGE 2.021e-04 3.921e-04 0.515 0.60633
## PR 4.935e-04 9.702e-06 50.869 < 2e-16 ***
## CATECosmetics 4.075e-01 1.943e-02 20.976 < 2e-16 ***
## CATEFood & Beverage 4.504e-01 2.022e-02 22.269 < 2e-16 ***
## CATEOther products -4.985e-02 1.462e-02 -3.410 0.00065 ***
## PAYCredit Card -1.159e-03 1.325e-02 -0.087 0.93028
## PAYDebit Card -6.349e-03 1.582e-02 -0.401 0.68812
## AREMall of Istanbul -1.018e-02 1.856e-02 -0.549 0.58325
## AREOther places -1.175e-02 1.522e-02 -0.772 0.44021
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 54985 on 49030 degrees of freedom
## Residual deviance: 51565 on 49020 degrees of freedom
## (12139 observations deleted due to missingness)
## AIC: 51587
##
## Number of Fisher Scoring iterations: 7
Ta có hàm dữ liệu nhị phân probit:
probit(π) = - (1,075e-01) - (2,839e-02).GDM +(4,935e-04).PR + (4,075e-01). CATECosmetics + (4,504e-01). CATEFood & Beverage + (4,504e-01).CATEOther products
Sau khi thực hiện kiểm định sự phù hợp của mô hình logit, probit và cloglog, chúng ta thấy cả 3 mô hình đều phù hợp với dữ liệu.
Tiêu chí AIC là một số liệu được sử dụng để so sánh sự phù hợp của các mô hình hồi quy khác nhau, ta có:
# Tiêu chí AIC
aic1 <- AIC(purch1)
aic2 <- AIC(purch2)
aic3 <- AIC(purch3)
AIC <- cbind(aic1,aic2,aic3)
AIC
## aic1 aic2 aic3
## [1,] 51618.41 51660.45 51587.46
Từ kết quả phân tích và thống kê của phần mềm R, ta có:
AIC (logit)= 51618,41
AIC (probit) = 51660,45
AIC (cloglog) = 51587,46
Vậy mô hình hồi quy cloglog có AIC thấp nhất mang lại sự phù hợp nhất.
Brier Score là chỉ tiêu dùng để đánh giá mô hình hồi quy logistic, giá trị của Brier Score càng nhỏ nghĩa là chênh lệch giữa xác suất thực tế và xác suất tính từ mô hình càng nhỏ, nghĩa là mô hình càng tốt.
library (DescTools)
BrierScore(purch1)
## [1] 0.1744313
BrierScore(purch2)
## [1] 0.1757328
BrierScore(purch3)
## [1] 0.1768303
Từ tính toán của Giá trị Brier Score của 3 mô hình logit, probit và cloglog, ta thấy BrierScore của logit có giá trị 0,1744 nhỏ nhất nghĩa là mô hình này là tốt nhất.
# Tiêu chí Deviance
de1 <- deviance(purch1)
de2 <- deviance(purch2)
de3 <- deviance(purch3)
deviance <- cbind(de1,de2,de3)
deviance
## de1 de2 de3
## [1,] 51596.41 51638.45 51565.46
Từ kết quả phân tích và thống kê của phần mềm R, ta có:
Deviance (logit)= 51596,41
Deviance (probit) = 51638,45
Deviance (cloglog) = 51565,46
Vậy mô hình hồi quy logit có Deviance thấp nhất mang lại sự phù hợp nhất.
# Bộ dữ liệu shop sau khi mã hoá biến Quantity:
Shopmahoa<-subset(shop1, shop1$QT <=5)
dim(Shopmahoa)
## [1] 61170 9
head (Shopmahoa)
## # A tibble: 6 x 9
## DATE ID GD AGE CATE QT PRI PAY AREA
## <dttm> <chr> <chr> <dbl> <chr> <dbl> <dbl> <chr> <chr>
## 1 2021-11-05 00:00:00 C414588 M 50 Cosmetics 2 81.3 Cash Othe~
## 2 2021-11-05 00:00:00 C109553 F 27 Other products 1 11.7 Cash Othe~
## 3 2021-11-05 00:00:00 C272095 F 65 Food & Bevera~ 2 10.5 Cash Othe~
## 4 2021-11-05 00:00:00 C254603 F 19 Clothing 1 300. Cash Mall~
## 5 2021-11-05 00:00:00 C534710 F 51 Food & Bevera~ 4 20.9 Cash Othe~
## 6 2021-11-05 00:00:00 C211570 F 46 Clothing 1 300. Cash Othe~
Shopmahoa$QT[Shopmahoa$QT <=2]<-0
Shopmahoa$QT[Shopmahoa$QT > 2]<-1
head(Shopmahoa)
## # A tibble: 6 x 9
## DATE ID GD AGE CATE QT PRI PAY AREA
## <dttm> <chr> <chr> <dbl> <chr> <dbl> <dbl> <chr> <chr>
## 1 2021-11-05 00:00:00 C414588 M 50 Cosmetics 0 81.3 Cash Othe~
## 2 2021-11-05 00:00:00 C109553 F 27 Other products 0 11.7 Cash Othe~
## 3 2021-11-05 00:00:00 C272095 F 65 Food & Bevera~ 0 10.5 Cash Othe~
## 4 2021-11-05 00:00:00 C254603 F 19 Clothing 0 300. Cash Mall~
## 5 2021-11-05 00:00:00 C534710 F 51 Food & Bevera~ 1 20.9 Cash Othe~
## 6 2021-11-05 00:00:00 C211570 F 46 Clothing 0 300. Cash Othe~
library(ggplot2)
library(caret)
## Warning: package 'caret' was built under R version 4.3.1
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following objects are masked from 'package:DescTools':
##
## MAE, RMSE
# Đánh giá mô hình trên tập kiểm tra
predictions <- predict(purch1, newdata = Shopmahoa, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(qt, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 0 0
## 1 12186 36845
##
## Accuracy : 0.7515
## 95% CI : (0.7476, 0.7553)
## No Information Rate : 0.7515
## P-Value [Acc > NIR] : 0.5024
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.7515
## Prevalence : 0.2485
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : 0
##
Mô hình logit có độ chính xác toàn thể là 75,15%, độ nhạy là 66,28% và độ hiệu quả là 58,63%
# Đánh giá mô hình trên tập kiểm tra
predictions1 <- predict(purch2, newdata = Shopmahoa, type = "response")
predicted_classes1 <- ifelse(predictions1 > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
predictions2<-factor(predicted_classes1, levels = c("0","1"))
actual1<- factor(qt, labels = c("0","1"))
confusionMatrix(table(predictions2, actual1))
## Confusion Matrix and Statistics
##
## actual1
## predictions2 0 1
## 0 0 0
## 1 12186 36845
##
## Accuracy : 0.7515
## 95% CI : (0.7476, 0.7553)
## No Information Rate : 0.7515
## P-Value [Acc > NIR] : 0.5024
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.7515
## Prevalence : 0.2485
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : 0
##
Mô hình probit có độ chính xác toàn thể là 75,15%; độ nhạy là 66,86% và độ hiệu quả là 58,21%.
# Đánh giá mô hình trên tập kiểm tra
predictions2 <- predict(purch3, newdata = Shopmahoa, type = "response")
predicted_classes2 <- ifelse(predictions2 > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
predictions3<-factor(predicted_classes2, levels = c("0","1"))
actual2<- factor(qt, labels = c("0","1"))
confusionMatrix(table(predictions3, actual2))
## Confusion Matrix and Statistics
##
## actual2
## predictions3 0 1
## 0 0 0
## 1 12186 36845
##
## Accuracy : 0.7515
## 95% CI : (0.7476, 0.7553)
## No Information Rate : 0.7515
## P-Value [Acc > NIR] : 0.5024
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.7515
## Prevalence : 0.2485
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : 0
##
Mô hình cloglog có độ chính xác toàn thể là 75,15%, độ nhạy là 68,79% và độ hiệu quả là 56,96%.
Độ chính xác toàn thể của mô hình cloglog cao nhất; độ nhạy của mô hình cloglog cao nhất và độ hiệu quả của mô hình probit cao nhất. Vì mục tiêu của bài tiểu luận là đánh giá việc tiêu thụ sản phẩm mua sắm của khách hàng nên độ chính xác là tiêu chí quan trọng nhất để đánh giá trong trường hợp này, vì vậy mô hình lựa chọn là mô hình cloglog.
Kết luận: Dựa vào 4 tiêu chuẩn ta thấy mô hình cloglog là mô hình được lựa chọn nhiều nhất do đó MH là tốt nhất để phân tích đánh giá các yếu tố ảnh hưởng đến việc tiêu thụ sản phẩm mua sắm của khách hàng.
# *Găn dữ liệu BikeSales cho biến bike*
shop <- read_excel("D:/RStudio/CustomerShopping.xlsx", sheet =1)
# *Gắn tên viết tắt cho các biến để dễ thao tác*
names(shop)
## [1] "DATE" "ID" "GENDER" "AGE" "CATEGORY" "QUANTITY" "PRICE"
## [8] "PAYMENT" "AREA"
names(shop) <- c("DATE", "ID", "GD", "AGE", "CATE", "QT", "PRI", "PAY", "AREA")
head(shop)
## # A tibble: 6 x 9
## DATE ID GD AGE CATE QT PRI PAY AREA
## <dttm> <chr> <chr> <dbl> <chr> <dbl> <dbl> <chr> <chr>
## 1 2021-11-05 00:00:00 C414588 M 50 Cosmetics 2 81.3 Cash Othe~
## 2 2021-11-05 00:00:00 C109553 F 27 Other products 1 11.7 Cash Othe~
## 3 2021-11-05 00:00:00 C272095 F 65 Food & Bevera~ 2 10.5 Cash Othe~
## 4 2021-11-05 00:00:00 C254603 F 19 Clothing 1 300. Cash Mall~
## 5 2021-11-05 00:00:00 C534710 F 51 Food & Bevera~ 4 20.9 Cash Othe~
## 6 2021-11-05 00:00:00 C211570 F 46 Clothing 1 300. Cash Othe~
# Bảng tần số
cate.gd <- table(shop$GD,shop$CATE)
table(shop$GD,shop$CATE)/1000*100
##
## Clothing Cosmetics Food & Beverage Other products
## F 1259.1 563.2 544.4 1288.6
## M 846.7 377.6 366.5 870.9
addmargins(cate.gd)
##
## Clothing Cosmetics Food & Beverage Other products Sum
## F 12591 5632 5444 12886 36553
## M 8467 3776 3665 8709 24617
## Sum 21058 9408 9109 21595 61170
## *Hiển thị theo biểu đồ*
library(ggplot2)
shop |> ggplot(aes(x= CATE,y=after_stat(count))) + geom_bar(fill="orange") + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = "count", color = "brown", vjust = - .5) + facet_grid(. ~GD) + labs(x = "Gender",y = "Number of customers")
Dựa theo kết quả bảng thông kê và đồ thị của phần mềm R, chúng ta thấy số khách hàng nữ đến trung tâm mua sắm quần áo chiếm tỷ lệ nhiều nhất đến 20,58% trong tổng số 61170 người và cao gấp 1,5 lần nhóm khách hàng nam (8467 người). Đồng thời ta có thể thấy việc mua sắm của khách hàng nam và khách nữ về mỹ phẩm và thực phẩm, nước có ga có chênh lệch tương đối ít và không nhiều, trong đó số khách nữ đến mua mỹ phẩm (5632 người) nhiều gấp 1,5 lần so với nhóm khách nam (3776 người). Tương tụ, nhóm khách nam đến mua các sản phẩm tiêu dùng khác như giày, sách,.. tương đối ít so với số người nữ (21,07%).
# Bảng tần số
pay.gd <- table(shop$GD,shop$PAY)
table(shop$GD,shop$PAY)/1000*100
##
## Cash Credit Card Debit Card
## F 1638.9 1286.7 729.7
## M 1103.3 860.7 497.7
addmargins(pay.gd)
##
## Cash Credit Card Debit Card Sum
## F 16389 12867 7297 36553
## M 11033 8607 4977 24617
## Sum 27422 21474 12274 61170
## *Hiển thị theo biểu đồ*
library(ggplot2)
shop |> ggplot(aes(x= PAY,y=after_stat(count))) + geom_bar(fill="purple") + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = "count", color = "brown", vjust = - .5) + facet_grid(. ~GD) + labs(x = "Gender",y = "Number of customers")
Dựa theo kết quả bảng thông kê và đồ thị của phần mềm R, chúng ta thấy xu hướng mua sắm hàng hoá thanh toán bằng tiền mặt ở cả nam và nữ đều chiếm tỷ lệ rất cao trong tổng số lần lượt là 18% và 26,8%. Trong đó, việc mua sắm bằng tiền mặt ở nữ nhiều gấp 1,3 lần so với viẹc thanh toán bằng thẻ tín dụng và gấp đến 2,3 lần so với thanh toán bằng thẻ ghi nợ. Tương tự ở nhóm nam giới thanh toán bằng thẻ tín dụng (8607 người) có tỷ lệ 14,1%, ít hơn việc thanh toán bằng tiền mặt (11033 người) và nhiều hơn số khách nam mua sắm bằng thẻ ghi nợ (4977 người).
#1.Thống kê mô tả cho 2 biến giới tính và biến tình trạng sở hữu nhà của những khách hàng đến mua xe đạp.
pa.ar <- table(shop$PAY, shop$AREA)
addmargins(pa.ar)
##
## Kanyon Mall of Istanbul Other places Sum
## Cash 5459 5517 16446 27422
## Credit Card 4270 4340 12864 21474
## Debit Card 2530 2465 7279 12274
## Sum 12259 12322 36589 61170
## *Hiển thị theo biểu đồ*
shop|> ggplot(aes(x= PAY,y=after_stat(count))) + geom_bar(fill="lightblue") + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = "count", color = "brown", vjust = - .5) + facet_grid(. ~AREA) + labs(x = "AREA",y = "Number of customers")
Theo kết quả tính toán và đồ thị của phần mềm R, chúng ta thấy xu hướng
khách hàng đến các trung tâm thương mại mua sắm bằng tiền mặt chiếm tỷ
lệ tương đối cao, trong đó nhóm khách hàng tại trung tâm Instabul chiếm
9,019%, tại Kanyon chiếm 8,924% và ở các khu vực mua sắm khác chiếm đến
26,886%. Tương tự ta có thể thấy việc mua sắm thanh toán bằng thẻ tín
dụng và thẻ ghi nợ tại Instabul và Kanyon không có sự chênh lệch quá
nhiều, tương đối ít lần lượt là 7,095% và 6,981%.
Với dữ liệu gốc, biến AGE (Độ tuổi) là biến định lượng nhận các giá trị từ 18 tuổi đến 69 tuổi. Dựa vào phần mềm phân tích R, tôi sẽ thực hiện mã hoá chia dữ liêu thành 3 khoảng với độ tuổi thanh thiếu niên thấp từ 18 tuổi đến 35 tuổi, độ tuổi trung niên trung bình nằm trong khoảng từ 35 tuổi đến 50 tuổi và nhóm khách hàng cao tuổi từ 50 tuổi trở lên.Kết quả thu được có 21179 khách thanh thiếu niên, 17814 người trung niên và còn lại 22177 khách hàng cao tuổi đến mua xe đạp tại cửa hàng.
df<- cut(x = shop$AGE,
breaks = c(-Inf, 35, 50, Inf), # Lấy khoảng dữ liệu từ 30000-100000
labels = c("Lower", "Average", "High"), # Các mức tuổi
right = TRUE) # Cho phép lấy khoảng đóng bên phải
table(df)
## df
## Lower Average High
## 21179 17814 22177
#Lập bảng tần số giữa biến Age (Độ tuổi) và biến Payment (Phương thức thanh toán) tới thói quen mua sắm:
pay.sex <- table(shop$PAY,df)
addmargins(pay.sex)
## df
## Lower Average High Sum
## Cash 9456 7975 9991 27422
## Credit Card 7459 6290 7725 21474
## Debit Card 4264 3549 4461 12274
## Sum 21179 17814 22177 61170
## *Hiển thị theo biểu đồ*
library(ggplot2)
barplot(pay.sex, beside = TRUE, xlab = "Age Range",main = "Number of Payment in each Age group")
shop |> ggplot(aes(x= df,y=after_stat(count))) + geom_bar(fill="brown") + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = "count", color = "blue", vjust = - .5) + facet_grid(. ~PAY) + labs(x = "Payment",y = "Number of customers")
Dựa theo kết quả bảng thông kê và đồ thị của phần mềm R, chúng ta thấy nhóm khách hàng mua sắm thanh toán bằng tiền mặt (27422 người) cao gấp 1,3 lần so với nhóm khách thanh toán bằng thẻ tín dụng và gấp 2,2 lần số khách thanh toán bằng thẻ ghi nợ, trong đó nhóm khách cao tuổi từ 50 tuổi trở lên mua sắm bằng tiền mặt (9991 người) chiếm tỷ lệ cao nhất đến 16,33% và nhiều gấp 1,6 lần nhóm khách hàng ở độ tuổi này thanh toán bằng thẻ tín dụng (7725 người), gấp đến 2,8 lần thanh toán bằng thẻ ghi nợ (4461 người).
# Bảng tần số
gd.ag <- table(shop$GD, df)
addmargins(gd.ag)
## df
## Lower Average High Sum
## F 12556 10724 13273 36553
## M 8623 7090 8904 24617
## Sum 21179 17814 22177 61170
## *Hiển thị theo biểu đồ*
library(ggplot2)
barplot(gd.ag, beside = TRUE, xlab = "Age Range",main = "Number of Males and Females in each Age group")
shop |> ggplot(aes(x= df,y=after_stat(count))) + geom_bar(fill="brown") + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = "count", color = "blue", vjust = - .5) + facet_grid(. ~GD) + labs(x = "Gender",y = "Number of customers")
Theo kết quả phân tích và đồ thị chúng ta thấy được xu hướng khách hàng đến mua sắm tại các trung tâm thương mại nhiều hơn so với nam giới, trong đó nhóm khách hàng nữ cao tuổi từ 50 tuổi trở lên (13273 người) đến mua sắm cao gấp 1,5 lần so với nhóm khách nam (8904 người) ở độ tuổi này. Đồng thời ta có thể thấy số khách hàng nam từ 35 tuổi trở xuống (14,10%) đến trung tâm mua sắm chiếm tỷ lệ thấp hơn nhiều so với nhóm khách hàng nữ (20,53%) ở độ tuổi này. Tương tự với nhóm khách hàng nữ trung niên năm trong khoảng từ 35 tuổi đến 50 tuổi đến mua sắm cao hơn rất nhiều so số khách hàng nam trong độ tuổi này, chiếm tỷ, chiếm tỷ lệ lần lượt là 17,53% và 11,59%.
Với dữ liệu gốc, biến Price (Giá sản phẩm) là biến định lượng nhận các giá trị từ 5,23 TRY đến 5250 TRY.. Dựa vào phần mềm phân tích R, tôi sẽ thực hiện mã hoá chia dữ liêu thành 2 khoảng với mức giá trung bình từ 700 TRY trở xuống và mức giá cao của sản phẩm từ 700 TRY trở lên. Kết quả thu được có 40530 sản phẩm đã được bán với mức giá trung bình và 20640 được bán với mức giá cao.
df1<- cut(x = shop$PRI,
breaks = c(-Inf, 700, Inf), # Lấy khoảng dữ liệu
labels = c("Average", "High"), # Các mức giá
right = TRUE) # Cho phép lấy khoảng đóng bên phải
table(df1)
## df1
## Average High
## 40530 20640
#1.Thống kê mô tả cho 2 biến giới tính và biến tình trạng sở hữu nhà của những khách hàng đến mua xe đạp.
gd.pr<- table(shop$GD, df1)
addmargins(gd.pr)
## df1
## Average High Sum
## F 24278 12275 36553
## M 16252 8365 24617
## Sum 40530 20640 61170
## *Hiển thị theo biểu đồ*
shop|> ggplot(aes(x= df1,y=after_stat(count))) + geom_bar(fill="lightblue") + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = "count", color = "brown", vjust = - .5) + facet_grid(. ~GD) + labs(x = "Gender",y = "Number of customers")
Theo kết quả tính toán và đồ thị của phần mềm R, chúng ta thấy xu hướng khách hàng nữ mua các sản phẩm có mức giá trung bình từ 700 TRY trở xuống chiếm tỷ lệ rất cao đến 39,7% trong tống số 61170 người và gấp 2 lần nhóm khách nam giới (26,6&). Tương tự đối với các sản phẩm có mức giá cao, số khách nam (8365 người) mua ít hơn nhóm khách hàng nữ (12275 người),ít gấp 1,5 lần.
library(epitools)
riskratio(gd.pr)
## $data
## df1
## Average High Total
## F 24278 12275 36553
## M 16252 8365 24617
## Total 40530 20640 61170
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## F 1.000000 NA NA
## M 1.011888 0.9892695 1.035023
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## F NA NA NA
## M 0.3058534 0.3076873 0.3058309
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Thông qua kết quả phân tích của phần mềm R cho thấy với độ tin cậy 95%, xác suất số khách nam đến mua sản phẩm có mức giá cao chiếm tỷ lệ gấp 1,012 lần so với khách nữ đến mua những sản phẩm từ 700 TRY..Từ đó cho thấy gần như không có sự chênh lệch nhiều giữa việc khách nam hay nữ trong việc mua những sản phẩm cao giá.
oddsratio(gd.pr)
## $data
## df1
## Average High Total
## F 24278 12275 36553
## M 16252 8365 24617
## Total 40530 20640 61170
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## F 1.000000 NA NA
## M 1.017998 0.9837969 1.053378
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## F NA NA NA
## M 0.3058534 0.3076873 0.3058309
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Dựa vào kết quả phân tích của phần mềm R cho thấy với độ tin cậy 95%, việc đã sở hữu nhà của khách hàng nam và khách hàng nữ đến để mua xe đạp là gần như nhau, chênh lệch gấp 1,018 lần.
Kiểm định chi bình phương (Chi-Square) cho hai biến giới tình và giá sản phẩm.
Đặt giả thuyết:
Ho: Biến giới tính và biến giá sản phẩm là độc lập
H1: Biến giới tính và biến giá sản phẩm không độc lậP
chisq.test(gd.pr)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: gd.pr
## X-squared = 1.0308, df = 1, p-value = 0.31
Với p_value = 0,31 > 5% vậy ta bác bỏ Ho tại mức ý nghĩa 5%. Kết quả này cho chúng ta thấy rằng: Chưa đủ cơ sở để nói rằng giới tính khách hàng có liên quan tới việc chọn sản phẩm có giá như thế nào.
1. Ước lượng tỷ lệ khách hàng mua nhiều hơn 3 sản phẩm tại các trung tâm thương mại khác nhau, đồng thời kiểm định xem tỷ lệ (%) khách hàng mua nhiều hơn 3 sản phẩm có phải là 65% không ?
a.Đặt giả thuyết:
Ho: p = 0.65
H1: p # 0.65
inc <- shop[shop$QT > 3,]
prop.test(length(inc$QT), length(shop$QT), p = 0.65)
##
## 1-sample proportions test with continuity correction
##
## data: length(inc$QT) out of length(shop$QT), null probability 0.65
## X-squared = 16892, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.65
## 95 percent confidence interval:
## 0.3954632 0.4032417
## sample estimates:
## p
## 0.3993461
Trong kết quả phần mềm R, prop.test ước tính tỉ lệ khách hàng mua nhiều hơn 3 sản phẩm là 0.3993 (tức 39,93%) vậy ta bác bỏ Ho và với khoảng tin cậy 95% là 0,3955 đến 0,4032. Giá trị khi chi bình phương là 16,892; với trị số p < 2.2e-16. Như vậy, nghiên cứu này cho thấy tỷ lệ khách hàng mua nhiều hơn 3 sản phẩm tại các trung tâm thương mại khác nhau thấp hơn 65%.
Thực hiện bài toán kiểm định giả thuyết sự bằng nhau về tỷ lệ khách khách hàng mua nhiều hơn 3 sản phẩm của 2 tổng thể giới tính (nam và nữ):
Đặt giả thuyết
Ho: p1 = p2
H1: p1 # p2
icm <- shop[shop$GD =="M",]
icf <- shop[shop$GD =="F",]
icm3 <- icm[icm$QT > 3,]
icf3 <- icf[icf$QT > 3,]
a <- c(nrow(icm), nrow(icf))
b <- c(nrow(icm3), nrow(icf3))
prop.test(b,a)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: b out of a
## X-squared = 2.515, df = 1, p-value = 0.1128
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.014382024 0.001506288
## sample estimates:
## prop 1 prop 2
## 0.3954990 0.4019369
Trong kết quả kiểm định trên, prop.test ước tính tỷ lệ khách nam giới mua nhiều hơn 3 sản phẩm là 0,3955 và ước tính tỉ lệ khách nữ giới mua trên 3 sản phẩm là 0,4019. Vậy ta bác bỏ Ho với độ tin cậy 95%. Đồng thời phân tích còn cho thấy với mức ý nghĩa 5%, tỷ lệ nam giới mua nhiều hơn 3 sản phẩm cao hơn 11,28%.
2.Ước lượng tỷ lệ khách hàng mua các sản phẩm có mức giá từ 300 TRY trở xuống, đồng thời kiểm định xem tỷ lệ (%) khách hàng khách hàng mua những sản phẩm có giá ít hơn 300 TRY có phải là 30% không ?
a.Đặt giả thuyết:
Ho: p = 0.3
H1: p # 0.3
prg <- shop[shop$PRI < 300,]
prop.test(length(prg$PRI), length(shop$PRI), p = 0.3)
##
## 1-sample proportions test with continuity correction
##
## data: length(prg$PRI) out of length(shop$PRI), null probability 0.3
## X-squared = 12311, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.3
## 95 percent confidence interval:
## 0.5016205 0.5095607
## sample estimates:
## p
## 0.505591
Trong kết quả phần mềm R, prop.test ước tính tỉ lệ khách hàng mua các sản phẩm có mức giá 300 TRY trở xuống là 0,5056 (tức 50,56%) vậy ta bác bỏ Ho và với khoảng tin cậy 95% là 0,5016 đến 0,5096. Giá trị khi chi bình phương là 12,311; với trị số p < 2.2e-16. Như vậy, nghiên cứu này cho thấy tỷ lệ khách hàng mua những sản phẩm có giá ít hơn 300 TRY tại các trung tâm thương mại khác nhau cao hơn 30%.
Thực hiện bài toán kiểm định giả thuyết sự bằng nhau về tỷ lệ khách khách hàng tỷ lệ khách hàng mua các sản phẩm có mức giá từ 300 TRY trở xuống của 2 tổng thể giới tính (nam và nữ):
Đặt giả thuyết
Ho: p1 = p2
H1: p1 # p2
prgm <- shop[shop$GD == 'M',]
prgf <- shop[shop$GD == 'F',]
prgm3 <- prgm[prgm$PRI < 300,]
prgf3 <- prgf[prgf$PRI < 300,]
c <- c(nrow(prgm), nrow(prgf))
d <- c(nrow(prgm3), nrow(prgf3))
prop.test(d,c)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: d out of c
## X-squared = 0.54176, df = 1, p-value = 0.4617
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.011181632 0.005045354
## sample estimates:
## prop 1 prop 2
## 0.5037576 0.5068257
Trong kết quả kiểm định trên, prop.test ước tính tỷ lệ khách nam giới mua những sản phẩm có giá ít hơn 300 TRY là 0,5038 và ước tính tỉ lệ khách nữ giới mua các sản phẩm có mức giá từ 300 TRY trở xuống là 0,5068. Vậy ta bác bỏ Ho với độ tin cậy 95%. Đồng thời phân tích còn cho thấy với mức ý nghĩa 5%, tỷ lệ nam giới mua những sản phẩm có giá ít hơn 300 TRY cao hơn 46,17%.
Mô tả: Dữ liệu CustomerShopping là một bộ dữ liệu bảng lấy từ website: https://www.kaggle.com/datasets/mehmettahiraslan/customer-shopping-dataset. Bộ dữ liệu phân tích và đánh giá thói quen mua sắm danh mục các sản phẩm của mỗi khách hàng tại Istanbul thu thập từ các trung tâm mua sắm khác nhau từ năm 2021 đến năm 2023. Bộ dữ liệu chứa 61170 quan sát và trong đó có 9 biến gồm:
library(readxl)
library(dplyr)
library(ggplot2)
library(DescTools)
library(epitools)
# *Găn dữ liệu BikeSales cho biến bike*
shop <- read_excel("D:/RStudio/CustomerShopping.xlsx", sheet =1)
# *Mô tả chi tiết kiểu biến số của datasheet BikeSales*
str(shop)
## tibble [61,170 x 9] (S3: tbl_df/tbl/data.frame)
## $ DATE : POSIXct[1:61170], format: "2021-11-05" "2021-11-05" ...
## $ ID : chr [1:61170] "C414588" "C109553" "C272095" "C254603" ...
## $ GENDER : chr [1:61170] "M" "F" "F" "F" ...
## $ AGE : num [1:61170] 50 27 65 19 51 46 23 21 48 20 ...
## $ CATEGORY: chr [1:61170] "Cosmetics" "Other products" "Food & Beverage" "Clothing" ...
## $ QUANTITY: num [1:61170] 2 1 2 1 4 1 4 4 3 2 ...
## $ PRICE : num [1:61170] 81.3 11.7 10.5 300.1 20.9 ...
## $ PAYMENT : chr [1:61170] "Cash" "Cash" "Cash" "Cash" ...
## $ AREA : chr [1:61170] "Other places" "Other places" "Other places" "Mall of Istanbul" ...
# *Gắn tên viết tắt cho các biến để dễ thao tác*
names(shop)
## [1] "DATE" "ID" "GENDER" "AGE" "CATEGORY" "QUANTITY" "PRICE"
## [8] "PAYMENT" "AREA"
names(shop) <- c("DATE", "ID", "GD", "AGE", "CATE", "QT", "PRI", "PAY", "AREA")
head(shop)
## # A tibble: 6 x 9
## DATE ID GD AGE CATE QT PRI PAY AREA
## <dttm> <chr> <chr> <dbl> <chr> <dbl> <dbl> <chr> <chr>
## 1 2021-11-05 00:00:00 C414588 M 50 Cosmetics 2 81.3 Cash Othe~
## 2 2021-11-05 00:00:00 C109553 F 27 Other products 1 11.7 Cash Othe~
## 3 2021-11-05 00:00:00 C272095 F 65 Food & Bevera~ 2 10.5 Cash Othe~
## 4 2021-11-05 00:00:00 C254603 F 19 Clothing 1 300. Cash Mall~
## 5 2021-11-05 00:00:00 C534710 F 51 Food & Bevera~ 4 20.9 Cash Othe~
## 6 2021-11-05 00:00:00 C211570 F 46 Clothing 1 300. Cash Othe~
# Trích xuất các quan sát của biến GD = "F" và các quan sát của biến CATE = Cosmetics trong đối tượng shop gắn vào với tên shop1
shop1 <- subset(shop, GD == "F"& CATE == "Cosmetics")
dim(shop1)
## [1] 5632 9
head (shop1)
## # A tibble: 6 x 9
## DATE ID GD AGE CATE QT PRI PAY AREA
## <dttm> <chr> <chr> <dbl> <chr> <dbl> <dbl> <chr> <chr>
## 1 2021-11-05 00:00:00 C228381 F 23 Cosmetics 4 163. Cash Othe~
## 2 2021-11-05 00:00:00 C239989 F 20 Cosmetics 2 81.3 Credit Ca~ Othe~
## 3 2021-11-05 00:00:00 C101079 F 20 Cosmetics 5 203. Cash Mall~
## 4 2021-11-05 00:00:00 C192609 F 19 Cosmetics 4 163. Cash Othe~
## 5 2021-11-05 00:00:00 C100900 F 30 Cosmetics 2 81.3 Debit Card Othe~
## 6 2021-11-05 00:00:00 C936162 F 47 Cosmetics 4 163. Credit Ca~ Othe~
#Bảng summary
summary(shop$AGE)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 30.00 43.00 43.43 56.00 69.00
# Đồ thị
hist (shop$AGE, main = "Frequency of Age", col = "lightblue")
Dựa theo kết quả phân tích của phần mềm R tôi thấy được khách hàng có độ tuổi cao nhất đến trung tâm mua sắm là 69 tuổi và khách hàng có độ tuổi thấp nhất là 18 tuổi; độ tuổi trung bình của mỗi khách hàng đến mua sắm là 43 tuổi và có 50% số người có tuổi dưới 43 tuổi đến mua hàng.Thông qua biểu đồ tần số trên có thể thấy rằng phần lớn những người đến trung tâm mua sắm có độ tuổi nằm trong khoảng từ 20 đến 70 tuổi. Còn lại những người có độ tuổi trung bình dưới 20 tuổi đến mua sắm chiếm số ít trong tổng số 61170 khách hàng.
#Bảng summary
summary(shop$PRI)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.23 40.66 203.30 686.63 1200.32 5250.00
# Đồ thị
hist (shop$PRI, main = "Frequency of Price", col = "orange")
Dựa theo kết quả phân tích của phần mềm R tôi thấy được khách hàng mua sản phẩm với mức giá thấp nhất là 5,23 TRY và khách hàng mua sản phẩm với mức giá cao nhất là 5250 TRY; trung bình khách thường mua sản phẩm có mức giá khoảng 686,63 TRY và có 50% số người mua hàng với mức giá dưới 203,30 TRY.Thông qua biểu đồ tần số trên có thể thấy rằng phần lớn những người đến mua sắm thường mua các sản phẩm có giá trung bình dưới 2000 TRY. Còn lại có rất ít người mua sản phẩm từ 2500 TRY trở lên trong tổng số 61170 khách hàng.
# Bảng summary
summary(shop$QT)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 2.000 3.000 3.006 4.000 5.000
# Đồ thị
library(ggplot2)
shop |> ggplot(aes(x = QT, y = after_stat(count))) +
geom_bar(fill = 'blue') +geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat ='count', color = 'red', vjust = - .5) +labs(x = 'Frequency of Quantity', y = 'Number of customers')
Dựa vào số liệu thống kê và đồ thị ở trên, ta phân tích được khách hàng mua nhiều nhất 5 sản phẩm chiếm tỷ lệ là 20,271% và tối thiểu khách hàng chỉ mua một sản phẩm chiếm 19,845% trong tổng số, trung bình mỗi khách hàng đến mua tầm 3 sản phẩm và có 50% số khách hàng mua dưới 3 sản phẩm.
# Bảng tần số
table(shop$GD)
##
## F M
## 36553 24617
## *Hiển thị theo biểu đồ*
shop |> ggplot(aes(x = GD, y = after_stat(count))) +
geom_bar(fill = 'pink') +geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat ='count', color = 'blue', vjust = - .5) +labs(x = 'Frequency of males and females', y = 'Number of customers')
Theo kết quả thống kê của phần mềm phân tích R, ta thấy số khách hàng nữ đến trung tâm mua sắm nhiều gấp 1.5 lần số khách nam, trong đó tỷ lệ khách hàng nữ chiếm đến 60% và tỷ lệ khách hàng nữ chiếm khoảng 40%.
# Bảng tần số
table(shop$CATE)
##
## Clothing Cosmetics Food & Beverage Other products
## 21058 9408 9109 21595
## *Hiển thị theo biểu đồ*
shop |> ggplot(aes(x = CATE, y = after_stat(count))) +
geom_bar(fill = 'pink') +geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat ='count', color = 'blue', vjust = - .5) +labs(x = 'Frequency of PRODUCTS', y = 'Number of customers')
Theo kết quả phân tích và đồ thị chúng ta thấy được xu hướng khách hàng đên trung tâm mua sắm quần áo chiếm tỷ lệ tương đối cao đến 34,43 trong tổng số 61170 người. Tiếp đến là nhóm khách hàng đến mua mỹ phẩm và nhóm khách mua các loại thức phẩm, nước giải khát không có sự chênh lệnh quá nhiều, có tỷ lệ gần như nhau chiếm lần lượt là 15,38% và 14,89%.
# Bảng tần số
table(shop$PAY)
##
## Cash Credit Card Debit Card
## 27422 21474 12274
## *Hiển thị theo biểu đồ*
library(ggplot2)
pie(table(shop$PAY), main= "Histogram of Payment", col = rainbow(6))
shop |> ggplot(aes(x = PAY, y = after_stat(count))) +
geom_bar(fill = 'brown') +geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat ='count', color = 'blue', vjust = - .5) +labs(x = 'Frequency of Payment', y = 'Number of customers')
Theo kết quả phân tích và đồ thị ta thấy những khách hàng đến trung tâm thương mại mua sắm thanh toán sản phẩm bằng tiền mặt chiếm tỷ lệ cao nhất đến 44,8% trong tổng số, gấp đến 2,2 lần nhóm khách hàng thanh toán bằng thẻ ghi nợ (12274 người) và gấp 1,3 lần số khách thanh toán bằng thẻ tín dụng (21474 người).
Bài nghiên cứu chọn biến phụ thuộc gồm các biến định tính đã được mã hoá là biến Quantity (Số lượng sản phẩm khách hàng đã mua) xác định thông qua 61170 khách hàng quan sát thu nhập được ở Istanbul để đánh giá mức độ tiêu thụ sản phẩm mua sắm sẽ có thói quen mua sản phẩm nào nhiều nhất, từ đó đưa ra phương án và các chương trình khuyến mãi nhằm đẩy mạnh nhu cầu tiêu thụ loại sản phẩm đó ra thị trường.
Nghiên cứu sử dụng biến định lượng làm biến phụ thuộc bao gồm biến PRICE (giá cả mỗi sản phẩm), biến AGE (Độ tuổi của mỗi khách hàng), biến Gender, biến AREA VÀ Biến Payment nhằm phân tích thói quen mua sắm sản phẩm bằng ước lượng mức giá trung bình của những sản phẩm thì khách thường chọn mua nhiều nhất hoặc một khách hàng có độ tuổi trung bình của mỗi khách hàng sẽ có xu hướng mua những sản phẩm nào và với mức giá bao nhiêu?