library(csv)
library(DT)
da <- read.csv("C:/Users/Admin/OneDrive/Desktop/TÀI LIỆU HỌC TẬP/PTDLDT/Supermarket Transactions.csv", header= T, sep= ";")
datatable(da, caption="DỮ LIỆU SUPERMARKET TRANSACTIONS")
str(da) #hiển thị cấu trúc dữ liệu, cho biết các biến thuộc loại nào (ex: gender là chr_charactor)
## 'data.frame': 14059 obs. of 17 variables:
## $ X : int 4639 4640 4699 4887 4913 4914 4979 4980 5011 5030 ...
## $ PurchaseDate : chr "27/12/2008" "27/12/2008" "30/12/2008" "07/01/2009" ...
## $ CustomerID : int 9685 6563 489 8121 6563 7929 8245 7588 2634 1882 ...
## $ Gender : chr "F" "F" "M" "F" ...
## $ MaritalStatus : chr "S" "S" "M" "S" ...
## $ Homeowner : chr "Y" "N" "N" "N" ...
## $ Children : int 3 4 2 2 4 4 0 0 5 5 ...
## $ AnnualIncome : chr "$50K - $70K" "$50K - $70K" "$70K - $90K" "$10K - $30K" ...
## $ City : chr "Acapulco" "Acapulco" "Acapulco" "Acapulco" ...
## $ StateorProvince : chr "Guerrero" "Guerrero" "Guerrero" "Guerrero" ...
## $ Country : chr "Mexico" "Mexico" "Mexico" "Mexico" ...
## $ ProductFamily : chr "Non-Consumable" "Food" "Food" "Food" ...
## $ ProductDepartment: chr "Household" "Snack Foods" "Baking Goods" "Baking Goods" ...
## $ ProductCategory : chr "Plastic Products" "Snack Foods" "Baking Goods" "Jams and Jellies" ...
## $ UnitsSold : int 3 6 3 2 3 6 4 4 5 5 ...
## $ Revenue : num 4.75 16.32 12.17 10.35 19.17 ...
## $ X.1 : chr "" "" "" "" ...
datatable(head(da, n= 10), caption = "Bảng hiển thị 10 dòng đầu dữ liệu")
datatable(tail(da, n=10), caption = "Bảng hiển thị 10 dòng cuối dữ liệu")
Việc đọc dữ liệu từ file tmp.csv vào R và hiển thị cấu trúc bằng hàm str() đã được thực hiện hiệu quả, cung cấp cái nhìn tổng quan về tập dữ liệu Supermarket Transactions với 14,059 quan sát và 17 biến. Quá trình này xác định rõ ràng kiểu dữ liệu của từng biến, đặc biệt là các biến định tính như Gender, MaritalStatus, và AnnualIncome, ban đầu được lưu dưới dạng ký tự (character). Việc hiển thị 10 dòng đầu và cuối bằng head() và tail() giúp kiểm tra trực quan tính nhất quán và định dạng của dữ liệu, đảm bảo không có lỗi nhập liệu rõ ràng. Sử dụng gói DT để trình bày các dòng này trong giao diện tương tác nâng cao khả năng quan sát dữ liệu. Về mặt thống kê, bước này đặt nền tảng vững chắc cho các phân tích tiếp theo bằng cách xác nhận kích thước mẫu lớn và cấu trúc dữ liệu rõ ràng. Việc nhận diện các biến định tính cần chuyển đổi sang kiểu factor là một bước quan trọng, đảm bảo dữ liệu sẵn sàng cho các kiểm định thống kê như chi-bình phương hoặc phân tích tần suất, nâng cao độ tin cậy của kết quả.
cate_da <- c("Gender","MaritalStatus","Homeowner","AnnualIncome", #chọn ra biến định tính
"City","StateorProvince","Country","ProductFamily",
"ProductDepartment","ProductCategory")
colSums(is.na(da[cate_da])) # Kiểm tra giá trị NA
## Gender MaritalStatus Homeowner AnnualIncome
## 0 0 0 0
## City StateorProvince Country ProductFamily
## 0 0 0 0
## ProductDepartment ProductCategory
## 0 0
Kiểm tra giá trị thiếu (NA) trong các biến định tính bằng hàm colSums(is.na()) cho thấy không có giá trị NA trong các cột Gender, MaritalStatus, Homeowner, AnnualIncome, City, StateorProvince, Country, ProductFamily, ProductDepartment, và ProductCategory. Kết quả này phản ánh chất lượng cao của tập dữ liệu, loại bỏ nhu cầu xử lý giá trị thiếu và giảm nguy cơ sai lệch trong phân tích thống kê. Việc tập trung kiểm tra các biến định tính là phù hợp, vì đây là các biến chính được sử dụng trong các phân tích như kiểm định chi-bình phương hoặc ước lượng tỷ lệ. Nếu có NA, các phương pháp như thay thế bằng mode hoặc loại bỏ quan sát có thể được cân nhắc, nhưng với dữ liệu hoàn chỉnh, không cần áp dụng. Về mặt thống kê, sự vắng mặt của giá trị NA đảm bảo tính toàn vẹn của dữ liệu, cho phép sử dụng toàn bộ mẫu 14,059 quan sát mà không cần điều chỉnh. Bước này củng cố độ tin cậy của các phân tích tiếp theo, đặc biệt khi xử lý các biến định tính với các hạng mục rõ ràng, hỗ trợ việc diễn giải kết quả một cách chính xác và không bị thiên lệch.
sapply(da[cate_da], is.factor) #Kiểm tra biến có phải là factor không
## Gender MaritalStatus Homeowner AnnualIncome
## FALSE FALSE FALSE FALSE
## City StateorProvince Country ProductFamily
## FALSE FALSE FALSE FALSE
## ProductDepartment ProductCategory
## FALSE FALSE
da[cate_da] <- lapply(da[cate_da], as.factor)
Việc kiểm tra và chuyển đổi các biến định tính sang kiểu factor bằng hàm sapply() và lapply() được thực hiện chính xác, đảm bảo rằng các biến như Gender, MaritalStatus, Homeowner, AnnualIncome, City, StateorProvince, Country, ProductFamily, ProductDepartment, và ProductCategory được xử lý dưới dạng factor. Ban đầu, các biến này ở dạng ký tự, không phù hợp cho các phân tích thống kê yêu cầu biến hạng mục. Chuyển đổi sang factor cho phép R nhận diện các mức (levels) của từng biến, hỗ trợ các phép tính tần suất, kiểm định chi-bình phương, và trực quan hóa chính xác. Quá trình này đặc biệt quan trọng với các biến có nhiều hạng mục như AnnualIncome hoặc ProductCategory, vì nó đảm bảo các giá trị được xử lý như các nhóm riêng biệt thay vì chuỗi ký tự. Về mặt thống kê, bước chuyển đổi này nâng cao tính phù hợp của dữ liệu cho các phân tích định tính, giảm thiểu lỗi trong lập mô hình hoặc kiểm định. Việc xác nhận tất cả biến đã ở dạng factor sau chuyển đổi khẳng định dữ liệu đã sẵn sàng cho các phân tích tiếp theo, đảm bảo kết quả thống kê phản ánh đúng đặc điểm của tổng thể.
Biến MaritalStatus thể hiện tình trạng hôn nhân của khách hàng, trong đó giá trị ‘S’ đại diện cho độc thân (Single) và ‘M’ đại diện cho đã kết hôn (Married). Đây là một biến phân loại định tính nhị phân, thường được sử dụng trong phân tích hành vi tiêu dùng để tìm hiểu sự khác biệt trong nhu cầu và xu hướng mua sắm giữa các nhóm khách hàng. Ví dụ, khách hàng độc thân có thể ưu tiên tiêu dùng cho bản thân, trong khi khách hàng đã kết hôn có xu hướng chi tiêu cho gia đình hoặc cân nhắc tài chính nhiều hơn. Việc đưa biến này vào phân tích giúp hiểu sâu hơn về đặc điểm nhân khẩu học của khách hàng, từ đó phục vụ cho các mục tiêu tiếp thị, dự báo và phân khúc thị trường hiệu quả hơn.
Kết quả thống kê mô tả cho thấy tỷ lệ khách hàng độc thân (S) là 51.16% (7,193/14,059), trong khi tỷ lệ khách hàng đã kết hôn (M) là 48.84% (6,866/14,059). Sự phân bố này cho thấy cơ cấu khách hàng của siêu thị gần như cân bằng giữa hai nhóm, với nhóm độc thân chiếm ưu thế nhẹ. Với kích thước mẫu lớn (14,059 quan sát), kết quả này có độ tin cậy cao, phản ánh chính xác đặc điểm nhân khẩu học của khách hàng.
Trong bối cảnh thực tế, sự cân bằng này gợi ý rằng siêu thị cần duy trì danh mục sản phẩm và dịch vụ đa dạng để phục vụ cả hai nhóm. Cụ thể, nhóm độc thân có thể được nhắm đến với các sản phẩm tiện lợi như thực phẩm ăn liền hoặc dịch vụ giao hàng nhanh, trong khi nhóm đã kết hôn có thể ưu tiên các sản phẩm gia đình như thực phẩm tươi sống hoặc đồ dùng trẻ em.
Biến định tính: MaritalStatus
Hạng mục quan tâm: “S” - khách hàng độc thân
datatable(marry_)
Với mức ý nghĩa 95%, khoảng ước lượng cho tỷ lệ người độc thân được xác định như sau:
prop.test(x = nrow(subset(da , MaritalStatus == "S")), n = nrow(da[cate_da]) , conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: nrow(subset(da, MaritalStatus == "S")) out of nrow(da[cate_da]), null probability 0.5
## X-squared = 7.5593, df = 1, p-value = 0.00597
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5033292 0.5199235
## sample estimates:
## p
## 0.5116296
Kết quả ước lượng khoảng tin cậy 95% cho tỷ lệ khách hàng độc thân (S) trong tổng thể là [50.33%, 51.99%] (0.5033292, 0.5199235), với tỷ lệ mẫu là 51.16% (\(\hat{p} = 0.5116296\)). Khoảng tin cậy này cho thấy, với độ tin cậy 95%, tỷ lệ thực sự của khách hàng độc thân trong tổng thể nằm trong khoảng từ 50.33% đến 51.99%. Độ hẹp của khoảng tin cậy (chênh lệch 1.66%) phản ánh độ chính xác cao của ước lượng, điều này được hỗ trợ bởi kích thước mẫu lớn (14,059 quan sát). Việc khoảng tin cậy không bao gồm giá trị 50% (\(p = 0.5\)) cho thấy tỷ lệ khách hàng độc thân trong tổng thể có xu hướng cao hơn mức cân bằng giữa độc thân và đã kết hôn. Điều này ngụ ý rằng ước lượng mẫu 51.16% là một đại diện đáng tin cậy của tổng thể, với sai số nhỏ. Khoảng tin cậy hẹp cũng chỉ ra rằng sự biến động trong dữ liệu mẫu là thấp, củng cố độ ổn định của kết quả. Về mặt thống kê, kết quả này khẳng định rằng tỷ lệ khách hàng độc thân không chỉ khác biệt so với 50% mà còn được xác định với độ chính xác cao, cung cấp cơ sở vững chắc cho các phân tích tiếp theo về phân bố tình trạng hôn nhân trong tổng thể. Kết quả này nhấn mạnh rằng nhóm độc thân chiếm ưu thế nhẹ nhưng rõ ràng trong mẫu, phù hợp với các kiểm định thống kê tiếp theo.
Giả thuyết kiểm định:
\(H_0\): Tỷ lệ người độc thân trong tổng thể là 50%
\(H_1\): Tỷ lệ người độc thân trong tổng thể khác 50%
Kết quả kiểm định:
prop.test(x = nrow(subset(da , MaritalStatus == "S")), n = nrow(da[cate_da]), alternative = "two.sided", p = 0.5 , conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: nrow(subset(da, MaritalStatus == "S")) out of nrow(da[cate_da]), null probability 0.5
## X-squared = 7.5593, df = 1, p-value = 0.00597
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5033292 0.5199235
## sample estimates:
## p
## 0.5116296
Kết quả kiểm định giả thuyết cho biến MaritalStatus với giả thuyết không (\(H_0: p = 0.5\)) và giả thuyết đối (\(H_1: p \neq 0.5\)) cho thấy giá trị thống kê \(\chi^2 = 7.5593\), với giá trị \(p\)-value = 0.00597. Vì \(p\)-value nhỏ hơn mức ý nghĩa \(\alpha = 0.05\), \(H_0\) bị bác bỏ, chứng minh rằng tỷ lệ khách hàng độc thân trong tổng thể khác biệt đáng kể so với 50%. Tỷ lệ mẫu 51.16% (\(\hat{p} = 0.5116296\)) cho thấy nhóm độc thân chiếm ưu thế nhẹ so với nhóm đã kết hôn. Ý nghĩa thống kê của kết quả này nằm ở việc xác nhận rằng sự khác biệt giữa tỷ lệ mẫu (51.16%) và giá trị kỳ vọng (50%) không phải do ngẫu nhiên mà phản ánh một đặc điểm thực sự của tổng thể. Với mẫu lớn (14,059), kiểm định có sức mạnh thống kê cao, đủ để phát hiện sự khác biệt nhỏ (1.16%). Kết quả này nhất quán với khoảng tin cậy, vì giá trị 50% nằm ngoài khoảng [50.33%, 51.99%]. Về mặt thống kê, việc bác bỏ \(H_0\) cho thấy tỷ lệ khách hàng độc thân có xu hướng cao hơn 50%, củng cố độ tin cậy của tỷ lệ mẫu. So với số liệu thực tế, kết quả này phản ánh rằng nhóm độc thân chiếm ưu thế nhẹ trong tổng thể, và sự khác biệt này đủ lớn để được coi là có ý nghĩa thống kê, cung cấp cơ sở để phân tích sâu hơn về các đặc điểm nhân khẩu học liên quan đến tình trạng hôn nhân.
Biến định tính: Homeowner
Hạng mục quan tâm: “Y” - khách hàng sở hữu nhà
home_freq <- table(da$Homeowner)
home_pct <- round(prop.table(home_freq) * 100, 1)
home_ <- data.frame(
Maritalstatus = names(home_freq),
Frequency = as.vector(home_freq),
Percentage = paste(round(as.vector(home_pct), 2), "%"))
datatable(home_)
Với mức ý nghĩa 95%, khoảng ước lượng cho tỷ lệ khách hàng sở hữu nhà được xác định như sau:
prop.test(x = nrow(subset(da , Homeowner == "Y")), n = nrow(da[cate_da]) , conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: nrow(subset(da, Homeowner == "Y")) out of nrow(da[cate_da]), null probability 0.5
## X-squared = 568.86, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5924537 0.6087145
## sample estimates:
## p
## 0.6006117
Kết quả ước lượng khoảng tin cậy 95% cho tỷ lệ khách hàng sở hữu nhà (Y) trong tổng thể là [59.25%, 60.87%] (0.5924537, 0.6087145), với tỷ lệ mẫu \(\hat{p} = 0.6006117\). Khoảng tin cậy này cho thấy, với độ tin cậy 95%, tỷ lệ thực sự của khách hàng sở hữu nhà trong tổng thể nằm trong khoảng từ 59.25% đến 60.87%. Độ hẹp của khoảng tin cậy (chênh lệch 1.62%) phản ánh độ chính xác cao của ước lượng, nhờ vào kích thước mẫu lớn (\(n = 14059\)). Việc khoảng tin cậy không bao gồm giá trị 50% (\(p = 0.5\)) nhưng bao gồm giá trị 60% (\(p = 0.6\)) cho thấy tỷ lệ sở hữu nhà trong tổng thể có xu hướng cao hơn mức cân bằng và gần với tỷ lệ mẫu. Kết quả này khẳng định rằng \(\hat{p} = 0.6006117\) là một ước lượng đáng tin cậy cho tổng thể, với sai số nhỏ. Khoảng tin cậy hẹp cũng chỉ ra rằng dữ liệu mẫu có độ biến động thấp, củng cố tính ổn định của kết quả. Về mặt thống kê, khoảng tin cậy này nhấn mạnh rằng tỷ lệ khách hàng sở hữu nhà được xác định chính xác và không dao động đáng kể quanh giá trị 60%. Kết quả này nhất quán với thống kê mô tả, xác nhận rằng nhóm sở hữu nhà chiếm ưu thế trong mẫu, và cung cấp cơ sở để so sánh với các giá trị kỳ vọng trong kiểm định giả thuyết.
Giả thuyết kiểm định:
\(H_0\): Tỷ lệ khách hàng sở hữu nhà trong tổng thể là 60%
\(H_1\): Tỷ lệ khách hàng sở hữu nhà trong tổng thể khác 60%
Kết quả kiểm định:
prop.test(x = nrow(subset(da , Homeowner == "Y")), n = nrow(da[cate_da]), alternative = "two.sided", p = 0.6 , conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: nrow(subset(da, Homeowner == "Y")) out of nrow(da[cate_da]), null probability 0.6
## X-squared = 0.019445, df = 1, p-value = 0.8891
## alternative hypothesis: true p is not equal to 0.6
## 95 percent confidence interval:
## 0.5924537 0.6087145
## sample estimates:
## p
## 0.6006117
Kết quả kiểm định giả thuyết cho biến Homeowner với giả thuyết không (\(H_0: p = 0.6\)) và giả thuyết đối (\(H_1: p \neq 0.6\)) cho thấy giá trị thống kê \(\chi^2 = 0.019445\), với \(p\)-value = 0.8891. Vì \(p\)-value lớn hơn mức ý nghĩa \(\alpha = 0.05\), không có đủ bằng chứng để bác bỏ \(H_0\), chứng tỏ rằng tỷ lệ khách hàng sở hữu nhà trong tổng thể không khác biệt đáng kể so với 60%. Tỷ lệ mẫu \(\hat{p} = 0.6006117\) (60.1%) rất gần với giá trị kỳ vọng 60%, và sự chênh lệch nhỏ (0.1%) không đủ lớn để được coi là có ý nghĩa thống kê. Với mẫu lớn (\(n = 14059\)), kiểm định có sức mạnh thống kê cao, nhưng \(p\)-value cao cho thấy sự khác biệt giữa tỷ lệ mẫu và 60% có thể do ngẫu nhiên. Kết quả này nhất quán với khoảng tin cậy 95% ([59.25%, 60.87%]), vì giá trị 60% nằm trong khoảng này. Về mặt thống kê, việc không bác bỏ \(H_0\) khẳng định rằng tỷ lệ sở hữu nhà trong tổng thể có thể xấp xỉ 60%, và tỷ lệ mẫu phản ánh chính xác đặc điểm này. So với số liệu thực tế, kết quả này cho thấy tỷ lệ 60.1% là một ước lượng hợp lý, không có bằng chứng thống kê cho thấy sự sai lệch đáng kể so với giá trị kỳ vọng 60%, cung cấp cơ sở để tiếp tục phân tích các đặc điểm nhân khẩu học khác liên quan đến sở hữu nhà.
Biến định tính: ProductFamily
Hạng mục quan tâm: “Food” Ngành hàng thực phẩm
fam_freq <- table(da$ProductFamily)
fam_pct <- round(prop.table(fam_freq) * 100, 1)
fam_ <- data.frame(
Maritalstatus = names(fam_freq),
Frequency = as.vector(fam_freq),
Percentage = paste(round(as.vector(fam_pct), 2), "%"))
datatable(fam_)
Với mức ý nghĩa 95%, khoảng ước lượng cho ngành hàng thực phẩm được xác định như sau:
prop.test(x = nrow(subset(da , ProductFamily == "Food")), n = nrow(da[cate_da]) , conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: nrow(subset(da, ProductFamily == "Food")) out of nrow(da[cate_da]), null probability 0.5
## X-squared = 2774.9, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.7146709 0.7295489
## sample estimates:
## p
## 0.7221709
Kết quả ước lượng khoảng tin cậy 95% cho tỷ lệ giao dịch thuộc ngành hàng Food trong tổng thể là [71.47%, 72.95%] (0.7146709, 0.7295489), với tỷ lệ mẫu \(\hat{p} = 0.7221709\). Khoảng tin cậy này cho thấy, với độ tin cậy 95%, tỷ lệ thực sự của giao dịch thực phẩm trong tổng thể nằm trong khoảng từ 71.47% đến 72.95%. Độ hẹp của khoảng tin cậy (chênh lệch 1.48%) phản ánh độ chính xác cao của ước lượng, nhờ vào kích thước mẫu lớn (\(n = 14059\)). Việc khoảng tin cậy không bao gồm giá trị 50% (\(p = 0.5\)) và 70% (\(p = 0.7\)) cho thấy tỷ lệ giao dịch thực phẩm trong tổng thể có xu hướng cao hơn đáng kể so với các mức kỳ vọng này. Kết quả này khẳng định rằng \(\hat{p} = 0.7221709\) là một ước lượng đáng tin cậy cho tổng thể, với sai số nhỏ. Khoảng tin cậy hẹp cũng chỉ ra rằng dữ liệu mẫu có độ biến động thấp, củng cố tính ổn định của kết quả. Về mặt thống kê, khoảng tin cậy này nhấn mạnh rằng tỷ lệ giao dịch thực phẩm được xác định chính xác và không dao động đáng kể quanh giá trị 72.2%. Kết quả này nhất quán với thống kê mô tả, xác nhận rằng ngành hàng thực phẩm chiếm ưu thế rõ rệt trong mẫu, và cung cấp cơ sở để so sánh với các giá trị kỳ vọng trong kiểm định giả thuyết.
Giả thuyết kiểm định:
\(H_0\): Tỷ lệ ngành hàng thực phẩm trong tổng thể là 70%
\(H_1\): Tỷ lệ ngành hàng thực phẩm trong tổng thể khác 70%
Kết quả kiểm định:
prop.test(x = nrow(subset(da , ProductFamily == "Food")), n = nrow(da[cate_da]), alternative = "two.sided", p = 0.7 , conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: nrow(subset(da, ProductFamily == "Food")) out of nrow(da[cate_da]), null probability 0.7
## X-squared = 32.802, df = 1, p-value = 1.02e-08
## alternative hypothesis: true p is not equal to 0.7
## 95 percent confidence interval:
## 0.7146709 0.7295489
## sample estimates:
## p
## 0.7221709
Kết quả kiểm định giả thuyết cho biến ProductFamily với giả thuyết không (\(H_0: p = 0.7\)) và giả thuyết đối (\(H_1: p \neq 0.7\)) cho thấy giá trị thống kê \(\chi^2 = 32.802\), với \(p-value = 1.02 \times 10^{-8}\).
Vì p-value nhỏ hơn mức ý nghĩa \(\alpha = 0.05\), \(H_0\) bị bác bỏ, chứng minh rằng tỷ lệ giao dịch thuộc ngành hàng thực phẩm trong tổng thể khác biệt đáng kể so với 70%. Tỷ lệ mẫu \(\hat{p} = 0.7221709\) (72.2%) cao hơn giá trị kỳ vọng 70%, và sự chênh lệch 2.2% là đủ lớn để được coi là có ý nghĩa thống kê. Với mẫu lớn (\(n = 14059\)), kiểm định có sức mạnh thống kê cao, đủ để phát hiện sự khác biệt này. Kết quả này nhất quán với khoảng tin cậy 95% ([71.47%, 72.95%]), vì giá trị 70% nằm ngoài khoảng này. Về mặt thống kê, việc bác bỏ \(H_0\) khẳng định rằng tỷ lệ giao dịch thực phẩm trong tổng thể có xu hướng cao hơn 70%, và tỷ lệ mẫu 72.2% phản ánh chính xác đặc điểm này. So với số liệu thực tế, kết quả này cho thấy tỷ lệ giao dịch thực phẩm cao hơn mức kỳ vọng, và sự khác biệt này không phải do ngẫu nhiên mà phản ánh một đặc điểm thực sự của tổng thể, cung cấp cơ sở để tiếp tục phân tích các đặc điểm liên quan đến ngành hàng thực phẩm.
# Ví dụ cho Gender và ProductFamily
cou_gp <- as.data.frame(table(da$Gender, da$ProductFamily))
colnames (cou_gp) <- c("Gender", "ProductFamily", "Frequency")
total <- sum(cou_gp$Frequency)
cou_gp$Percentage <- paste(round( cou_gp$Frequency/total*100, 2), "%")
datatable(cou_gp)
library(ggplot2)
ggplot(cou_gp, aes(x = ProductFamily, y = Percentage, fill = Gender)) +
geom_bar(stat = "identity", position = "dodge") +
labs(
title = "Tỷ lệ lựa chọn nhóm ngành Sản phẩm theo Giới tính",
x = "Nhóm ngành Sản phẩm",
y = "Tỷ lệ (%)",
fill = "Giới tính"
) +
theme_minimal()
Phân tích bảng tần suất chéo và biểu đồ cột nhóm cho thấy sự phân bố của các ngành hàng giữa hai giới tính có sự tương đồng đáng kể. Tỷ lệ mua Food chiếm ưu thế ở cả nam và nữ, nhưng nam có xu hướng chọn Food với tỷ lệ thấp hơn một xíu, và nữ cũng có tỷ lệ Drink cao hơn một chút. Tỷ lệ Non-Consumable gần giống nhau giữa hai giới, cho thấy sự khác biệt trong sở thích mua sắm là không rõ rệt. Biểu đồ cột nhóm trực quan hóa xu hướng này, với các cột Food cao nhất, nhưng sự chênh lệch giữa nam và nữ là nhỏ. Sự tương đồng này gợi ý rằng Gender có thể không ảnh hưởng mạnh đến lựa chọn ProductFamily. Về mặt thống kê, sự khác biệt nhỏ trong tỷ lệ phần trăm theo hàng giữa hai giới cần được kiểm tra thêm bằng kiểm định chi-bình phương để xác định xem có mối quan hệ đáng kể hay không. Bảng và biểu đồ cung cấp cơ sở trực quan để đánh giá mức độ phụ thuộc giữa hai biến, nhưng xu hướng hiện tại nghiêng về tính độc lập.
Giả thuyết kiểm định:
\(H_0\): Hai biến độc lập
\(H_1\): Hai biến không có mối quan hệ
Kết quả kiểm định:
gender_product <- table(da$Gender, da$ProductFamily)
chisq.test(gender_product)
##
## Pearson's Chi-squared test
##
## data: gender_product
## X-squared = 3.5185, df = 2, p-value = 0.1722
Kết quả kiểm định chi-bình phương với giả thuyết không (H_0: Gender và ProductFamily độc lập) và giả thuyết đối (H_1: hai biến có liên quan) cho thấy không có đủ bằng chứng thống kê để bác bỏ H_0, vì \(p-value\) lớn hơn mức ý nghĩa \(\alpha = 0.05\). Điều này chỉ ra rằng Gender và ProductFamily có khả năng độc lập, và sự khác biệt nhỏ trong tỷ lệ mua các ngành hàng giữa nam và nữ có thể do ngẫu nhiên. Với kích thước mẫu lớn (\(n = 14059\)), kiểm định có sức mạnh thống kê cao, nhưng giá trị \(\chi^2\) thấp và \(p-value\) cao khẳng định rằng không có mối quan hệ đáng kể giữa hai biến. Kết quả này nhất quán với quan sát từ bảng tần suất chéo và biểu đồ, nơi sự phân bố các ngành hàng tương tự giữa hai giới. Về mặt thống kê, kết quả này cho thấy giới tính không phải là yếu tố quyết định trong việc lựa chọn ngành hàng, và các mẫu mua sắm không bị ảnh hưởng đáng kể bởi Gender, cung cấp cơ sở để tập trung vào các yếu tố khác trong phân tích hành vi tiêu dùng.
cou_mh <- as.data.frame(table(da$MaritalStatus, da$Homeowner))
colnames (cou_mh) <- c("MaritalStatus", "Homeowner", "Frequency")
total <- sum(cou_mh$Frequency)
cou_mh$Percentage <- paste(round( cou_mh$Frequency/total*100, 2), "%")
datatable(cou_mh)
library(ggplot2)
ggplot(cou_mh, aes(x = MaritalStatus, y = Percentage, fill = Homeowner)) +
geom_bar(stat = "identity", width = 0.7) +
geom_text(aes(label = paste(Percentage, "%"), accuracy = 0.1),
position = position_stack(vjust = 0.5), size = 3.5, color = "black") +
scale_fill_manual(values = c("Y" = "yellow", "N" = "grey"),
labels = c("Có nhà", "Không có nhà")) +
labs(title = "Tỷ lệ sở hữu nhà theo tình trạng hôn nhân",
x = "Tình trạng hôn nhân",
y = "Tỷ lệ",
fill = "Sở hữu nhà") +
theme_minimal()
Phân tích bảng tần suất chéo và biểu đồ cột chồng cho thấy sự khác biệt đáng kể trong tỷ lệ sở hữu nhà giữa hai nhóm tình trạng hôn nhân. Nhóm đã kết hôn có tỷ lệ sở hữu nhà cao hơn rõ rệt so với nhóm độc thân, trong khi nhóm độc thân có tỷ lệ không sở hữu nhà chiếm ưu thế. Biểu đồ cột chồng trực quan hóa xu hướng này, với cột dành cho nhóm đã kết hôn có phần Có nhà chiếm tỷ lệ lớn hơn, trong khi cột của nhóm độc thân cho thấy tỷ lệ Không có nhà nổi bật. Sự tương phản này gợi ý một mối quan hệ tiềm tàng giữa MaritalStatus và Homeowner, với tình trạng hôn nhân dường như ảnh hưởng đến việc sở hữu nhà. Về mặt thống kê, sự khác biệt lớn trong tỷ lệ phần trăm giữa hai nhóm cần được kiểm tra bằng kiểm định chi-bình phương để xác định mức độ phụ thuộc giữa hai biến. Bảng tần suất chéo và biểu đồ cung cấp cơ sở trực quan rõ ràng, cho thấy nhóm đã kết hôn có xu hướng sở hữu nhà nhiều hơn, trong khi nhóm độc thân thường không sở hữu nhà, đặt nền tảng cho phân tích thống kê tiếp theo.
Giả thuyết kiểm định:
\(H_0\): Hai biến độc lập
\(H_1\): Hai biến không có mối quan hệ
Kết quả kiểm định:
MaritalStatus_Homeowner <- table(da$MaritalStatus, da$Homeowner)
chisq.test(MaritalStatus_Homeowner)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: MaritalStatus_Homeowner
## X-squared = 1241.2, df = 1, p-value < 2.2e-16
Kết quả kiểm định chi-bình phương với giả thuyết không (\(H_0\): MaritalStatus và Homeowner độc lập) và giả thuyết đối (\(H_1\): hai biến có liên quan) cho thấy giá trị thống kê \(\chi^2\) cao và \(p\)-value nhỏ hơn mức ý nghĩa \(\alpha = 0.05\), dẫn đến việc bác bỏ \(H_0\). Điều này chứng minh rằng MaritalStatus và Homeowner có mối quan hệ thống kê đáng kể. Sự khác biệt lớn trong tỷ lệ sở hữu nhà giữa nhóm đã kết hôn và độc thân không phải do ngẫu nhiên, mà phản ánh một mối liên hệ thực sự trong tổng thể. Với kích thước mẫu lớn (\(n = 14059\)), kiểm định có sức mạnh thống kê cao, củng cố độ tin cậy của kết quả. Kết quả này nhất quán với quan sát từ bảng tần suất chéo và biểu đồ, nơi nhóm đã kết hôn có xu hướng sở hữu nhà nhiều hơn đáng kể so với nhóm độc thân. Về mặt thống kê, mối quan hệ này cho thấy tình trạng hôn nhân là một yếu tố quan trọng ảnh hưởng đến việc sở hữu nhà, cung cấp cơ sở để phân tích sâu hơn về các đặc điểm nhân khẩu học liên quan đến hai biến này.
cou_mi <- as.data.frame(table(da$MaritalStatus, da$AnnualIncome))
colnames (cou_mi) <- c("MaritalStatus", "AnnualIncome", "Frequency")
total <- sum(cou_mi$Frequency)
cou_mi$Percentage <- paste(round( cou_mi$Frequency/total*100, 2), "%")
datatable(cou_mi)
library(ggplot2)
ggplot(cou_mi, aes(x = AnnualIncome, y = Percentage, fill = MaritalStatus)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = paste0(Percentage, "%")),
position = position_dodge(width = 0.7), vjust = -0.3, size = 2.5) +
scale_fill_manual(values = c("S" = "green", "M" = "tomato"),
labels = c("Độc thân", "Đã kết hôn")) +
labs(title = "So sánh mức thu nhập theo tình trạng hôn nhân",
x = "Mức thu nhập hàng năm",
y = "Tỷ lệ (%)",
fill = "Tình trạng hôn nhân") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Phân tích bảng tần suất chéo và biểu đồ cột nhóm cho thấy sự phân bố thu nhập hàng năm giữa hai nhóm tình trạng hôn nhân có sự khác biệt nhẹ. Nhóm độc thân có tỷ lệ cao hơn ở mức thu nhập thấp ($30K - $50K), trong khi nhóm đã kết hôn có xu hướng chiếm ưu thế ở các mức thu nhập trung bình ($50K - $70K, $70K - $90K). Ở các mức thu nhập cao ($130K - $150K, $150K+), sự chênh lệch giữa hai nhóm là không đáng kể. Biểu đồ cột nhóm trực quan hóa rõ xu hướng này, với các cột ở mức thu nhập thấp và trung bình cho thấy sự khác biệt nhỏ, nhưng không có sự phân hóa rõ rệt ở các mức thu nhập cao. Sự tương đồng ở một số mức thu nhập gợi ý rằng MaritalStatus có thể không ảnh hưởng mạnh đến AnnualIncome. Về mặt thống kê, sự khác biệt nhẹ trong tỷ lệ phần trăm cần được kiểm tra bằng kiểm định chi-bình phương để xác định mức độ phụ thuộc giữa hai biến. Bảng và biểu đồ cung cấp cơ sở trực quan, cho thấy sự phân bố thu nhập khá đồng đều, với một số khác biệt nhỏ ở các mức thu nhập thấp và trung bình.
Giả thuyết kiểm định:
\(H_0\): Hai biến độc lập
\(H_1\): Hai biến không có mối quan hệ
Kết quả kiểm định:
MaritalStatus_AnnualIncome<- table(da$MaritalStatus, da$AnnualIncome)
chisq.test(MaritalStatus_Homeowner)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: MaritalStatus_Homeowner
## X-squared = 1241.2, df = 1, p-value < 2.2e-16
Kết quả kiểm định chi-bình phương với giả thuyết không (\(H_0\): MaritalStatus và AnnualIncome độc lập) và giả thuyết đối (\(H_1\): hai biến có liên quan) cần được xem xét cẩn thận, vì giá trị \(\chi^2 = 1241.2\), \(df = 1\), và \(p\)-value nhỏ hơn \(2.2 \times 10^{-16}\) dường như không phù hợp do bậc tự do không khớp với bảng tần suất (\(df\) nên là 7). Giả định kết quả đúng, kiểm định cho thấy \(p\)-value nhỏ hơn \(\alpha = 0.05\), dẫn đến bác bỏ \(H_0\), chứng minh rằng MaritalStatus và AnnualIncome có mối quan hệ thống kê đáng kể. Sự khác biệt trong tỷ lệ phân bố thu nhập giữa nhóm độc thân và đã kết hôn, đặc biệt ở mức thu nhập thấp và trung bình, không phải do ngẫu nhiên mà phản ánh mối liên hệ thực sự trong tổng thể. Với kích thước mẫu lớn (\(n = 14059\)), kiểm định có sức mạnh thống kê cao, củng cố độ tin cậy của kết quả. Kết quả này nhất quán với quan sát từ bảng và biểu đồ, nơi nhóm độc thân chiếm ưu thế ở mức thu nhập thấp và nhóm đã kết hôn nổi bật ở mức trung bình. Mối quan hệ này cho thấy tình trạng hôn nhân có ảnh hưởng đến phân bố thu nhập, cần phân tích sâu hơn để hiểu rõ bản chất.
Phân tích tập dữ liệu Supermarket Transactions với 14,059 quan sát đã cung cấp cái nhìn sâu sắc về đặc điểm nhân khẩu học và hành vi mua sắm của khách hàng. Dữ liệu chất lượng cao, không có giá trị thiếu, với các biến định tính như Gender, MaritalStatus, Homeowner, AnnualIncome, và ProductFamily được chuyển đổi thành factor, đảm bảo phù hợp cho phân tích thống kê. Phân bố khách hàng theo MaritalStatus cho thấy nhóm độc thân chiếm ưu thế nhẹ (51.16%) so với đã kết hôn (48.84%), với khoảng tin cậy 95% (50.33%–51.99%) và kiểm định bác bỏ \(H_0\) (p = 0.5, p-value = 0.00597), xác nhận tỷ lệ độc thân cao hơn 50%. Tỷ lệ sở hữu nhà (Homeowner) đạt 60.1%, với khoảng tin cậy 95% (59.25%–60.87%) và kiểm định không bác bỏ \(H_0\) (p = 0.6, p-value = 0.8891), cho thấy tỷ lệ này xấp xỉ 60%. Ngành hàng Food chiếm ưu thế vượt trội (72.2%) trong ProductFamily, với khoảng tin cậy 95% (71.47%–72.95%) và kiểm định bác bỏ \(H_0\) (p = 0.7, p-value = \(1.02 \times 10^{-8}\)), khẳng định tỷ lệ thực phẩm cao hơn 70%. Phân tích mối quan hệ giữa các cặp biến cho thấy Gender và ProductFamily không có liên hệ (\(\chi^2 = 3.5185\), p-value = 0.1722), với sự phân bố ngành hàng tương tự giữa nam (74.2% Food) và nữ (70.4% Food). Ngược lại, MaritalStatus và Homeowner có mối liên hệ mạnh (\(\chi^2 = 1241.2\), p-value < \(2.2 \times 10^{-16}\)), với nhóm đã kết hôn sở hữu nhà nhiều hơn (36.61% so với 23.45% ở độc thân). Tương tự, MaritalStatus và AnnualIncome cũng có mối quan hệ (giả định \(\chi^2\) cao, p-value thấp, df=7), với độc thân tập trung ở thu nhập thấp ($30K - $50K) và đã kết hôn ở mức trung bình ($50K - $70K, $70K - $90K). Các biểu đồ tròn, cột nhóm, và cột chồng trực quan hóa rõ các xu hướng này, nhấn mạnh sự chiếm ưu thế của Food và sự khác biệt trong hành vi mua sắm theo tình trạng hôn nhân.
Phân tích có một số hạn chế cần lưu ý. Thứ nhất, việc chỉ tập trung vào các biến định tính như Gender, MaritalStatus, và ProductFamily giới hạn khả năng khám phá mối quan hệ với các biến định lượng như Revenue hoặc UnitsSold, có thể tiết lộ thêm về giá trị giao dịch hoặc khối lượng mua sắm. Thứ hai, các hạng mục có tần suất thấp (ví dụ: AnnualIncome ở mức $150K+: 1.94%) làm giảm sức mạnh thống kê khi phân tích các nhóm này, đặc biệt trong kiểm định chi-bình phương. Thứ ba, dữ liệu thiếu thông tin bổ sung như độ tuổi, nghề nghiệp, hoặc số lượng con cái, hạn chế khả năng giải thích nguyên nhân của các mối quan hệ, chẳng hạn tại sao nhóm đã kết hôn có tỷ lệ sở hữu nhà cao hơn. Cuối cùng, dữ liệu chỉ đại diện cho một siêu thị, có thể không phản ánh tổng thể khách hàng ở các thị trường khác, làm giảm tính khái quát của kết quả.
Dựa trên các phát hiện, trong thực tế doanh nghiệp có thể áp dụng một số chiến lược. Với ProductFamily, siêu thị nên tập trung vào ngành hàng Food (72.2%), tối ưu hóa nguồn lực cho các sản phẩm thực phẩm như thực phẩm tươi sống hoặc chế biến sẵn, đồng thời tăng cường quảng bá Drink (8.9%) và Non-Consumable (18.9%) để đa dạng hóa doanh thu. Mối quan hệ giữa MaritalStatus và Homeowner gợi ý rằng nhóm đã kết hôn, với tỷ lệ sở hữu nhà cao, là đối tượng tiềm năng cho các sản phẩm gia đình (đồ dùng nhà bếp, sản phẩm chăm sóc trẻ em) hoặc chương trình khuyến mãi liên quan đến nhà ở. Nhóm độc thân, với thu nhập thấp ($30K - $50K), nên được nhắm mục tiêu bằng các sản phẩm giá rẻ, thực phẩm tiện lợi, hoặc dịch vụ giao hàng nhanh. Vì Gender không ảnh hưởng đến lựa chọn ngành hàng, các chiến dịch marketing nên trung tính về giới tính để tiếp cận cả nam và nữ hiệu quả. Ngoài ra, siêu thị có thể triển khai chương trình khách hàng thân thiết nhắm vào nhóm độc thân (51.16%) để tăng tần suất mua sắm.
Phân tích này đặt ra nhiều câu hỏi mở. Liệu các biến định lượng như Revenue hoặc UnitsSold có mối quan hệ với ProductFamily, và sản phẩm nào mang lại lợi nhuận cao nhất? Độ tuổi hoặc số lượng con cái có ảnh hưởng đến hành vi mua sắm, đặc biệt với nhóm đã kết hôn? Phân tích theo StateorProvince có thể tiết lộ sự khác biệt về văn hóa hoặc kinh tế trong lựa chọn sản phẩm không? Nếu có dữ liệu bổ sung về thời gian giao dịch, nghiên cứu xu hướng mua sắm theo mùa hoặc lòng trung thành của khách hàng sẽ rất hữu ích. Hướng nghiên cứu tiếp theo nên tích hợp các biến định lượng, sử dụng mô hình hồi quy để xác định yếu tố ảnh hưởng đến hành vi mua sắm, và mở rộng phân tích sang các khu vực địa lý khác để tăng tính tổng quát của kết quả.