Tập dữ liệu biểu hiện xu hướng mua sắm và hành vi của khách hàng. Tập dữ liệu này cung cấp ảnh chụp nhanh chi tiết về hành vi mua sắm trực tuyến và xu hướng của người tiêu dùng. Tập dữ liệu này chứa các hồ sơ khách hàng tổng hợp nhưng thực tế với nhiều tính năng như độ tuổi, giới tính, danh mục mua hàng, sở thích thanh toán và mức độ tương tác với các ưu đãi khuyến mại. Tập dữ liệu này lý tưởng cho phân tích dữ liệu khám phá, phân khúc khách hàng, mô hình hành vi và hệ thống đề xuất. Tập dữ liệu này cũng có thể được sử dụng cho các tác vụ học có giám sát như dự đoán mua hàng hoặc phân tích tỷ lệ hủy đơn hàng.
d <- read.csv("C:/Users/Ngo Trang/Documents/Shopping Trends And Customer Behaviour Dataset.csv", header = TRUE)
str(d)
## 'data.frame': 3900 obs. of 17 variables:
## $ Customer.ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Age : int 55 19 50 21 45 46 63 27 26 57 ...
## $ Gender : chr "Male" "Male" "Male" "Male" ...
## $ Item.Purchased : chr "Blouse" "Sweater" "Jeans" "Sandals" ...
## $ Category : chr "Clothing" "Clothing" "Clothing" "Footwear" ...
## $ Purchase.Amount..USD. : int 53 64 73 90 49 20 85 34 97 31 ...
## $ Location : chr "Kentucky" "Maine" "Massachusetts" "Rhode Island" ...
## $ Color : chr "Gray" "Maroon" "Maroon" "Maroon" ...
## $ Season : chr "Winter" "Winter" "Spring" "Spring" ...
## $ Review.Rating : num 3.1 3.1 3.1 3.5 2.7 2.9 3.2 3.2 2.6 4.8 ...
## $ Subscription.Status : chr "Yes" "Yes" "Yes" "Yes" ...
## $ Shipping.Type : chr "Express" "Express" "Free Shipping" "Next Day Air" ...
## $ Discount.Applied : chr "Yes" "Yes" "Yes" "Yes" ...
## $ Promo.Code.Used : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
## $ Previous.Purchases : int 14 2 23 49 31 14 49 19 8 4 ...
## $ Payment.Method : chr "Venmo" "Cash" "Credit Card" "PayPal" ...
## $ Frequency.of.Purchases: chr "Fortnightly" "Fortnightly" "Weekly" "Weekly" ...
Để khám phá dữ liệu ban đầu chúng ta sẽ xem nhanh cấu trúc và nội dung dữ liệu ở 5 quan sát đầu và 5 quan sát cuối bảng.
# Hiển thị một vài dòng đầu của dữ liệu
head(d,5)
# Hiển thị một vài dòng cuối của dữ liệu
tail(d,5)
Bộ dữ liệu d bao gồm 3900 quan sát với 17 biến bao gồm cả biến định lượng và biến định tính.
names(d)
## [1] "Customer.ID" "Age" "Gender"
## [4] "Item.Purchased" "Category" "Purchase.Amount..USD."
## [7] "Location" "Color" "Season"
## [10] "Review.Rating" "Subscription.Status" "Shipping.Type"
## [13] "Discount.Applied" "Promo.Code.Used" "Previous.Purchases"
## [16] "Payment.Method" "Frequency.of.Purchases"
Gender – giới tính
Item Purchased – sản phẩm đã mua
Category – danh mục sản phẩm
Location – địa điểm
Color – màu sắc sản phẩm
Season – mùa mua sắm
Subscription Status – trạng thái đăng ký chương trình thanh viên
Shipping Type – hình thức giao hàng
Discount Applied – đã áp dụng giảm giá
Promo Code Used – đã dùng mã khuyến mãi
Payment Method – phương thức thanh toán
Frequency of Purchases – tần suất mua hàng (dạng phân loại như “Low”, “Medium”, “High”)
Customer ID – mã khách hàng
Age – tuổi
Purchase Amount (USD) – số tiền mua hàng (USD)
Review Rating – điểm đánh giá sản phẩm
Previous Purchases – số lần mua hàng trước đó
Tại bài phân tích này chúng ta sẽ sử dụng:
2 biến phụ thuộc: Subscription Status – trạng thái đăng ký chương trình thành viên và Gender – giới tính.
biến độc lập: Promo Code Used – đã dùng mã khuyến mãi, Category – danh mục sản phẩm, Payment Method – phương thức thanh toán.
# Bảng tần số
su1 <- table(d$Subscription.Status)
su1
##
## No Yes
## 1357 2543
# Bảng tần suất
su2 <- table(d$Subscription.Status)/sum(nrow(d))
su2
##
## No Yes
## 0.3479487 0.6520513
Bộ dữ liệu d bao gồm: 1053 khách hàng đã đăng ký tham gia chương trình thành viên, chiếm tỷ trọng 27% tổng số khách hàng và 2847 khách hàng chưa đăng ký tham gia chương trình thành viên, chiếm tỷ trọng 73% tổng số khách hàng.
library(ggplot2)
ggplot(as.data.frame(su2), aes(x = "", y = Freq, fill = Var1)) +
geom_col(width = 1, color = "white") +
coord_polar("y") +
geom_text(aes(label = paste0(round(Freq * 100), "%")),
position = position_stack(vjust = 0.5)) +
labs(title = "Tần suất đăng ký chương trình thành viên", fill = "Trạng thái đăng ký") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
# Bảng tần số
ge1 <- table(d$Gender)
ge1
##
## Female Male
## 1248 2652
# Bảng tần suất
ge2 <- table(d$Gender)/sum(nrow(d))
ge2
##
## Female Male
## 0.32 0.68
Bộ dữ liệu d bao gồm: 1248 khách hàng là nữ, chiếm tỷ trọng 32% tổng số khách hàng và 2652 khách hàng là nam, chiếm 68% tổng số khách hàng.
ggplot(as.data.frame(ge2), aes(x = "", y = Freq, fill = Var1)) +
geom_col(width = 1, color = "white") +
coord_polar("y") +
geom_text(aes(label = paste0(round(Freq * 100), "%")),
position = position_stack(vjust = 0.5)) +
labs(title = "Tần suất giới tính khách hàng", fill = "Giới tính") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
# Bảng tần số
pr1 <- table(d$Promo.Code.Used)
pr1
##
## FALSE TRUE
## 1063 2837
# Bảng tần suất
pr2 <- table(d$Promo.Code.Used)/sum(nrow(d))
pr2
##
## FALSE TRUE
## 0.2725641 0.7274359
Bộ dữ liệu d bao gồm: 1677 khách hàng đã dùng mã khuyến mãi, chiếm tỷ trọng 43% tổng số khách hàng và 2223 khách hàng không dùng mã khuyến mãi, chiếm tỷ trọng 57% tổng số khách hàng.
ggplot(as.data.frame(pr2), aes(x = "", y = Freq, fill = Var1)) +
geom_col(width = 1, color = "white") +
coord_polar("y") +
geom_text(aes(label = paste0(round(Freq * 100), "%")),
position = position_stack(vjust = 0.5)) +
labs(title = "Tần suất trạng thái khách hàng sử dụng mã khuyến mãi", fill = "Trạng thái sử dụng mã khuyến mãi") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
# Bảng tần số
ca1 <- table(d$Category)
ca1
##
## Accessories Clothing Footwear Outerwear
## 1240 1737 599 324
# Bảng tần suất
ca2 <- table(d$Category)/sum(nrow(d))
ca2
##
## Accessories Clothing Footwear Outerwear
## 0.31794872 0.44538462 0.15358974 0.08307692
Bộ dữ liệu d bao gồm: 1240 sản phẩm là phụ kiện, chiếm tỷ trọng 31.8% tổng sản phẩm bán ra. 1737 sản phẩm là quần áo chiếm tỷ trọng 44.54% tổng sản phẩm bán ra. 599 sản phẩm là giày dép chiếm tỷ trọng 15.36% tổng sản phẩm bán ra. Và 324 sản phẩm là áo khoác ngoài chiếm tỷ trọng 8.3% tổng sản phẩm bán ra.
ggplot(as.data.frame(ca2), aes(x = "", y = Freq, fill = Var1)) +
geom_col(width = 1, color = "white") +
coord_polar("y") +
geom_text(aes(label = paste0(round(Freq * 100), "%")),
position = position_stack(vjust = 0.5)) +
labs(title = "tần suất số sản phẩm bán ra", fill = "Loại sản phẩm") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
# Bảng tần số
pa1 <- table(d$Payment.Method)
pa1
##
## Bank Transfer Cash Credit Card Debit Card PayPal
## 612 670 671 636 677
## Venmo
## 634
# Bảng tần suất
pa2 <- table(d$Payment.Method)/sum(nrow(d))
pa2
##
## Bank Transfer Cash Credit Card Debit Card PayPal
## 0.1569231 0.1717949 0.1720513 0.1630769 0.1735897
## Venmo
## 0.1625641
Bộ dữ liệu d bao gồm: 612 khách hàng thanh toán bằng cách chuyển khoản ngân hàng, chiếm 15.7% tổng số khách hàng. 670 khách hàng sử dụng tiền mặt để thanh toán, chiếm 17.18% tổng số khách hàng. 671 khách hàng thanh toán bằng thẻ tín dụng, chiếm 17.2% tổng số khách hàng. 636 khách hàng sử dụng thẻ ghi nợ để thanh toán, chiếm tỷ trọng 16.31% tổng số khách hàng. 677 khách hàng sử dụng ví điện tử PayPal để thanh toán, chiếm 17.35% tổng số khách hàng. Và 634 khachs hàng sử dụng ví điẹne tử Venmo để thanh toán, chiếm 16.26% tổng só khách hàng.
ggplot(as.data.frame(pa2), aes(x = "", y = Freq, fill = Var1)) +
geom_col(width = 1, color = "white") +
coord_polar("y") +
geom_text(aes(label = paste0(round(Freq * 100), "%")),
position = position_stack(vjust = 0.5)) +
labs(title = "tần suất phương thức thanh toán của khách hàng", fill = "Phương thức thanh toán") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
# Số lượng khách hàng đã đăng ký tham gia chương trình thành viên
Yes <- sum(d$Subscription.Status == "Yes")
# Kiểm định tỷ lệ 1 mẫu
prop.test(Yes, sum(nrow(d)), p = 0.5, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: Yes out of sum(nrow(d)), null probability 0.5
## X-squared = 360.06, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.6368298 0.6669709
## sample estimates:
## p
## 0.6520513
Đặt giả thuyết:
H0:Tỷ lệ khách hàng đã đăng ký tham gia chương trình thành viên = 0.5
H1:Tỷ lệ khách hàng đã đăng ký tham gia chương trình thành viên ≠ 0.5
Ta thấy giá trị p-value < 2.2e-16 < 5% bác bỏ H0, đồng nghĩa với việc tỷ lệ khách hàng đã đăng ký tham gia chương trình thành viên không phải là 50% trong tổng số khách hàng. Ngoài ra, ta có thể ước lượng số tỷ lệ khách hàng đã đăng ký tham gia chương trình thành viên trong thực tế với độ tin cậy 95% nằm trong khoảng từ 25.62% đến 28.43%.
# Số khách hàng là nữ
Female <- sum(d$Gender == "Female")
# Kiểm định tỷ lệ 1 mẫu
prop.test(Female, sum(nrow(d)), p = 0.5, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: Female out of sum(nrow(d)), null probability 0.5
## X-squared = 504.72, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.3054166 0.3349408
## sample estimates:
## p
## 0.32
Đặt giả thuyết:
H0:Tỷ lệ khách hàng là nữ = 0.5
H1:Tỷ lệ khách hàng là nữ ≠ 0.5
Ta thấy giá trị p-value < 2.2e-16 < 5% bác bỏ H0, nghĩa là tỷ lệ khách hàng là nữ trong thực tế không phải chiếm 50% trong tổng số khách hàng. Ngoài ra, ta có thể ước lượng tỷ lệ khách hàng là nữ trong thực tế với độ tin cậy 95% nằm trong khoảng từ 30.54% đến 33.49%.
vd01 <- table(d$Subscription.Status,d$Promo.Code.Used)
addmargins(vd01 )
##
## FALSE TRUE Sum
## No 733 624 1357
## Yes 330 2213 2543
## Sum 1063 2837 3900
# Tính tỷ lệ phần trăm theo hàng
vd1 <- prop.table(vd01, margin = 1) * 100
vd1
##
## FALSE TRUE
## No 54.01621 45.98379
## Yes 12.97680 87.02320
ggplot(as.data.frame(vd01), aes(x = Var1, y = Freq, fill = Var2)) +
geom_col(position = position_dodge(width = 0.9)) +
geom_text(aes(label = paste0(Freq, " (", round(vd1[cbind(as.character(Var1), as.character(Var2))], 1), "%)")),
position = position_dodge(width = 0.9),
vjust = -0.3, size = 3) +
labs(title = "Đăng ký chương trình thành viên và đã sử dụng mã khuyến mãi",
x = "Đăng ký chương trình thành viên",
y = "Số lượng",
fill = "Sử dụng mã khuyến mãi") +
theme_minimal()
Trong nhóm chưa đăng ký chương trình thành viên, có 733 người chưa sử
dụng khuyến mãi (chiếm 54,02%) và 624 người đã sử dụng khuyến mãi (chiếm
45,98%), tổng cộng 1.357 người. Trong nhóm đã đăng ký chương trình thành
viên, có 330 người chưa sử dụng khuyến mãi (chiếm 12,98%) và 2.213 người
đã sử dụng khuyến mãi (chiếm 87,02%), tổng cộng 2.543 người.
Giả thuyết:
H₀ :Subscription Status và Promo Code Used độc lập với nhau.
H₁ :Subscription Statu và Promo Code Used không độc lập.
chisq.test(vd01)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: vd01
## X-squared = 749.56, df = 1, p-value < 2.2e-16
Kết quả cung cấp:
Giá trị Chi-bình phương (X²): 1908.9
Bậc tự do (df): 1
Giá trị p: p-value < 2.2e-16
Qua kết quả kiểm định cho ta p−value < 2.2e−16 < 0.05, nên bác bỏ H0, đồng nghĩa với việc khách hàng đăng ký chương trình thành viên và khách hàng đã sử dụng mã khuyến mãi có mối quan hệ với nhau.
- Quan tâm đến nhóm khách hàng đã đăng ký chương trình thành viên (YES) và đã sử dụng khuyến mãi (TRUE).
library(epitools)
riskratio(vd01)
## $data
##
## FALSE TRUE Total
## No 733 624 1357
## Yes 330 2213 2543
## Total 1063 2837 3900
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## No 1.000000 NA NA
## Yes 1.892476 1.783003 2.00867
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 2.097923e-161 1.779667e-165
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhóm khách hàng đã đăng ký chương trình thành viên và đã sử dụng mã khuyển mãi gấp 1,89 lần nhóm khách hàng chưa đăng ký chương trình thành viên và đã sử dụng mã khuyến mãi.
- Quan tâm đến nhóm khách hàng đã đăng ký chương trình thành viên (YES) và chưa sử dụng khuyến mãi (FALSE).
riskratio(vd01, rev = 'c')
## $data
##
## TRUE FALSE Total
## No 624 733 1357
## Yes 2213 330 2543
## Total 2837 1063 3900
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## No 1.000000 NA NA
## Yes 0.240239 0.214788 0.2687057
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 2.097923e-161 1.779667e-165
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhóm khách hàng đã đăng ký chương trình thành viên và chưa sử dụng mã khuyến mãi thấp hơn nhóm khách hàng chưa đăng ký chương trình thành viên và chưa sử dụng mã khuyến mãi là 0,24 lần.
- Quan tâm đến nhóm khách hàng chưa đăng ký chương trình thành viên (NO) và đã sử dụng khuyến mãi (TRUE).
riskratio(vd01, rev = "r")
## $data
##
## FALSE TRUE Total
## Yes 330 2213 2543
## No 733 624 1357
## Total 1063 2837 3900
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Yes 1.0000000 NA NA
## No 0.5284084 0.4978419 0.5608516
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0 2.097923e-161 1.779667e-165
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhóm khách hàng chưa đăng ký chương trình thành viên và đã sử dụng mã khuyến mãi thấp hơn nhóm khách hàng đã đăng ký chương trình thành viên và đã sử dụng mã khuyến mãi là 0,53 lần.
- Quan tâm đến nhóm khách hàng chưa đăng ký chương trình thành viên (NO) và chưa sử dụng khuyến mãi (FALSE).
riskratio(vd01, rev = "b")
## $data
##
## TRUE FALSE Total
## Yes 2213 330 2543
## No 624 733 1357
## Total 2837 1063 3900
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Yes 1.000000 NA NA
## No 4.162522 3.721544 4.655753
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0 2.097923e-161 1.779667e-165
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhóm khách hàng chưa đăng ký chương trình thành viên và chưa sử dụng mã khuyến mãi cao gấp 4,16 lần nhóm khách hàng đã đăng ký chương trình thành viên và chưa sử dụng mã khuyến mãi.
Chưa sử dụng khuyễn mãi (FALSE) ~ Thành công/đã sử dụng khuyến mãi (TRUE) ~ Thất bại
oddsratio(vd01)
## $data
##
## FALSE TRUE Total
## No 733 624 1357
## Yes 330 2213 2543
## Total 1063 2837 3900
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## No 1.000000 NA NA
## Yes 7.870345 6.730132 9.220399
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 2.097923e-161 1.779667e-165
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Những khách hàng chưa đăng ký chương trình thành viên có khả năng chưa sử dụng mã khuyến mãi cao hơn khoảng 7,87 lần so với những khách hàng đã đăng ký chương trình thành viên.
oddsratio(vd01, rev = 'r')
## $data
##
## FALSE TRUE Total
## Yes 330 2213 2543
## No 733 624 1357
## Total 1063 2837 3900
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Yes 1.0000000 NA NA
## No 0.1270521 0.1084552 0.1485855
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0 2.097923e-161 1.779667e-165
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Những khách hàng đã đăng ký chương trình thành viên có khả năng chưa sử dụng mã khuyến mãi thấp hơn khoảng 0,13 lần so với những khách hàng chưa đăng ký chương trình thành viên.
Đã sử dụng khuyến mãi (TRUE) ~ Thành công/chưa sử dụng khuyễn mãi (FALSE) ~ Thất bại
oddsratio(vd01, rev = 'c')
## $data
##
## TRUE FALSE Total
## No 624 733 1357
## Yes 2213 330 2543
## Total 2837 1063 3900
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## No 1.0000000 NA NA
## Yes 0.1270521 0.1084552 0.1485855
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 2.097923e-161 1.779667e-165
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Những khách hàng chưa đăng ký chương trình thành viên có khả năng chưa sử dụng mã khuyến mãi thấp hơn khoảng 0,13 lần so với những khách hàng đã đăng ký chương trình thành viên.
oddsratio(vd01, rev = 'b')
## $data
##
## TRUE FALSE Total
## Yes 2213 330 2543
## No 624 733 1357
## Total 2837 1063 3900
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Yes 1.000000 NA NA
## No 7.870345 6.730132 9.220399
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0 2.097923e-161 1.779667e-165
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Những khách hàng đã đăng ký chương trình thành viên có khả năng chưa sử dụng mã khuyến mãi cao hơn khoảng 7,87 lần so với những khách hàng chưa đăng ký chương trình thành viên.
vd02 <- table(d$Subscription.Status,d$Category)
addmargins(vd02)
##
## Accessories Clothing Footwear Outerwear Sum
## No 438 617 197 105 1357
## Yes 802 1120 402 219 2543
## Sum 1240 1737 599 324 3900
# Tính tỷ lệ phần trăm theo hàng
vd2 <- prop.table(vd02, margin = 1) * 100
vd2
##
## Accessories Clothing Footwear Outerwear
## No 32.277082 45.467944 14.517318 7.737657
## Yes 31.537554 44.042470 15.808101 8.611876
ggplot(as.data.frame(vd02), aes(x = Var1, y = Freq, fill = Var2)) +
geom_col(position = position_dodge(width = 0.9)) +
geom_text(aes(label = paste0(Freq, " (", round(vd2[cbind(as.character(Var1), as.character(Var2))], 1), "%)")),
position = position_dodge(width = 0.9),
vjust = -0.3, size = 3) +
labs(title = "Đăng ký chương trình thành viên và loại sản phẩm",
x = "Đăng ký chương trình thành viên",
y = "Số lượng",
fill = "Loại sản phẩm") +
theme_minimal()
Trong nhóm chưa đăng ký chương trình thành viên, có 438 người mua phụ kiện (chiếm 32,28%), 617 người mua quần áo (45,47%), 197 người mua giày dép (14,52%) và 105 người mua áo khoác (7,74%), tổng cộng 1.357 người.
Trong nhóm đã đăng ký chương trình thành viên, có 802 người mua phụ kiện (chiếm 31,54%), 1.120 người mua quần áo (44,04%), 402 người mua giày dép (15,81%) và 219 người mua áo khoác (8,61%), tổng cộng 2.543 người.
Giả thuyết:
H₀ :Subscription Status và Categoryd độc lập với nhau.
H₁ :Subscription Statu và Categoryd không độc lập.
chisq.test(vd02)
##
## Pearson's Chi-squared test
##
## data: vd02
## X-squared = 2.3297, df = 3, p-value = 0.5068
Kết quả cung cấp:
Giá trị Chi-bình phương (X²): 1.3444
Bậc tự do (df): 3
Giá trị p: p-value = 0.7186
Qua kết quả kiểm định cho ta p-value = 0.7186 > 0.05, không đủ cơ sở bác bỏ H0, đồng nghĩa với việc khách hàng đăng ký chương trình thành viên và loại sản phẩm được bán ra không có mối quan hệ với nhau.
vd03 <- table(d$Subscription.Status,d$Payment.Method)
addmargins(vd03)
##
## Bank Transfer Cash Credit Card Debit Card PayPal Venmo Sum
## No 206 237 222 231 243 218 1357
## Yes 406 433 449 405 434 416 2543
## Sum 612 670 671 636 677 634 3900
# Tính tỷ lệ phần trăm theo hàng
vd3 <- prop.table(vd03, margin = 1) * 100
vd3
##
## Bank Transfer Cash Credit Card Debit Card PayPal Venmo
## No 15.18055 17.46500 16.35962 17.02284 17.90715 16.06485
## Yes 15.96540 17.02713 17.65631 15.92607 17.06646 16.35863
ggplot(as.data.frame(vd03), aes(x = Var1, y = Freq, fill = Var2)) +
geom_col(position = position_dodge(width = 0.9)) +
labs(title = "Đăng ký chương trình thành viên và phương thức thanh toán",
x = "Đăng ký chương trình thành viên",
y = "Số lượng",
fill = "Phương thức thanh toán") +
theme_minimal()
Trong nhóm chưa đăng ký chương trình thành viên, có 206 người thanh toán bằng chuyển khoản ngân hàng (chiếm 15,18%), 237 người thanh toán bằng tiền mặt (17,47%), 222 người dùng thẻ tín dụng (16,36%), 231 người dùng thẻ ghi nợ (17,02%), 243 người thanh toán qua PayPal (17,91%) và 218 người qua Venmo (16,06%), tổng cộng 1.357 người.
Trong nhóm đã đăng ký chương trình thành viên, có 406 người thanh toán bằng chuyển khoản ngân hàng (chiếm 15,97%), 433 người bằng tiền mặt (17,03%), 449 người dùng thẻ tín dụng (17,66%), 405 người dùng thẻ ghi nợ (15,93%), 434 người thanh toán qua PayPal (17,07%) và 416 người qua Venmo (16,36%), tổng cộng 2.543 người.
Giả thuyết:
H₀ :Subscription Status và Payment Methodd độc lập với nhau.
H₁ :Subscription Statu và Payment Method không độc lập.
chisq.test(vd03)
##
## Pearson's Chi-squared test
##
## data: vd03
## X-squared = 2.3707, df = 5, p-value = 0.7958
Kết quả cung cấp:
Giá trị Chi-bình phương (X²): 3.8587
Bậc tự do (df): 5
Giá trị p: p-value = 0.5699
Qua kết quả kiểm định cho ta p−value = 0.5699 > 0.05, không đủ cơ sở bác bỏ H0, đồng nghĩa với việc khách hàng đăng ký chương trình thành viên và phương thức thanh toán không có mối quan hệ với nhau.
vd04 <- table(d$Gender,d$Promo.Code.Used)
addmargins(vd04)
##
## FALSE TRUE Sum
## Female 88 1160 1248
## Male 975 1677 2652
## Sum 1063 2837 3900
# Tính tỷ lệ phần trăm theo hàng
vd4 <- prop.table(vd04, margin = 1) * 100
vd4
##
## FALSE TRUE
## Female 7.051282 92.948718
## Male 36.764706 63.235294
ggplot(as.data.frame(vd04), aes(x = Var1, y = Freq, fill = Var2)) +
geom_col(position = position_dodge(width = 0.9)) +
geom_text(aes(label = paste0(Freq, " (", round(vd4[cbind(as.character(Var1), as.character(Var2))], 1), "%)")),
position = position_dodge(width = 0.9),
vjust = -0.3, size = 3) +
labs(title = "Giới tính và đã sử dụng mã khuyến mãi",
x = "Giới tính",
y = "Số lượng",
fill = "Sử dụng mã khuyến mãi") +
theme_minimal()
Trong nhóm nữ, có 88 người chưa sử dụng mã khuyến mãi (chiếm 7,05%) và 1.160 người đã sử dụng mã khuyến mãi (chiếm 92,95%), tổng cộng 1.248 người.
Trong nhóm nam, có 975 người chưa sử dụng mã khuyến mãi (chiếm 36,76%) và 1.677 người đã sử dụng mã khuyến mãi (chiếm 63,24%), tổng cộng 2.652 người.
Giả thuyết:
H₀ :Gender và Promo Code Used độc lập với nhau.
H₁ :Gender và Promo Code Used không độc lập.
chisq.test(vd04)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: vd04
## X-squared = 376.39, df = 1, p-value < 2.2e-16
Kết quả cung cấp:
Giá trị Chi-bình phương (X²): 1381.9
Bậc tự do (df): 1
Giá trị p: p-value < 2.2e-16
Qua kết quả kiểm định cho ta p−value < 2.2e−16 < 0.05, nên bác bỏ H0, đồng nghĩa với việc giới tính khách hàng và khách hàng đã sử dụng mã khuyến mãi có mối quan hệ với nhau.
- Quan tâm đến nhóm khách hàng là nam và đã sử dụng khuyến mãi (TRUE).
library(epitools)
riskratio(vd04)
## $data
##
## FALSE TRUE Total
## Female 88 1160 1248
## Male 975 1677 2652
## Total 1063 2837 3900
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.6803245 0.6583736 0.7030074
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0 2.336886e-98 3.583639e-84
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhóm khách hàng là nam đã sử dụng mã khuyến mãi thấp hơn khoảng 0,68 lần nhóm khách hàng là nữ đã sử dụng mã khuyến mãi.
- Quan tâm đến nhóm khách hàng là nam và chưa sử dụng khuyến mãi (FALSE).
riskratio(vd04, rev = 'c')
## $data
##
## TRUE FALSE Total
## Female 1160 88 1248
## Male 1677 975 2652
## Total 2837 1063 3900
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Female 1.000000 NA NA
## Male 5.213904 4.236785 6.416373
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0 2.336886e-98 3.583639e-84
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhóm khách hàng là nam chưa sử dụng mã khuyến mãi cao hơn khoảng 5,21 lần nhóm khách hàng là nữ chưa sử dụng mã khuyến mãi.
- Quan tâm đến nhóm khách hàng là nữ và đã sử dụng khuyến mãi (YES).
riskratio(vd04, rev = "r")
## $data
##
## FALSE TRUE Total
## Male 975 1677 2652
## Female 88 1160 1248
## Total 1063 2837 3900
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Male 1.000000 NA NA
## Female 1.469887 1.42246 1.518894
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Male NA NA NA
## Female 0 2.336886e-98 3.583639e-84
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhóm khách hàng là nữ đã sử dụng mã khuyến mãi cao hơn khoảng 1,47 lần nhóm khách hàng là nam đã sử dụng mã khuyến mãi.
- Quan tâm đến nhóm khách hàng là nữ và chưa sử dụng khuyến mãi (FALSE).
riskratio(vd04, rev = "b")
## $data
##
## TRUE FALSE Total
## Male 1677 975 2652
## Female 1160 88 1248
## Total 2837 1063 3900
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Male 1.0000000 NA NA
## Female 0.1917949 0.1558513 0.236028
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Male NA NA NA
## Female 0 2.336886e-98 3.583639e-84
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhóm khách hàng là nữ chưa sử dụng mã khuyến mãi thấp hơn khoảng 0,19 lần nhóm khách hàng là nam chưa sử dụng mã khuyến mãi.
Chưa sử dụng khuyễn mãi (FALSE) ~ Thành công/đã sử dụng khuyến mãi (TRUE) ~ Thất bại
oddsratio(vd04)
## $data
##
## FALSE TRUE Total
## Female 88 1160 1248
## Male 975 1677 2652
## Total 1063 2837 3900
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.1307131 0.1031578 0.1637429
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0 2.336886e-98 3.583639e-84
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Những khách hàng là nữ có khả năng chưa sử dụng mã khuyến mãi thấp hơn khoảng 0,13 lần so với những khách hàng là nam.
oddsratio(vd04, rev = 'r')
## $data
##
## FALSE TRUE Total
## Male 975 1677 2652
## Female 88 1160 1248
## Total 1063 2837 3900
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Male 1.000000 NA NA
## Female 7.648858 6.107136 9.693884
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Male NA NA NA
## Female 0 2.336886e-98 3.583639e-84
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Những khách hàng là nam có khả năng chưa sử dụng mã khuyến mãi cao hơn khoảng 7,65 lần so với những khách hàng là nữ.
Đã sử dụng khuyến mãi (TRUE) ~ Thành công/chưa sử dụng khuyễn mãi (FALSE) ~ Thất bại
oddsratio(vd04, rev = 'c')
## $data
##
## TRUE FALSE Total
## Female 1160 88 1248
## Male 1677 975 2652
## Total 2837 1063 3900
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Female 1.000000 NA NA
## Male 7.648858 6.107136 9.693884
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0 2.336886e-98 3.583639e-84
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Những khách hàng là nữ có khả năng đã sử dụng mã khuyến mãi cao hơn khoảng 7,65 lần so với những khách hàng là nam.
oddsratio(vd04, rev = 'b')
## $data
##
## TRUE FALSE Total
## Male 1677 975 2652
## Female 1160 88 1248
## Total 2837 1063 3900
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Male 1.0000000 NA NA
## Female 0.1307131 0.1031578 0.1637429
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Male NA NA NA
## Female 0 2.336886e-98 3.583639e-84
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Những khách hàng là nam có khả năng đã sử dụng mã khuyến mãi thấp hơn khoảng 7,65 lần so với những khách hàng là nữ.
vd05 <- table(d$Gender,d$Category)
addmargins(vd05)
##
## Accessories Clothing Footwear Outerwear Sum
## Female 392 556 199 101 1248
## Male 848 1181 400 223 2652
## Sum 1240 1737 599 324 3900
# Tính tỷ lệ phần trăm theo hàng
vd5 <- prop.table(vd05, margin = 1) * 100
vd5
##
## Accessories Clothing Footwear Outerwear
## Female 31.410256 44.551282 15.945513 8.092949
## Male 31.975867 44.532428 15.082956 8.408748
ggplot(as.data.frame(vd05), aes(x = Var1, y = Freq, fill = Var2)) +
geom_col(position = position_dodge(width = 0.9)) +
geom_text(aes(label = paste0(Freq, " (", round(vd5[cbind(as.character(Var1), as.character(Var2))], 1), "%)")),
position = position_dodge(width = 0.9),
vjust = -0.3, size = 3) +
labs(title = "Giới tính và loại sản phẩm",
x = "Giới tính",
y = "Số lượng",
fill = "Loại sản phẩm") +
theme_minimal()
Trong nhóm nữ, có 392 người mua phụ kiện (chiếm 31,41%), 556 người mua quần áo (44,55%), 199 người mua giày dép (15,95%) và 101 người mua áo khoác (8,09%), tổng cộng 1.248 người.
Trong nhóm nam, có 848 người mua phụ kiện (chiếm 31,98%), 1.181 người mua quần áo (44,53%), 400 người mua giày dép (15,08%) và 223 người mua áo khoác (8,41%), tổng cộng 2.652 người.
Giả thuyết:
H₀ :Gender và Category độc lập với nhau.
H₁ :Gender và Category không độc lập.
chisq.test(vd05)
##
## Pearson's Chi-squared test
##
## data: vd05
## X-squared = 0.59842, df = 3, p-value = 0.8968
Kết quả cung cấp:
Giá trị Chi-bình phương (X²): 0.59842
Bậc tự do (df): 3
Giá trị p: p-value = 0.8968
Qua kết quả kiểm định cho ta p−value = 0.8968 > 0.05, không đủ cơ sở bác bỏ H0, đồng nghĩa với việc giới tính khách hàng và loại sản phẩm không có mối quan hệ với nhau.
vd06 <- table(d$Gender,d$Payment.Method)
addmargins(vd06)
##
## Bank Transfer Cash Credit Card Debit Card PayPal Venmo Sum
## Female 203 212 223 181 221 208 1248
## Male 409 458 448 455 456 426 2652
## Sum 612 670 671 636 677 634 3900
# Tính tỷ lệ phần trăm theo hàng
vd6 <- prop.table(vd06, margin = 1) * 100
vd6
##
## Bank Transfer Cash Credit Card Debit Card PayPal Venmo
## Female 16.26603 16.98718 17.86859 14.50321 17.70833 16.66667
## Male 15.42232 17.26998 16.89291 17.15686 17.19457 16.06335
ggplot(as.data.frame(vd06), aes(x = Var1, y = Freq, fill = Var2)) +
geom_col(position = position_dodge(width = 0.9)) +
geom_text(aes(label = paste0(Freq, " (", round(vd6[cbind(as.character(Var1), as.character(Var2))], 1), "%)")),
position = position_dodge(width = 0.9),
vjust = -0.3, size = 3) +
labs(title = "Giới tính và phương thức thanh toán",
x = "Giới tính",
y = "Số lượng",
fill = "Phương thức thanh toán") +
theme_minimal()
Trong nhóm nữ, có 203 người thanh toán bằng chuyển khoản ngân hàng (chiếm 16,27%), 212 người bằng tiền mặt (16,99%), 223 người dùng thẻ tín dụng (17,87%), 181 người dùng thẻ ghi nợ (14,50%), 221 người thanh toán qua PayPal (17,71%) và 208 người qua Venmo (16,67%), tổng cộng 1.248 người.
Trong nhóm nam, có 409 người thanh toán bằng chuyển khoản ngân hàng (chiếm 15,42%), 458 người bằng tiền mặt (17,27%), 448 người dùng thẻ tín dụng (16,89%), 455 người dùng thẻ ghi nợ (17,16%), 456 người thanh toán qua PayPal (17,19%) và 426 người qua Venmo (16,06%), tổng cộng 2.652 người.
Giả thuyết:
H₀ :Gender và Payment Method độc lập với nhau.
H₁ :Gender và Payment Methoy không độc lập.
chisq.test(vd06)
##
## Pearson's Chi-squared test
##
## data: vd06
## X-squared = 4.8776, df = 5, p-value = 0.431
Kết quả cung cấp:
Giá trị Chi-bình phương (X²): 4.8776
Bậc tự do (df): 5
Giá trị p: p-value = 0.431
Qua kết quả kiểm định cho ta p−value = 0.431 > 0.05, không đủ cơ sở bác bỏ H0, đồng nghĩa với việc giới tính khách hàng và phương thức thanh toán không có mối quan hệ với nhau.
Ước lượng hợp lý cực đại (trong tiếng Anh thường được nhắc đến với tên MLE, viết tắt cho Maximum Likelihood Estimation) là một phương pháp trong thống kê dùng để ước lượng giá trị tham số của một mô hình xác suất dựa trên những dữ liệu quan sát được. Phương pháp này ước lượng các tham số nói trên bởi những giá trị làm cực đại hóa likelihood function. Các ước lượng thu được cũng được viết tắt là MLE (Maximum Likelihood Estimates).
Giả sử có dữ liệu quan sát: x1, x2, …, xn Phân phối xác suất của từng quan sát: f(x; θ)
Khi đó, hàm likelihood là: L(θ) = f(x1; θ) * f(x2; θ) * … * f(xn; θ)
Hay viết gọn: L(θ) = Π_i f(xi; θ)
Để dễ xử lý toán học, ta lấy log: logL(θ) = ∑_i log(f(xi; θ))
Ước lượng MLE là giá trị θ sao cho: d(logL(θ)) / dθ = 0
MLE là ước lượng không chệch tiệm cận
Hiệu quả khi n lớn (consistent, efficient)
Có tính bất biến: g(θ̂) là MLE của g(θ)
Khó tính tay với mô hình phức tạp
Có thể nhạy với giả định phân phối