Tập dữ liệu Supermarket Sales ghi nhận thông tin chi tiết về các giao dịch tại siêu thị, bao gồm danh mục sản phẩm, đơn giá, số lượng, thu nhập gộp, cùng với các đặc điểm nhân khẩu học của khách hàng như giới tính, phương thức thanh toán và loại thành viên. Tập dữ liệu phù hợp cho phân tích xu hướng bán hàng, hành vi tiêu dùng và hiệu suất doanh thu.
Mô tả Biến:
Invoice ID: Mã định danh duy nhất cho mỗi giao dịch.
Branch: Chi nhánh thực hiện giao dịch (A, B, C).
City: Thành phố nơi chi nhánh tọa lạc.
Customer Type: Phân loại khách hàng (Thành viên/Thông thường).
Gender: Giới tính khách hàng (Nam/Nữ).
Product Line: Danh mục sản phẩm.
Unit Price: Đơn giá mỗi sản phẩm.
Quantity: Số lượng sản phẩm mua.
Tax 5%: Thuế 5% trên tổng giá trị trước thuế.
Total: Tổng thanh toán (bao gồm thuế).
Payment: Phương thức thanh toán (Tiền mặt/Thẻ tín dụng/Thẻ ghi nợ).
COGS: Giá vốn hàng bán.
Gross Margin %: Tỷ suất lợi nhuận gộp.
Gross Income: Thu nhập gộp từ giao dịch.
Rating: Đánh giá của khách hàng (thang điểm 1–5).
d <- read.csv("D:/PTDLDT/Supermarket Sales.csv")
str(d)
## 'data.frame': 1000 obs. of 14 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Branch : chr "A" "C" "A" "A" ...
## $ City : chr "Yangon" "Naypyitaw" "Yangon" "Yangon" ...
## $ CustomerType : chr "Member" "Normal" "Normal" "Member" ...
## $ Gender : chr "Female" "Female" "Male" "Male" ...
## $ ProductLine : chr "Health and beauty" "Electronic accessories" "Home and lifestyle" "Health and beauty" ...
## $ UnitPrice : num 74.7 15.3 46.3 58.2 86.3 ...
## $ Quantity : int 7 5 7 8 7 7 6 10 2 3 ...
## $ Tax.5. : num 26.14 3.82 16.22 23.29 30.21 ...
## $ Total : num 549 80.2 340.5 489 634.4 ...
## $ Payment : chr "Ewallet" "Cash" "Credit card" "Ewallet" ...
## $ GrossMarginPercentage: num 4.76 4.76 4.76 4.76 4.76 ...
## $ GrossIncome : num 26.14 3.82 16.22 23.29 30.21 ...
## $ Rating : num 9.1 9.6 7.4 8.4 5.3 4.1 5.8 8 7.2 5.9 ...
dldt <- c("Branch", "City", "CustomerType", "Gender" ,"ProductLine", "Payment")
dldt
## [1] "Branch" "City" "CustomerType" "Gender" "ProductLine"
## [6] "Payment"
dt <- d[, dldt]
str(dt)
## 'data.frame': 1000 obs. of 6 variables:
## $ Branch : chr "A" "C" "A" "A" ...
## $ City : chr "Yangon" "Naypyitaw" "Yangon" "Yangon" ...
## $ CustomerType: chr "Member" "Normal" "Normal" "Member" ...
## $ Gender : chr "Female" "Female" "Male" "Male" ...
## $ ProductLine : chr "Health and beauty" "Electronic accessories" "Home and lifestyle" "Health and beauty" ...
## $ Payment : chr "Ewallet" "Cash" "Credit card" "Ewallet" ...
head(dt)
## Branch City CustomerType Gender ProductLine Payment
## 1 A Yangon Member Female Health and beauty Ewallet
## 2 C Naypyitaw Normal Female Electronic accessories Cash
## 3 A Yangon Normal Male Home and lifestyle Credit card
## 4 A Yangon Member Male Health and beauty Ewallet
## 5 A Yangon Normal Male Sports and travel Ewallet
## 6 C Naypyitaw Normal Male Electronic accessories Ewallet
tail(dt)
## Branch City CustomerType Gender ProductLine Payment
## 995 C Naypyitaw Member Female Electronic accessories Ewallet
## 996 C Naypyitaw Normal Male Health and beauty Ewallet
## 997 B Mandalay Normal Female Home and lifestyle Ewallet
## 998 A Yangon Member Male Food and beverages Cash
## 999 A Yangon Normal Male Home and lifestyle Cash
## 1000 A Yangon Member Female Fashion accessories Cash
any(is.na(dt))
## [1] FALSE
Kết quả hiện thị “FALSE”, vậy dữ liệu không có giá trị bị thiếu.
#Kiểm tra dữ liệu
sapply(dt,class)
## Branch City CustomerType Gender ProductLine Payment
## "character" "character" "character" "character" "character" "character"
dt <- data.frame(lapply(dt, as.factor))
Bảng tần số
#Lập bảng tần số biến Branch
table(dt$Branch)
##
## A B C
## 340 332 328
Bảng tần suất
#Lập bảng tần suất của biến Branch
table(dt$Branch)/sum(nrow(dt))
##
## A B C
## 0.340 0.332 0.328
Biểu đồ
# Bảng tần suất và tỷ lệ %
Branch_freq <- table(dt$Branch)
Branch_pct <- Branch_freq / nrow(dt)
# Vẽ biểu đồ tròn
pie(Branch_freq,
main = "Phân bố chi nhánh",
labels = paste0(names(Branch_freq),
" (", round(Branch_pct*100, 1), "%)"),
col = c("lightpink", "green","lightblue"))
Nhận xét
counts <- table(dt$Branch)
diff_count <- abs(counts["F"] - counts["M"])
Vậy trong bộ dữ liệu này có 50.1 % nữ và 49.9% nam.
Bảng tần số
#Lập bảng tần số của biến City
table(dt$City)
##
## Mandalay Naypyitaw Yangon
## 332 328 340
Bảng tần suất
#Lập bảng tần suất của biến City
table(dt$City)/sum(nrow(dt))
##
## Mandalay Naypyitaw Yangon
## 0.332 0.328 0.340
Biểu đồ
# Bảng tần suất và tỷ lệ %
City_freq <- table(dt$City)
City_pct <- City_freq / nrow(dt)
# Vẽ biểu đồ tròn
pie(City_freq,
main = "Phân bố thành phố",
labels = paste0(names(City_freq),
" (", round(City_pct*100, 1), "%)"),
col = c("red", "blue","yellow"))
Nhận xét
Trong bộ dữ liệu này, thành phố có tỷ lệ giao dịch cao nhất là Yangon với khoảng 34%, tiếp theo là Mandalay (33.2%), cuối cùng là Naypyitaw (32.8%).
Dữ liệu này cho thấy các giao dịch phân bố khá đồng đều ở các thành phố vì tỷ lệ giữa các thành phố không chênh lệch nhau nhiều.
Bên cạnh đó, xu hướng phân bố này cũng phần nào phản ánh chiến lược tiếp thị và định hướng kênh phân phối của siêu thị, với trọng tâm đặt vào các khu vực đô thị lớn.
Bảng tần số
#Lập bảng tần số biến CustomerType
table(dt$CustomerType)
##
## Member Normal
## 501 499
Bảng tần suất
#Lập bảng tần suất của biến CustomerType
table(dt$CustomerType)/sum(nrow(dt))
##
## Member Normal
## 0.501 0.499
Biểu đồ
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(dt, aes(x = CustomerType)) +
geom_bar(fill = "red") +
theme_minimal() +
labs(title = "Biểu đồ phân loại khách hàng", x = "Loại khách hàng", y = "Tần suất")
Nhận xét
Vậy trong bộ dữ liệu này có 50.1 % khách hàng là thành viên và 49.9% khách hàng bình thường.
Bảng tần số
#Lập bảng tần số biến Gender
table(dt$Gender)
##
## Female Male
## 501 499
Bảng tần suất
#Lập bảng tần suất của biến Gender
table(dt$Gender)/sum(nrow(dt))
##
## Female Male
## 0.501 0.499
Biểu đồ
# Bảng tần suất và tỷ lệ %
Gender_freq <- table(dt$Gender)
Gender_pct <- Gender_freq / nrow(dt)
# Vẽ biểu đồ tròn
pie(Gender_freq,
main = "Phân bố giới tính",
labels = paste0(names(Gender_freq),
" (", round(Gender_pct*100, 1), "%)"),
col = c("lightpink","lightblue"))
Nhận xét
Vậy trong bộ dữ liệu này có 50.1 % nữ và 49.9% nam.
Bảng tần số
#Lập bảng tần số của biến ProductLine
table(dt$ProductLine)
##
## Electronic accessories Fashion accessories Food and beverages
## 170 178 174
## Health and beauty Home and lifestyle Sports and travel
## 152 160 166
Bảng tần suất
#Lập bảng tần suất của biến ProductLine
table(dt$ProductLine)/sum(nrow(dt))
##
## 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
Biểu đồ
ggplot(dt, aes(x = ProductLine)) +
geom_bar() +
coord_flip() + # xoay ngang cho gọn
labs(title = "Tần suất giao dịch theo ProductLine",
x = "ProductLine", y = "Số giao dịch")
Nhận xét
Trong tập dữ liệu, nhóm sản phẩm có tỷ lệ giao dịch cao nhất là Fashion accessories với 17.8%, theo sau là Food and beverages (17.4%) và Electronic accessories (17%). Ngược lại, nhóm Health and beauty (15.2%) và Home and lifestyle (16%), Home and lifestyle với (16%) có tỷ lệ thấp hơn, cho thấy sự ưu tiên của khách hàng đối với các sản phẩm thời trang và tiêu dùng thiết yếu.
Bảng tần số
#Lập bảng tần số của biến Payment
table(dt$Payment)
##
## Cash Credit card Ewallet
## 344 311 345
Bảng tần suất
#Lập bảng tần suất của biến Payment
table(dt$Payment)/sum(nrow(dt))
##
## Cash Credit card Ewallet
## 0.344 0.311 0.345
Biểu đồ
library(ggplot2)
ggplot(dt, aes(x = Payment)) +
geom_bar(fill = "orange") +
theme_minimal() +
labs(title = "Biểu đồ phân loại phương thức thanh toán", x = "Phương thức thanh toán", y = "Tần suất")
Nhận xét Trong bộ dữ liệu này, phương thức thanh toán có tỷ lệ giao dịch cao nhất là Ewallet với khoảng 34.5%, tiếp theo là Cash (34.4%), cuối cùng là Credit card (31.1%).
Ước lượng khoảng tin cậy 95% cho tỷ lệ “Nữ”
# Đếm số lượng khách hàng nữ
n_female <- sum(dt$Gender == "Female")
#Tổng số quan sát
n_total <- nrow(dt)
#Tính khoảng tin cậy 95% cho tỷ lệ nữ
prop.test(n_female, n_total, correct = FALSE)
##
## 1-sample proportions test without continuity correction
##
## data: n_female out of n_total, null probability 0.5
## X-squared = 0.004, df = 1, p-value = 0.9496
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.4700658 0.5319265
## sample estimates:
## p
## 0.501
Kiểm định giả thuyết
Đặt giả thuyết:
\(H_0\): Tỷ lệ nữ = 0.5
\(H_1\): Tỷ lệ nữ ≠ 0.5
prop.test(n_female, n_total, p = 0.5, correct = FALSE)
##
## 1-sample proportions test without continuity correction
##
## data: n_female out of n_total, null probability 0.5
## X-squared = 0.004, df = 1, p-value = 0.9496
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.4700658 0.5319265
## sample estimates:
## p
## 0.501
Giá trị thống kê chi bình phương: 0.004, với bậc tự do = 1
Tỷ lệ mẫu (p̂): 0.501 → khoảng 50.1% khách hàng là nữ.
Khoảng tin cậy 95% cho tỷ lệ nữ: [0.4701,0.5319]
p-value = 0.9496 > 0.05, vì vậy ta không đủ cơ sở để bác bỏ giả thuyết \(H_0\) ở mức ý nghĩa 5%.
Kết luận: Không có bằng chứng thống kê để cho rằng tỷ lệ khách hàng nữ khác 50%. Tỷ lệ nữ trong mẫu xấp xỉ 50%, cho thấy phân bố giới tính trong dữ liệu là cân bằng và không có sai khác có ý nghĩa thống kê.
Ước lượng khoảng tin cậy 95% cho tỷ lệ “Bình thường”
#Số khách hàng bình thường
n_normal <- sum(dt$CustomerType == "Normal")
#Tổng số quan sát
n_total <- nrow(dt)
#Tính khoảng tin cậy 95%
prop.test(n_normal, n_total, correct = FALSE)
##
## 1-sample proportions test without continuity correction
##
## data: n_normal out of n_total, null probability 0.5
## X-squared = 0.004, df = 1, p-value = 0.9496
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.4680735 0.5299342
## sample estimates:
## p
## 0.499
Kiểm định giả thuyết
Đặt giả thuyết:
\(H_0\): Tỷ lệ khách hàng bình thường = 0.5
\(H_1\): Tỷ lệ khách hàng bình thường ≠ 0.5
prop.test(n_normal, n_total, p=0.5, correct = FALSE)
##
## 1-sample proportions test without continuity correction
##
## data: n_normal out of n_total, null probability 0.5
## X-squared = 0.004, df = 1, p-value = 0.9496
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.4680735 0.5299342
## sample estimates:
## p
## 0.499
Giá trị thống kê chi bình phương: 0.004, với bậc tự do = 1
Tỷ lệ mẫu (p̂): 0.499 → tức khoảng 49.9% khách hàng là bình thường.
Khoảng tin cậy 95% cho tỷ lệ độc thân: [0.4681, 0.5299]
p-value = 0.9496 > 0.05 ⇒ Không đủ cơ sở để bác bỏ giả thuyết H₀.
Kết luận: Không có bằng chứng thống kê để cho rằng tỷ lệ khách hàng không phải thành viên khác 50%. Tỷ lệ này xấp xỉ 50%, cho thấy phân bố giữa khách hàng là thành viên và không thành viên gần như cân bằng, không có sai khác có ý nghĩa thống kê.
**Ước lượng khoảng tin cậy 95% cho tỷ lệ “Cash*
#Số lượng phương thức thanh toán "Cash"
n_cash <-sum(dt$Payment == "Cash")
#Tổng số quan sát
n_total <- nrow(dt)
#Tính khoảng tin cậy 95%
prop.test(n_cash, n_total, correct = FALSE)
##
## 1-sample proportions test without continuity correction
##
## data: n_cash out of n_total, null probability 0.5
## X-squared = 97.344, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.3152045 0.3739895
## sample estimates:
## p
## 0.344
Kiểm định giả thuyết
Đặt giả thuyết:
\(H_0\): Tỷ lệ phương thức thanh toán là tiền mặt ≤ 0.35
\(H_1\): Tỷ lệ phương thức thanh toán là tiền mặt > 0.35
prop.test(n_cash, n_total, p=0.35, alternative = "greater", correct = FALSE)
##
## 1-sample proportions test without continuity correction
##
## data: n_cash out of n_total, null probability 0.35
## X-squared = 0.15824, df = 1, p-value = 0.6546
## alternative hypothesis: true p is greater than 0.35
## 95 percent confidence interval:
## 0.3197415 1.0000000
## sample estimates:
## p
## 0.344
Giá trị thống kê chi bình phương: 0.15824, bậc tự do = 1.
Tỷ lệ mẫu (p̂): 0.344 → khoảng 34.4% phương thức thanh toán tiền mặt.
Khoảng tin cậy 95% cho nhóm Cash: [0.3197,1.0000] vì là kiểm định 1 phía
p-value = 0.6546 > 0.05, vì vậy ta không đủ cơ sở bác bỏ giả thuyết \(H_0\) ở mức ý nghĩa 5%.
Kết luận: Tỷ lệ khách hàng thanh toán bằng tiền mặt không khác biệt có ý nghĩa thống kê so với 35%. Nói cách khác, tỷ lệ thanh toán tiền mặt khoảng 34.4% là phù hợp với giả thuyết ban đầu.
#Tạo bảng chéo
bts_gender_payment <- table(dt$Gender, dt$Payment)/sum(nrow(dt))
#Xem bảng chéo
prop.table(bts_gender_payment, margin = 1) * 100 # Tính theo hàng
##
## Cash Credit card Ewallet
## Female 35.52894 32.53493 31.93613
## Male 33.26653 29.65932 37.07415
Bảng tần suất chéo được tính để so sánh cơ cấu phương thức thanh toán theo giới tính.
Tỷ lệ phần trăm tính theo hàng → giúp xem nam và nữ thanh toán bằng phương thức nào nhiều hơn trong nhóm của họ.
Nhận xét:
Phụ nữ ưu tiên sử dụng tiền mặt (Cash) nhiều nhất với tỷ lệ khoảng 35.53%, cao hơn so với nam giới (33.27%). Điều này cho thấy phụ nữ có xu hướng dùng tiền mặt nhiều hơn trong các giao dịch.
Ngược lại, nam giới có xu hướng sử dụng ví điện tử (Ewallet) nhiều hơn, chiếm khoảng 37.07%, so với tỷ lệ của nữ là 31.94%. Điều này có thể phản ánh sự chấp nhận công nghệ thanh toán điện tử cao hơn ở nam giới.
Tỷ lệ sử dụng thẻ tín dụng (Credit Card) tương đối thấp và gần như tương đương giữa hai giới, với nữ khoảng 32.53% và nam khoảng 29.66%. Điều này cho thấy thẻ tín dụng không phải là phương thức phổ biến nhất đối với cả hai nhóm giới tính.
Vẽ biểu đồ cột để có cái nhìn cụ thể hơn.
# Chuyển sang dataframe
gt_tt <- as.data.frame(bts_gender_payment)
colnames(gt_tt) <- c("Gender", "Payment", "Count")
# Vẽ biểu đồ
library(ggplot2)
ggplot(gt_tt, aes(Gender, Count, fill = Payment)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Cơ cấu phương thức thanh toán theo giới tính",
x = "Giới tính", y = "Số lượng", fill = "Phương thức thanh toán") +
theme_minimal()
Mối quan hệ và xu hướng:
Xu hướng:
Giả thuyết kiểm định:
H₀: Giới tính và phương thức thanh toán là hai biến độc lập.
H₁: Giới tính và phương thức thanh toán là có liên quan.
Thực hiện kiểm định Chi-bình phương
#Tạo bảng tần số
btso_gender_payment <- table(dt$Gender, dt$Payment)
btso_gender_payment
##
## Cash Credit card Ewallet
## Female 178 163 160
## Male 166 148 185
chi_test <- chisq.test(btso_gender_payment)
chi_test
##
## Pearson's Chi-squared test
##
## data: btso_gender_payment
## X-squared = 2.9497, df = 2, p-value = 0.2288
Nhận xét kết quả kiểm định:
Giá trị Chi-bình phương (X²): 2.9497
Bậc tự do (df): 2
Giá trị p: 0.2288
Kết luận:
Dựa vào giá trị p (0.2288) và mức ý nghĩa α = 0.05. Vì p-value = 0.2288 > 0.05, ta không đủ bằng chứng để bác bỏ giả thuyết H₀. Điều này có nghĩa là hai biến (giới tính và phương thức thanh toán) là độc lập với nhau ở mức ý nghĩa 0.05.
Mặc dù không có mối liên hệ ý nghĩa thống kê, việc phân tích tần suất vẫn có thể cung cấp thông tin hữu ích về xu hướng sử dụng phương thức thanh toán của hai giới. Cụ thể, nam giới có thể có xu hướng sử dụng ví điện tử cao hơn, trong khi phụ nữ lại ưa chuộng tiền mặt và thẻ tín dụng hơn.
#Tạo bảng chéo
bts_city_customertype <- table(dt$City, dt$CustomerType)/sum(nrow(dt))
#Xem bảng chéo
prop.table(bts_city_customertype, margin = 1) * 100 # Tính theo hàng
##
## Member Normal
## Mandalay 49.69880 50.30120
## Naypyitaw 51.52439 48.47561
## Yangon 49.11765 50.88235
Bảng tần suất chéo được tính để so sánh cơ cấu thành phố theo tình trạng khách hàng.
Tỷ lệ phần trăm tính theo hàng → giúp xem người đến từ Mandalay, Naypyitaw và Yangon là khách hàng thành viên nhiều hơn trong nhóm của họ như thế nào.
Nhận xét:
Mandalay: Tỷ lệ người hội viên (Member) là 49.70%, trong khi tỷ lệ người bình thường (Normal) là 50.30%. Điều này cho thấy sự phân bố gần như đồng đều giữa hai nhóm, tuy nhiên, nhóm người bình thường có tỷ lệ cao hơn một chút.
Naypyitaw: Tỷ lệ người hội viên cao hơn đáng kể (51.52%) so với người bình thường (48.48%). Điều này cho thấy rằng người hội viên có khả năng tham gia vào các hoạt động hoặc dịch vụ cao hơn so với người bình thường.
Yangon: Tỷ lệ người hội viên là 49.12%, trong khi tỷ lệ người bình thường là 50.88%. Tương tự như Mandalay, sự phân bố giữa hai nhóm là gần như đồng đều, với nhóm người bình thường chiếm ưu thế hơn.
# Chuyển sang dataframe
tp_kh <- as.data.frame(bts_city_customertype)
colnames(tp_kh) <- c("City", "CustomerType", "Count")
# Vẽ biểu đồ
library(ggplot2)
ggplot(tp_kh, aes(City, Count, fill = CustomerType)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Cơ cấu loại khách hàng theo thành phố",
x = "Thành phố", y = "Số lượng", fill = "Loại khách hàng") +
theme_minimal()
Nhận xét về mối quan hệ: Có sự liên kết giữa hai biến: Tỷ lệ khách hàng hội viên (Member) cao hơn ở thành phố Naypyitaw so với hai thành phố còn lại. Điều này cho thấy rằng sự tham gia của khách hàng vào các dịch vụ hoặc chương trình có thể bị ảnh hưởng bởi vị trí địa lý.
Xu hướng:
Thành phố Mandalay: Tỷ lệ khách hàng hội viên và khách hàng bình thường (Normal) gần như tương đương, cho thấy sự phân bố khách hàng khá đồng đều giữa hai nhóm.
Thành phố Naypyitaw: Tỷ lệ khách hàng hội viên chiếm ưu thế rõ rệt (51.52%), cho thấy rằng người dân ở đây có xu hướng tham gia nhiều hơn vào các chương trình khách hàng.
Thành phố Yangon: Tương tự như Mandalay, tỷ lệ giữa hai nhóm khách hàng là khá đồng đều, với khách hàng bình thường có tỷ lệ cao hơn một chút.
Kết luận: Có vẻ như có một sự liên kết giữa thành phố và loại khách hàng, với thành phố Naypyitaw cho thấy tỷ lệ khách hàng hội viên cao hơn. Điều này có thể phản ánh sự khác biệt trong nhu cầu hoặc quyền lợi của khách hàng ở từng khu vực, với Naypyitaw có thể cung cấp nhiều dịch vụ hấp dẫn hơn cho khách hàng hội viên.
Giả thuyết kiểm định:
H₀: Loại khách hàng và thành phố là hai biến độc lập.
H₁: Loại khách hàng và thành phố là có liên quan.
Thực hiện kiểm định Chi-bình phương:
#Tạo bảng tần số
btso_city_customertype <- table(dt$City, dt$CustomerType)
btso_city_customertype
##
## Member Normal
## Mandalay 165 167
## Naypyitaw 169 159
## Yangon 167 173
chi_test <- chisq.test(btso_city_customertype)
chi_test
##
## Pearson's Chi-squared test
##
## data: btso_city_customertype
## X-squared = 0.41881, df = 2, p-value = 0.8111
Nhận xét kết quả kiểm định:
Giá trị Chi-bình phương (X²): 0.41881
Bậc tự do (df): 2
Giá trị p: < 0.8111
Kết luận: Dựa vào giá trị p (0.8111) và mức ý nghĩa α = 0.05, ta không đủ bằng chứng để bác bỏ giả thuyết H₀. Điều này có nghĩa là hai biến (thành phố và loại khách hàng) là độc lập với nhau ở mức ý nghĩa 0.05.
Kết quả này cho thấy không có mối liên hệ có ý nghĩa thống kê giữa thành phố và loại khách hàng. Điều này cho thấy hai điểm chính:
Các loại khách hàng (hội viên và bình thường) không bị ảnh hưởng bởi vị trí địa lý, cho thấy rằng dịch vụ và sản phẩm có thể được tiếp cận đồng đều ở các thành phố khác nhau.
Sự tham gia của khách hàng vào các chương trình hội viên có thể phụ thuộc vào các yếu tố khác ngoài địa lý, như nhu cầu cá nhân hoặc tính hấp dẫn của các ưu đãi, hơn là sự khác biệt giữa các thành phố.
#Tạo bảng chéo
bts_customertype_payment <- table(dt$CustomerType, dt$Payment)/sum(nrow(dt))
#Xem bảng chéo
prop.table(bts_customertype_payment, margin = 1) * 100 # Tính theo hàng
##
## Cash Credit card Ewallet
## Member 33.53293 34.33134 32.13573
## Normal 35.27054 27.85571 36.87375
Dữ liệu cho thấy tỷ lệ sử dụng các phương thức thanh toán (Cash, Credit card, Ewallet) giữa hai nhóm khách hàng (Member và Normal). Xu hướng chính:
Nhóm khách hàng hội viên (Member): Tỷ lệ sử dụng tiền mặt là 33.53%, thẻ tín dụng là 34.33%, và ví điện tử là 32.14%. Điều này cho thấy rằng khách hàng hội viên có sự phân bố tương đối đồng đều trong việc lựa chọn các phương thức thanh toán.
Nhóm khách hàng bình thường (Normal): Tỷ lệ sử dụng tiền mặt cao hơn (35.27%) so với thẻ tín dụng (27.86%), trong khi tỷ lệ sử dụng ví điện tử là 36.87%. Điều này cho thấy rằng khách hàng bình thường có xu hướng ưa chuộng sử dụng tiền mặt và ví điện tử hơn là thẻ tín dụng.
So sánh giữa hai nhóm: Nhìn chung, nhóm khách hàng bình thường có tỷ lệ sử dụng tiền mặt và ví điện tử cao hơn nhóm hội viên. Điều này có thể phản ánh sự khác biệt trong thói quen chi tiêu và sự ưu tiên của từng nhóm khách hàng đối với các phương thức thanh toán khác nhau.
# Chuyển sang dataframe
kh_tt <- as.data.frame(bts_customertype_payment)
colnames(kh_tt) <- c("CustomerType","Payment", "Count")
# Vẽ biểu đồ
library(ggplot2)
ggplot(kh_tt, aes(CustomerType, Count , fill = Payment)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Cơ cấu phương thức thanh toán theo loại khách hàng",
x = "Loại khách hàng", y = "Số lượng", fill = "Phương thức thanh toán") +
theme_minimal()
Biểu đồ thể hiện tỷ lệ sử dụng các phương thức thanh toán (Cash, Credit card, Ewallet) theo từng nhóm khách hàng (Member và Normal). Dưới đây là một số nhận xét chính:
Xu hướng chung:
Tỷ lệ sử dụng tiền mặt (Cash) và ví điện tử (Ewallet) có xu hướng cao hơn trong nhóm khách hàng bình thường (Normal) so với nhóm hội viên (Member). Điều này cho thấy rằng khách hàng bình thường có thể ưu tiên các phương thức thanh toán truyền thống hơn.
Nhóm khách hàng hội viên (Member): Tỷ lệ sử dụng thẻ tín dụng (Credit card) cao nhất (34.33%), cho thấy rằng khách hàng hội viên có xu hướng tin tưởng vào các phương thức thanh toán không tiền mặt hơn.
Nhóm khách hàng bình thường (Normal): Tỷ lệ sử dụng ví điện tử cao nhất (36.87%), cho thấy rằng họ có thể ưa chuộng sự tiện lợi và nhanh chóng mà ví điện tử mang lại. Tuy nhiên, tỷ lệ sử dụng thẻ tín dụng trong nhóm này lại thấp hơn (27.86%).
Kết luận:
Có một sự khác biệt rõ ràng trong thói quen sử dụng phương thức thanh toán giữa hai nhóm khách hàng. Nhóm hội viên có xu hướng sử dụng thẻ tín dụng nhiều hơn, trong khi nhóm bình thường lại ưa chuộng tiền mặt và ví điện tử. Biểu đồ này giúp minh họa rõ ràng mối quan hệ giữa loại khách hàng và phương thức thanh toán, cho thấy rằng sở thích thanh toán có thể bị ảnh hưởng bởi tình trạng hội viên của khách hàng.
Giả thuyết kiểm định:
H₀: Loại khách hàng và phương thức thanh toán là hai biến độc lập.
H₁: Loại khách hàng và phương thức thanh toán là có liên quan.
Thực hiện kiểm định Chi-bình phương
#Tạo bảng tần số
btso_customertype_payment <- table(dt$CustomerType, dt$Payment)
btso_customertype_payment
##
## Cash Credit card Ewallet
## Member 168 172 161
## Normal 176 139 184
chi_test <- chisq.test(btso_customertype_payment)
chi_test
##
## Pearson's Chi-squared test
##
## data: btso_customertype_payment
## X-squared = 5.217, df = 2, p-value = 0.07364
Nhận xét kết quả kiểm định:
Giá trị Chi-bình phương (X²): 5.217
Bậc tự do (df): 2
Giá trị p: < 0.07364
Kết luận: Dựa vào giá trị p (0.07364) và mức ý nghĩa α = 0.05, ta không đủ bằng chứng để bác bỏ giả thuyết H₀. Điều này có nghĩa là hai biến (loại khách hàng và phương thức thanh toán) là độc lập với nhau ở mức ý nghĩa 0.05.
Nói cách khác, không có mối liên hệ có ý nghĩa thống kê giữa loại khách hàng và phương thức thanh toán. Kết quả này cho thấy rằng sự lựa chọn phương thức thanh toán không bị ảnh hưởng rõ rệt bởi việc khách hàng là hội viên hay bình thường, và có thể cho thấy rằng các yếu tố khác như thói quen chi tiêu hoặc sở thích cá nhân có thể đóng vai trò quan trọng hơn trong quyết định thanh toán của họ.
# Bảng chéo giữa Gender và CustomerType
mh <- table(dt$Gender, dt$CustomerType)
addmargins(mh)
##
## Member Normal Sum
## Female 261 240 501
## Male 240 259 499
## Sum 501 499 1000
Kiểm định: - H₀: Tỷ lệ là hội viên giữa nữ và nam là bằng nhau. (p₁ - p₂ =0 ) - H₁: Tỷ lệ là hội viên của nữ cao hơn tỷ lệ của nam.(p₁ - p₂ > 0)
Tính toán Tỷ lệ
Tính hiệu hai tỷ lệ
counts1 <- c(mh["Female", "Member"], mh["Male", "Member"])
totals1 <- c(sum(mh["Female", ]), sum(mh["Male", ]))
test1 <- prop.test(counts1, totals1, alternative = "greater", correct = FALSE)
test1
##
## 2-sample test for equality of proportions without continuity correction
##
## data: counts1 out of totals1
## X-squared = 1.5997, df = 1, p-value = 0.103
## alternative hypothesis: greater
## 95 percent confidence interval:
## -0.01197707 1.00000000
## sample estimates:
## prop 1 prop 2
## 0.5209581 0.4809619
prop 1 (p1) = 0.5209581: tỷ lệ nữ là hội viên khoảng 52.10%
prop 2 (p2) = 0.4809619: tỷ lệ nam là hội viên khoảng 48.10%
P-value = 0.103
Giá trị p-value thu được là 0.103, lớn hơn mức ý nghĩa 0.05. Do đó, chúng ta không đủ bằng chứng để bác bỏ giả thuyết H₀ \(H_0: p_1 - p_2 = 0\).
Điều này có nghĩa là, theo dữ liệu hiện tại, không có sự khác biệt có ý nghĩa thống kê giữa tỷ lệ hội viên của nữ và nam. Không có bằng chứng cho thấy tỷ lệ nữ hội viên cao hơn tỷ lệ nam.
mh <- table(dt$Gender, dt$CustomerType)
#Thêm tổng hàng và cột
mh1 <- addmargins(mh)
mh1
##
## Member Normal Sum
## Female 261 240 501
## Male 240 259 499
## Sum 501 499 1000
library(epitools)
riskratio(mh, method="wald")
## $data
##
## Member Normal Total
## Female 261 240 501
## Male 240 259 499
## Total 501 499 1000
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Female 1.000000 NA NA
## Male 1.083492 0.9567649 1.227005
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.2068311 0.2294743 0.2059467
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhóm nữ (Female) được chọn làm nhóm tham chiếu, nên RR = 1. Điều này có nghĩa chúng ta so sánh nguy cơ trở thành hội viên của nhóm nam (M) với nhóm nữ.
Nhóm nam (Male) có RR = 1.083492 nghĩa là:
Tỷ lệ hội viên ở nam bằng khoảng 108.35% so với nữ. Hay nói cách khác, nguy cơ (xác suất) trở thành hội viên của nam cao hơn nữ khoảng 8.35%.
Khoảng tin cậy 95% của RR là (0.9567649 – 1.227005):
Khoảng này bao gồm số 1, nghĩa là giá trị RR thực sự có thể là 1 (không có khác biệt).
Khoảng tin cậy cho ta biết mức độ chính xác của ước lượng RR; khoảng rộng và bao gồm 1 cho thấy sự không chắc chắn và thiếu bằng chứng về sự khác biệt thực sự.
Ta có giả thuyết:
H₀: Tỷ lệ hội viên ở Nam và Nữ không khác nhau, tức là RR = 1.
H₁: Tỷ lệ hội viên ở Nam và Nữ khác nhau, RR ≠ 1.
| Kiểm định | p-value (Nam so với Nữ) | Ý nghĩa chính |
|---|---|---|
| midp.exact | 0.2068311 | p-value chính xác, sử dụng phương pháp “mid-p” (một biến thể chính xác hơn Fisher) |
| fisher.exact | 0.2294743 | p-value từ kiểm định Fisher chính xác (phù hợp với bảng nhỏ hoặc số liệu ít) |
| chi.square | 0.2059467 | p-value từ kiểm định Chi-square (xấp xỉ, dựa trên phân phối chi bình phương) |
Vì p-value > 0.05, ta không có đủ bằng chứng để nói rằng giới tính ảnh hưởng đáng kể đến khả năng trở thành hội viên.
Nói cách khác, sự khác biệt giữa nhóm Nam và nhóm Nữ về tỷ lệ hội viên không có ý nghĩa thống kê.
# Tính OR và khoảng tin cậy
or_mh <- oddsratio(mh, method = "wald", conf.level = 0.95)
or_mh
## $data
##
## Member Normal Total
## Female 261 240 501
## Male 240 259 499
## Total 501 499 1000
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Female 1.000000 NA NA
## Male 1.173594 0.915718 1.50409
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.2068311 0.2294743 0.2059467
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
oddsratio(mh, method = "wald", conf.level = 0.95)
## $data
##
## Member Normal Total
## Female 261 240 501
## Male 240 259 499
## Total 501 499 1000
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Female 1.000000 NA NA
## Male 1.173594 0.915718 1.50409
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.2068311 0.2294743 0.2059467
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
oddsratio(mh, method = "wald", conf.level = 0.95)
## $data
##
## Member Normal Total
## Female 261 240 501
## Male 240 259 499
## Total 501 499 1000
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Female 1.000000 NA NA
## Male 1.173594 0.915718 1.50409
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.2068311 0.2294743 0.2059467
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Odds Ratio (OR) = 1.173594
Khoảng tin cậy 95%: từ 0.915718 đến 1.50409
Giá trị OR = 1.173594 cho thấy odds (cơ hội) trở thành hội viên của nam cao hơn nữ khoảng 17.36%. Tuy nhiên, sự khác biệt này không lớn.
Do khoảng tin cậy 95% chứa giá trị 1, nên: Không có đủ bằng chứng thống kê để kết luận rằng giới tính ảnh hưởng đến odds trở thành hội viên.
Kết luận: Mặc dù nam có vẻ có odds trở thành hội viên cao hơn nữ một chút, nhưng sự khác biệt không có ý nghĩa thống kê. Do đó, giới tính không phải là yếu tố ảnh hưởng rõ rệt đến khả năng trở thành hội viên trong dữ liệu hiện tại.
Trong phân tích này, chúng ta đã khám phá hành vi mua sắm của khách hàng qua tập dữ liệu Supermarket Sales. Một số kết luận chính như sau:
Biến định tính: Tỷ lệ nữ và nam trong mẫu gần như bằng nhau, cho thấy không có thiên lệch giới tính.
Mối quan hệ giữa các biến: Không có mối liên hệ có ý nghĩa giữa giới tính, phương thức thanh toán và vị trí địa lý, cho thấy yếu tố khác có thể ảnh hưởng lớn hơn.
Phương thức thanh toán: Ewallet là phương thức chính được ưa chuộng, phản ánh xu hướng sử dụng công nghệ thanh toán điện tử.
Kết quả chỉ ra rằng:
Yếu tố bên ngoài: Các yếu tố như chương trình khuyến mãi và thương hiệu cần được nghiên cứu thêm để hiểu rõ hơn về hành vi mua sắm.
Phân khúc khách hàng: Nghiên cứu theo độ tuổi và thu nhập có thể cung cấp thông tin quý giá.
Thời gian và xu hướng: Nghiên cứu dài hạn sẽ giúp theo dõi sự thay đổi trong hành vi tiêu dùng.
Phân tích đã giúp hiểu rõ hơn về hành vi tiêu dùng tại siêu thị. Dù có một số xu hướng nhất định, nhiều yếu tố khác cũng cần xem xét để phát triển chiến lược kinh doanh hiệu quả hơn. Hy vọng nghiên cứu tiếp theo sẽ khám phá sâu hơn vấn đề này, cung cấp thông tin giá trị cho ngành bán lẻ.