Bộ dữ liệu “Supermarket Transactions” lưu trữ thông tin chi tiết về các giao dịch mua sắm tại một siêu thị trong một khoảng thời gian cụ thể. Mỗi dòng trong tập dữ liệu tương ứng với một giao dịch, bao gồm nhiều trường thông tin liên quan đến khách hàng (giới tính, hạng thành viên, chi nhánh mua hàng), sản phẩm (nhóm hàng, phương thức thanh toán), cũng như các yếu tố phản ánh hành vi tiêu dùng (thời điểm mua hàng, mức độ hài lòng, tổng giá trị đơn hàng,…).
Dữ liệu được lưu dưới định dạng CSV, vì vậy cần được đọc từ tệp .csv. Ta gán bộ dữ liệu Supermarket Transactions vào một đối tượng có tên là vtha.
Đọc file CSV với dấu phân cách là dấu chấm phẩy
library(csv)
## Warning: package 'csv' was built under R version 4.3.3
data <- read.csv("C:/Users/HP/Downloads/Supermarket Transactions.csv", stringsAsFactors = FALSE)
Để kiểm tra cấu trúc tổng quát của bộ dữ liệu, ta sử dụng hàm str(), viết tắt của từ structure.
Hàm str() thường được dùng để khảo sát nhanh đặc điểm của một đối tượng, đặc biệt là các vtha frame. Cụ thể, lệnh này cung cấp:
Số lượng dòng và số lượng cột trong dữ liệu
Tên các biến (cột)
Kiểu dữ liệu của từng biến (số, chuỗi, nhân tố,…)
Một vài giá trị mẫu ban đầu của mỗi biến
Nhờ đó, str() là công cụ hữu ích giúp ta hình dung sơ bộ về cấu trúc dữ liệu trước khi tiến hành phân tích chi tiết.
str(data)
## 'data.frame': 14059 obs. of 16 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ PurchaseDate : chr "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
## $ CustomerID : int 7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
## $ Gender : chr "F" "M" "F" "M" ...
## $ MaritalStatus : chr "S" "M" "M" "M" ...
## $ Homeowner : chr "Y" "Y" "N" "Y" ...
## $ Children : int 2 5 2 3 3 3 2 2 3 1 ...
## $ AnnualIncome : chr "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
## $ City : chr "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
## $ StateorProvince : chr "CA" "CA" "WA" "OR" ...
## $ Country : chr "USA" "USA" "USA" "USA" ...
## $ ProductFamily : chr "Food" "Food" "Food" "Food" ...
## $ ProductDepartment: chr "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
## $ ProductCategory : chr "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
## $ UnitsSold : int 5 5 3 4 4 3 4 6 1 2 ...
## $ Revenue : num 27.38 14.9 5.52 4.44 14 ...
Từ kết quả hiển thị của hàm str(), ta nhận thấy:
Bộ dữ liệu gồm 14.059 quan sát (obs) và 16 biến (variables).
Tên các biến, kiểu dữ liệu tương ứng, cùng với một vài giá trị tiêu biểu đã được liệt kê rõ ràng.
Mục tiêu của phân tích: Áp dụng các kỹ thuật thống kê mô tả và thống kê suy diễn nhằm khám phá những đặc điểm nổi bật của khách hàng cũng như hành vi mua sắm của họ. Phân tích tập trung vào các biến định tính (categorical variables), bao gồm:
Gender: Giới tính (F – Nữ, M – Nam)
MaritalStatus: Tình trạng hôn nhân (S – Độc thân, M – Đã kết hôn)
Homeowner: Tình trạng sở hữu nhà (Y – Có, N – Không)
AnnualIncome: Thu nhập hàng năm (được phân chia theo các khoảng)
City, StateorProvince, Country: Thông tin về vị trí địa lý của khách hàng
ProductFamily, ProductDepartment, ProductCategory: Các cấp độ phân loại sản phẩm mà khách hàng đã mua
Thông qua việc phân tích các biến định tính này, ta kỳ vọng có thể rút ra những hiểu biết giá trị về phân khúc khách hàng, xu hướng tiêu dùng, cũng như các yếu tố ảnh hưởng đến hành vi mua sắm tại siêu thị.
Giải thích:
# Chọn các biến định tính
dldt <- c("Gender", "MaritalStatus", "Homeowner", "AnnualIncome", "City", "StateorProvince", "Country", "ProductFamily", "ProductDepartment", "ProductCategory")
# Tạo bộ dữ liệu mới chỉ chứa định tính
vth <- data[, dldt]
Bộ dữ liệu Supermarket Transactions này gồm 14,059 giao dịch mua hàng tại siêu thị, với các thông tin liên quan đến khách hàng và sản phẩm bao gồm mã định danh khách hàng và các thông tin liên quan, vị trí địa lý, chi tiết các sản phẩm được mua.
Dữ liệu này có thể được sử dụng để phân tích hành vi mua sắm của khách hàng, phân khúc thị trường, hoặc đánh giá hiệu quả kinh doanh theo từng sản phẩm, từng khu vực và từng nhóm đối tượng.
Cấu trúc bộ dữ liệu Supermarket Transactions
str(data)
## 'data.frame': 14059 obs. of 16 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ PurchaseDate : chr "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
## $ CustomerID : int 7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
## $ Gender : chr "F" "M" "F" "M" ...
## $ MaritalStatus : chr "S" "M" "M" "M" ...
## $ Homeowner : chr "Y" "Y" "N" "Y" ...
## $ Children : int 2 5 2 3 3 3 2 2 3 1 ...
## $ AnnualIncome : chr "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
## $ City : chr "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
## $ StateorProvince : chr "CA" "CA" "WA" "OR" ...
## $ Country : chr "USA" "USA" "USA" "USA" ...
## $ ProductFamily : chr "Food" "Food" "Food" "Food" ...
## $ ProductDepartment: chr "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
## $ ProductCategory : chr "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
## $ UnitsSold : int 5 5 3 4 4 3 4 6 1 2 ...
## $ Revenue : num 27.38 14.9 5.52 4.44 14 ...
Nhưng với yêu cầu chỉ sử dụng các biến định tính để phân tính nên chúng ta chỉ quan tâm đến các biến như sau :
dim(vth)
## [1] 14059 10
head(vth)
## Gender MaritalStatus Homeowner AnnualIncome City StateorProvince
## 1 F S Y $30K - $50K Los Angeles CA
## 2 M M Y $70K - $90K Los Angeles CA
## 3 F M N $50K - $70K Bremerton WA
## 4 M M Y $30K - $50K Portland OR
## 5 F S Y $130K - $150K Beverly Hills CA
## 6 F M Y $10K - $30K Beverly Hills CA
## Country ProductFamily ProductDepartment ProductCategory
## 1 USA Food Snack Foods Snack Foods
## 2 USA Food Produce Vegetables
## 3 USA Food Snack Foods Snack Foods
## 4 USA Food Snacks Candy
## 5 USA Drink Beverages Carbonated Beverages
## 6 USA Food Deli Side Dishes
tail(vth)
## Gender MaritalStatus Homeowner AnnualIncome City StateorProvince
## 14054 F M N $10K - $30K Yakima WA
## 14055 F M Y $10K - $30K Bremerton WA
## 14056 F M Y $10K - $30K Walla Walla WA
## 14057 M S Y $30K - $50K Portland OR
## 14058 F S N $50K - $70K Spokane WA
## 14059 M S N $50K - $70K Portland OR
## Country ProductFamily ProductDepartment ProductCategory
## 14054 USA Non-Consumable Household Paper Products
## 14055 USA Food Baking Goods Baking Goods
## 14056 USA Food Frozen Foods Vegetables
## 14057 USA Drink Beverages Pure Juice Beverages
## 14058 USA Drink Dairy Dairy
## 14059 USA Non-Consumable Household Electrical
Giải thích:
sapply(vth, …): áp dụng hàm cho từng cột trong dữ liệu vth.
sum(is.na(x)): đếm số lượng NA trong từng cột.
# Kiểm tra số lượng NA trong mỗi cột định tính
na_counts <- sapply(vth, function(x) sum(is.na(x)))
na_counts
## Gender MaritalStatus Homeowner AnnualIncome
## 0 0 0 0
## City StateorProvince Country ProductFamily
## 0 0 0 0
## ProductDepartment ProductCategory
## 0 0
Nhận xét - Kết quả thu được cho thấy rằng tất cả các cột định tính đều không có giá trị thiếu (NA) vì số lượng NA trong các cột đều hiển thị là 0
Giải thích:
lapply(vth, function(x) { … }): Áp dụng hàm cho từng cột của vth. Trong R, lapply() hoạt động trên list (và data frame về bản chất là list các cột).
if (!is.factor(x)): Nếu cột đó chưa phải là factor.
as.factor(x): Chuyển cột đó thành kiểu factor.
return(x): Nếu đã là factor rồi thì giữ nguyên.
as.data.frame(…): Vì lapply() trả về một list, nên ta gói lại thành data.frame để đảm bảo giữ đúng cấu trúc bảng dữ liệu ban đầu.
# Chuyển đổi các cột sang factor nếu chưa phải là factor
vth <- as.data.frame(lapply(vth, function(x) {
if (!is.factor(x)) {
return(as.factor(x))
} else {
return(x)
}
}))
Kiểm tra lại sau khi chuyển đổi
Giải thích:
sapply(vth, class): Áp dụng hàm class() cho từng cột để kiểm tra kiểu dữ liệu. Kết quả trả về là một vector hiển thị tên cột và loại dữ liệu tương ứng.
Nếu kết quả là “factor” cho tất cả các cột → chuyển đổi thành công.
sapply(vth, class)
## Gender MaritalStatus Homeowner AnnualIncome
## "factor" "factor" "factor" "factor"
## City StateorProvince Country ProductFamily
## "factor" "factor" "factor" "factor"
## ProductDepartment ProductCategory
## "factor" "factor"
Nhận xét : Kết quả thu được toàn bộ các biến đã được chuyển đổi thành dạng factor.
Giải thích:
Sử dụng hàm table() để đếm số lần xuất hiện (tần suất) của từng giá trị trong biến định tính.
prop.table(tab_gender) tạo bảng tỷ lệ phần trăm (theo dạng thập phân). Nhân với 100 để ra phần trăm.
round(…, 2) làm tròn 2 chữ số sau dấu phẩy.
barplot() tạo biểu đồ cột từ bảng tần suất.
main: tiêu đề biểu đồ.
col: màu sắc cột (ở đây là màu “steelblue”).
las = 2: xoay nhãn trục hoành (X) theo chiều dọc để dễ đọc.
tab_gender <- table(vth$Gender)
tab_gender
##
## F M
## 7170 6889
table(vth$Gender)/sum(nrow(vth))
##
## F M
## 0.5099936 0.4900064
barplot(tab_gender, main = "Tần suất - Gender", col = "deeppink", las = 2)
Phân bố giới tính gần như đồng đều, không có sự chênh lệch lớn.
Điều này phản ánh rằng chuỗi siêu thị không nhắm đến một giới tính cụ thể, mà phục vụ tốt cả hai nhóm.
Ngoài ra, tỷ lệ nữ hơi cao hơn có thể do phụ nữ thường đảm nhận vai trò mua sắm thực phẩm và tiêu dùng gia đình, nên khả năng cao họ là người đứng tên giao dịch nhiều hơn trong hóa đơn.
tab_MaritalStatus <- table(vth$MaritalStatus)
tab_MaritalStatus
##
## M S
## 6866 7193
table(vth$MaritalStatus)/sum(nrow(vth))
##
## M S
## 0.4883704 0.5116296
barplot(tab_MaritalStatus, main = "Tình trạng hôn nhân - MaritalStatus", col = "lightblue", las = 2)
Số lượng khách hàng độc thân (Single – ký hiệu S) là 6866 người (chiếm 48.8370439%), còn người đã kết hôn (Married – M) là 1, 0 người (chiếm 51.1629561%)
Mặc dù tỷ lệ khá cân bằng, nhưng nhóm độc thân chiếm tỷ lệ cao hơn một chút.
Giải thích hợp lý cho điều này có thể là:
Những người độc thân có xu hướng tự đi mua sắm nhiều hơn, không dựa vào bạn đời.
Ngoài ra, người trẻ độc thân thường sống ở thành thị và sử dụng dịch vụ siêu thị thường xuyên hơn, trong khi người đã kết hôn có thể mua theo nhóm hoặc theo hộ gia đình lớn và ít giao dịch hơn trên mỗi cá nhân.
tab_Homeowner <- table(vth$Homeowner)
tab_Homeowner
##
## N Y
## 5615 8444
table(vth$Homeowner)/sum(nrow(vth))
##
## N Y
## 0.3993883 0.6006117
barplot(tab_Homeowner, main = "Sở hữu nhà - Homeowner", col = "gray25", las = 2)
Từ kết quả thu được ta thấy có 5615 khách hàng (chiếm 39.9388292%) không sở hữu nhà, còn 8444 khách hàng (chiếm 60.0611708%) là chủ sở hữu nhà.
Đây là một chỉ báo quan trọng về sự ổn định tài chính của khách hàng.
Người sở hữu nhà thường có:
Chi tiêu ổn định hơn.
Nhu cầu mua sắm nhiều hơn cho gia đình (thực phẩm, đồ gia dụng).
Trong khi đó, người không sở hữu nhà (có thể thuê nhà hoặc sống tạm thời) có thể:
Chi tiêu dè dặt hơn.
Ít mua hàng số lượng lớn, hoặc ưu tiên hàng nhỏ gọn, dễ vận chuyển.
tab_AnnualIncome <- table(vth$AnnualIncome)
tab_AnnualIncome
##
## $10K - $30K $110K - $130K $130K - $150K $150K + $30K - $50K
## 3090 643 760 273 4601
## $50K - $70K $70K - $90K $90K - $110K
## 2370 1709 613
table(vth$AnnualIncome)/sum(nrow(vth))
##
## $10K - $30K $110K - $130K $130K - $150K $150K + $30K - $50K
## 0.21978804 0.04573583 0.05405790 0.01941817 0.32726367
## $50K - $70K $70K - $90K $90K - $110K
## 0.16857529 0.12155914 0.04360196
barplot(tab_AnnualIncome, main = "Thu nhập/tháng - AnnualIncome", col = "lightpink", las = 2)
Nhóm $30K - $50K chiếm đa số với 3090 khách hàng (chiếm 32.7263675%), theo sau là:
Nhóm $10K - $30K (21.9788036%)
Nhóm $50K - $70K (16.857529%)
Rất ít khách hàng có thu nhập trên $150K (1.9418166%)
Điều này cho thấy rằng chuỗi siêu thị chủ yếu phục vụ nhóm thu nhập trung bình và thấp – phù hợp với chiến lược giá rẻ, hàng hóa thiết yếu.
Chiến lược marketing, khuyến mãi, và chính sách giá nên tập trung vào nhóm này (ví dụ: combo tiết kiệm, chiết khấu theo số lượng).
tab_City <- table(vth$City)
tab_City
##
## Acapulco Bellingham Beverly Hills Bremerton Camacho
## 383 143 811 834 452
## Guadalajara Hidalgo Los Angeles Merida Mexico City
## 75 845 926 654 194
## Orizaba Portland Salem San Andres San Diego
## 464 876 1386 621 866
## San Francisco Seattle Spokane Tacoma Vancouver
## 130 922 875 1257 633
## Victoria Walla Walla Yakima
## 176 160 376
table(vth$City)/sum(nrow(vth))
##
## Acapulco Bellingham Beverly Hills Bremerton Camacho
## 0.027242336 0.010171420 0.057685468 0.059321431 0.032150224
## Guadalajara Hidalgo Los Angeles Merida Mexico City
## 0.005334661 0.060103848 0.065865282 0.046518245 0.013798990
## Orizaba Portland Salem San Andres San Diego
## 0.033003770 0.062308841 0.098584537 0.044170994 0.061597553
## San Francisco Seattle Spokane Tacoma Vancouver
## 0.009246746 0.065580767 0.062237712 0.089408920 0.045024539
## Victoria Walla Walla Yakima
## 0.012518671 0.011380610 0.026744434
barplot(tab_City, main = "Thành phố - City", col = "yellow", las = 2)
Các thành phố có tỷ lệ giao dịch cao là:
Salem là thành phố có tỉ lệ khách hàng mua sản phẩm cao nhất với 1386 khách hàng và chiếm hết (9.8584537%)
Theo sau là thành phố Tacoma (1.2518671%)
Kế tiếp là thành phố Los Angeles (6.5865282%) và ta thấy thành phố Seattle với 6.5580767% xấp xỉ bằng với thành phố Los Angeles. Qua đó ta nhìn nhận được rằng 2 thành phố này có lượng khách hàng mua sắm gần như nhau.
Có thể nhận thấy sự tập trung mạnh tại các thành phố bờ Tây Hoa Kỳ, đặc biệt ở các bang Washington, Oregon và California.
Điều này gợi ý rằng:
Các chi nhánh ở các thành phố này có lưu lượng khách hàng lớn, hoặc
Các thành phố này có mật độ dân cư cao, nhu cầu tiêu dùng thường xuyên.
tab_StateorProvince <- table(vth$StateorProvince)
tab_StateorProvince
##
## BC CA DF Guerrero Jalisco OR Veracruz WA
## 809 2733 815 383 75 2262 464 4567
## Yucatan Zacatecas
## 654 1297
table(vth$StateorProvince)/sum(nrow(vth))
##
## BC CA DF Guerrero Jalisco OR
## 0.057543211 0.194395049 0.057969984 0.027242336 0.005334661 0.160893378
## Veracruz WA Yucatan Zacatecas
## 0.033003770 0.324845295 0.046518245 0.092254072
barplot(tab_StateorProvince, main = "Bang/Tỉnh - StateorProvince", col = "darkgreen", las = 2)
Phân bố:
Washington(WA): 32.4845295%
California(CA): 19.4395049%
Oregon(OR): 16.0893378%
Ba bang này đều ở bờ Tây Hoa Kỳ, và là những bang có:
Dân số đông, thị trường bán lẻ phát triển.
Thói quen tiêu dùng hiện đại, sử dụng dịch vụ siêu thị nhiều hơn so với các khu vực nông thôn.
Việc mở rộng kinh doanh hoặc đầu tư thêm vào các bang này là chiến lược khả thi.
tab_Country <- table(vth$Country)
tab_Country
##
## Canada Mexico USA
## 809 3688 9562
table(vth$Country)/sum(nrow(vth))
##
## Canada Mexico USA
## 0.05754321 0.26232307 0.68013372
barplot(tab_Country, main = "Quốc gia - Country", col = "purple", las = 2)
Tỷ lệ khách hàng theo quốc gia phân bổ theo trình tự giảm dần:
Cao nhất là USA: 68.0133722%
Kế tiếp là Mexico: 26.2323067%
Thấp nhất là Canada: 5.7543211%
US Hoa Kỳ rõ ràng là thị trường trọng điểm với tỷ lệ khách hàng giao dịch cao nhất trong 3 quốc gia. Điều này chứng tỏ Hoa Kỳ là một quốc gia phát triển mạnh với nhu cầu tiêu dùng chiến phần lớn.
Tuy nhiên, sự hiện diện tại Mexico (hơn 1/4 số giao dịch) cho thấy đây là thị trường thứ cấp tiềm năng, có thể mở rộng hoặc tăng nhận diện thương hiệu.
tab_ProductFamily <- table(vth$ProductFamily)
tab_ProductFamily
##
## Drink Food Non-Consumable
## 1250 10153 2656
table(vth$ProductFamily)/sum(nrow(vth))
##
## Drink Food Non-Consumable
## 0.08891102 0.72217085 0.18891813
barplot(tab_ProductFamily, main = "Nhóm sản phẩm - ProductFamily", col = "mediumvioletred", las = 2)
Thực phẩm (Food) chiếm đa số (72.2170851%), cao vượt trội so với:
Non-Consumables chiếm 18.8918131%
Nhóm đồ uống chiếm 8.8911018%
Điều này cho thấy khách hàng mua sắm chủ yếu là để phục vụ nhu cầu ăn uống hàng ngày.
Siêu thị nên tiếp tục đầu tư mạnh vào:
Nguồn cung thực phẩm tươi,
Các sản phẩm thiết yếu giá tốt,
Chính sách ưu đãi số lượng lớn cho thực phẩm.
tab_ProductDepartment <- table(vth$ProductDepartment)
tab_ProductDepartment
##
## Alcoholic Beverages Baked Goods Baking Goods Beverages
## 356 425 1072 680
## Breakfast Foods Canned Foods Canned Products Carousel
## 188 977 109 59
## Checkout Dairy Deli Eggs
## 82 903 699 198
## Frozen Foods Health and Hygiene Household Meat
## 1382 893 1420 89
## Periodicals Produce Seafood Snack Foods
## 202 1994 102 1600
## Snacks Starchy Foods
## 352 277
table(vth$ProductDepartment)/sum(nrow(vth))
##
## Alcoholic Beverages Baked Goods Baking Goods Beverages
## 0.025321858 0.030229746 0.076250089 0.048367594
## Breakfast Foods Canned Foods Canned Products Carousel
## 0.013372217 0.069492852 0.007753041 0.004196600
## Checkout Dairy Deli Eggs
## 0.005832563 0.064229319 0.049719041 0.014083505
## Frozen Foods Health and Hygiene Household Meat
## 0.098300021 0.063518031 0.101002916 0.006330464
## Periodicals Produce Seafood Snack Foods
## 0.014368020 0.141830856 0.007255139 0.113806103
## Snacks Starchy Foods
## 0.025037343 0.019702682
barplot(tab_ProductDepartment, main = "Bộ phận sản phẩm - ProductDepartment", col = "darkblue", las = 2)
Các bộ phân chiếm đa số trong toàn bộ các bộ phận được thống kê:
Produce (Rau quả): 14.1830856%
Snack Foods: 11.3806103%
Household: 10.1002916%
Khách hàng mua nhiều các mặt hàng:
Tươi sống, dễ hỏng (produce) -> yêu cầu bảo quản và chuỗi cung ứng tốt.
Đồ ăn vặt và hàng gia dụng -> phản ánh thói quen tiêu dùng nhanh, tiện lợi.
Đây là cơ hội để tăng cường marketing nhóm sản phẩm tiện lợi, combo bữa ăn, sản phẩm cho hộ gia đình.
tab_ProductCategory <- table(vth$ProductCategory)
tab_ProductCategory
##
## Baking Goods Bathroom Products Beer and Wine
## 484 365 356
## Bread Breakfast Foods Candles
## 425 417 45
## Candy Canned Anchovies Canned Clams
## 352 44 53
## Canned Oysters Canned Sardines Canned Shrimp
## 35 40 38
## Canned Soup Canned Tuna Carbonated Beverages
## 404 87 154
## Cleaning Supplies Cold Remedies Dairy
## 189 93 903
## Decongestants Drinks Eggs
## 85 135 198
## Electrical Frozen Desserts Frozen Entrees
## 355 323 118
## Fruit Hardware Hot Beverages
## 765 129 226
## Hygiene Jams and Jellies Kitchen Products
## 197 588 217
## Magazines Meat Miscellaneous
## 202 761 42
## Packaged Vegetables Pain Relievers Paper Products
## 48 192 345
## Pizza Plastic Products Pure Juice Beverages
## 194 141 165
## Seafood Side Dishes Snack Foods
## 102 153 1600
## Specialty Starchy Foods Vegetables
## 289 277 1728
table(vth$ProductCategory)/sum(nrow(vth))
##
## Baking Goods Bathroom Products Beer and Wine
## 0.034426346 0.025962017 0.025321858
## Bread Breakfast Foods Candles
## 0.030229746 0.029660716 0.003200797
## Candy Canned Anchovies Canned Clams
## 0.025037343 0.003129668 0.003769827
## Canned Oysters Canned Sardines Canned Shrimp
## 0.002489508 0.002845153 0.002702895
## Canned Soup Canned Tuna Carbonated Beverages
## 0.028736041 0.006188207 0.010953837
## Cleaning Supplies Cold Remedies Dairy
## 0.013443346 0.006614980 0.064229319
## Decongestants Drinks Eggs
## 0.006045949 0.009602390 0.014083505
## Electrical Frozen Desserts Frozen Entrees
## 0.025250729 0.022974607 0.008393200
## Fruit Hardware Hot Beverages
## 0.054413543 0.009175617 0.016075112
## Hygiene Jams and Jellies Kitchen Products
## 0.014012376 0.041823743 0.015434953
## Magazines Meat Miscellaneous
## 0.014368020 0.054129028 0.002987410
## Packaged Vegetables Pain Relievers Paper Products
## 0.003414183 0.013656732 0.024539441
## Pizza Plastic Products Pure Juice Beverages
## 0.013798990 0.010029163 0.011736254
## Seafood Side Dishes Snack Foods
## 0.007255139 0.010882709 0.113806103
## Specialty Starchy Foods Vegetables
## 0.020556227 0.019702682 0.122910591
barplot(tab_ProductCategory, main = "Danh mục sản phẩm - ProductCategory", col = "red", las = 2)
Các loại thực phẩm phổ biến được quan sát từ biểu đồ:
Vegetables (Rau): với số lượng là 1728 khách hàng và chiếm hết (12.2910591%)
Snack Foods: 1600 khách hàng và chiếm hết (11.3806103%)
Dairy (Sữa): 903 khách hàng và chiếm hết (6.4229319%)
Fruit, Meat, Frozen Foods…
Đây là những mặt hàng tiêu dùng nhanh, có vòng đời ngắn.
Việc khách hàng mua chủ yếu các mặt hàng thiết yếu cho thấy siêu thị hoạt động tốt trong việc phục vụ nhu cầu cơ bản, chứ không phải sản phẩm xa xỉ hay không thường xuyên.
# Xác định hạng mục quan tâm
table(vth$Gender)
##
## F M
## 7170 6889
# Số lượng và tổng số
slfemale <- sum(vth$Gender == "F")
totalgender <- length(vth$Gender)
# Ước lượng khoảng tin cậy 95% cho tỷ lệ "Female"
prop.test(slfemale, totalgender, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: slfemale out of totalgender, null probability 0.5
## X-squared = 5.5765, df = 1, p-value = 0.0182
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5016931 0.5182886
## sample estimates:
## p
## 0.5099936
# Kiểm định giả thuyết: tỷ lệ Female = 0.5
prop.test(slfemale, totalgender, p = 0.5, alternative = "two.sided", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: slfemale out of totalgender, null probability 0.5
## X-squared = 5.5765, df = 1, p-value = 0.0182
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5016931 0.5182886
## sample estimates:
## p
## 0.5099936
Giả thuyết
H0: p = 0.5
H1: p ≠ 0.5
Đọc kết quả và kết luận
Tổng số cá thể trong mẫu là 14.059 người, trong đó có 7.170 người là nữ và 6.889 người là nam. Tỷ lệ nữ giới trong mẫu là 50.99936%.
Kết quả kiểm định tỷ lệ một mẫu với giả thuyết tỷ lệ nữ trong tổng thể là 50% (H₀: p = 0.5) cho thấy giá trị thống kê Chi-squared = 5.5765 với 1 bậc tự do, và p-value = 0.0182. Với mức ý nghĩa thông thường α = 0.05, ta bác bỏ giả thuyết không, cho thấy tỷ lệ nữ giới trong mẫu có sự khác biệt có ý nghĩa thống kê so với tỷ lệ 50%.
Khoảng tin cậy 95% cho tỷ lệ nữ trong quần thể nằm trong khoảng từ 50.16931% đến 51.82886%, cho thấy tỷ lệ này chỉ hơi cao hơn 50%.
Tóm lại
Kết luận
# Xác định hạng mục quan tâm
table(vth$Homeowner)
##
## N Y
## 5615 8444
slshn <- sum(vth$Homeowner == "Y")
totalhomeowner <- length(vth$Homeowner)
# Ước lượng khoảng tin cậy
prop.test(slshn, totalhomeowner, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: slshn out of totalhomeowner, 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
# Kiểm định giả thuyết H0: tỷ lệ chủ nhà = 0.6
prop.test(slshn, totalhomeowner, p = 0.6, alternative = "two.sided", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: slshn out of totalhomeowner, 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
Giả thuyết 1
H0: p = 0.5
H1: p ≠ 0.5
Đọc kết quả và kết luận
Giả thuyết 2
H0: p = 0.6
H1: p ≠ 0.6
Đọc kết quả và kết luận
Tóm lại:
# Xác định hạng mục đề cập
table(vth$ProductFamily)
##
## Drink Food Non-Consumable
## 1250 10153 2656
slfood <- sum(vth$ProductFamily == "Food")
totalproduct <- length(vth$ProductFamily)
# Ước lượng khoảng tin cậy
prop.test(slfood, totalproduct, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: slfood out of totalproduct, 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
# Kiểm định giả thuyết H0: tỷ lệ >= 0.7 (alternative = "greater": kiểm định 1 phía (>))
prop.test(slfood, totalproduct, p = 0.7, alternative = "greater", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: slfood out of totalproduct, null probability 0.7
## X-squared = 32.802, df = 1, p-value = 5.101e-09
## alternative hypothesis: true p is greater than 0.7
## 95 percent confidence interval:
## 0.7158789 1.0000000
## sample estimates:
## p
## 0.7221709
Giả thuyết 1
H0: p = 0.5
H1: p ≠ 0.5
Đọc kết quả và kết luận
Kết quả kiểm định tỷ lệ một mẫu cho giả thuyết rằng tỷ lệ sản phẩm thuộc nhóm Food bằng 50% (H₀: p = 0.5) cho thấy:
Giá trị thống kê Chi-squared = 2774.9, df = 1
p-value < 2.2e-16
Với mức ý nghĩa là 0.05, ta bác bỏ giả thuyết H0, nghĩa là tỷ lệ sản phẩm nhóm Food không chiếm 50% trong tổng số “ProductFamily”.
Khoảng tin cậy 95% cho tỷ lệ này nằm trong khoảng từ 71.47% đến 72.95%.
Giả thuyết 2
H0: p = 0.7
H1: p > 0.7
Đọc kết quả và kết luận
Kết quả kiểm định tiếp theo kiểm tra xem liệu tỷ lệ sản phẩm nhóm Food có cao hơn 70% hay không, cho thấy:
Giá trị Chi-squared = 32.802, df = 1
p-value = 5.101e-09
Với mức ý nghĩa 0.05, ta tiếp tục bác bỏ giả thuyết không, và chấp nhận giả thuyết đối (H₁: p > 0.7). Điều này chứng tỏ tỷ lệ sản phẩm nhóm Food lớn hơn 70% với ý nghĩa thống kê cao.
Khoảng tin cậy 95% cho tỷ lệ này nằm trong khoảng từ 71.58% đến 100%.
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'dplyr' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(janitor)
## Warning: package 'janitor' was built under R version 4.3.3
##
## Attaching package: 'janitor'
##
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(gmodels)
## Warning: package 'gmodels' was built under R version 4.3.3
library(ggplot2)
library(scales)
##
## Attaching package: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
tab1 <- table(vth$Gender, vth$ProductFamily)
tab1
##
## Drink Food Non-Consumable
## F 669 5149 1352
## M 581 5004 1304
prop.table(tab1, 1) # theo hàng
##
## Drink Food Non-Consumable
## F 0.09330544 0.71813110 0.18856346
## M 0.08433735 0.72637538 0.18928727
Dựa trên bảng tần suất chéo giữa Giới tính (Gender) và Nhóm sản phẩm (ProductFamily):
Nữ giới (F) có xu hướng chọn sản phẩm Food nhiều nhất, chiếm khoảng 71.8% trong tổng số sản phẩm mà nữ giới chọn. Tiếp theo là nhóm Non-Consumable (18.9%) và Drink (9.3%).
Nam giới (M) cũng có xu hướng tương tự khi lựa chọn nhiều nhất là Food (72.6%), kế đến là Non-Consumable (18.9%) và ít nhất là Drink (8.4%).
So sánh giới tính:
Cả hai giới đều ưu tiên nhóm sản phẩm Food với tỷ lệ cao nhất, trên 70%.
Tỷ lệ chọn Drink của nữ cao hơn nam một chút (9.3% so với 8.4%).
Tỷ lệ chọn Non-Consumable gần như tương đương giữa hai giới (18.9%).
Kết luận:
Sở thích về nhóm sản phẩm không có sự khác biệt đáng kể giữa nam và nữ. Nhóm sản phẩm Food chiếm ưu thế trong lựa chọn của cả hai giới, trong khi nhóm Drink là ít được chọn nhất.
# Tạo dữ liệu
df <- tribble(
~Gender, ~Drink, ~Food, ~Non_Consumable,
"F", 0.09330544, 0.71813110, 0.18856346,
"M", 0.08433735, 0.72637538, 0.18928727
)
# Chuyển sang dạng long
df_long <- df %>%
pivot_longer(cols = -Gender, names_to = "Category", values_to = "Proportion")
# Vẽ biểu đồ có hiển thị số trên cột
ggplot(df_long, aes(x = Category, y = Proportion, fill = Gender)) +
geom_col(position = position_dodge(width = 0.9)) +
geom_text(
aes(label = scales::percent(Proportion, accuracy = 1)),
position = position_dodge(width = 0.9),
vjust = -0.5, size = 4
) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0, 0.8)) +
labs(
title = "Tỷ lệ tiêu dùng theo giới tính và nhóm hàng",
x = "Nhóm hàng",
y = "Tỷ lệ (%)"
) +
scale_fill_manual(values = c("F" = "yellow", "M" = "green")) +
theme_minimal() +
theme(text = element_text(size = 12))
Dựa trên bảng tần suất chéo giữa Giới tính (Gender) và Nhóm sản phẩm (ProductFamily):
Nữ giới (F) có xu hướng chọn sản phẩm Food nhiều nhất, chiếm khoảng 71.8% trong tổng số sản phẩm mà nữ giới chọn. Tiếp theo là nhóm Non-Consumable (18.9%) và Drink (9.3%).
Nam giới (M) cũng có xu hướng tương tự khi lựa chọn nhiều nhất là Food (72.6%), kế đến là Non-Consumable (18.9%) và ít nhất là Drink (8.4%).
So sánh giới tính:
Cả hai giới đều ưu tiên nhóm sản phẩm Food với tỷ lệ cao nhất, trên 70%.
Tỷ lệ chọn Drink của nữ cao hơn nam một chút (9.3% so với 8.4%).
Tỷ lệ chọn Non-Consumable gần như tương đương giữa hai giới (18.9%).
Kết luận:
chi_result1 <- chisq.test(tab1)
chi_result1
##
## Pearson's Chi-squared test
##
## data: tab1
## X-squared = 3.5185, df = 2, p-value = 0.1722
# Giá trị thống kê Chi-squared
chi_result1$statistic
## X-squared
## 3.51849
# Bậc tự do
chi_result1$parameter
## df
## 2
# Giá trị p
chi_result1$p.value
## [1] 0.1721748
Giả thuyết
Giả thuyết H0: Giới tính (Gender) và Nhóm sản phẩm (ProductFamily) là độc lập, không có mối liên hệ.
Giả thuyết H1: Giới tính và Nhóm sản phẩm có liên hệ với nhau.
Kết quả kiểm định:
Giá trị thống kê Chi-squared: X-squared = 3.51849
Bậc tự do: df = 2
Giá trị p: p = 0.1721748
Kết luận:
tab2 <- table(vth$MaritalStatus, vth$Homeowner)
tab2
##
## N Y
## M 1719 5147
## S 3896 3297
prop.table(tab2, 1)
##
## N Y
## M 0.2503641 0.7496359
## S 0.5416377 0.4583623
ggplot(vth, aes(x = MaritalStatus, fill = Homeowner)) +
geom_bar(position = "fill") +
labs(title = "Tỷ lệ Homeowner theo Marital Status", y = "Tỷ lệ", x = "Marital Status") +
scale_y_continuous(labels = scales::percent) +
theme_minimal()
chi_result2 <- chisq.test(tab2)
chi_result2
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tab2
## X-squared = 1241.2, df = 1, p-value < 2.2e-16
# Giá trị thống kê Chi-squared
chi_result2$statistic
## X-squared
## 1241.218
# Bậc tự do
chi_result2$parameter
## df
## 1
# Giá trị p
chi_result2$p.value
## [1] 6.724506e-272
Giả thuyết
Giả thuyết H0: Tình trạng hôn nhân (MaritalStatus) và sở hữu nhà (Homeowwner) là độc lập, không có mối liên hệ.
Giả thuyết H1: Tình trạng hôn nhân (MaritalStatus) và sở hữu nhà (Homeowwner) có liên hệ với nhau.
Kết quả kiểm định:
Giá trị thống kê Chi-squared: X-squared = 1241.22
Bậc tự do: df = 1
Giá trị p: p < 2.2e-16
Kết luận:
tab3 <- table(vth$AnnualIncome, vth$ProductDepartment)
tab3
##
## Alcoholic Beverages Baked Goods Baking Goods Beverages
## $10K - $30K 80 108 256 148
## $110K - $130K 14 23 49 35
## $130K - $150K 15 24 54 25
## $150K + 3 10 19 20
## $30K - $50K 121 134 336 228
## $50K - $70K 61 63 189 97
## $70K - $90K 39 50 130 91
## $90K - $110K 23 13 39 36
##
## Breakfast Foods Canned Foods Canned Products Carousel Checkout
## $10K - $30K 54 203 29 8 20
## $110K - $130K 3 49 4 1 2
## $130K - $150K 11 46 6 3 9
## $150K + 3 21 0 1 1
## $30K - $50K 63 335 37 30 21
## $50K - $70K 31 170 18 8 22
## $70K - $90K 19 120 11 7 5
## $90K - $110K 4 33 4 1 2
##
## Dairy Deli Eggs Frozen Foods Health and Hygiene Household Meat
## $10K - $30K 174 147 37 327 201 313 24
## $110K - $130K 38 33 9 66 33 63 5
## $130K - $150K 49 45 15 84 51 76 4
## $150K + 17 13 4 26 19 27 2
## $30K - $50K 299 233 67 442 292 432 27
## $50K - $70K 160 107 36 212 134 272 17
## $70K - $90K 126 96 20 151 120 182 7
## $90K - $110K 40 25 10 74 43 55 3
##
## Periodicals Produce Seafood Snack Foods Snacks Starchy Foods
## $10K - $30K 49 420 17 329 76 70
## $110K - $130K 17 77 3 85 16 18
## $130K - $150K 9 109 8 83 19 15
## $150K + 1 33 5 35 8 5
## $30K - $50K 65 650 44 533 127 85
## $50K - $70K 36 344 11 274 60 48
## $70K - $90K 18 264 12 184 29 28
## $90K - $110K 7 97 2 77 17 8
prop.table(tab3, 1)
##
## Alcoholic Beverages Baked Goods Baking Goods Beverages
## $10K - $30K 0.025889968 0.034951456 0.082847896 0.047896440
## $110K - $130K 0.021772939 0.035769829 0.076205288 0.054432348
## $130K - $150K 0.019736842 0.031578947 0.071052632 0.032894737
## $150K + 0.010989011 0.036630037 0.069597070 0.073260073
## $30K - $50K 0.026298631 0.029124103 0.073027603 0.049554445
## $50K - $70K 0.025738397 0.026582278 0.079746835 0.040928270
## $70K - $90K 0.022820363 0.029256875 0.076067876 0.053247513
## $90K - $110K 0.037520392 0.021207178 0.063621533 0.058727569
##
## Breakfast Foods Canned Foods Canned Products Carousel
## $10K - $30K 0.017475728 0.065695793 0.009385113 0.002588997
## $110K - $130K 0.004665630 0.076205288 0.006220840 0.001555210
## $130K - $150K 0.014473684 0.060526316 0.007894737 0.003947368
## $150K + 0.010989011 0.076923077 0.000000000 0.003663004
## $30K - $50K 0.013692676 0.072810259 0.008041730 0.006520322
## $50K - $70K 0.013080169 0.071729958 0.007594937 0.003375527
## $70K - $90K 0.011117613 0.070216501 0.006436513 0.004095963
## $90K - $110K 0.006525285 0.053833605 0.006525285 0.001631321
##
## Checkout Dairy Deli Eggs Frozen Foods
## $10K - $30K 0.006472492 0.056310680 0.047572816 0.011974110 0.105825243
## $110K - $130K 0.003110420 0.059097978 0.051321928 0.013996890 0.102643857
## $130K - $150K 0.011842105 0.064473684 0.059210526 0.019736842 0.110526316
## $150K + 0.003663004 0.062271062 0.047619048 0.014652015 0.095238095
## $30K - $50K 0.004564225 0.064985873 0.050641165 0.014562052 0.096066073
## $50K - $70K 0.009282700 0.067510549 0.045147679 0.015189873 0.089451477
## $70K - $90K 0.002925688 0.073727326 0.056173201 0.011702750 0.088355764
## $90K - $110K 0.003262643 0.065252855 0.040783034 0.016313214 0.120717781
##
## Health and Hygiene Household Meat Periodicals
## $10K - $30K 0.065048544 0.101294498 0.007766990 0.015857605
## $110K - $130K 0.051321928 0.097978227 0.007776050 0.026438569
## $130K - $150K 0.067105263 0.100000000 0.005263158 0.011842105
## $150K + 0.069597070 0.098901099 0.007326007 0.003663004
## $30K - $50K 0.063464464 0.093892632 0.005868290 0.014127364
## $50K - $70K 0.056540084 0.114767932 0.007172996 0.015189873
## $70K - $90K 0.070216501 0.106495026 0.004095963 0.010532475
## $90K - $110K 0.070146819 0.089722675 0.004893964 0.011419250
##
## Produce Seafood Snack Foods Snacks Starchy Foods
## $10K - $30K 0.135922330 0.005501618 0.106472492 0.024595469 0.022653722
## $110K - $130K 0.119751166 0.004665630 0.132192846 0.024883359 0.027993779
## $130K - $150K 0.143421053 0.010526316 0.109210526 0.025000000 0.019736842
## $150K + 0.120879121 0.018315018 0.128205128 0.029304029 0.018315018
## $30K - $50K 0.141273636 0.009563138 0.115844382 0.027602695 0.018474245
## $50K - $70K 0.145147679 0.004641350 0.115611814 0.025316456 0.020253165
## $70K - $90K 0.154476302 0.007021650 0.107665301 0.016968988 0.016383850
## $90K - $110K 0.158238173 0.003262643 0.125611746 0.027732463 0.013050571
ggplot(vth, aes(x = AnnualIncome, fill = ProductDepartment)) +
geom_bar(position = "fill") +
labs(title = "Tỷ lệ ProductDepartment theo Annual Income", y = "Tỷ lệ", x = "Annual Income") +
scale_y_continuous(labels = scales::percent) +
theme_minimal()
chi_result3 <- chisq.test(tab3)
## Warning in stats::chisq.test(x, y, ...): Chi-squared approximation may be
## incorrect
chi_result3
##
## Pearson's Chi-squared test
##
## data: tab3
## X-squared = 170.16, df = 147, p-value = 0.09276
# Giá trị thống kê Chi-squared
chi_result3$statistic
## X-squared
## 170.1572
# Bậc tự do
chi_result3$parameter
## df
## 147
# Giá trị p
chi_result3$p.value
## [1] 0.0927647
Giả thuyết
Giả thuyết H0: Thu nhập hàng tháng (AnnualIncome) và ProductDepartment là độc lập, không có mối liên hệ.
Giả thuyết H1: Thu nhập hàng tháng (AnnualIncome) và ProductDepartment có liên hệ với nhau.
Kết quả kiểm định:
Giá trị thống kê Chi-squared: X-squared = 170.16
Bậc tự do: df = 147
Giá trị p: p = 0.0927647
Kết luận:
tab4 <- table(vth$Homeowner, vth$AnnualIncome)
tab4
##
## $10K - $30K $110K - $130K $130K - $150K $150K + $30K - $50K $50K - $70K
## N 1359 119 136 48 2087 1063
## Y 1731 524 624 225 2514 1307
##
## $70K - $90K $90K - $110K
## N 686 117
## Y 1023 496
prop.table(tab4, 1)
##
## $10K - $30K $110K - $130K $130K - $150K $150K + $30K - $50K $50K - $70K
## N 0.242030276 0.021193232 0.024220837 0.008548531 0.371682992 0.189314337
## Y 0.204997631 0.062055898 0.073898626 0.026646139 0.297726196 0.154784462
##
## $70K - $90K $90K - $110K
## N 0.122172752 0.020837044
## Y 0.121151113 0.058739934
library(tidyverse)
# Tạo dữ liệu
df <- tribble(
~Income, ~N, ~Y,
"$10K - $30K", 1359, 1731,
"$30K - $50K", 2087, 2514,
"$50K - $70K", 1063, 1307,
"$70K - $90K", 686, 1023,
"$90K - $110K", 117, 496,
"$110K - $130K", 119, 524,
"$130K - $150K", 136, 624,
"$150K +", 48, 225
)
# Chuyển sang long format
df_long <- df %>%
pivot_longer(cols = c(N, Y), names_to = "Ownership", values_to = "Count")
# Vẽ biểu đồ
ggplot(df_long, aes(x = Income, y = Count, fill = Ownership)) +
geom_col(position = position_dodge(width = 0.9)) +
geom_text(
aes(label = Count),
position = position_dodge(width = 0.9),
vjust = -0.3,
size = 3.5
) +
scale_fill_manual(values = c("N" = "pink", "Y" = "lightblue")) +
labs(
title = "Số người sở hữu và không sở hữu nhà theo thu nhập",
x = "Thu nhập hằng năm",
y = "Số lượng người",
fill = "Sở hữu nhà"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
text = element_text(size = 12)
)
chi_result4 <- chisq.test(tab4)
chi_result4
##
## Pearson's Chi-squared test
##
## data: tab4
## X-squared = 546.37, df = 7, p-value < 2.2e-16
# Giá trị thống kê Chi-squared
chi_result4$statistic
## X-squared
## 546.3723
# Bậc tự do
chi_result4$parameter
## df
## 7
# Giá trị p
chi_result4$p.value
## [1] 8.517274e-114
Giả thuyết
Giả thuyết H0: Thu nhập hàng tháng (AnnualIncome) và tình trạng sở hữu nhà (Homeowner) là độc lập, không có mối liên hệ.
Giả thuyết H1: Thu nhập hàng tháng (AnnualIncome) và tình trạng sở hữu nhà (Homeowner) có liên hệ với nhau.
Kết quả kiểm định:
Giá trị thống kê Chi-squared: X-squared = 546.37
Bậc tự do: df = 7
Giá trị p: p <2.2e-16
Kết luận:
Giới tính: Cả nam và nữ đều là nhóm khách hàng chính, nhưng chưa có dấu hiệu khác biệt rõ rệt về hành vi mua sắm chỉ dựa vào giới tính.
Tình trạng hôn nhân & sở hữu nhà: Người đã kết hôn có tỷ lệ sở hữu nhà cao hơn đáng kể so với người độc thân. Điều này gợi ý rằng nhóm khách hàng đã lập gia đình có thể có tài chính ổn định và tiềm năng mua sắm cao hơn.
Quốc gia & nhóm sản phẩm chính: Ở cả 3 quốc gia (Canada, Mexico, USA), thực phẩm (Food) là nhóm sản phẩm chủ đạo, chiếm hơn 70% tổng lượng sản phẩm bán ra. Các nhóm Drink và Non-Consumable chiếm tỷ trọng thấp hơn, tương đối đồng đều giữa các nước.
Kiểm định thống kê: Kiểm định Chi-bình phương cho thấy không có sự khác biệt có ý nghĩa thống kê về cơ cấu nhóm sản phẩm giữa các quốc gia (p-value ≈ 0.88).
Giới hạn trong biến định tính: Phân tích chỉ dựa trên các biến định tính, chưa xem xét yếu tố định lượng như thu nhập, doanh thu, hoặc số lượng bán chi tiết theo thời gian.
Dữ liệu chưa chuẩn hóa hoàn toàn: Một số biến (ví dụ: thu nhập) vẫn ở dạng text, cần xử lý thêm để phục vụ phân tích sâu hơn.
Không có yếu tố thời gian rõ ràng: Mặc dù có ngày mua hàng, nhưng chưa phân tích theo xu hướng thời gian (ví dụ theo quý hoặc năm).
Chiến lược sản phẩm
Tập trung tiếp thị nhóm thực phẩm (Food) vì chiếm ưu thế trong cả ba thị trường. Tuy nhiên, cũng cần nghiên cứu thêm để tăng tỷ lệ tiêu thụ các nhóm sản phẩm còn lại.
Nhắm mục tiêu khách hàng
Ưu tiên nhóm khách hàng đã kết hôn và sở hữu nhà, vì có thể đây là đối tượng có sức mua cao và ổn định hơn.
Chiến dịch cá nhân hóa theo khu vực
Dù chưa có sự khác biệt đáng kể giữa các quốc gia, doanh nghiệp vẫn nên phân tích thêm theo thành phố hoặc tỉnh bang để điều chỉnh chiến lược cụ thể hơn.
Gợi ý chiến lược kinh doanh
Tập trung vào thị trường USA, phân khúc nữ giới, độ tuổi trung niên – các nhóm chiếm tỷ trọng cao.
Đẩy mạnh sản phẩm thực phẩm và đồ uống – nhóm hàng thiết yếu và có sức tiêu thụ lớn.
Áp dụng các chương trình khuyến mãi riêng cho nhóm khách hàng chưa sở hữu nhà hoặc độc thân – thường có mức độ linh hoạt chi tiêu cao hơn.
Liệu có sự khác biệt đáng kể trong hành vi mua sắm giữa các nhóm thu nhập không?
Mức chi tiêu trung bình theo giới tính và tình trạng hôn nhân là bao nhiêu?
Có xu hướng theo mùa vụ nào trong hành vi mua sắm không?
Nên phân tích thêm tương quan giữa nhóm sản phẩm và doanh thu để tối ưu danh mục sản phẩm