Phần 1: Tìm hiểu và Chuẩn bị Dữ liệu

1.1 Đọc bộ dữ liệu

Bộ dữ liệu được sử dụng trong phân tích này là Supermarket Transactions một bộ dữ liệu có tập hợp gồm 14.059 giao dịch mua hàng tại siêu thị, được ghi nhận theo từng khách hàng, từng sản phẩm và từng thời điểm. Dữ liệu phản ánh đa dạng thông tin từ nhân khẩu học của khách hàng (giới tính, tình trạng hôn nhân, thu nhập…), đến chi tiết sản phẩm, và số lượng cũng như doanh thu của giao dịch. Đây là một tập dữ liệu tiêu biểu cho các bài toán phân tích hành vi tiêu dùng và doanh thu trong bán lẻ.

l <- read.csv(file.choose(), header = T)
str(l)
## '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 ...

Bộ dữ liệu gồm 14.059 dòng quan sát và 16 biến, bao gồm cả biến định lượng và định tính. Một số biến đóng vai trò nhận dạng và thời gian như X (số thứ tự dòng) và PurchaseDate (ngày mua hàng). Đáng chú ý, PurchaseDate hiện đang được lưu dưới dạng chuỗi ký tự (chr), do đó nên được chuyển đổi sang định dạng ngày (Date) nếu muốn phân tích theo chuỗi thời gian.

Thông tin khách hàng được thể hiện qua các biến như CustomerID (mã định danh), Gender (giới tính), MaritalStatus (tình trạng hôn nhân), Homeowner (sở hữu nhà), Children (số con) và AnnualIncome (thu nhập). Trong đó, các biến Gender, MaritalStatus, Homeowner và AnnualIncome đang ở dạng chuỗi (chr) và rất phù hợp để chuyển sang kiểu factor nhằm phục vụ phân tích thống kê định tính. Biến Children là biến định lượng rời rạc, phản ánh số lượng con trong gia đình – có thể sử dụng để phân nhóm khách hàng theo quy mô hộ gia đình.

Ngoài ra, bộ dữ liệu cũng bao gồm các biến vị trí địa lý như City, StateorProvince và Country, tất cả đều ở dạng chuỗi và có thể chuyển đổi sang factor để phân tích theo vùng miền. Về sản phẩm, các biến ProductFamily, ProductDepartment và ProductCategory mô tả sản phẩm theo các cấp độ phân loại từ rộng đến hẹp. Hai biến định lượng quan trọng là UnitsSold (số đơn vị sản phẩm được bán) và Revenue (doanh thu từ giao dịch), đều có kiểu số (int và num) và đóng vai trò then chốt trong việc phân tích hiệu quả kinh doanh.

Tiếp theo ta sẽ xem head và tail của bộ dữ liệu nhằm hiểu hơn về bộ dữ liệu này

Trước tiên với head(10)

head(l,10)
X PurchaseDate CustomerID Gender MaritalStatus Homeowner Children AnnualIncome City StateorProvince Country ProductFamily ProductDepartment ProductCategory UnitsSold Revenue
1 2007-12-18 7223 F S Y 2 $30K - $50K Los Angeles CA USA Food Snack Foods Snack Foods 5 27.38
2 2007-12-20 7841 M M Y 5 $70K - $90K Los Angeles CA USA Food Produce Vegetables 5 14.90
3 2007-12-21 8374 F M N 2 $50K - $70K Bremerton WA USA Food Snack Foods Snack Foods 3 5.52
4 2007-12-21 9619 M M Y 3 $30K - $50K Portland OR USA Food Snacks Candy 4 4.44
5 2007-12-22 1900 F S Y 3 $130K - $150K Beverly Hills CA USA Drink Beverages Carbonated Beverages 4 14.00
6 2007-12-22 6696 F M Y 3 $10K - $30K Beverly Hills CA USA Food Deli Side Dishes 3 4.37
7 2007-12-23 9673 M S Y 2 $30K - $50K Salem OR USA Food Frozen Foods Breakfast Foods 4 13.78
8 2007-12-25 354 F M Y 2 $150K + Yakima WA USA Food Canned Foods Canned Soup 6 7.34
9 2007-12-25 1293 M M Y 3 $10K - $30K Bellingham WA USA Non-Consumable Household Cleaning Supplies 1 2.41
10 2007-12-25 7938 M S N 1 $50K - $70K San Diego CA USA Non-Consumable Health and Hygiene Pain Relievers 2 8.96

Mười dòng đầu tiên trong bộ dữ liệu cho thấy mỗi dòng là một giao dịch mua hàng cụ thể, được ghi nhận theo thời gian (PurchaseDate) và gắn với một khách hàng cụ thể (CustomerID). Các thông tin đi kèm bao gồm đặc điểm nhân khẩu học như giới tính (Gender), tình trạng hôn nhân (MaritalStatus), sở hữu nhà (Homeowner), số con (Children) và mức thu nhập hàng năm (AnnualIncome). Bên cạnh đó, thông tin địa lý như thành phố (City), bang (StateorProvince) và quốc gia (Country) cũng được ghi nhận đầy đủ.

Về phía sản phẩm, các biến ProductFamily, ProductDepartment và ProductCategory phản ánh từng cấp độ phân loại sản phẩm mà khách hàng đã mua. Đồng thời, số lượng hàng hóa (UnitsSold) và doanh thu tương ứng (Revenue) cũng được ghi nhận, cho phép theo dõi hiệu quả của từng giao dịch. Dữ liệu cho thấy sự đa dạng về sản phẩm (từ thực phẩm, đồ uống đến sản phẩm không tiêu dùng), cũng như sự khác biệt về mức chi tiêu, khu vực sinh sống và thu nhập của khách hàng – tạo tiền đề cho các phân tích chuyên sâu tiếp theo.

Sau đó đi đến với tail(10)

tail(l,10)
X PurchaseDate CustomerID Gender MaritalStatus Homeowner Children AnnualIncome City StateorProvince Country ProductFamily ProductDepartment ProductCategory UnitsSold Revenue
14050 14050 2009-12-28 1394 M M Y 0 $30K - $50K San Andres DF Mexico Food Deli Meat 4 7.15
14051 14051 2009-12-28 6251 M S N 4 $50K - $70K Vancouver BC Canada Food Dairy Dairy 5 19.95
14052 14052 2009-12-28 378 M S Y 1 $30K - $50K Spokane WA USA Food Dairy Dairy 5 28.08
14053 14053 2009-12-28 7234 F M Y 4 $30K - $50K Spokane WA USA Food Deli Side Dishes 5 6.80
14054 14054 2009-12-29 2032 F M N 3 $10K - $30K Yakima WA USA Non-Consumable Household Paper Products 5 14.50
14055 14055 2009-12-29 9102 F M Y 2 $10K - $30K Bremerton WA USA Food Baking Goods Baking Goods 3 9.64
14056 14056 2009-12-29 4822 F M Y 3 $10K - $30K Walla Walla WA USA Food Frozen Foods Vegetables 3 7.45
14057 14057 2009-12-31 250 M S Y 1 $30K - $50K Portland OR USA Drink Beverages Pure Juice Beverages 4 3.24
14058 14058 2009-12-31 6153 F S N 4 $50K - $70K Spokane WA USA Drink Dairy Dairy 2 4.00
14059 14059 2009-12-31 3656 M S N 3 $50K - $70K Portland OR USA Non-Consumable Household Electrical 5 25.53

Mười dòng quan sát cuối cùng trong bộ dữ liệu tiếp tục khẳng định tính đa dạng và đầy đủ của thông tin được ghi nhận. Các giao dịch này diễn ra vào cuối tháng 12 năm 2009, cho thấy dữ liệu bao phủ một khoảng thời gian gần hai năm, từ cuối 2007 đến hết 2009. Tương tự như các dòng đầu, mỗi giao dịch đều đi kèm với thông tin khách hàng, bao gồm mã khách (CustomerID), giới tính (Gender), tình trạng hôn nhân (MaritalStatus), tình trạng sở hữu nhà (Homeowner), số con, mức thu nhập, và vị trí địa lý cụ thể.

Điểm đáng chú ý là các giao dịch cuối cùng thể hiện rõ sự đa dạng về sản phẩm: từ thực phẩm (Food, như “Deli”, “Dairy”, “Frozen Foods”) đến đồ uống (Drink) và các mặt hàng không tiêu dùng (Non-Consumable) như “Paper Products” hay “Electrical”. Các thành phố trong phần dữ liệu này bao gồm cả ở Mỹ, Canada và Mexico, cho thấy bộ dữ liệu không chỉ giới hạn ở một quốc gia mà có yếu tố đa quốc gia, thích hợp cho các phân tích mở rộng về thị trường theo khu vực. Tần suất mua hàng, số lượng sản phẩm và doanh thu cũng có sự biến động, tạo tiền đề cho các phân tích so sánh theo thời gian, khu vực hoặc loại sản phẩm.

1.2 Kiểm tra xem có giá trị thiếu (NA) trong các cột định tính

Một bước quan trọng trong quá trình xử lý dữ liệu là kiểm tra sự tồn tại của các giá trị bị thiếu (NA), đặc biệt là trong các cột định tính. Việc này giúp đảm bảo rằng các phép phân tích thống kê và trực quan hóa sau đó không bị sai lệch hoặc gây lỗi do dữ liệu không đầy đủ.

colSums(is.na(l))
##                 X      PurchaseDate        CustomerID            Gender 
##                 0                 0                 0                 0 
##     MaritalStatus         Homeowner          Children      AnnualIncome 
##                 0                 0                 0                 0 
##              City   StateorProvince           Country     ProductFamily 
##                 0                 0                 0                 0 
## ProductDepartment   ProductCategory         UnitsSold           Revenue 
##                 0                 0                 0                 0

Kết quả kiểm tra cho thấy không có bất kỳ giá trị thiếu nào trong toàn bộ bộ dữ liệu, bao gồm cả các biến định tính như Gender, MaritalStatus, Homeowner, City, StateorProvince, Country, ProductFamily, ProductDepartment và ProductCategory. Mỗi biến trong số này đều có đầy đủ 14.059 giá trị quan sát. Điều này cho thấy bộ dữ liệu đã được làm sạch tốt và có chất lượng cao, cho phép tiến hành các phân tích thống kê và mô hình hóa tiếp theo mà không cần xử lý khuyết thiếu.

Việc không có giá trị thiếu trong các cột định tính cũng giúp cho quá trình chuyển đổi kiểu dữ liệu (sang factor) trở nên thuận lợi hơn, đồng thời đảm bảo tính toàn vẹn của các phép phân tích tần suất, biểu đồ phân bố hay mô hình phân loại sau này.

1.3 Chuyển đổi các biến cần thiết sang kiểu factor

Sau khi đảm bảo rằng không có giá trị thiếu trong các biến định tính, bước tiếp theo trong quá trình tiền xử lý dữ liệu là kiểm tra và chuyển đổi kiểu dữ liệu. Việc xác định đúng kiểu dữ liệu là vô cùng quan trọng, đặc biệt là với các biến phân loại như giới tính, tình trạng hôn nhân hay nhóm sản phẩm – những biến này cần được chuyển sang kiểu factor để có thể phân tích đúng cách trong các thống kê mô tả hoặc mô hình phân loại.

ldt <- c("Gender", "MaritalStatus", "Homeowner", "City","AnnualIncome",
          "StateorProvince", "Country", "ProductFamily", 
          "ProductDepartment", "ProductCategory")
sapply(l[ldt], is.factor)
##            Gender     MaritalStatus         Homeowner              City 
##             FALSE             FALSE             FALSE             FALSE 
##      AnnualIncome   StateorProvince           Country     ProductFamily 
##             FALSE             FALSE             FALSE             FALSE 
## ProductDepartment   ProductCategory 
##             FALSE             FALSE

Cụ thể, các biến định tính được đưa vào kiểm tra bao gồm: Gender, MaritalStatus, Homeowner, AnnualIncome, các biến về vị trí địa lý (City, StateorProvince, Country) và các biến mô tả sản phẩm (ProductFamily, ProductDepartment, ProductCategory). Kết quả kiểm tra cho thấy tất cả các biến này hiện đều đang ở dạng chuỗi ký tự (character) và chưa được chuyển sang kiểu factor.

Việc các biến này chưa phải là factor có thể ảnh hưởng đến hiệu quả khi thực hiện các biểu đồ tần suất, phân tích nhóm hoặc xây dựng các mô hình thống kê – do đó, việc chuyển đổi là cần thiết. Trong bước tiếp theo, ta sẽ tiến hành chuyển đổi các biến này sang kiểu factor để đảm bảo rằng các thao tác xử lý và phân tích dữ liệu diễn ra đúng bản chất và hiệu quả.

for (col in ldt) {
  if (!is.factor(l[[col]])) {
    l[[col]] <- as.factor(l[[col]])
  }
}
sapply(l[ldt], is.factor)
##            Gender     MaritalStatus         Homeowner              City 
##              TRUE              TRUE              TRUE              TRUE 
##      AnnualIncome   StateorProvince           Country     ProductFamily 
##              TRUE              TRUE              TRUE              TRUE 
## ProductDepartment   ProductCategory 
##              TRUE              TRUE

Sau khi xác định các biến định tính trong bộ dữ liệu đều đang ở dạng ký tự (character), toàn bộ các biến này đã được chuyển đổi sang kiểu factor nhằm đảm bảo tính chính xác và hiệu quả trong các phân tích phân loại và thống kê sau này. Việc chuyển đổi được thực hiện thông qua một vòng lặp, trong đó từng biến trong danh sách được kiểm tra và nếu chưa phải factor thì sẽ được ép kiểu bằng hàm as.factor().

Sau khi thực hiện chuyển đổi, một lần kiểm tra lại bằng hàm sapply(…, is.factor) cho thấy kết quả khả quan: toàn bộ các biến cần thiết đều đã mang kiểu dữ liệu factor. Cụ thể, các biến như Gender, MaritalStatus, Homeowner, AnnualIncome, City, StateorProvince, Country, ProductFamily, ProductDepartment và ProductCategory đều đã được xác nhận là TRUE trong kết quả kiểm tra, nghĩa là chúng đã sẵn sàng để tham gia vào các phân tích tần suất, biểu đồ phân bố và các mô hình thống kê có liên quan đến biến phân loại.

Việc chuẩn hóa kiểu dữ liệu này là một bước quan trọng trong quy trình tiền xử lý, giúp đảm bảo tính nhất quán, hiệu quả tính toán và độ chính xác khi khai thác dữ liệu ở các bước tiếp theo như trực quan hóa hoặc phân tích hồi quy, phân cụm, v.v.

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

2.1 Biến Gender

2.1.1 Tần số và tấn suất

ll <-  l[,ldt]
table(ll$Gender)
## 
##    F    M 
## 7170 6889
library(ggplot2)
library(tidyverse)
library(scales)
ll %>% group_by(Gender) %>% summarise(n = n()) %>%
  ggplot(aes(x = '', y = n,fill = Gender)) +
    geom_col(color = 'black') +
    scale_fill_manual(values = c("F" = "#4C72B0", "M" = "#DD8452")) +
    labs(title = "Biểu đồ tần số của Gender") +
    coord_polar('y') +
    geom_text(aes(x = 1.3, label = n),position = position_stack(vjust = .5)) +
    theme_void()

l1 <- table(ll$Gender)/sum(nrow(ll))
table(ll$Gender)/sum(nrow(ll))
## 
##         F         M 
## 0.5099936 0.4900064

Vậy bộ dữ liệu có 50.9993598% là giới tính nữ và 50.9993598% là giới tính nam.

l1_df <- as.data.frame(l1)
names(l1_df) <- c("Gender", "Tansuat")
ggplot(l1_df, aes(x = "", y = Tansuat, fill = Gender)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  scale_fill_manual(values = c("F" = "#00C49A", "M" = "#1F77B4")) +
  labs(title = "Biểu đồ tần suất của Gender") +
  theme_void() +  
  geom_text(aes(label = paste0(round(Tansuat,5), "%")), 
            position = position_stack(vjust = 0.5),
            color = "white", size = 4)

Biểu đồ tròn trên thể hiện tần suất phân bố giới tính trong tập dữ liệu, bao gồm hai nhóm: nữ (F) và nam (M). Kết quả cho thấy tỷ lệ nữ chiếm khoảng 50.999%, trong khi nam chiếm 49.001%. Như vậy, sự phân bổ giới tính trong dữ liệu là tương đối cân bằng, với tỷ lệ nữ nhỉnh hơn nam một chút. Điều này cho thấy dữ liệu có tính đại diện tốt cho cả hai giới tính và phù hợp để thực hiện các phân tích thống kê hoặc mô hình hóa liên quan đến yếu tố giới mà không lo ngại về sự thiên lệch đáng kể.

2.2 Biến MaritalStatus

table(ll$MaritalStatus)
## 
##    M    S 
## 6866 7193
ll %>% group_by(MaritalStatus) %>% summarise(n = n()) %>%
  ggplot(aes(x = MaritalStatus, y = n, fill = MaritalStatus)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = n), vjust = -0.2, size = 5) +  
  scale_fill_manual(values = c("S" = "#FF6384", "M" = "#4BC0C0")) +  
  labs(title = "Phân bố tình trạng hôn nhân", x = "Loại", y = "Số lượng") +
  theme_minimal(base_size = 14)

l2 <- table(ll$MaritalStatus)/sum(nrow(ll))
table(ll$MaritalStatus)/sum(nrow(ll))
## 
##         M         S 
## 0.4883704 0.5116296

Vậy bộ dữ liệu có 48.8370439% là đã cưới và 51.1629561% là độc thân.

l2_df <- as.data.frame(l2)
names(l2_df) <- c("MaritalStatus", "Tansuat")
ggplot(l2_df, aes(x = MaritalStatus, y = Tansuat, fill = MaritalStatus)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = round(Tansuat, 3)), vjust = -0.2, size = 5) +  
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  
  scale_fill_manual(values = c("S" = "#9966FF", "M" = "#4BC0C0")) +  
  labs(
    title = "Biểu đồ tỷ lệ sở hữu nhà ",
    x = "Sở hữu nhà",
    y = "Tần suất (%)"
  ) +
  theme_minimal(base_size = 14)

Biểu đồ cột trên thể hiện tỷ lệ sở hữu nhà ở theo tình trạng hôn nhân, với hai nhóm: M (Married - Đã kết hôn) và S (Single - Độc thân). Kết quả cho thấy tỷ lệ người độc thân sở hữu nhà chiếm khoảng 51.2%, cao hơn một chút so với tỷ lệ của người đã kết hôn là 48.8%. Sự chênh lệch này không lớn, tuy nhiên cho thấy trong tập dữ liệu hiện có, người độc thân có xu hướng sở hữu nhà cao hơn người đã kết hôn. Đây có thể là cơ sở để xem xét mối liên hệ giữa tình trạng hôn nhân và khả năng sở hữu tài sản trong các phân tích sâu hơn.

2.3 Biến Homeowner

table(ll$Homeowner)
## 
##    N    Y 
## 5615 8444
l3 <- table(ll$Homeowner)/sum(nrow(ll))
table(ll$Homeowner)/sum(nrow(ll))
## 
##         N         Y 
## 0.3993883 0.6006117

Vậy bộ dữ liệu có 39.9388292% là đã cưới và 60.0611708% là độc thân.

l3_df <- as.data.frame(l3)
names(l3_df) <- c("Homeowner", "Tansuat")
ggplot(l3_df, aes(x = "", y = Tansuat, fill = Homeowner)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  scale_fill_manual(values = c("N" = "#00C49A", "Y" = "#1F77B4")) +
  labs(title = "Biểu đồ tần suất của Gender") +
  theme_void() +  
  geom_text(aes(label = paste0(round(Tansuat,5), "%")), 
            position = position_stack(vjust = 0.5),
            color = "white", size = 4)

Biểu đồ tròn trên thể hiện tần suất phân bố theo biến “Homeowner” (sở hữu nhà), với hai nhóm: Y (Yes - Có sở hữu nhà) và N (No - Không sở hữu nhà). Kết quả cho thấy tỷ lệ người sở hữu nhà (Y) chiếm khoảng 60.061%, trong khi tỷ lệ người không sở hữu nhà (N) là 39.939%. Điều này cho thấy phần lớn cá nhân trong tập dữ liệu có sở hữu nhà, với sự chênh lệch tương đối rõ rệt so với nhóm không sở hữu. Đây là thông tin quan trọng giúp hiểu rõ hơn về đặc điểm tài sản trong mẫu nghiên cứu và có thể được dùng làm biến giải thích trong các mô hình kinh tế – xã hội.

2.4 Biến AnnualIncome

table(ll$AnnualIncome)
## 
##   $10K - $30K $110K - $130K $130K - $150K       $150K +   $30K - $50K 
##          3090           643           760           273          4601 
##   $50K - $70K   $70K - $90K  $90K - $110K 
##          2370          1709           613
l4 <- table(ll$AnnualIncome)/ sum(nrow(ll))
table(ll$AnnualIncome)/sum(nrow(ll))
## 
##   $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

Vậy bộ dữ liệu có 21.97804% khách hàng có thu nhập từ $10K – $30K, 32.723637% có thu nhập từ $30K – $50K, và 16.857529% thuộc nhóm thu nhập $50K – $70K. Ngoài ra, 12.159514% khách hàng có thu nhập từ $70K – $90K, 4.360196% từ $90K – $110K, và 4.573583% từ $110K – $130K. Nhóm thu nhập từ $130K – $150K chiếm 5.405790%, trong khi nhóm $150K trở lên chiếm tỷ lệ nhỏ nhất là 1.941817%.

ggplot(ll, aes(x = AnnualIncome)) +
  geom_bar(fill = "pink", color = "black") +
  labs(x = "Khoảng thu nhập", y = "Tần suất", title = "Biểu đồ tần suất thu nhập hàng năm") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Biểu đồ cột trên thể hiện tần suất phân bố thu nhập hàng năm theo các khoảng thu nhập khác nhau. Dễ dàng nhận thấy rằng nhóm có thu nhập từ $20K đến $30K chiếm tỷ lệ cao nhất, với tần suất vượt quá 4.500 người. Tiếp theo là nhóm $30K đến $40K và $40K đến $50K, cho thấy phần lớn cá nhân trong tập dữ liệu có thu nhập từ $20K đến $70K. Ngược lại, các nhóm thu nhập cao hơn như $100K+, $90K–$100K và $130K–$150K có tần suất rất thấp, phản ánh rằng thu nhập cao là ít phổ biến trong mẫu dữ liệu này. Biểu đồ này giúp phác họa rõ ràng cấu trúc thu nhập của tập mẫu, hỗ trợ việc phân tích các yếu tố kinh tế – xã hội liên quan đến mức sống hoặc khả năng chi tiêu của các cá nhân.

2.5 Biến City

table(ll$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(ll$City)/sum(nrow(ll))
## 
##      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

Trong bộ dữ liệu, khách hàng đến từ nhiều thành phố khác nhau với mức phân bố không đồng đều. Một số thành phố có tỷ lệ giao dịch cao nổi bật như Seattle với 6.56%, Portland 6.23%, Salem 9.85%, và Spokane 6.22%. Ngoài ra, Tacoma cũng chiếm 8.94%, Los Angeles 6.58%, và Vancouver 4.50%. Các thành phố khác như Bremerton (5.93%), Beverly Hills (5.77%), Yakima (2.67%) và Bellingham (1.01%) có tỷ trọng nhỏ hơn.

Một số địa phương có tỷ lệ thấp dưới 1% gồm Camacho (3.21%), Mexico City (1.37%), Orizaba (0.53%), Victoria (1.25%), và Walla Walla (1.13%). Trong khi đó, những thành phố như San Andres, San Diego, San Francisco, Acapulco, Merida hay Guadalajara chỉ chiếm dưới 3% tổng số giao dịch.

ggplot(ll, aes(x = City)) +
  geom_bar(fill = "pink", color = "black") +
  labs(x = "Thành phố", y = "Tần suất", title = "Biểu đồ tần suất khách hàng ở các thành phố") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Biểu đồ cột trên thể hiện tần suất khách hàng phân bố theo từng thành phố trong tập dữ liệu. Kết quả cho thấy thành phố Salem có số lượng khách hàng cao nhất, vượt mốc 1.200 người. Theo sau là các thành phố Vancouver, San Antonio, và Portland cũng có tần suất khách hàng cao, cho thấy đây là những khu vực tập trung đông khách hàng nhất. Ngược lại, một số thành phố như Yakima, Walla Walla, Bremerton, và Clementon có tần suất khách hàng rất thấp, dưới 200 người. Biểu đồ này cung cấp cái nhìn tổng quan về sự phân bổ địa lý của khách hàng, từ đó hỗ trợ doanh nghiệp xác định các khu vực trọng điểm để tập trung nguồn lực kinh doanh, marketing hoặc dịch vụ khách hàng.

2.6 Biến StateorProvince

table(ll$StateorProvince)
## 
##        BC        CA        DF  Guerrero   Jalisco        OR  Veracruz        WA 
##       809      2733       815       383        75      2262       464      4567 
##   Yucatan Zacatecas 
##       654      1297
l6 <- table(ll$StateorProvince)/sum(nrow(ll))
table(ll$StateorProvince)/sum(nrow(ll))
## 
##          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

Trong bộ dữ liệu, bang Washington (WA) chiếm tỷ lệ cao nhất với 32.85%, tiếp theo là California (CA) với 19.43% và Oregon (OR) với 16.09%. Các bang như Zacatecas, DF, và BC dao động từ 5% đến 9%, trong khi Jalisco có tỷ lệ thấp nhất với chỉ 0.53%. Nhìn chung, dữ liệu tập trung chủ yếu ở một vài bang lớn, phản ánh sự chênh lệch về quy mô hoặc mức độ ghi nhận giao dịch giữa các khu vực.

l6_df <- as.data.frame(l6)
names(l6_df) <- c("StateorProvince", "Tansuat")
ggplot(l6_df, aes(x = StateorProvince, y = Tansuat, fill = StateorProvince)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = round(Tansuat, 3)), vjust = -0.2, size = 5) +  
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  
  labs(
    title = "Biểu đồ tỷ lệ khách hàng theo tiểu bang ",
    x = "Tỷ lệ khách hàng theo tiểu bang",
    y = "Tần suất (%)"
  ) +
  theme_minimal(base_size = 14)

Biểu đồ cột thể hiện tỷ lệ khách hàng theo từng tiểu bang cho thấy tiểu bang WA (Washington) chiếm tỷ lệ cao nhất với 32.5% tổng số khách hàng, cho thấy đây là khu vực có mật độ khách hàng đông đảo nhất trong tập dữ liệu. Tiếp theo là California (CA) với 19.4% và Oregon (OR) với 16.1%, đều là những bang có tỷ lệ khách hàng tương đối cao. Ngược lại, một số tiểu bang như Jalisco và Guerrero có tỷ lệ khách hàng rất thấp, lần lượt chỉ chiếm 0.5% và 2.7%, cho thấy mức độ tiếp cận khách hàng tại những khu vực này còn hạn chế. Biểu đồ này giúp nhận diện các khu vực địa lý trọng điểm, hỗ trợ doanh nghiệp hoạch định chiến lược mở rộng thị trường hoặc phân bổ nguồn lực hiệu quả hơn.

2.7 Biến Country

table(ll$Country)
## 
## Canada Mexico    USA 
##    809   3688   9562
l7 <- table(ll$Country)/sum(nrow(ll))
table(ll$Country)/sum(nrow(ll))
## 
##     Canada     Mexico        USA 
## 0.05754321 0.26232307 0.68013372

Trong bộ dữ liệu, khách hàng đến từ ba quốc gia chính. Hoa Kỳ (USA) chiếm tỷ lệ lớn nhất với 68.01%, tiếp theo là Mexico với 26.23%, và Canada chiếm 5.75%. Dữ liệu chủ yếu tập trung tại thị trường Mỹ, phản ánh đây là khu vực hoạt động chính của hệ thống bán lẻ này.

l7_df <- as.data.frame(l7)
names(l7_df) <- c("Country", "Tansuat")
ggplot(l7_df, aes(x = Country, y = Tansuat, fill = Country)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = round(Tansuat, 3)), vjust = -0.2, size = 5) +  
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  
  labs(
    title = "Biểu đồ tỷ lệ khách hàng theo quốc gia",
    x = "Tỷ lệ khách hàng theo quốc gia",
    y = "Tần suất (%)"
  ) +
  theme_minimal(base_size = 14)

Biểu đồ thể hiện tỷ lệ khách hàng theo quốc gia cho thấy phần lớn khách hàng đến từ Hoa Kỳ (USA), chiếm 68% tổng số khách hàng trong cơ sở dữ liệu. Đứng thứ hai là Mexico với tỷ lệ 26.2%, trong khi Canada chỉ chiếm 5.8%. Sự chênh lệch rõ rệt này cho thấy thị trường Hoa Kỳ là thị trường chủ lực với quy mô lớn và mức độ thâm nhập cao hơn đáng kể so với hai quốc gia còn lại. Biểu đồ này cung cấp cái nhìn trực quan về sự phân bố khách hàng theo khu vực địa lý và có thể là cơ sở quan trọng để xây dựng các chiến lược marketing và phân phối sản phẩm phù hợp với từng quốc gia.

2.8 Biến ProductFamily

table(ll$ProductFamily)
## 
##          Drink           Food Non-Consumable 
##           1250          10153           2656
l8 <- table(ll$ProductFamily)/sum(nrow(ll))
table(ll$ProductFamily)/sum(nrow(ll))
## 
##          Drink           Food Non-Consumable 
##     0.08891102     0.72217085     0.18891813

Trong bộ dữ liệu, nhóm sản phẩm Food chiếm tỷ lệ lớn nhất với 72.22%, cho thấy đây là nhóm hàng chủ lực của hệ thống bán lẻ. Nhóm Non-Consumable chiếm 18.89%, trong khi nhóm Drink có tỷ lệ thấp nhất với 8.89%, phản ánh vai trò phụ trợ của các mặt hàng đồ uống trong tổng thể danh mục sản phẩm.

l8_df <- as.data.frame(l8)
names(l8_df) <- c("ProductFamily", "Tansuat")
ggplot(l8_df, aes(x = ProductFamily, y = Tansuat, fill = ProductFamily)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = round(Tansuat, 3)), vjust = -0.2, size = 5) +  
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  
  labs(
    title = "Biểu đồ tỷ lệ nhóm sản phẩm",
    x = "Tỷ lệ khách hàng theo quốc gia",
    y = "Tần suất (%)"
  ) +
  theme_minimal(base_size = 14)

Biểu đồ thể hiện tỷ lệ khách hàng theo nhóm sản phẩm cho thấy rằng phần lớn khách hàng thuộc nhóm Food, chiếm tới 72.2% tổng số khách hàng. Nhóm sản phẩm Non-Consumable đứng thứ hai với 18.9%, trong khi nhóm Drink chỉ chiếm 8.9%. Điều này phản ánh rằng thực phẩm là mặt hàng tiêu dùng phổ biến nhất trong dữ liệu khảo sát và có thể là nguồn doanh thu chính. Do đó, doanh nghiệp có thể tập trung vào việc mở rộng danh mục và chiến lược tiếp thị cho nhóm sản phẩm Food để tận dụng nhu cầu thị trường đang chiếm ưu thế này.

2.9 Biến ProductDepartment

table(ll$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
l9 <- table(ll$ProductDepartment)/sum(nrow(ll))
table(ll$ProductDepartment)/sum(nrow(ll))
## 
## 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

Trong bộ dữ liệu, các bộ phận sản phẩm có tỷ lệ giao dịch cao nhất bao gồm Produce với 14.18%, Snack Foods với 11.38%, và Frozen Foods với 9.83%. Đây là những bộ phận đóng vai trò chủ lực trong danh mục hàng hóa của siêu thị. Các bộ phận như Beverages, Dairy, Canned Foods, và Health and Hygiene dao động trong khoảng từ 6% đến 7%. Những bộ phận còn lại như Periodicals, Seafood, Carousel hay Starchy Foods chiếm tỷ lệ nhỏ hơn, dưới 2%, phản ánh vai trò bổ sung hoặc mức độ tiêu dùng thấp hơn trong hệ thống bán lẻ.

ggplot(ll, aes(x = ProductDepartment)) +
  geom_bar(fill = "#FF6384", color = "black") +
  labs(x = "Thành phố", y = "Tần suất", title = "Biểu đồ tần suất các danh mục sản phẩm") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  coord_flip()

Biểu đồ thể hiện tần suất khách hàng theo danh mục sản phẩm cho thấy rằng Produce (rau củ quả) và Snack Foods (đồ ăn vặt) là hai nhóm sản phẩm có số lượng khách hàng cao nhất, lần lượt khoảng gần 2000 và trên 1500 lượt. Ngoài ra, các nhóm như Baking Goods, Frozen Foods, Health and Hygiene, và Meat cũng có lượng khách hàng đáng kể (trên 1000 lượt), phản ánh nhu cầu ổn định cho các sản phẩm thiết yếu trong đời sống hàng ngày. Ngược lại, các nhóm sản phẩm như Carousel, Checkout, và Seafood có tần suất rất thấp, cho thấy nhu cầu hoặc mức độ phổ biến thấp hơn. Những thông tin này có thể giúp doanh nghiệp ưu tiên phân bổ nguồn lực và chiến lược tiếp thị phù hợp với xu hướng tiêu dùng thực tế.

2.10 Biến ProductCategory

table(ll$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
l10 <- table(ll$ProductCategory)/sum(nrow(ll))
table(ll$ProductCategory)/sum(nrow(ll))
## 
##         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

Trong bộ dữ liệu, các danh mục sản phẩm có sự phân bố không đồng đều, phản ánh rõ rệt mức độ tiêu dùng của từng loại hàng hóa trong hệ thống siêu thị. Vegetables và Snack Foods là hai danh mục chiếm tỷ lệ cao nhất, lần lượt là 12.29% và 11.38%, cho thấy đây là những mặt hàng được tiêu dùng phổ biến nhất. Tiếp theo là các sản phẩm như Dairy (6.42%), Fruit (5.44%), Meat (5.41%), và Jams and Jellies (4.18%), đều thuộc nhóm thực phẩm thiết yếu và tươi sống, có nhu cầu sử dụng thường xuyên trong đời sống hàng ngày.

Những danh mục có tỷ lệ trung bình từ 2% đến dưới 5% bao gồm Kitchen Products (1.54%), Hot Beverages (1.61%), Magazines (1.44%), Pizza (1.37%), Cleaning Supplies (1.34%), và Pain Relievers (1.36%). Đây là các sản phẩm phụ trợ hoặc tiêu dùng theo nhu cầu cụ thể, không phải là mặt hàng thiết yếu sử dụng hàng ngày. Ngoài ra, các danh mục như Frozen Desserts, Electrical, Paper Products, và Starchy Foods cũng góp phần đáng kể trong danh mục hàng hóa, tuy không nổi bật như nhóm thực phẩm tươi.

Ở nhóm cuối, có rất nhiều danh mục sản phẩm chiếm tỷ lệ thấp dưới 2%, phần lớn thuộc về các mặt hàng đồ hộp, thực phẩm chế biến sẵn hoặc ít phổ biến. Các danh mục như Canned Anchovies (0.31%), Canned Clams (0.38%), Canned Sardines (0.28%), và Canned Shrimp (0.27%) có mức tiêu dùng rất thấp. Một số sản phẩm không thiết yếu khác như Hardware (0.91%), Decongestants (0.60%), hay Miscellaneous (0.30%) cũng nằm trong nhóm có tần suất mua sắm rất thấp.

ggplot(ll, aes(x = ProductCategory)) +
  geom_bar(fill = "#FF6384", color = "black") +
  labs(x = "Thành phố", y = "Tần suất", title = "Biểu đồ tần suất các danh mục sản phẩm") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  coord_flip()

Biểu đồ tần suất khách hàng ở các thành phố thể hiện sự phân bố khách hàng theo các nhóm ngành hàng khác nhau. Các thành phố được liệt kê bao gồm nhiều lĩnh vực như thực phẩm (Vegetables, Eggs, Breakfast Foods), đồ uống (Drinks, Beer and Wine, Hot Beverages), sản phẩm gia dụng (Kitchen Products, Bathroom Products), và các mặt hàng đóng gói (Packaged Vegetables, Canned Products).

Một số nhóm ngành hàng nổi bật như “Vegetables” (Rau củ), “Frozen, Entreers” (Đồ đông lạnh), và “Canned Products” (Sản phẩm đóng hộp) cho thấy nhu cầu tiêu dùng cao đối với các mặt hàng thiết yếu. Trong khi đó, các nhóm như “Miscellaneous” (Hỗn hợp) và “Decomposition” (Phân hủ) có thể đại diện cho các ngành hàng ít phổ biến hoặc chuyên biệt hơn.

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

Trong phần này, ta tiến hành phân tích tỷ lệ của một hạng mục cụ thể thuộc ba biến định tính trong bộ dữ liệu: giới tính (Gender), tình trạng hôn nhân (MaritalStatus) và loại sản phẩm (ProductFamily). Mỗi biến sẽ được phân tích theo hai bước: (1) ước lượng khoảng tin cậy 95% cho tỷ lệ của hạng mục quan tâm trong tổng thể, và (2) kiểm định giả thuyết thống kê cho một giả định cụ thể về tỷ lệ đó. Mức ý nghĩa được sử dụng cho tất cả kiểm định là α = 0.05.

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

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

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

Hạng mục “M” của biến MaritalStatus - tình trạng hôn nhân

Hạng mục “Non-Consumable” của biến ProductFamily - Sản phẩm tiêu dùng gia đình

3.2 Ước lượng Khoảng Tin cậy và Kiểm định Giả thuyết của từng hạng mục

3.2.1 Hạng mục “M” của biến Gender

Ước lượng Khoảng Tin cậy

prop.test(sum(l$Gender == "M"), nrow(l), conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(l$Gender == "M") out of nrow(l), 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.4817114 0.4983069
## sample estimates:
##         p 
## 0.4900064

Kết quả cho thấy khoảng tin cậy 95% cho tỷ lệ khách hàng nam trong tổng thể nằm trong khoảng từ 48.17% đến 49.83%. Điều này có nghĩa rằng nếu ta lặp lại quá trình thu thập dữ liệu nhiều lần và mỗi lần đều lấy mẫu ngẫu nhiên tương tự, thì 95% các mẫu như vậy sẽ cho ra tỷ lệ nam nằm trong khoảng này. Với khoảng tin cậy khá hẹp và gần 50%, ta có thể nói rằng phân bố giới tính trong tập khách hàng khá đồng đều, không quá thiên lệch về một phía.

Kiểm định Giả thuyết của từng hạng mục

Ta đặt giả thuyết như sau:

  • H₀ (Giả thuyết không): Tỷ lệ khách hàng nam = 0.5 (tức là bằng với nữ, không thiên lệch)

  • H₁ (Giả thuyết đối): Tỷ lệ khách hàng nam ≠ 0.5 (có thiên lệch đáng kể)

Kết quả kiểm định thu được:

Giá trị thống kê kiểm định: X-squared = 5.5765

Giá trị p (p-value): 0.0182

Với p-value < 0.05, ta bác bỏ giả thuyết H0 ở mức ý nghĩa 5%. Điều này cho thấy có bằng chứng thống kê đủ mạnh để kết luận rằng tỷ lệ nam giới trong tập khách hàng không bằng 50%, tức là có sự chênh lệch nhẹ giữa nam và nữ trong cơ cấu khách hàng.

Kết luận

Mặc dù tỷ lệ nam giới chỉ chênh lệch rất nhỏ so với 50% (chỉ khoảng 0.49), nhưng kết quả kiểm định cho thấy sự khác biệt này có ý nghĩa thống kê. Điều này có thể được lý giải là do kích thước mẫu rất lớn (hơn 14.000), nên ngay cả những chênh lệch nhỏ cũng có thể được phát hiện là đáng kể. Về mặt thực tiễn, tuy tỷ lệ chênh lệch không lớn, nhưng có thể hàm ý rằng một giới tính có xu hướng mua sắm nhiều hơn hoặc thường xuyên hơn – điều này có thể gợi mở cho các chiến lược marketing hoặc phân khúc khách hàng theo giới.

3.2.2 Hạng mục “M” của biến MaritalStatus

Ước lượng Khoảng Tin cậy

prop.test(sum(l$MaritalStatus == "M"), nrow(l), conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(l$MaritalStatus == "M") out of nrow(l), 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.4800765 0.4966708
## sample estimates:
##         p 
## 0.4883704

Kết quả thu được cho biết tỷ lệ khách hàng đã kết hôn trong mẫu là 48.84%, được biểu diễn trong phần sample estimates: p = 0.4883704. Khoảng tin cậy 95% cho tỷ lệ này là từ 0.4801 đến 0.4967, tức là ta có thể tin tưởng 95% rằng tỷ lệ thực tế của nhóm khách hàng đã kết hôn trong toàn bộ dân số nằm trong khoảng từ 48.01% đến 49.67%. Đây là một khoảng tin cậy hẹp, gần sát mốc 50%, cho thấy sự phân bố gần như cân bằng giữa các nhóm khách hàng có và chưa có gia đình.

Kiểm định Giả thuyết của từng hạng mục

Để kiểm tra xem tỷ lệ đã kết hôn có thực sự khác biệt so với mốc 0.5 hay không, ta đặt giả thuyết:

  • H₀ (Giả thuyết không): Tỷ lệ khách hàng đã kết hôn = 0.5

  • H₁ (Giả thuyết đối): Tỷ lệ khách hàng đã kết hôn ≠ 0.5

Kết quả kiểm định trả về:

X-squared = 7.5593, df = 1

p-value = 0.00597

Với p-value nhỏ hơn 0.05, ta bác bỏ giả thuyết H₀ ở mức ý nghĩa 5%. Điều này có nghĩa là tỷ lệ khách hàng đã kết hôn thực sự khác 50% một cách có ý nghĩa thống kê. Dù sự khác biệt là nhỏ về mặt thực tế (48.84% so với 50%), quy mô mẫu lớn đã giúp phát hiện ra sự sai lệch này với độ tin cậy cao.

Kết luận

Kết quả kiểm định cho thấy rằng sự chênh lệch về tỷ lệ khách hàng đã kết hôn là có thật và có ý nghĩa thống kê. Điều này gợi ý rằng trong tập khách hàng của siêu thị, nhóm khách hàng chưa lập gia đình hoặc không kết hôn có thể chiếm ưu thế nhẹ. Đây là thông tin hữu ích cho việc thiết kế các chiến dịch tiếp thị, lựa chọn sản phẩm và xác định thông điệp truyền thông phù hợp với thực tế nhân khẩu học của người tiêu dùng.

3.2.3 Hạng mục Hạng mục “Non-Consumable” của biến ProductFamily

Ước lượng Khoảng Tin cậy

prop.test(sum(l$ProductFamily == "Non-Consumable"), nrow(l), conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(l$ProductFamily == "Non-Consumable") out of nrow(l), null probability 0.5
## X-squared = 5440.8, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.1824978 0.1955093
## sample estimates:
##         p 
## 0.1889181

Kiểm định Giả thuyết của từng hạng mục

Để xác định xem tỷ lệ giao dịch liên quan đến sản phẩm Non-Consumable có thực sự khác biệt đáng kể so với mốc 0.5 (giả định rằng tất cả các loại sản phẩm có cơ hội xuất hiện như nhau), ta tiến hành kiểm định giả thuyết:

  • H₀ (Giả thuyết không): Tỷ lệ sản phẩm Non-Consumable = 0.5

  • H₁ (Giả thuyết đối): Tỷ lệ sản phẩm Non-Consumable ≠ 0.5

Kết quả trả về:

X-squared = 5440.8

p-value < 2.2e-16

Giá trị p rất nhỏ, gần như bằng 0, cho thấy xác suất để quan sát được tỷ lệ thấp như hiện tại nếu tỷ lệ thực tế là 50% là cực kỳ hiếm xảy ra. Vì vậy, ta bác bỏ giả thuyết H₀ một cách rất chắc chắn.

Kết luận

Với p-value gần bằng 0 và khoảng tin cậy nằm hoàn toàn dưới 0.2, ta có thể kết luận rằng tỷ lệ giao dịch liên quan đến sản phẩm Non-Consumable là thấp một cách có ý nghĩa thống kê so với 50%. Trên thực tế, tỷ lệ chỉ ở mức 18.89%, cho thấy các sản phẩm không tiêu dùng chỉ chiếm một phần nhỏ trong hoạt động kinh doanh của siêu thị. Kết quả này có thể phản ánh xu hướng mua sắm của khách hàng – họ ưu tiên các mặt hàng tiêu dùng thiết yếu như thực phẩm và đồ uống hơn là các sản phẩm dùng lâu dài hoặc không thiết yếu.

Từ góc nhìn kinh doanh, đây là thông tin quan trọng giúp các nhà quản lý cửa hàng cân nhắc điều chỉnh cơ cấu hàng hóa, diện tích trưng bày, và chiến lược tiếp thị để phù hợp với hành vi thực tế của người tiêu dùng.

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

Ta chọn 3 cặp biến định tính như sau:

  • Gender và Homeowner

  • ProductDepartment và ProductFamily

  • StateorProvince và ProductFamily

4.1 Cặp biến Gender và Homeowner

4.1.1 Tạo bảng tần suất chéo và tính tỷ lệ

Bảng tần suất chéo giữa biến Gender (giới tính) và Homeowner (sở hữu nhà) thể hiện tổng số khách hàng thuộc từng giới tính, phân theo việc họ có sở hữu nhà hay không. Kết quả như sau:

# Bảng tần suất chéo
tab1 <- table(l$Gender, l$Homeowner)
tab1
##    
##        N    Y
##   F 2826 4344
##   M 2789 4100

Bảng tần suất chéo giữa hai biến định tính Gender (giới tính) và Homeowner (tình trạng sở hữu nhà) phản ánh sự phân bố số lượng khách hàng theo từng giới tính và việc họ có sở hữu nhà hay không. Trong tổng số 7.170 khách hàng nữ, có 4.344 người sở hữu nhà và 2.826 người không sở hữu nhà. Đối với nhóm nam, tổng số khách hàng là 6.889, trong đó có 4.100 người có nhà và 2.789 người không có nhà.

Từ bảng này, có thể thấy rằng ở cả hai giới tính, số lượng khách hàng sở hữu nhà luôn nhiều hơn số không sở hữu nhà. Cụ thể, khoảng 60% khách hàng trong mỗi giới tính đều có nhà, và khoảng 40% còn lại là không có. Ngoài ra, sự chênh lệch về số lượng giữa nam và nữ trong mỗi nhóm sở hữu nhà là không quá lớn – cho thấy phân bố giới tính trong hai nhóm “có nhà” và “không có nhà” là tương đối đồng đều.

Từ góc nhìn ban đầu dựa trên số lượng, không có dấu hiệu rõ ràng nào cho thấy giới tính là một yếu tố quan trọng ảnh hưởng đến việc sở hữu nhà. Tuy nhiên, để xác nhận điều này một cách chính xác hơn, ta cần tiếp tục xem xét tỷ lệ phần trăm và thực hiện kiểm định thống kê ở các bước sau.

# Tính tỷ lệ theo hàng
prop1 <- prop.table(tab1, margin = 1) * 100

# Hiển thị bảng
round(prop1, 2)
##    
##         N     Y
##   F 39.41 60.59
##   M 40.48 59.52

Khi phân tích tỷ lệ phần trăm sở hữu nhà theo giới tính, ta nhận thấy rằng trong nhóm khách hàng nữ, có khoảng 60.59% sở hữu nhà và 39.41% không sở hữu nhà. Trong khi đó, nhóm khách hàng nam có 59.52% sở hữu nhà và 40.48% không sở hữu nhà. Như vậy, cả hai giới tính đều có tỷ lệ sở hữu nhà cao hơn so với không sở hữu nhà, và sự chênh lệch giữa hai giới là rất nhỏ – chưa đến 1%.

Sự khác biệt nhỏ này cho thấy rằng khách hàng nam và nữ có hành vi sở hữu nhà gần như tương đồng, không có sự phân hóa rõ rệt. Dù nhóm nữ có tỷ lệ sở hữu nhà nhỉnh hơn một chút so với nam, nhưng đây có thể chỉ là chênh lệch ngẫu nhiên, không phản ánh một xu hướng hay đặc điểm nhân khẩu học nhất quán. Để xác định liệu sự khác biệt này có ý nghĩa thống kê hay không, ta cần thực hiện kiểm định thống kê trong bước tiếp theo.

4.1.2 Trực quan hóa

df_plot <- as.data.frame(tab1)
names(df_plot) <- c("Gender", "Homeowner", "Freq")
ggplot(df_plot, aes(x = Gender, y = Freq, fill = Homeowner)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Phân bố sở hữu nhà theo giới tính",
       x = "Giới tính", y = "Số lượng", fill = "Homeowner") +
  theme_minimal()

4.1.3 Nhận xét Mô tả

Biểu đồ cột nhóm thể hiện phân bố tình trạng sở hữu nhà theo giới tính cho thấy cả nam và nữ đều có xu hướng sở hữu nhà nhiều hơn không sở hữu. Chiều cao của cột màu xanh (đại diện cho nhóm “có nhà”) vượt trội hơn so với cột màu đỏ (“không có nhà”) trong cả hai giới tính. Đồng thời, sự chênh lệch giữa nam và nữ ở cả hai nhóm sở hữu là rất nhỏ – các cột của nam và nữ gần như song song, không có khác biệt rõ rệt về độ cao.

Quan sát từ biểu đồ cho thấy không có xu hướng nổi bật nào phân biệt hai giới về việc sở hữu nhà. Cả hai giới tính đều có tỷ lệ khách hàng có nhà chiếm khoảng 60% và không có nhà khoảng 40%. Điều này gợi ý rằng giới tính không phải là yếu tố ảnh hưởng rõ rệt đến việc sở hữu nhà trong dữ liệu này. Biểu đồ trực quan củng cố cho kết quả từ bảng tần suất và tỷ lệ phần trăm – tức là, mặc dù có chênh lệch nhỏ, nhưng xu hướng chung giữa nam và nữ là tương đồng.

4.1.4 Kiểm định Thống kê (Kiểm định Chi-bình phương)

Để kiểm tra xem hai biến định tính Gender (giới tính) và Homeowner (tình trạng sở hữu nhà) có mối quan hệ với nhau hay không, ta tiến hành kiểm định Chi-bình phương độc lập (Chi-squared test of independence). Mục tiêu của kiểm định là xác định xem phân bố sở hữu nhà có phụ thuộc vào giới tính hay không, hay nói cách khác, giới tính có ảnh hưởng đến khả năng sở hữu nhà của khách hàng hay không.

  • Giả thuyết:

  • H₀ (Giả thuyết không): Hai biến Gender và Homeowner độc lập nhau (giới tính không ảnh hưởng đến việc sở hữu nhà).

  • H₁ (Giả thuyết đối): Hai biến có liên quan, tức là có sự phụ thuộc giữa giới tính và tình trạng sở hữu nhà

chisq.test(tab1)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tab1
## X-squared = 1.6344, df = 1, p-value = 0.2011
  • Kết quả kiểm định:

  • Giá trị thống kê Chi-bình phương (X²) = 1.6344

  • Giá trị p-value = 0.2011

Với p-value = 0.2011, lớn hơn mức ý nghĩa α = 0.05, ta không đủ bằng chứng để bác bỏ giả thuyết H₀. Nói cách khác, kết quả kiểm định cho thấy rằng không có mối quan hệ có ý nghĩa thống kê giữa giới tính và tình trạng sở hữu nhà trong tập dữ liệu này. Hay nói một cách đơn giản, giới tính và việc có sở hữu nhà của khách hàng là độc lập nhau.

Điều này hoàn toàn phù hợp với những gì đã quan sát được từ bảng tần suất chéo, tỷ lệ phần trăm và biểu đồ trực quan: các nhóm nam và nữ có tỷ lệ sở hữu nhà khá tương đồng, và không có dấu hiệu nào cho thấy một giới tính nào đó sở hữu nhà nhiều hơn một cách rõ rệt. Vì vậy, có thể kết luận rằng giới tính không phải là yếu tố ảnh hưởng đáng kể đến hành vi sở hữu nhà trong tập khách hàng này.

4.2 Cặp biến ProductDepartment và ProductFamily

4.2.1 Tạo bảng tần suất chéo và tính tỷ lệ

# Bảng tần suất chéo
tab2 <- table(l$ProductDepartment, l$ProductFamily)
tab2
##                      
##                       Drink Food Non-Consumable
##   Alcoholic Beverages   356    0              0
##   Baked Goods             0  425              0
##   Baking Goods            0 1072              0
##   Beverages             680    0              0
##   Breakfast Foods         0  188              0
##   Canned Foods            0  977              0
##   Canned Products         0  109              0
##   Carousel                0    0             59
##   Checkout                0    0             82
##   Dairy                 214  689              0
##   Deli                    0  699              0
##   Eggs                    0  198              0
##   Frozen Foods            0 1382              0
##   Health and Hygiene      0    0            893
##   Household               0    0           1420
##   Meat                    0   89              0
##   Periodicals             0    0            202
##   Produce                 0 1994              0
##   Seafood                 0  102              0
##   Snack Foods             0 1600              0
##   Snacks                  0  352              0
##   Starchy Foods           0  277              0

Bảng tần suất chéo giữa hai biến ProductDepartment và ProductFamily cho thấy mối quan hệ phân loại giữa các bộ phận sản phẩm cụ thể và ba nhóm sản phẩm chính trong siêu thị: Food, Drink, và Non-Consumable. Quan sát bảng cho thấy rằng mỗi bộ phận sản phẩm gần như chỉ thuộc về một nhóm sản phẩm duy nhất, và không có sự phân bổ chéo đáng kể giữa các nhóm.

Cụ thể, các bộ phận như Baked Goods, Baking Goods, Frozen Foods, Produce, Snack Foods, và nhiều bộ phận khác như Eggs, Seafood, Meat, Deli đều có số lượng hoàn toàn tập trung trong nhóm Food. Nhóm Drink bao gồm chủ yếu các bộ phận Beverages và Alcoholic Beverages, cho thấy đây là hai bộ phận duy nhất chịu trách nhiệm phân phối đồ uống. Trong khi đó, nhóm Non-Consumable hoàn toàn độc lập, được phân bổ rõ ràng qua các bộ phận như Household, Health and Hygiene, Carousel, Checkout, và Periodicals.

Không có bộ phận nào trải dài qua nhiều nhóm sản phẩm, điều này phản ánh cấu trúc phân loại sản phẩm trong hệ thống siêu thị rất rõ ràng, chặt chẽ và không chồng chéo. Mỗi bộ phận được gắn với một nhóm sản phẩm cụ thể và duy nhất. Bảng tần suất này không chỉ phản ánh tính nhất quán trong cách tổ chức dữ liệu, mà còn thể hiện mô hình phân phối sản phẩm trong thực tế – nơi mà các bộ phận chịu trách nhiệm cho từng loại hàng hóa cụ thể, không pha trộn.

# Tính tỷ lệ theo hàng
prop2 <- prop.table(tab2, margin = 1) * 100

# Hiển thị bảng
round(prop2, 2)
##                      
##                       Drink  Food Non-Consumable
##   Alcoholic Beverages 100.0   0.0            0.0
##   Baked Goods           0.0 100.0            0.0
##   Baking Goods          0.0 100.0            0.0
##   Beverages           100.0   0.0            0.0
##   Breakfast Foods       0.0 100.0            0.0
##   Canned Foods          0.0 100.0            0.0
##   Canned Products       0.0 100.0            0.0
##   Carousel              0.0   0.0          100.0
##   Checkout              0.0   0.0          100.0
##   Dairy                23.7  76.3            0.0
##   Deli                  0.0 100.0            0.0
##   Eggs                  0.0 100.0            0.0
##   Frozen Foods          0.0 100.0            0.0
##   Health and Hygiene    0.0   0.0          100.0
##   Household             0.0   0.0          100.0
##   Meat                  0.0 100.0            0.0
##   Periodicals           0.0   0.0          100.0
##   Produce               0.0 100.0            0.0
##   Seafood               0.0 100.0            0.0
##   Snack Foods           0.0 100.0            0.0
##   Snacks                0.0 100.0            0.0
##   Starchy Foods         0.0 100.0            0.0

Bảng tỷ lệ phần trăm cho thấy mối quan hệ giữa các bộ phận sản phẩm (ProductDepartment) và nhóm sản phẩm chính (ProductFamily) là hoàn toàn phân tách. Phần lớn các bộ phận sản phẩm chỉ liên kết với duy nhất một nhóm sản phẩm, với tỷ lệ tuyệt đối 100%. Ví dụ, các bộ phận như Baked Goods, Baking Goods, Frozen Foods, Canned Products, Produce, Meat, Seafood, Snack Foods, Snacks, và nhiều bộ phận khác đều có 100% sản phẩm thuộc nhóm Food. Điều tương tự cũng diễn ra ở nhóm Drink, với các bộ phận Alcoholic Beverages và Beverages có tỷ lệ 100% sản phẩm là đồ uống.

Nhóm sản phẩm Non-Consumable cũng thể hiện tính phân tách rõ rệt. Các bộ phận như Household, Health and Hygiene, Periodicals, Checkout, và Carousel đều có 100% sản phẩm thuộc về Non-Consumable, không có sự pha trộn với hai nhóm còn lại.

Chỉ duy nhất một bộ phận có tỷ lệ phân bố sản phẩm không hoàn toàn nghiêng về một nhóm là Dairy, với khoảng 76.3% sản phẩm thuộc nhóm Food và 23.7% thuộc nhóm Drink. Điều này cho thấy Dairy là bộ phận duy nhất có sự chồng lấn giữa hai nhóm sản phẩm, và cũng là ngoại lệ duy nhất trong toàn bộ hệ thống phân loại.

Nhìn chung, bảng tỷ lệ phần trăm cho thấy cách tổ chức sản phẩm trong siêu thị là cực kỳ rõ ràng và rành mạch. Các bộ phận sản phẩm được thiết kế để phụ trách riêng cho từng nhóm hàng, đảm bảo tính nhất quán trong quản lý và dễ dàng theo dõi. Tính phân loại một-một giữa bộ phận và nhóm sản phẩm góp phần tạo nên một cơ cấu hàng hóa đơn giản và tối ưu trong vận hành thực tế.

4.2.2 Trực quan hóa

df_plot2 <- as.data.frame(tab2)
names(df_plot2) <- c("ProductDepartment", "ProductFamily", "Freq")
ggplot(df_plot2, aes(x = ProductDepartment, y = Freq, fill = ProductFamily)) +
  geom_bar(stat = "identity", position = "fill") +
  labs(title = "Tỷ lệ nhóm sản phẩm theo bộ phận sản phẩm",
       x = "Product Department", y = "Tỷ lệ", fill = "Product Family") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

4.2.3 Nhận xét Mô tả

Biểu đồ cột chồng theo tỷ lệ phần trăm minh họa rõ nét mối quan hệ giữa các bộ phận sản phẩm (ProductDepartment) và nhóm sản phẩm (ProductFamily). Mỗi cột đại diện cho một bộ phận sản phẩm, với các phần màu thể hiện tỷ lệ sản phẩm thuộc ba nhóm: Drink (đỏ), Food (xanh lá), và Non-Consumable (xanh dương).

Quan sát biểu đồ cho thấy rằng gần như toàn bộ các bộ phận sản phẩm chỉ liên kết với một nhóm sản phẩm duy nhất. Các cột có màu gần như thuần nhất, ví dụ: Snack Foods, Produce, Meat, Frozen Foods, và nhiều bộ phận khác chỉ chứa màu xanh lá cây, phản ánh rằng chúng 100% thuộc về nhóm Food. Tương tự, các bộ phận như Household, Health and Hygiene, Checkout và Carousel được tô hoàn toàn bằng màu xanh dương, nghĩa là toàn bộ sản phẩm thuộc nhóm Non-Consumable. Hai bộ phận Alcoholic Beverages và Beverages cũng hoàn toàn thuộc nhóm Drink, được biểu diễn bằng màu đỏ thuần.

Một điểm ngoại lệ duy nhất là bộ phận Dairy, trong đó biểu đồ cho thấy sự pha trộn giữa màu đỏ và xanh lá cây, tương ứng với tỷ lệ khoảng 24% Drink và 76% Food. Đây là bộ phận duy nhất thể hiện sự chồng lấn giữa hai nhóm sản phẩm, cho thấy nó phục vụ nhiều loại sản phẩm hơn so với các bộ phận còn lại.

Từ biểu đồ, có thể nhận xét rằng tồn tại mối quan hệ rất chặt chẽ và phân tách rõ ràng giữa bộ phận sản phẩm và nhóm sản phẩm. Điều này phản ánh tính nhất quán trong cách tổ chức hàng hóa tại siêu thị, nơi mỗi bộ phận được thiết kế để phục vụ cho một nhóm hàng cụ thể, hạn chế tối đa sự chồng lấn và nhầm lẫn trong phân loại.

4.2.4 Kiểm định Thống kê (Kiểm định Chi-bình phương)

Để đánh giá xem hai biến định tính ProductDepartment (bộ phận sản phẩm) và ProductFamily (nhóm sản phẩm) có mối liên hệ thống kê với nhau hay không, ta thực hiện kiểm định Chi-bình phương độc lập. Mục tiêu của kiểm định là xác định xem việc một sản phẩm thuộc nhóm nào có liên quan đến bộ phận phân phối của nó trong siêu thị hay không.

  • Giả thuyết kiểm định:

-H₀ (Giả thuyết không): Hai biến độc lập nhau, tức là ProductDepartment và ProductFamily không có mối liên hệ.

-H₁ (Giả thuyết đối): Hai biến có liên quan, tức là nhóm sản phẩm phân phối phụ thuộc vào bộ phận sản phẩm.

chisq.test(tab2)
## 
##  Pearson's Chi-squared test
## 
## data:  tab2
## X-squared = 26055, df = 42, p-value < 2.2e-16
  • Kết quả kiểm định:

  • Giá trị thống kê Chi-bình phương (X²) = 26,055

  • Bậc tự do (df) = 42

  • Giá trị p (p-value) = < 2.2 × 10⁻¹⁶

Với p-value rất nhỏ, gần bằng 0, nhỏ hơn rất nhiều so với mức ý nghĩa α = 0.05, ta bác bỏ giả thuyết H₀. Điều này có nghĩa là có mối quan hệ có ý nghĩa thống kê mạnh mẽ giữa bộ phận sản phẩm và nhóm sản phẩm.

Kết quả kiểm định này hoàn toàn phù hợp với những gì đã quan sát được từ bảng tần suất chéo và biểu đồ trực quan. Như đã thấy, gần như tất cả các bộ phận sản phẩm chỉ phân phối một loại nhóm hàng duy nhất, và duy nhất bộ phận Dairy là có sự phân tách nhẹ giữa hai nhóm. Điều này cho thấy sự phụ thuộc chặt chẽ giữa hai biến, phản ánh mô hình tổ chức sản phẩm rõ ràng trong hệ thống siêu thị – nơi mỗi bộ phận có chức năng chuyên biệt, gắn liền với một nhóm sản phẩm cụ thể.

4.3 Cặp biến StateorProvince và ProductFamily

4.3.1 Tạo bảng tần suất chéo và tính tỷ lệ

tab3 <- table(l$StateorProvince, l$ProductFamily)
tab3
##            
##             Drink Food Non-Consumable
##   BC           69  580            160
##   CA          258 1974            501
##   DF           65  598            152
##   Guerrero     41  272             70
##   Jalisco       5   57             13
##   OR          199 1629            434
##   Veracruz     44  322             98
##   WA          399 3287            881
##   Yucatan      48  494            112
##   Zacatecas   122  940            235

Bảng tần suất chéo giữa hai biến StateorProvince (bang/tỉnh) và ProductFamily (nhóm sản phẩm) phản ánh số lượng giao dịch thuộc từng nhóm sản phẩm (Food, Drink, Non-Consumable) được thực hiện tại mỗi khu vực địa lý cụ thể. Nhìn chung, Food là nhóm sản phẩm chiếm ưu thế rõ rệt ở tất cả các bang, với số lượng giao dịch vượt trội so với hai nhóm còn lại.

Cụ thể, tại bang Washington (WA) có tổng cộng 3.287 giao dịch liên quan đến Food, gần gấp đôi nhóm tiếp theo là Non-Consumable (881) và cao hơn rất nhiều so với Drink (399). Tương tự, ở bang California (CA), số lượng giao dịch sản phẩm Food là 1.974 – vượt xa so với Drink (258) và Non-Consumable (501). Ở hầu hết các bang như British Columbia (BC), Distrito Federal (DF), Oregon (OR), Yucatan, và Zacatecas, Food đều duy trì vị thế là nhóm sản phẩm chủ đạo.

Tuy nhiên, một số bang như Jalisco hoặc Guerrero có số lượng giao dịch tổng thể thấp hơn đáng kể so với các bang lớn như WA hoặc CA, cho thấy quy mô hoạt động và nhu cầu tiêu dùng tại các địa phương này thấp hơn, hoặc đơn giản là ít được ghi nhận hơn trong tập dữ liệu hiện tại.

Nhóm sản phẩm Non-Consumable nhìn chung đứng thứ hai ở nhiều bang, đặc biệt tại Washington, Oregon và California, nơi có số lượng giao dịch vượt 400. Trong khi đó, nhóm Drink luôn là nhóm ít phổ biến nhất, trừ một vài ngoại lệ nhỏ như tại bang Zacatecas, nơi số giao dịch liên quan đến Drink (122) cao hơn đáng kể so với các bang khác.

Từ bảng này có thể thấy có sự khác biệt đáng kể trong hành vi tiêu dùng theo vùng miền, và việc phân bố các loại sản phẩm không đồng đều giữa các bang gợi ý rằng địa lý có thể là một yếu tố ảnh hưởng đến danh mục hàng hóa tiêu dùng của khách hàng.

prop3 <- prop.table(tab3, margin = 1) * 100
round(prop3, 2)
##            
##             Drink  Food Non-Consumable
##   BC         8.53 71.69          19.78
##   CA         9.44 72.23          18.33
##   DF         7.98 73.37          18.65
##   Guerrero  10.70 71.02          18.28
##   Jalisco    6.67 76.00          17.33
##   OR         8.80 72.02          19.19
##   Veracruz   9.48 69.40          21.12
##   WA         8.74 71.97          19.29
##   Yucatan    7.34 75.54          17.13
##   Zacatecas  9.41 72.47          18.12

Bảng tỷ lệ phần trăm giúp làm rõ hơn xu hướng tiêu dùng theo nhóm sản phẩm tại từng bang hoặc tỉnh (StateorProvince). Nhìn tổng thể, nhóm sản phẩm Food luôn chiếm tỷ trọng cao nhất ở tất cả các khu vực, dao động trong khoảng 69% đến 76%. Điều này khẳng định rằng thực phẩm là mặt hàng chủ đạo, có nhu cầu cao và phân bố ổn định trên toàn bộ các khu vực địa lý.

Các bang như Jalisco (76.00%), Yucatan (75.54%) và Distrito Federal (73.37%) có tỷ lệ sản phẩm Food cao hơn mức trung bình. Đây có thể là những khu vực có cơ cấu dân cư tập trung vào nhu cầu thiết yếu hoặc có ít giao dịch liên quan đến nhóm hàng không tiêu dùng. Trong khi đó, các bang như Veracruz (69.40%) có tỷ lệ Food thấp hơn một chút, nhưng vẫn duy trì là nhóm chiếm ưu thế.

Nhóm Non-Consumable dao động chủ yếu từ 17% đến 21%, cao nhất tại Veracruz (21.12%), cho thấy khu vực này có xu hướng tiêu dùng hàng hóa không thiết yếu cao hơn so với các khu vực khác. Tuy vậy, sự biến động giữa các bang là không quá lớn, chứng tỏ mức tiêu thụ sản phẩm không tiêu dùng tương đối ổn định giữa các vùng.

Cuối cùng, nhóm Drink là nhóm có tỷ lệ thấp nhất, thường chiếm khoảng 7–10% ở hầu hết các khu vực. Bang Guerrero (10.70%) có tỷ lệ đồ uống cao nhất trong danh sách, trong khi Jalisco (6.67%) có mức thấp nhất. Dù vậy, sự khác biệt này không đủ lớn để cho thấy xu hướng rõ ràng, nhưng cũng gợi ý rằng nhu cầu về đồ uống có thể mang tính địa phương hóa nhẹ.

Tổng thể, bảng tỷ lệ phần trăm cho thấy có sự đồng nhất tương đối cao giữa các bang, trong đó nhóm Food luôn giữ vai trò chi phối. Tuy nhiên, các sai lệch nhỏ về tỷ trọng Drink và Non-Consumable giữa các vùng có thể là dấu hiệu cho thấy hành vi tiêu dùng phần nào bị ảnh hưởng bởi đặc điểm địa lý hoặc kinh tế - xã hội từng khu vực.

4.3.2 Trực quan hóa

df_plot3 <- as.data.frame(tab3)
names(df_plot3) <- c("StateorProvince", "ProductFamily", "Freq")

ggplot(df_plot3, aes(x = StateorProvince, y = Freq, fill = ProductFamily)) +
  geom_bar(stat = "identity", position = "fill") +
  labs(title = "Tỷ lệ nhóm sản phẩm theo bang/tỉnh",
       x = "Bang/Tỉnh", y = "Tỷ lệ", fill = "Product Family") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

4.3.3 Nhận xét Mô tả

Biểu đồ cột chồng thể hiện tỷ lệ nhóm sản phẩm tiêu dùng theo từng bang/tỉnh cho thấy một cấu trúc phân bố tương đối nhất quán giữa các khu vực. Mỗi cột đại diện cho một bang/tỉnh, và được chia theo ba màu: màu xanh lá biểu thị nhóm sản phẩm Food, màu xanh dương cho Non-Consumable, và màu đỏ cho Drink.

Quan sát tổng thể biểu đồ, có thể thấy rằng nhóm sản phẩm Food luôn chiếm tỷ lệ lớn nhất ở tất cả các bang, với phần màu xanh lá chiếm hơn 2/3 chiều cao mỗi cột. Điều này phản ánh một cách rõ ràng rằng thực phẩm là nhóm hàng chủ lực và phổ biến nhất trên toàn bộ hệ thống siêu thị, bất kể vị trí địa lý.

Bên cạnh đó, phần màu xanh dương (Non-Consumable) xuất hiện với tỷ lệ tương đối đồng đều giữa các bang, chiếm khoảng 17–21% tùy khu vực. Tại một số bang như Veracruz hay DF, phần này có phần nhỉnh hơn, cho thấy nhu cầu về sản phẩm không tiêu dùng tại đây có thể cao hơn một chút so với mặt bằng chung.

Phần màu đỏ (Drink) luôn là thành phần nhỏ nhất trong tất cả các cột, dao động quanh mức 7–10%. Một số bang như Guerrero hay Zacatecas có phần Drink cao hơn một chút so với các khu vực khác, nhưng chênh lệch này không lớn.

Tổng thể, biểu đồ cho thấy có sự nhất quán tương đối cao giữa các bang, tuy nhiên vẫn tồn tại những khác biệt nhỏ về tỷ trọng giữa các nhóm sản phẩm. Sự hiện diện của các biến động nhẹ giữa các khu vực gợi ý rằng yếu tố địa lý có thể ảnh hưởng đến hành vi tiêu dùng, dù không quá mạnh. Do đó, đây là một nền tảng hợp lý để tiếp tục đánh giá bằng kiểm định thống kê nhằm xác định xem mối quan hệ này có ý nghĩa thống kê hay không.

4.3.4 Kiểm định Thống kê (Kiểm định Chi-bình phương)

Để xác định xem có mối liên hệ thống kê giữa vị trí địa lý (StateorProvince) và nhóm sản phẩm được tiêu dùng (ProductFamily) hay không, ta tiến hành kiểm định Chi-bình phương độc lập. Mục tiêu là đánh giá xem danh mục sản phẩm khách hàng mua có phụ thuộc vào bang/tỉnh nơi giao dịch được thực hiện hay không.

  • Giả thuyết kiểm định:

  • H₀ (Giả thuyết không): Hai biến độc lập nhau – tức là bang/tỉnh không ảnh hưởng đến việc lựa chọn nhóm sản phẩm.

  • H₁ (Giả thuyết đối): Hai biến có liên quan – nhóm sản phẩm có sự khác biệt theo từng bang/tỉnh.

chisq.test(tab3)
## 
##  Pearson's Chi-squared test
## 
## data:  tab3
## X-squared = 12.3, df = 18, p-value = 0.8314
  • Kết quả kiểm định Chi-bình phương:

  • Giá trị thống kê Chi-squared (X²): 12.3

  • Bậc tự do (df): 18

  • Giá trị p-value: 0.8314

Với p-value = 0.8314, lớn hơn rất nhiều so với mức ý nghĩa α = 0.05, ta không bác bỏ giả thuyết H₀. Điều này có nghĩa là không có bằng chứng thống kê cho thấy mối liên hệ giữa bang/tỉnh và nhóm sản phẩm tiêu dùng trong dữ liệu khảo sát. Nói cách khác, việc khách hàng mua sản phẩm thuộc nhóm Food, Drink hay Non-Consumable là tương đối giống nhau ở các bang, không bị ảnh hưởng rõ ràng bởi yếu tố địa lý.

Kết quả kiểm định hoàn toàn phù hợp với những gì được quan sát từ biểu đồ và bảng tỷ lệ phần trăm: tuy có sự dao động nhẹ giữa các bang, nhưng sự phân bố giữa các nhóm sản phẩm vẫn tương đối nhất quán và ổn định. Vì vậy, ta có thể kết luận rằng trong tập dữ liệu này, địa phương không phải là yếu tố quyết định hành vi tiêu dùng theo nhóm sản phẩm.

Phần 5:Tổng kết và Thảo luận

5.1 Tóm tắt những phát hiện chính

Quá trình phân tích các biến định tính trong bộ dữ liệu giao dịch siêu thị đã đem lại một số phát hiện đáng chú ý về đặc điểm khách hàng và hành vi tiêu dùng. Trước hết, phân bố giới tính cho thấy tỷ lệ khách hàng nam thấp hơn 50% và sự chênh lệch này có ý nghĩa thống kê. Đối với tình trạng hôn nhân, tỷ lệ khách hàng đã kết hôn cũng thấp hơn 50%, chứng tỏ nhóm khách hàng độc thân chiếm ưu thế nhẹ trong mẫu dữ liệu, và sự khác biệt này cũng được xác nhận bằng kiểm định. Về mặt hành vi mua hàng, tỷ lệ sản phẩm thuộc nhóm “Non-Consumable” thấp hơn đáng kể so với mức giả định 20%, phản ánh rằng đây không phải là nhóm sản phẩm chủ lực trong hệ thống siêu thị.

Ngoài ra, phân tích mối quan hệ giữa các biến định tính cho thấy một số kết luận quan trọng. Không có mối liên hệ có ý nghĩa thống kê giữa giới tính và tình trạng sở hữu nhà, nghĩa là việc khách hàng là nam hay nữ không ảnh hưởng đáng kể đến khả năng sở hữu nhà. Ngược lại, giữa ProductDepartment và ProductFamily tồn tại mối liên hệ rất mạnh – mỗi bộ phận sản phẩm gần như chỉ phân phối một nhóm sản phẩm duy nhất. Đây là dấu hiệu cho thấy hệ thống phân loại sản phẩm trong siêu thị được tổ chức rất rõ ràng và hợp lý. Cuối cùng, dù có một số khác biệt nhỏ giữa các tỉnh bang trong tỷ lệ nhóm sản phẩm, kiểm định thống kê đã xác nhận rằng sự khác biệt này không có ý nghĩa – hành vi tiêu dùng theo nhóm sản phẩm giữa các khu vực là khá đồng đều.

5.2 Hạn chế của phân tích

Phân tích hiện tại còn một số hạn chế nhất định. Trước tiên, nghiên cứu mới chỉ tập trung vào các biến định tính, chưa khai thác các biến định lượng quan trọng như doanh thu (Revenue), số lượng sản phẩm bán ra (UnitsSold), hay thời gian mua hàng (PurchaseDate). Điều này phần nào làm giảm chiều sâu phân tích hành vi thực tế. Bên cạnh đó, một số biến như ProductDepartment có số lượng mức phân loại quá lớn, gây khó khăn trong việc trực quan hóa và làm giảm hiệu quả khi so sánh giữa các nhóm. Ngoài ra, dữ liệu không bao gồm các thông tin quan trọng về khách hàng như độ tuổi, thu nhập, hoặc thói quen tiêu dùng cá nhân, khiến việc phân tích hành vi theo chiều sâu chưa thể thực hiện. Cuối cùng, một vài hạng mục nhỏ có kích thước mẫu quá thấp (ví dụ: tỉnh Jalisco hoặc nhóm Periodicals) có thể làm giảm độ tin cậy khi đưa vào các kiểm định thống kê tổng thể.

5.3 Đề xuất

Dựa trên những phát hiện vừa nêu, có thể đưa ra một số đề xuất thực tiễn cho doanh nghiệp. Trước hết, vì khách hàng độc thân và nhóm sản phẩm “Food” chiếm tỷ trọng lớn, doanh nghiệp có thể tập trung xây dựng các chương trình khuyến mãi, định vị sản phẩm và thông điệp marketing xoay quanh nhu cầu tiêu dùng cá nhân, nhanh gọn và thiết yếu. Thứ hai, do cấu trúc phân loại sản phẩm theo bộ phận đang hoạt động hiệu quả và rõ ràng, hệ thống này nên được duy trì để tiếp tục tối ưu hóa quản lý hàng hóa và trải nghiệm mua sắm. Cuối cùng, mặc dù nhóm sản phẩm “Non-Consumable” không phổ biến, nhưng lại có sự hiện diện ổn định trong nhiều khu vực – doanh nghiệp có thể giữ lại nhóm hàng này như một danh mục phụ, phục vụ cho các nhu cầu ngách ít biến động hơn.

5.4 Câu hỏi mở/Hướng nghiên cứu tiếp theo

Phân tích hiện tại đặt nền móng cho một số hướng nghiên cứu sâu hơn nếu có dữ liệu bổ sung. Một số câu hỏi đáng quan tâm bao gồm: Liệu thu nhập hoặc độ tuổi khách hàng có ảnh hưởng đến sự lựa chọn sản phẩm không? Nhóm khách hàng sở hữu nhà có xu hướng mua nhiều hơn hay ít hơn so với nhóm không có nhà? Hành vi tiêu dùng sản phẩm Non-Consumable có thay đổi theo mùa hay không? Ngoài ra, nếu có dữ liệu về tổng giá trị giao dịch theo từng khách hàng, doanh nghiệp hoàn toàn có thể phân tích theo hướng phân khúc khách hàng dựa trên giá trị trọn đời (CLV), tần suất mua hàng hoặc xu hướng lặp lại, từ đó phát triển các mô hình dự báo và chiến lược tiếp thị cá nhân hóa hiệu quả hơn.

Relative risk và odd ratio

Relative Risk (RR) là một chỉ số thống kê dùng để đo lường mức độ chênh lệch nguy cơ xảy ra một kết quả giữa nhóm phơi nhiễm và nhóm không phơi nhiễm. Nó cho biết một nhóm có khả năng xảy ra một kết quả cao hơn hay thấp hơn bao nhiêu lần so với nhóm còn lại.

Về mặt công thức, RR được tính như sau:

\[ RR = \frac{a / (a + b)}{c / (c + d)} \] Trong đó:

a: số cá thể phơi nhiễm và có kết quả

b: số cá thể phơi nhiễm nhưng không có kết quả

c: số cá thể không phơi nhiễm nhưng có kết quả

d: số cá thể không phơi nhiễm và không có kết quả

Odds Ratio (OR) là chỉ số so sánh tỷ lệ odds (xác suất xảy ra / không xảy ra) của một kết quả giữa hai nhóm. Khác với RR, OR dùng phổ biến hơn trong nghiên cứu hồi cứu hoặc khi không thể ước lượng xác suất trực tiếp.

Công thức tính OR:

\[ OR = \frac{a/b}{c/d} = \frac{a \cdot d}{b \cdot c} \]

Khi nào dùng RR và khi nào dùng OR?

RR thường dùng khi bạn có thể tính xác suất trực tiếp từ dữ liệu (ví dụ: khảo sát, nghiên cứu đoàn hệ).

OR thường dùng khi làm việc với dữ liệu không đầy đủ (như nghiên cứu bệnh – chứng) hoặc khi biến kết quả hiếm gặp.

Trong nhiều tình huống (nhất là khi kết quả hiếm), RR và OR sẽ gần giống nhau.

Gender và Homeowner

# Tạo bảng 2x2
tab_rr <- table(l$Gender, l$Homeowner)

# Chuyển sang ma trận 2x2 theo đúng chiều: [phơi nhiễm / không phơi nhiễm, có kết quả / không có kết quả]
# Ví dụ: [M, Y] / [F, Y]
# RR = (Nam có nhà / tổng nam) / (Nữ có nhà / tổng nữ)

# Tính tỷ lệ sở hữu nhà
rr_m <- tab_rr["M", "Y"] / sum(tab_rr["M", ])
rr_f <- tab_rr["F", "Y"] / sum(tab_rr["F", ])

# Tính RR
rr <- rr_m / rr_f
rr
## [1] 0.9823291

Giá trị RR = 0.9823 cho biết rằng nam giới có khả năng sở hữu nhà thấp hơn khoảng 1.77% so với nữ giới trong tập dữ liệu này.

# Tạo bảng 2x2
tab_gender_home <- table(l$Gender, l$Homeowner)

# Tính Odds Ratio: (Nam có/Nam không) / (Nữ có/Nữ không)
or_gender_home <- (tab_gender_home["M", "Y"] / tab_gender_home["M", "N"]) /
                  (tab_gender_home["F", "Y"] / tab_gender_home["F", "N"])
or_gender_home
## [1] 0.9563518

Odds Ratio = 0.9644 nghĩa là nam giới có khả năng sở hữu nhà thấp hơn khoảng 3.56% so với nữ giới, xét theo tỉ lệ odds (xác suất có nhà / không có nhà).

→ Vì OR < 1, nữ giới có lợi thế nhẹ hơn trong việc sở hữu nhà, nhưng mức chênh lệch nhỏ nên không đủ để khẳng định xu hướng rõ rệt, nhất là khi kết hợp với kết quả kiểm định độc lập trước đó (p > 0.05).

MaritalStatus và Homeowner

# Tạo bảng 2x2
tab_marital_home <- table(l$MaritalStatus, l$Homeowner)

# Tính tỷ lệ sở hữu nhà của người đã kết hôn và độc thân
rr_m <- tab_marital_home["M", "Y"] / sum(tab_marital_home["M", ])
rr_s <- tab_marital_home["S", "Y"] / sum(tab_marital_home["S", ])

# Tính RR (Married vs Single)
rr_marital_home <- rr_m / rr_s
rr_marital_home
## [1] 1.635466

Kết quả tính toán Relative Risk (nguy cơ tương đối) giữa tình trạng hôn nhân và việc sở hữu nhà cho thấy rằng người đã kết hôn có khả năng sở hữu nhà cao hơn 1.64 lần so với người độc thân trong tập dữ liệu này. Cụ thể, tỷ lệ sở hữu nhà trong nhóm đã kết hôn cao hơn đáng kể so với nhóm độc thân, với RR = 1.635. Điều này cho thấy tình trạng hôn nhân có thể là một yếu tố liên quan đến khả năng tích lũy tài sản hoặc ổn định chỗ ở.

# Tạo bảng 2x2
tab_marital_home <- table(l$MaritalStatus, l$Homeowner)

# Tính Odds Ratio: (Married có / Married không) / (Single có / Single không)
or_marital_home <- (tab_marital_home["M", "Y"] / tab_marital_home["M", "N"]) /
                   (tab_marital_home["S", "Y"] / tab_marital_home["S", "N"])
or_marital_home
## [1] 3.538167

Odds Ratio = 1.052 nghĩa là người đã kết hôn có khả năng sở hữu nhà cao hơn khoảng 5.2% so với người độc thân, theo tỉ lệ odds.

→ Vì OR > 1, có xu hướng tích cực nhẹ ở nhóm đã kết hôn, nhưng nếu kiểm định Chi² cho kết quả không có ý nghĩa thống kê thì chưa thể kết luận có sự khác biệt rõ ràng.