CHƯƠNG 1. GIỚI THIỆU VỀ DỮ LIỆU

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"
  • Biến định tính (Qualitative Variables)
  1. Gender – giới tính

  2. Item Purchased – sản phẩm đã mua

  3. Category – danh mục sản phẩm

  4. Location – địa điểm

  5. Color – màu sắc sản phẩm

  6. Season – mùa mua sắm

  7. Subscription Status – trạng thái đăng ký chương trình thanh viên

  8. Shipping Type – hình thức giao hàng

  9. Discount Applied – đã áp dụng giảm giá

  10. Promo Code Used – đã dùng mã khuyến mãi

  11. Payment Method – phương thức thanh toán

  12. Frequency of Purchases – tần suất mua hàng (dạng phân loại như “Low”, “Medium”, “High”)

  • Biến định lượng (Quantitative Variables)
  1. Customer ID – mã khách hàng

  2. Age – tuổi

  3. Purchase Amount (USD) – số tiền mua hàng (USD)

  4. Review Rating – điểm đánh giá sản phẩm

  5. Previous Purchases – số lần mua hàng trước đó

CHƯƠNG 2. PHÂN TÍCH ĐỘC LẬP CÁC BIẾN ĐỊNH TÍNH

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.

2.1 Phân tích chi tiết các biến

2.1.1 Chi tiết biến phụ thuộc Subscription Status – trạng thái đăng ký chương trình thành viê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))

2.1.2 Chi tiết biến phụ thuộc Gender – giới tính

# 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))

2.1.3 Chi tiết biến độc lập Promo Code Used – đã dùng mã khuyến mãi

# 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))

2.1.4 Chi tiết biến độc lập Category – danh mục sản phẩm

# 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))

2.1.5 Chi tiết biến độc lập Payment Method – phương thức thanh toán

# 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))

2.2 Ứớc lượng khoảng, kiểm định giả thuyết thống kê cho các biến trong bộ dữ liệu

2.2.1 Biểu hiện Yes của biến Subscription.Status

# 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%.

2.2.2 Biểu hiện Female của biến Gender

# 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%.

CHƯƠNG 3. PHÂN TÍCH CẶP BIẾN ĐỊNH TÍNH

3.1 Subscription Status và Promo Code Used

3.1.1 Bảng tần số chéo

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.

3.1.2 Kiểm định chi bình phương

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.

3.1.3 Rủi ro tương đối (Relative Risk/Risk Ratio)

- 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.

3.1.4 Tỷ lệ chênh (Odd Ratio)

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

  • Nhóm khách hàng chưa đăng ký chương trình thành viên so với nhóm khách hàng đã đăng ký chương trình thành viên.
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.

  • Nhóm khách hàng đã đăng ký chương trình thành viên so với nhóm khách hàng chưa đă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

  • Nhóm khách hàng chưa đăng ký chương trình thành viên so với nhóm khách hàng đã đăng ký chương trình thành viên.
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.

  • Nhóm khách hàng đã đăng ký chương trình thành viên so với nhóm khách hàng chưa đă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.

3.2 Subscription Status và Category

3.2.1 Bảng tần số chéo

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.

3.2.2 Kiểm định chi bình phương

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.

3.3 Subscription Status và Payment Method

3.3.1 Bảng tần số chéo

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.

3.3.2 Kiểm định chi bình phương

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.

3.4 Gender và Promo Code Used

3.4.1 Bảng tần số chéo

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.

3.4.2 Kiểm định chi bình phương

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.

3.4.3 Rủi ro tương đối (Relative Risk/Risk Ratio)

- 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.

3.4.4 Tỷ lệ chênh (Odd Ratio)

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

  • Nhóm khách hàng là nữ so với nhóm khách hàng là nam.
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.

  • Nhóm khách hàng là nam so với nhóm khách hàng là nữ.
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

  • Nhóm khách hàng là nữ so với nhóm khách hàng là nam.
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.

  • Nhóm khách hàng là nam so với nhóm khách hàng là nữ.
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ữ.

3.5 Gender và Category

3.5.1 Bảng tần số chéo

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.

3.5.2 Kiểm định chi bình phương

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.

3.6 Gender và Payment Method

3.6.1 Bảng tần số chéo

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.

3.6.2 Kiểm định chi bình phương

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.

CHƯƠNG 4. PHƯƠNG PHÁP ƯỚC LƯỢNG MAXIMUM LIKEHOODLIKEHOOD

Ướ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

  • Tính chất của MLE

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(θ)

  • Nhược điểm

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