library(ggplot2)
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

1 .Tìm hiểu và chuẩn bị dữ liệu

1.1 .Giới thiệu về bộ dữ liệu

Dữ liệu được sử dụng trong bài có tên là Supermarket Sales Dataset. Dữ liệu được tác giả thu thập từ trang web Kaggle. Bộ dữ liệu này ghi lại các giao dịch cá nhân từ một chuỗi siêu thị tại Myanmar, với các thuộc tính chi tiết cho mỗi lần bán hàng. Bộ dữ liệu này có thể dùng để phân tích các mẫu bán hàng, sở thích khách hàng và hành vi thanh toán, rất phù hợp cho các dự án về học máy (machine learning), phân tích kinh doanh và trực quan hóa dữ liệu.

1.2 .Đọc dữ liệu từ file Excel

Ta tiến hành đọc file excel và gán bộ dữ liệu vào object tên data4.

library(DT)
library(readxl)
data4 <- read_excel("/Users/lengoctuongvy/Downloads/SuperMarket-Analysis.xlsx") 
datatable(data4)

1.3 .Tổng quan về bộ dữ liệu

Ta thực hiện lệnh dim() để xem bộ dữ liệu có bao nhiêu biến và bao nhiêu quan sát.

dim(data4)
## [1] 1000   17

Nhận xét tổng quan về dữ liệu: Bộ dữ liệu Supermarket Sales bao gồm 1.000 quan sát và 17 biến. Mỗi quan sát tương ứng với một giao dịch tại siêu thị, được mô tả chi tiết bằng các đặc điểm như: chi nhánh, loại khách hàng, giới tính, dòng sản phẩm, phương thức thanh toán, giá cả, số lượng, doanh thu, lợi nhuận và mức độ hài lòng của khách hàng. Cấu trúc này giúp phân tích hành vi mua sắm, xu hướng thanh toán và đánh giá hiệu quả kinh doanh của từng chi nhánh một cách toàn diện.

Tiếp theo ta tiến hành xem tên các biến có trong dataset này.

names(data4)
##  [1] "Invoice ID"              "Branch"                 
##  [3] "City"                    "Customer type"          
##  [5] "Gender"                  "Product line"           
##  [7] "Unit price"              "Quantity"               
##  [9] "Tax 5%"                  "Sales"                  
## [11] "Date"                    "Time"                   
## [13] "Payment"                 "cogs"                   
## [15] "gross margin percentage" "gross income"           
## [17] "Rating"

Dữ liệu bao gồm các biến sau:

  • Invoice ID: Mã định danh duy nhất cho mỗi giao dịch.

  • Branch: Chi nhánh siêu thị (ví dụ: Yangon, Naypyitaw, Mandalay).

  • City: Thành phố nơi chi nhánh siêu thị tọa lạc.

  • Customer Type: Loại khách hàng, phân biệt là “Member” (thành viên) hoặc “Normal” (khách thường).

  • Gender: Giới tính của khách hàng.

  • Product Line: Loại sản phẩm được bán (ví dụ: Sức khỏe & Làm đẹp, Phụ kiện điện tử, Gia dụng & Phong cách sống).

  • Unit Price: Giá bán theo đơn vị sản phẩm.

  • Quantity: Số lượng sản phẩm mua.

  • Tax 5%: Số tiền thuế tính theo tỷ lệ 5% trên giao dịch.

  • Total: Tổng tiền giao dịch bao gồm cả thuế.

  • Date: Ngày thực hiện giao dịch.

  • Time: Thời gian thực hiện giao dịch.

  • Payment: Phương thức thanh toán (ví dụ: Tiền mặt, Ví điện tử, Thẻ tín dụng).

  • COGS: Giá vốn hàng bán, tức là chi phí nguyên liệu sản phẩm.

  • Gross Margin Percentage: Tỷ lệ lợi nhuận cố định cho mỗi lần bán (4.7619%).

  • Gross Income: Lợi nhuận thu được từ giao dịch.

  • Rating: Đánh giá sự hài lòng của khách hàng (thang điểm 10).

Ta tiến hành xem có biến bị thiếu trong bộ dữ liệu hay không?

sum(is.na(data4))
## [1] 0

Hàm is.na() trong R được sử dụng để xác định các giá trị bị thiếu (NA) trong dữ liệu.

  • Kết quả trả về là TRUE tại những vị trí có giá trị thiếu.

  • Trả về FALSE nếu giá trị tại vị trí đó không bị thiếu.

Khi kết hợp với hàm sum(), ta có thể đếm tổng số giá trị bị thiếu trong toàn bộ tập dữ liệu: Trong R, TRUE được quy đổi thành 1, còn FALSE là 0. Do đó, hàm sum() sẽ cộng tất cả các giá trị TRUE, tương đương với tổng số ô bị thiếu dữ liệu trong data. Vậy ta nhận thấy không có giá trị NA trong dataset này.

Ta tiến hành xem cấu trúc tổng quát của dataset này:

str(data4)
## tibble [1,000 × 17] (S3: tbl_df/tbl/data.frame)
##  $ Invoice ID             : chr [1:1000] "750-67-8428" "226-31-3081" "631-41-3108" "123-19-1176" ...
##  $ Branch                 : chr [1:1000] "Alex" "Giza" "Alex" "Alex" ...
##  $ City                   : chr [1:1000] "Yangon" "Naypyitaw" "Yangon" "Yangon" ...
##  $ Customer type          : chr [1:1000] "Member" "Normal" "Normal" "Member" ...
##  $ Gender                 : chr [1:1000] "Female" "Female" "Female" "Female" ...
##  $ Product line           : chr [1:1000] "Health and beauty" "Electronic accessories" "Home and lifestyle" "Health and beauty" ...
##  $ Unit price             : num [1:1000] 74.7 15.3 46.3 58.2 86.3 ...
##  $ Quantity               : num [1:1000] 7 5 7 8 7 7 6 10 2 3 ...
##  $ Tax 5%                 : num [1:1000] 26.14 3.82 16.22 23.29 30.21 ...
##  $ Sales                  : num [1:1000] 549 80.2 340.5 489 634.4 ...
##  $ Date                   : chr [1:1000] "1/5/2019" "3/8/2019" "3/3/2019" "1/27/2019" ...
##  $ Time                   : chr [1:1000] "1:08:00 PM" "10:29:00 AM" "1:23:00 PM" "8:33:00 PM" ...
##  $ Payment                : chr [1:1000] "Ewallet" "Cash" "Credit card" "Ewallet" ...
##  $ cogs                   : num [1:1000] 522.8 76.4 324.3 465.8 604.2 ...
##  $ gross margin percentage: num [1:1000] 4.76 4.76 4.76 4.76 4.76 ...
##  $ gross income           : num [1:1000] 26.14 3.82 16.22 23.29 30.21 ...
##  $ Rating                 : num [1:1000] 9.1 9.6 7.4 8.4 5.3 4.1 5.8 8 7.2 5.9 ...

Nhận xét về cấu trúc dữ liệu: Bộ dữ liệu có kích thước 1.000 quan sát × 17 biến, được lưu dưới dạng tibble, thuận tiện cho xử lý và hiển thị trong R.

Trong đó:

  • Có nhiều biến định tính dạng ký tự (chr), ví dụ:Branch, City, Customer type, Gender, Product line, Payment.

  • Một số biến định lượng dạng số (num), như: Unit price, Quantity, Tax 5%, Sales, cogs, gross income, Rating.

  • Biến thời gian gồm: Date và Time, ban đầu là chuỗi (chr) nhưng có thể chuyển về định dạng Date và POSIXct để phân tích chuỗi thời gian.

  • Các biến tài chính như Tax 5%, Sales, cogs, gross income có thể dùng để tính hiệu quả kinh doanh theo từng giao dịch, sản phẩm hoặc chi nhánh.

Bộ dữ liệu rất thích hợp cho việc phân tích hành vi tiêu dùng, đánh giá hiệu suất chi nhánh và xây dựng mô hình dự báo trong lĩnh vực bán lẻ.

2 .Phân tích Mô tả Một biến Định tính (Univariate Descriptive Analysis)

2.1 .Thống kê tần số và tần suất

2.1.1 .Biến Gender

Thực hiện thống kê mô tả cho biến Gender để xem tần số và tần suất của biến Gender trong 1000 lượt mua sắm ở siêu thị, ta được kết quả sau:

table(data4$Gender)
## 
## Female   Male 
##    571    429
table(data4$Gender)/sum(nrow(data4))
## 
## Female   Male 
##  0.571  0.429
data4 %>%
  group_by(Gender) %>%
  summarise(n = n()) %>%
  mutate(perc = round(n / sum(n) * 100, 1)) %>%
  ggplot(aes(x = "", y = perc, fill = Gender)) +
  geom_col(color = NA) +   # bỏ viền đen đi
  coord_polar("y") +
  geom_text(aes(x = 1.3, label = paste0(perc, "%")), 
            position = position_stack(vjust = 0.5), size = 5) +
  labs(caption = "Biểu đồ tròn thể hiện tỷ lệ giới tính") +
  theme_void() +
  theme(legend.title = element_blank()) +
  scale_fill_manual(values = c("Female" = "deeppink",  
                               "Male" = "yellow"))

Kết quả thống kê từ bộ dữ liệu cho thấy, trong tổng số 1.000 giao dịch, có: 571 giao dịch được thực hiện bởi khách hàng nữ, chiếm 57.1%. 429 giao dịch đến từ khách hàng nam, tương ứng với 42.9%. Tỷ lệ này phản ánh rằng khách hàng nữ có xu hướng mua sắm tại siêu thị nhiều hơn so với nam giới. Sự chênh lệch khoảng 14.2 điểm phần trăm là khá đáng kể và có thể đến từ các yếu tố như: Phụ nữ thường đóng vai trò chính trong việc mua sắm nhu yếu phẩm cho gia đình. Các ngành hàng phổ biến tại siêu thị như sức khỏe & làm đẹp, đồ gia dụng, và thực phẩm có thể hấp dẫn khách hàng nữ hơn. Nữ giới cũng có xu hướng mua hàng thường xuyên với số lượng nhỏ, trong khi nam giới có thể mua ít hơn nhưng số lượng lớn hơn.

2.1.2 .Biến Product line

Thực hiện thống kê mô tả cho biến Product line để xem tần số và tần suất của biến Gender trong 1000 lượt mua sắm ở siêu thị, ta được kết quả sau:

table(data4$`Product line`)
## 
## Electronic accessories    Fashion accessories     Food and beverages 
##                    170                    178                    174 
##      Health and beauty     Home and lifestyle      Sports and travel 
##                    152                    160                    166
table(data4$`Product line`)/sum(nrow(data4))
## 
## Electronic accessories    Fashion accessories     Food and beverages 
##                  0.170                  0.178                  0.174 
##      Health and beauty     Home and lifestyle      Sports and travel 
##                  0.152                  0.160                  0.166
library(dplyr)
library(ggplot2)

data4 %>%
  group_by(`Product line`) %>%
  summarise(n = n()) %>%
  ggplot(aes(x = reorder(`Product line`, n), y = n)) +   # x là Product line, sắp xếp theo n
  geom_col(fill = '#FF10F0') +
  geom_text(aes(label = n), vjust = -0.5, color = 'black') +  # hiện số lên trên cột
  labs(x = "Dòng sản phẩm", y = "Tần số", 
       caption = "Biểu đồ tần số các dòng sản phẩm") +
  theme_minimal() +
  coord_flip()  # xoay ngang để dễ đọc nhãn

Bộ dữ liệu ghi nhận tổng cộng 1.000 giao dịch được phân bổ khá đồng đều giữa các dòng sản phẩm tại siêu thị. Trong đó, dòng Fashion accessories chiếm tỷ lệ cao nhất với 178 giao dịch, tương ứng 17.8% tổng số, tiếp theo là Food and beverages với 174 giao dịch (17.4%) và Electronic accessories với 170 giao dịch (17.0%). Các dòng sản phẩm như Sports and travel và Home and lifestyle cũng chiếm tỷ lệ tương đối lớn, lần lượt là 16.6% và 16.0%. Dòng sản phẩm có số lượng giao dịch thấp nhất là Health and beauty, với 152 giao dịch, chiếm 15.2% tổng giao dịch. Sự phân bố đồng đều này cho thấy khách hàng có sự đa dạng trong lựa chọn sản phẩm khi mua sắm tại siêu thị, đồng thời phản ánh khả năng đáp ứng nhu cầu đa dạng của siêu thị. Đây là tín hiệu tích cực giúp duy trì doanh thu ổn định từ nhiều nhóm sản phẩm khác nhau. Tuy nhiên, từ góc độ chiến lược kinh doanh, siêu thị có thể cân nhắc tập trung phát triển các dòng sản phẩm có tiềm năng tăng trưởng hoặc lợi nhuận cao hơn nhằm tối ưu hóa hiệu quả kinh doanh trong tương lai.

2.1.3 .Biến Payment

Thực hiện thống kê mô tả cho biến Payment để xem tần số và tần suất của biến Gender trong 1000 lượt mua sắm ở siêu thị, ta được kết quả sau:

table(data4$Payment)
## 
##        Cash Credit card     Ewallet 
##         344         311         345
table(data4$Payment)/sum(nrow(data4))
## 
##        Cash Credit card     Ewallet 
##       0.344       0.311       0.345
# Tính tần số và phần trăm theo từng dòng sản phẩm
tmp <- data4|>
  group_by(Payment) |>
  summarise(freq = n()) |>
  mutate(per = freq / sum(freq))

# Vẽ biểu đồ tròn
ggplot(tmp, aes(x = "", y = per, fill = Payment)) +
  geom_col(color = "white") +
  coord_polar("y") +
  geom_text(aes(label = paste0(round(per * 100, 1), "%")),
            position = position_stack(vjust = 0.5), size = 4) +
  labs(title = "Tỷ lệ các phương thức thanh toán") +
  theme_void() +
  theme(legend.title = element_blank())

Biến Payment thể hiện phương thức thanh toán của khách hàng tại siêu thị với ba hình thức chính: Cash, Credit card và Ewallet. Trong tổng số 1.000 giao dịch, phương thức thanh toán bằng Ewallet chiếm số lượng cao nhất với 345 giao dịch, tương đương 34.5% tổng giao dịch. Thanh toán bằng Cash cũng chiếm tỷ lệ tương đương, với 344 giao dịch (34.4%). Trong khi đó, thanh toán qua Credit card chiếm 311 giao dịch, chiếm 31.1%. Kết quả cho thấy sự phân bổ khá đồng đều giữa các hình thức thanh toán, trong đó các phương thức thanh toán không dùng tiền mặt như Ewallet và Credit card chiếm tổng cộng hơn 65% thị phần. Điều này phản ánh xu hướng chuyển dịch sang thanh toán điện tử của khách hàng hiện đại, đồng thời cũng cho thấy phương thức thanh toán tiền mặt vẫn giữ vai trò quan trọng. Đối với siêu thị, việc tiếp tục cải thiện và đa dạng hóa các phương thức thanh toán sẽ góp phần nâng cao trải nghiệm khách hàng và thúc đẩy doanh số bán hàng.

2.2 .Biến Customer type

Thực hiện thống kê mô tả cho biến Customer type để xem tần số và tần suất của biến Gender trong 1000 lượt mua sắm ở siêu thị, ta được kết quả sau:

table(data4$`Customer type`)
## 
## Member Normal 
##    565    435
table(data4$`Customer type`)/sum(nrow(data4))
## 
## Member Normal 
##  0.565  0.435
data4 %>%
  group_by(`Customer type`) %>%
  summarise(n = n()) %>%
  ggplot(aes(x = reorder(`Customer type`, n), y = n)) +   # x là Product line, sắp xếp theo n
  geom_col(fill = '#FF10F0') +
  geom_text(aes(label = n), vjust = -0.5, color = 'black') +  # hiện số lên trên cột
  labs(x = "Loại khách hàng", y = "Tần số", 
       caption = "Biểu đồ tần số loại khách hàng ") +
  theme_minimal() +
  coord_flip()  # xoay ngang để dễ đọc nhãn

Biến Customer type phản ánh loại khách hàng khi mua sắm tại siêu thị, gồm hai nhóm: Member và Normal. Trong tổng số 1.000 giao dịch, khách hàng thuộc nhóm Member chiếm ưu thế với 565 giao dịch, tương đương 56.5% tổng số, trong khi nhóm khách hàng Normal chiếm 435 giao dịch, chiếm 43.5%. Điều này cho thấy hơn một nửa khách hàng khi mua sắm tại siêu thị là thành viên đã đăng ký, thể hiện hiệu quả của chương trình khách hàng thân thiết trong việc thu hút và giữ chân khách hàng. Đồng thời, nhóm khách hàng không phải thành viên vẫn chiếm tỷ lệ khá lớn, cho thấy siêu thị vẫn có sức hấp dẫn rộng rãi đối với khách hàng mới hoặc không tham gia chương trình thành viên. Đây là cơ sở để siêu thị tiếp tục phát triển các chiến lược marketing, ưu đãi phù hợp nhằm tăng tỷ lệ khách hàng thành viên và thúc đẩy doanh thu bền vững.

3 .Ước lượng Khoảng và Kiểm định Giả thuyết cho Tỷ lệ (Một biến)

3.1 .Xác định hạng mục quan tâm

Ta chọn 3 hạng mục từ 3 biến của danh sách các biến định tính trên, bao gồm:

Hạng mục “Female” của biến Gender - giới tính

Hạng mục “Health and beauty” của biến Product line - dòng sản phẩm

Hạng mục “Ewallet” của biến Payment - phương thức thanh toán

3.1.1 .Hạng mục “Female” của biến Gender - giới tính

Ta thực hiện khoảng ước lượng với độ tin cậy 95% cho tỷ lệ giới tính nữ (Gender=“Female”), ta thực hiện như sau:

# Số người là nữ
n_female <- sum(data4$Gender == "Female")

# Tổng số quan sát
n_total <- nrow(data4)

# Ước lượng khoảng tin cậy 95% cho tỷ lệ nữ
prop.test(n_female, n_total, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_female out of n_total, null probability 0.5
## X-squared = 19.881, df = 1, p-value = 8.242e-06
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.5396076 0.6018401
## sample estimates:
##     p 
## 0.571

Kết quả kiểm định tỷ lệ một mẫu cho biến giới tính nhằm kiểm tra giả thuyết \(H_0: p = 0.5\) (tức tỷ lệ nữ bằng 50%) cho thấy giá trị thống kê kiểm định là \(\chi^2 = 19.881\) với 1 bậc tự do, và giá trị p rất nhỏ \(p\text{-value} = 8.242 \times 10^{-6}\). Vì \(p < 0.05\) nên bác bỏ giả thuyết không, tức là có đủ bằng chứng thống kê để kết luận rằng tỷ lệ nữ khác 50%. Khoảng tin cậy 95% cho tỷ lệ nữ nằm trong khoảng từ 0.540 đến 0.602. Tỷ lệ mẫu quan sát được là \(\hat{p} = 0.571\), tức 571 khách hàng nữ trong tổng số 1000 người. Như vậy, có thể thấy nữ giới chiếm tỷ lệ cao hơn đáng kể, và đây là nhóm khách hàng chủ yếu tại siêu thị — một yếu tố quan trọng để doanh nghiệp xây dựng chiến lược tiếp thị phù hợp hơn.

Bài toán kiểm định

\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ nữ trong tổng thể } = 0.5 \\ H_1: & \text{Tỷ lệ nữ trong tổng thể } \ne 0.5 \end{array} \right. \]

Mức ý nghĩa 5%. Diễn giải kết quả kiểm định:

Nếu p-value < 0.05 ⇒ bác bỏ H0 ⇒ tỷ lệ nữ ≠ 50%, có ý nghĩa thống kê.

Nếu p-value ≥ 0.05 ⇒ Chấp nhận H0, không đủ bằng chứng để nói tỷ lệ nữ khác 50%.

Ta thấy p_value= 8.242e-06<0.05, bác bỏ H0. Vậy tỷ lệ nữ trong mẫu khác 0.5 tại mức ý nghĩa 5%.

3.1.2 .Hạng mục “Health and beauty” của biến Product line - dòng sản phẩm

Ta thực hiện khoảng ước lượng với độ tin cậy 95% cho tỷ lệ giới tính nữ (Productliner=“Health and beauty”), ta thực hiện như sau:

n_HB <- sum(data4$`Product line` == "Health and beauty")
prop.test(n_HB, n_total, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_HB out of n_total, null probability 0.5
## X-squared = 483.02, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.1306143 0.1761088
## sample estimates:
##     p 
## 0.152

Kết quả kiểm định tỷ lệ một mẫu cho dòng sản phẩm Health and beauty nhằm kiểm tra giả thuyết \(H_0: p = 0.5\) (tức giả định tỷ lệ đơn hàng thuộc dòng này là 50%) cho thấy giá trị thống kê kiểm định là \(\chi^2 = 483.02\) với 1 bậc tự do. Giá trị p rất nhỏ, \(p\text{-value} < 2.2 \times 10^{-16}\), nhỏ hơn nhiều so với mức ý nghĩa 0.05. Do đó, bác bỏ giả thuyết \(H_0\) và kết luận rằng tỷ lệ dòng sản phẩm Health and beauty thực sự khác 50%. Tỷ lệ mẫu quan sát được là \(\hat{p} = 0.152\), với khoảng tin cậy 95% cho tỷ lệ thực tế nằm trong khoảng từ 0.131 đến 0.176. Như vậy, có thể thấy rằng dòng sản phẩm Health and beauty chiếm một phần nhỏ trong tổng số giao dịch, cho thấy đây là nhóm sản phẩm ít phổ biến hơn so với các dòng khác trong siêu thị.

\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ đơn hàng thuộc dòng sản phẩm Health and beauty } = 0.5 \\ H_1: & \text{Tỷ lệ đơn hàng thuộc dòng sản phẩm Health and beauty } \ne 0.5 \end{array} \right. \]

Mức ý nghĩa 5%.
Diễn giải kết quả kiểm định:

Nếu p-value < 0.05 ⇒ bác bỏ H0 ⇒ tỷ lệ đơn hàng thuộc dòng sản phẩm Health and beauty ≠ 50%, có ý nghĩa thống kê.

Nếu p-value ≥ 0.05 ⇒ chấp nhận H0, không đủ bằng chứng để nói tỷ lệ khác 50%.

Ta thấy p-value < 2.2e-16 < 0.05 ⇒ bác bỏ H0.
Vậy tỷ lệ đơn hàng thuộc dòng sản phẩm Health and beauty trong mẫu khác 0.5 tại mức ý nghĩa 5%.

3.1.3 .Hạng mục “Ewallet” của biến Payment - phương thức thanh toán

Ta thực hiện khoảng ước lượng với độ tin cậy 95% cho tỷ lệ giới tính nữ (Gender=“Female”), ta thực hiện như sau:

n_E <- sum(data4$Payment == "Ewallet")
prop.test(n_E, n_total, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_E out of n_total, null probability 0.5
## X-squared = 95.481, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.3156925 0.3755139
## sample estimates:
##     p 
## 0.345

Kết quả kiểm định tỷ lệ một mẫu cho phương thức thanh toán Ewallet nhằm kiểm tra giả thuyết \(H_0: p = 0.5\) (tức giả định tỷ lệ đơn hàng thanh toán bằng Ewallet là 50%) cho thấy giá trị thống kê kiểm định là \(\chi^2 = 95.481\) với 1 bậc tự do. Giá trị p rất nhỏ, \(p\text{-value} < 2.2 \times 10^{-16}\), nhỏ hơn nhiều so với mức ý nghĩa 0.05. Do đó, bác bỏ giả thuyết \(H_0\) và kết luận rằng tỷ lệ đơn hàng thanh toán bằng Ewallet thực sự khác 50%. Tỷ lệ mẫu quan sát được là \(\hat{p} = 0.345\), với khoảng tin cậy 95% cho tỷ lệ thực tế nằm trong khoảng từ 0.316 đến 0.376. Như vậy, có thể thấy rằng phương thức thanh toán Ewallet chiếm một phần vừa phải trong tổng số giao dịch, thấp hơn đáng kể so với tỷ lệ 50% giả định ban đầu.

\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ đơn hàng thanh toán bằng Ewallet } = 0.5 \\ H_1: & \text{Tỷ lệ đơn hàng thanh toán bằng Ewallet } \ne 0.5 \end{array} \right. \]

Mức ý nghĩa 5%.
Diễn giải kết quả kiểm định:

Nếu p-value < 0.05 ⇒ bác bỏ H0 ⇒ tỷ lệ đơn hàng thanh toán bằng Ewallet ≠ 50%, có ý nghĩa thống kê.

Nếu p-value ≥ 0.05 ⇒ chấp nhận H0, không đủ bằng chứng để nói tỷ lệ khác 50%.

Ta thấy p-value < 2.2e-16 < 0.05 ⇒ bác bỏ H0.
Vậy tỷ lệ đơn hàng thanh toán bằng Ewallet trong mẫu khác 0.5 tại mức ý nghĩa 5%.

4 . Phân tích Mối quan hệ giữa Hai biến Định tính (Bivariate Analysis)

Ta chọn 2 cặp biến định tính để Phân tích mối quan hệ giữa Hai biến Định tính (Bivariate Analysis) như sau:

  • Gender và Productline

  • Customer type và Payment

4.1 .Cặp Gender và Productline

4.1.1 .Thống kê tần số và tần suất

Ta thực hiện tạo bảng tần số, tần số biên cho biến đã chọn.

v <- table(data4$Gender, data4$`Product line`)
addmargins(v)
##         
##          Electronic accessories Fashion accessories Food and beverages
##   Female                     94                 108                 98
##   Male                       76                  70                 76
##   Sum                       170                 178                174
##         
##          Health and beauty Home and lifestyle Sports and travel  Sum
##   Female                77                 91               103  571
##   Male                  75                 69                63  429
##   Sum                  152                160               166 1000

Ta thực hiện tạo bảng tần suất, tần suất biên cho biến đã chọn.

addmargins(prop.table(table(data4$Gender, data4$`Product line`)))
##         
##          Electronic accessories Fashion accessories Food and beverages
##   Female                  0.094               0.108              0.098
##   Male                    0.076               0.070              0.076
##   Sum                     0.170               0.178              0.174
##         
##          Health and beauty Home and lifestyle Sports and travel   Sum
##   Female             0.077              0.091             0.103 0.571
##   Male               0.075              0.069             0.063 0.429
##   Sum                0.152              0.160             0.166 1.000

Bảng tần số cho thấy trong tổng số 1000 quan sát, nữ chiếm 571 và nam chiếm 429. Trong từng dòng sản phẩm, nữ thường có số lượng đơn hàng cao hơn nam, ví dụ: nữ mua 108 đơn hàng dòng Fashion accessories trong khi nam chỉ mua 70; nữ mua 98 đơn hàng Food and beverages so với 76 của nam. Tuy nhiên, ở một số dòng như Health and beauty và Sports and travel, số lượng đơn hàng của nữ và nam khá gần nhau (nữ 77 vs nam 75, nữ 103 vs nam 63).

Bảng tần suất làm rõ tỷ lệ tương ứng trong tổng số 1000 đơn hàng. Các dòng sản phẩm phổ biến nhất là Fashion accessories (17.8%), Food and beverages (17.4%) và Electronic accessories (17.0%), với tỷ lệ nữ cao hơn nam ở hầu hết các dòng, đặc biệt là Fashion accessories (nữ 10.8%, nam 7.0%) và Electronic accessories (nữ 9.4%, nam 7.6%). Tổng tỷ lệ nữ chiếm 57.1%, cao hơn so với tỷ lệ nam 42.9%, phù hợp với tần số quan sát.

Như vậy, dữ liệu cho thấy nữ giới có xu hướng mua sắm nhiều hơn nam ở các dòng sản phẩm đa dạng, đặc biệt là các sản phẩm phụ kiện và thực phẩm, trong khi nam có tỷ lệ thấp hơn nhưng không quá chênh lệch đáng kể ở các nhóm khác. Tổng thể, nữ đóng góp phần lớn hơn vào tổng số giao dịch của siêu thị.

4.1.2 .Trực quan hóa

ggplot(data4 %>% group_by(Gender, `Product line`) %>% summarise(count = n()) %>% ungroup(), aes(x = Gender, y = count, fill = `Product line`)) +
  geom_col(position = position_dodge()) +
  geom_text(aes(label = count), position = position_dodge(width = 0.9), vjust = -0.5) +
  labs(title = "Dòng sản phẩm bán ra theo giới tính", y = "Số lượng sản phẩm", x = "Giới tính")
## `summarise()` has grouped output by 'Gender'. You can override using the
## `.groups` argument.

4.1.3 .Kiểm định Chi-bình phương

chisq.test(table(data4$Gender, data4$`Product line`))
## 
##  Pearson's Chi-squared test
## 
## data:  table(data4$Gender, data4$`Product line`)
## X-squared = 5.4353, df = 5, p-value = 0.3651

\[ \left\{ \begin{array}{ll} H_0: & \text{Giới tính và dòng sản phẩm là độc lập}\\ H_1: & \text{Giới tính và dòng sản phẩm có liên quan} \end{array} \right. \]

Mức ý nghĩa 5%.

Ta thấy p_value=0.3651>0.05, không đủ bằng chứng để bác bỏ H0. Vậy Giới tính và dòng sản phẩm là độc lập tại mức ý nghĩa 5%.

4.2 .Cặp Customer type và Payment

4.2.1 .Thống kê tần số và tần suất

Ta thực hiện tạo bảng tần số, tần số biên cho biến đã chọn.

v2 <- table(data4$`Customer type`, data4$Payment)
addmargins(v2)
##         
##          Cash Credit card Ewallet  Sum
##   Member  192         187     186  565
##   Normal  152         124     159  435
##   Sum     344         311     345 1000

Ta thực hiện tạo bảng tần suất, tần suất biên cho biến đã chọn.

addmargins(prop.table(table(data4$`Customer type`, data4$Payment)))
##         
##           Cash Credit card Ewallet   Sum
##   Member 0.192       0.187   0.186 0.565
##   Normal 0.152       0.124   0.159 0.435
##   Sum    0.344       0.311   0.345 1.000

Bảng thể hiện phân phối số lượng giao dịch và tỷ lệ tương ứng theo loại khách hàng (Member và Normal) cùng phương thức thanh toán (Cash, Credit card, Ewallet).

Tổng cộng có 1000 giao dịch, trong đó khách hàng là Member chiếm 56.5% (565 giao dịch) và khách hàng Normal chiếm 43.5% (435 giao dịch).

Về phương thức thanh toán, phương thức phổ biến nhất là Ewallet (34.5%), tiếp đến là Cash (34.4%) và Credit card (31.1%).

Đối với khách hàng Member, các phương thức thanh toán được sử dụng khá đồng đều: khoảng 19.2% chọn Cash, 18.7% chọn Credit card, và 18.6% chọn Ewallet. Điều này cho thấy khách hàng thành viên đa dạng trong lựa chọn hình thức thanh toán.

Khách hàng Normal có xu hướng thanh toán bằng Ewallet (15.9%) cao hơn so với dùng Cash (15.2%) và Credit card (12.4%). Đây có thể là dấu hiệu cho thấy nhóm khách hàng này ưa thích sử dụng ví điện tử hơn so với các hình thức truyền thống.

So sánh tỷ lệ thanh toán giữa hai nhóm, khách hàng Member có tỷ lệ sử dụng Credit card cao hơn đáng kể (18.7% so với 12.4%) so với khách hàng Normal, phản ánh khả năng và thói quen chi tiêu có thể khác biệt giữa hai nhóm.

Tổng thể, bảng cho thấy sự phân bố phương thức thanh toán khá cân bằng giữa hai nhóm khách hàng, với sự ưu tiên nhẹ cho phương thức Ewallet và Cash trong cả hai nhóm. Những thông tin này có thể hỗ trợ siêu thị trong việc xây dựng chiến lược marketing, chương trình khuyến mãi hoặc phát triển các phương thức thanh toán phù hợp với từng nhóm khách hàng.

4.2.2 .Trực quan hóa

ggplot(data4 %>% group_by(`Customer type`, Payment) %>% summarise(count = n()) %>% ungroup(), aes(x = `Customer type` , y = count, fill = Payment)) +
  geom_col(position = position_dodge()) +
  geom_text(aes(label = count), position = position_dodge(width = 0.9), vjust = -0.5) +
  labs(title = "Phương thức thanh toán theo loại khách hàng", y = "Số lần thanh toán ", x = "Loại khách hàng")
## `summarise()` has grouped output by 'Customer type'. You can override using the
## `.groups` argument.

4.2.3 .Kiểm định Chi-bình phương

chisq.test(table(data4$`Customer type`, data4$`Payment`))
## 
##  Pearson's Chi-squared test
## 
## data:  table(data4$`Customer type`, data4$Payment)
## X-squared = 2.6714, df = 2, p-value = 0.263

\[ \left\{ \begin{array}{ll} H_0: & \text{Loại khách hàng và phương thức thanh toán là độc lập}\\ H_1: & \text{ Loại khách hàng và phương thức thanh toán có liên quan} \end{array} \right. \]

Mức ý nghĩa 5%.

Ta thấy p_value=0.263>0.05, không đủ bằng chứng để bác bỏ H0. Vậy loại khách hàng và phương thức thanh toán là độc lập tại mức ý nghĩa 5%.

5 .Rủi ro tương đối (Relative Risk)

v1 <-table(data4$Gender, data4$`Customer type`)
print(v1)
##         
##          Member Normal
##   Female    356    215
##   Male      209    220
library(epitools)
## Khi có thêm tham số rev = 'c' thì sẽ thực hiện việc
## đổi chỗ 2 cột trong bảng ngẫu nhiên.
riskratio(v1) #package epitools
## $data
##         
##          Member Normal Total
##   Female    356    215   571
##   Male      209    220   429
##   Total     565    435  1000
## 
## $measure
##         risk ratio with 95% C.I.
##          estimate    lower    upper
##   Female 1.000000       NA       NA
##   Male   1.361956 1.183832 1.566882
## 
## $p.value
##         two-sided
##            midp.exact fisher.exact   chi.square
##   Female           NA           NA           NA
##   Male   1.754614e-05 2.052252e-05 1.687688e-05
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét: Theo bảng kết quả ta nhận nhận Female là nhóm tham chiếu RR=1.000. Ta thấy Male có RR=1.1362, nghĩa là khách hàng thường là nam cao hơn 1.1362 lần so với nữ. Khoảng ước lượng là (1.184;1.567) với độ tin cậy 95%.

6 .Tỷ số chênh (Odd Ratio)

oddsratio(v1)
## $data
##         
##          Member Normal Total
##   Female    356    215   571
##   Male      209    220   429
##   Total     565    435  1000
## 
## $measure
##         odds ratio with 95% C.I.
##          estimate    lower    upper
##   Female 1.000000       NA       NA
##   Male   1.741705 1.351496 2.247298
## 
## $p.value
##         two-sided
##            midp.exact fisher.exact   chi.square
##   Female           NA           NA           NA
##   Male   1.754614e-05 2.052252e-05 1.687688e-05
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Nhận xét: Odds Ratio = 1.74 có nghĩa là: So với nữ giới, nam giới có tỉ lệ là khách hàng Normal thay vì Member cao hơn 1.74 lần..