library(ggplot2)
library(dplyr)

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

1.1. Đọc file dữ liệu và hiển thị cấu trúc của dữ liệu

# Đọc file csv vào R
d <- read.csv("D:/AnhThu/PTDL ĐỊNH TÍNH/DATA/Supermarket Transactions.csv", header = T)
d
# Xem cấu trúc của bộ dữ liệu 
str(d)
## 'data.frame':    14059 obs. of  16 variables:
##  $ X                : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ PurchaseDate     : chr  "12/18/2007" "12/20/2007" "12/21/2007" "12/21/2007" ...
##  $ 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 là data frame, bao gồm 14059 quan sát và 16 biến. Các biến định lượng là các biến: Children, UnitsSold và Revenue. Các biến định tính là các biến: Gender, MaritalStatus, Homeowner, AnnualIncome, City, StateoProvince, Country, ProductFamily, ProductDepartment, ProductCategory. Cụ thể:

  • Gender: Giới tính của khách hàng: F = Female (Phụ nữ), M = Male (Đàn ông).

  • MaritalStatus: Tình trạng hôn nhân: S = Single (độc thân), M = Married (đã kết hôn).

  • Homeowner: Khách hàng có sở hữu nhà không: Y = Yes, N = No.

  • Children: Số con của khách hàng.

  • AnnualIncome: Thu nhập hàng năm của khách hàng (được biểu thị dưới dạng các khoảng).

  • City: Thành phố nơi khách hàng sinh sống.

  • StateorProvince: Bang hoặc tỉnh tương ứng với thành phố.

  • Country: Quốc gia.

  • ProductFamily: Nhóm sản phẩm chính.

  • ProductDepartment: Bộ phận các sản phẩm chi tiết hơn trong từng nhóm.

  • ProductCategory: Danh mục cụ thể của sản phẩm.

  • UnitsSold: Số lượng đơn vị sản phẩm được bán trong một giao dịch với mỗi khách hàng.

  • Revenue: Tổng doanh thu (USD) từ giao dịch với khách hàng.

Ngoài ra các biến X là số thứ tự, PurchaseDate là ngày giao dịch mua hàng tại siêu thị và CustomerID là mã khách hàng.

1.2. Hiển thị một vài dòng đầu và dòng cuối của dữ liệu a

# Hiển thị 6 dòng đầu tiên của dữ liệu
head(d,6)
# Hiển thị 6 dòng cuối của dữ liệu
tail(d,6)

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

Ở bài này, các biến định tính được lựa chọn để phân tích, gồm 10 biến định tính:

  • Gender: Giới tính của khách hàng: F = Female (Phụ nữ), M = Male (Đàn ông).

  • MaritalStatus: Tình trạng hôn nhân: S = Single (độc thân), M = Married (đã kết hôn).

  • Homeowner: Khách hàng có sở hữu nhà không: Y = Yes, N = No.

  • AnnualIncome: Thu nhập hàng năm của khách hàng (được biểu thị dưới dạng các khoảng).

  • City, StateorProvince, Country: Thông tin vị trí địa lý của khách hàng.

  • ProductFamily, ProductDepartment, ProductCategory: Phân loại các sản phẩm được mua.

# Rút trích các dữ liệu định tính
a <- select(d,-c(1,2,3,7,15,16)) # tạo dữ liệu a chứa các biến định tính

# Kiểm tra số lượng giá trị NA trong từng cột của a
sapply(a, function(x) sum(is.na(x))) 
##            Gender     MaritalStatus         Homeowner      AnnualIncome 
##                 0                 0                 0                 0 
##              City   StateorProvince           Country     ProductFamily 
##                 0                 0                 0                 0 
## ProductDepartment   ProductCategory 
##                 0                 0
  ## sapply(): áp dụng một hàm lên từng cột của a
  ## function(x): hàm ẩn danh xử lý từng cột của a
  ## is.na(x): trả về kết quả TRUE/ FALSE cho biết phần tử nào có NA (với TRUE là có xuất hiện NA)
  ## sum(is,na()): Tính tổng số lần TRUE xuất hiện, tức là tính tổng các phần tử bị thiếu NA

Kết quả cho thấy tổng số lượng các giá trị bị thiếu bằng 0, nghĩa là không có giá trị thiếu trong các cột định tính.

Phần 2: Phân tích mô tả một biến định tính

2.1. Biến Gender

2.1.1. Tần số và trực quan hóa

  • Bảng thống kê tần số cho biến Gender thể hiện giới tính của khách hàng như sau:
table(a$Gender)
## 
##    F    M 
## 7170 6889
  • Câu lệnh table() tạo ra bảng tần số, đếm số lần xuất hiện của từng phần tử trong biến của dữ liệu cần phân tích.

  • Nhận xét: Dựa trên bảng kết quả, trong số 14059 quan sát, tương ứng với 14059 khách hàng, có 7170 khách hàng là nữ và 6889 khách hàng còn lại thuộc giới tính nam. Ngoài ra, số lượng khách hàng phân loại theo giới tính còn được thể hiện thông qua biểu đồ tần số:

# Biểu đồ cột thể hiện tần số giới tính 
a %>% group_by(Gender) %>% summarise(n = n()) %>%
  ggplot(aes(x = Gender, y = n))+
  geom_col(fill='pink')+
  geom_text(aes(label = n), vjust = 2) +
  labs(x = "Giới tính", y="Số lượng khách hàng", title = "Biểu đồ thể hiện tần số giới tính")

  • Giải thích câu lệnh:

    • a: lấy dữ liệu từ bộ dữ liệu a,

    • %>%: toán tử pipe để truyền kết quả từ trái sang phải,

    • group_by(Gender): nhóm dữ liệu theo biến Gender (giới tính),

    • summarise(n = n()): đếm số khách hàng theo giới tính và gán số lượng khách hàng vào n,

    • ggplot(aes(x = Gender, y = n)): tạo biểu đồ với trục x là Gender và trục y là n,

    • geom_col(fill = 'pink'): vẽ biểu đồ cột geom_col và tô màu hồng cho cột (`fill = ‘pink’),

    • geom_text(aes(label = n), vjust = 2): thêm văn bảng vào biểu đồ geom_text với nhãn là số lượng khách theo giới tính aes(label = n) và điều chỉnh vị trí dọc của văn bản với vjust > 0 là ở trên cột.

    • labs(): thêm tên cho trục X, trục Y và tên của biểu đồ.

2.1.2. Tần suất và trực quan hóa

  • Tỷ lệ phần trăm giữa khách hàng nam và khách hàng nữ
# Bảng tần suất giới tính
table(a$Gender)/sum(nrow(a))
## 
##         F         M 
## 0.5099936 0.4900064
# Biểu đồ thể hiện tần suất giới tính
a %>% group_by(Gender) %>% summarise(n = n()) %>% 
  mutate(pc = paste0(round(n/sum(n)*100),"%")) %>% 
  ggplot(aes(x = "", y = n, fill = Gender)) +
  geom_col(width = 1) +
  coord_polar(theta = "y") +
  geom_text(aes(label = pc), position = position_stack(vjust = 0.5)) +
  labs(title = "Biểu đồ tròn thể hiện tần suất giới tính") +
  theme_void()

  • Giải thích câu lệnh: tương tự như các câu lệnh trên, ở biểu đồ này xuất hiện một số câu lệnh mới như sau:

    • mutate(): tạo biến mới có tên là pc, với pc là tính tỷ lệ % của từng giới tính round(n/sum(n)*100) và tỷ lệ được hiển thị theo % paste0(..., "%"),

    • x = "": tạo cột duy nhất không cần trục x,

    • fill = Gender: tô màu cho từng giới tính,

    • width = 1: độ rộng của cột bằng 1,

    • coord_polar(): chuyển sang biểu đồ tròn,

    • theta = "y": xoay theo chiều trục y để tạo ra hình tròn,

    • position = position_stack(vjust = 0.5): vị trí của nhãn được đặt ở giữa của biểu đồ,

    • theme_void(): xóa bỏ các trục, đường kẻ,…

  • Nhận xét: Biểu đồ tròn thể hiện tần suất phân bổ khách hàng theo giới tính. Biểu đồ hình tròn với màu cam thể hiện tỷ lệ giới tính nữ và màu xanh thể hiện tỷ lệ giới tính nam. Có thể thấy, số lượng phân bổ khá đồng đều. Vậy trong bộ dữ liệu này có 50.9993598 % là khách hàng nữ và 49.0006402 % là khách hàng nam.

2.2. Biến MaritalStatus

2.2.1. Tần số và trực quan hóa

Bảng tần số thể hiện tình trạng hôn nhân MaritalStatus của khách hàng được thể hiện như sau:

# Bảng tần số 
table(a$MaritalStatus)
## 
##    M    S 
## 6866 7193

Từ bảng tần số, khách hàng có gia đình có số lượng ít hơn so với khách hàng còn độc thân, cụ thể: có 6866 khách hàng đã kết hôn (ký hiệu Marriage) và 7193 khách hàng còn độc thân (ký hiệu S - Single).

# Biều đồ thể hiện tần số của biến MaritalStatus
a %>% group_by(MaritalStatus) %>% summarise(n = n()) %>% 
  ggplot(aes(x = MaritalStatus, y = n)) +
  geom_col(fill = 'lightblue') +
  geom_text(aes(label = n), vjust = 2) +
  labs(x = "Tình trạng hôn nhân", y="Số lượng khách hàng", title = "Biểu đồ thể hiện tần số tình trạng hôn nhân")

  • Nhận xét: Biểu đồ cho thấy số lượng khách hàng chưa kết hôn (7193 người) cao hơn số lượng khách hàng đã kết hôn (6866 người), với chênh lệch không quá lớn (327 người). Điều này cho thấy tỷ lệ khách hàng độc thân chiếm ưu thế nhẹ so với khách hàng đã lập gia đình. Nhìn chung, siêu thị khai thác được cả 2 nhóm khách hàng nhờ vào sự phân bố tình trạng hôn nhân khá đồng đều.

2.2.2. Tần suất

Bảng tần suất thể hiện tỷ lệ tình trạng hôn nhân MaritalStatus của khách hàng được thể hiện như sau:

table(a$MaritalStatus)/sum(nrow(a))
## 
##         M         S 
## 0.4883704 0.5116296
  • Nhận xét: Trong bộ dữ liệu này, khách hàng có gia đình chiếm khoảng 48.8370439% và 51.1629561% là tỷ lệ khách hàng còn độc thân

2.3. Biến Homeowner

2.3.1. Tần số

Bảng tần số thể hiện tình trạng có nhà hay không của khách hàng, thông qua biến Homeowner như sau:

table(a$Homeowner)
## 
##    N    Y 
## 5615 8444

Dựa vào bảng tần số của Homeowner, cho biết khách hàng có sở hữu nhà hay không, với N là không có nhà và Y là có sở hữu nhà. Kết quả thống kê ta có 5615 khách hàng không có nhà và ngược lại 8444 khách có nhà ở.

2.3.2. Tần suất và trực quan hóa

# Bảng tần suất Homeowner
table(a$Homeowner)/sum(nrow(a))
## 
##         N         Y 
## 0.3993883 0.6006117
# Biểu đồ thể hiện tình trạng nhà ở Homeowner
a %>% group_by(Homeowner) %>% summarise(n = n()) %>% 
  mutate(pc = paste0(round(n/sum(n)*100),"%")) %>% 
  ggplot(aes(x = "", y = n, fill = Homeowner)) +
  geom_col(width = 1) +
  coord_polar(theta = "y") +
  geom_text(aes(label = pc), position = position_stack(vjust = 0.5)) +
  labs(title = "Biểu đồ tròn thể hiện tần suất tình trạng nhà ở") +
  theme_void()

  • Nhận xét: Biểu đồ tròn thể hiện tình trạng nhà ở của khách hàng cho thấy 60% khách hàng sở hữu nhà (Y) và 40% không sở hữu nhà (N). Tỷ lệ này phản ánh phần lớn khách hàng là chủ sở hữu nhà ở, trong khi vẫn có một bộ phận khách hàng chưa có nhà riêng.

2.4. Biến AnnualIncome

2.4.1. Tần số và trực quan hóa

# Bảng tần suất thu nhập hàng năm của khách hàng
table(a$AnnualIncome)
## 
##   $10K - $30K $110K - $130K $130K - $150K       $150K +   $30K - $50K 
##          3090           643           760           273          4601 
##   $50K - $70K   $70K - $90K  $90K - $110K 
##          2370          1709           613
# Biểu đồ thể hiện thu nhập của khách hàng 
a %>% group_by(AnnualIncome) %>% summarise(n = n()) %>%
  ggplot(aes(x = AnnualIncome, y = n))+
  geom_col(fill='brown')+
  geom_text(aes(label = n), vjust = -0.5) +
  labs(x = "Giới tính", y="Số lượng khách hàng", title = "Biểu đồ thể hiện thu nhập hàng năm")

  • Nhận xét: Biểu đồ cột thể hiện thu nhập hằng năm của khách hàng bao gồm các nhóm:

    • Nhóm thu nhập từ $10K - $30K gồm 3090 khách hàng,

    • Nhóm thu nhập từ $30K - $50K gồm 4610 khách hàng,

    • Nhóm thu nhâp từ $50K - $70K gồm 2370 khách hàng,

    • Nhóm thu nhập từ $70K - $90K gồm 1709 khách hàng,

    • Nhóm thu nhập từ $90K - $110K gồm 613 khách hàng,

    • Nhóm thu nhập từ $110K - $130K gồm 643 khách hàng,

    • Nhóm thu nhập từ $130K - $150K gồm 760 khách hàng và

    • Có 273 khách hàng có thu nhập trên $150K.

Biểu đồ này phản ánh xu hướng phổ biến là phần lớn người lao động có mức thu nhập trung bình, trong khi mức thu nhập cao và thu nhập thấp có số người tương đối ít.

2.4.2. Tần suất

Bảng tần suất thể hiện tỷ lệ các khoảng thu nhập hằng năm của khách hàng như sau:

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

2.5. Biến City

2.5.1. Tần số và trực quan hóa

Kết quả thống kê biến City được thể hiện như sau:

# Bảng tần số thành phố, nơi khách hàng cư trú
table(a$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
# Biểu đồ thể hiện tần số của City

ggplot(d, aes(x = City)) +
    geom_bar(fill = 'orange') +
    labs(x = 'Thành phố', y = 'Số lượng khách hàng', title = "Biểu đồ thể hiện tần số của thành phố") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

_ Nhận xét: Biểu đồ cho thấy số lượng khách hàng phân bố không đồng đều giữa các thành phố. Thành phố Salem có số lượng khách hàng cao nhất, tiếp theo là Tacoma và Seattle. Trong khi đó, các thành phố như Guadalajara, San Francisco và Walla Walla có số lượng khách hàng thấp nhất. Điều này cho thấy mức độ thu hút khách hàng tại các thành phố là khác nhau, và các thành phố có lượng khách hàng cao có thể là đối tượng tiềm năng để mở rộng siêu thị tại các nơi này.

2.5.2. Tần suất

Bảng tần suất thể hiện tỷ lệ khách hàng từ các thành phố thông qua biến City như sau:

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

2.6. Biến StateorProvince

Bảng tần số thể hiện các bang hoặc tỉnh tương ứng với thành phố, nơi khách hàng sinh sống bao gồm 10 bang (hoặc tỉnh) thông qua biến StateorProvine:

2.6.1. Tần số và trực quan hóa

# Bảng tần số 
table(a$StateorProvince)
## 
##        BC        CA        DF  Guerrero   Jalisco        OR  Veracruz        WA 
##       809      2733       815       383        75      2262       464      4567 
##   Yucatan Zacatecas 
##       654      1297

Thông qua bảng tần số thể hiện các bang hoặc tỉnh tương ướng với thành phố, nơi khách hàng sinh sống. Số khách hàng đến từ các bang (hoặc tỉnh) được thể hiện như sau: có 809 khách hàng đến từ BC, 2733 khách hàng từ CA, 815 khách hàng từ DF, 383 khách hàng đến từ Guerrero, 75 khách hàng từ Jalisco, 2262 khách hàng từ OR, 464 khách hàng đến từ Veracruz, 4567 khách hàng từ WA, 654 khách hàng từ Yucatan và Zacatecas có 1297 khách hàng.

# Biểu đồ tần số các bang hoặc tỉnh
ggplot(d, aes(x = StateorProvince)) +
    geom_bar(fill = 'blue') +
    labs(x = 'Bang (tỉnh)', y = 'Số lượng khách hàng', title = "Biểu đồ thể hiện tần số của bang (hoặc tỉnh) ")

  • Nhận xét: Biểu đồ cho thấy số lượng khách hàng phân bố không đồng đều giữa các bang (hoặc tỉnh). Bang WA có số lượng khách hàng cao nhất, vượt trội so với các bang còn lại, tiếp theo là CA và OR. Ngược lại, Jalisco có số lượng khách hàng thấp nhất. Chứng tỏ mức độ tập trung khách hàng cao ở một số bang nhất định, trong khi nhiều bang khác có lượng khách hàng khá hạn chế.

2.6.2. Tần suất

Tỷ lệ bang hoặc tỉnh, nơi khách hàng sinh sống được thể hiện thông qua bảng tần suất như sau:

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

2.7. Biến Country

2.7.1. Tần số và trực quan hóa

# Bảng tần số các quốc gia
table(a$Country)
## 
## Canada Mexico    USA 
##    809   3688   9562

Biến Country thể hiện khách hàng đến từ 3 quốc gia khác nhau như 809 khách hàng từ Canada, 3688 khách hàng đến từ Mexico và 9562 khách hàng còn lại đến từ USA.

a %>% group_by(Country) %>% summarise(n = n()) %>%
  ggplot(aes(x = Country, y = n))+
  geom_col(fill='purple')+
  geom_text(aes(label = n), vjust = -0.5) +
  labs(x = "Quốc gia", y="Số lượng khách hàng", title = "Biểu đồ thể hiện tần số quốc gia")

  • Nhận xét: Biểu đồ cho thấy số lượng khách hàng phân theo quốc gia có sự chênh lệch đáng kể, trong đó USA dẫn đầu với 9.562 khách, chiếm ưu thế tuyệt đối so với hai quốc gia còn lại. Mexico xếp thứ hai với 3.688 khách, trong khi Canada chỉ có 809 khách, chiếm tỷ trọng rất nhỏ. Điều này cho thấy USA là thị trường chính với lượng khách hàng vượt trội hơn so với Mexico và Canada.

2.7.2. Tần suất

Bảng tần suất thể hiện tỷ lệ khách hàng phân bổ theo quốc gia như sau:

table(a$Country)/sum(nrow(a))
## 
##     Canada     Mexico        USA 
## 0.05754321 0.26232307 0.68013372

Trong bộ dữ liệu này, lượng khách hàng đến từ Canada chiếm khoảng 5.7543211%, khách hàng đến từ Mexico chiếm 26.2323067% và 68.0133722% là khách hàng đến từ USA.

2.8. Biến ProductFamily

2.8.1. Tần số và trực quan hóa

table(a$ProductFamily)
## 
##          Drink           Food Non-Consumable 
##           1250          10153           2656

Bảng tần số thể hiện các sản phẩm chính ProductFamily được mua bao gồm: Drink, Food và Non-Consumable, trong đó có 1250 khách hàng mua các sản phẩm đồ uống (Drink), 10153 khách hàng mua đồ ăn (Food) và 2656 khách hàng mua hàng không tiêu dùng (Non-Consumable).

a %>% group_by(ProductFamily) %>% summarise(n = n()) %>%
  ggplot(aes(x = ProductFamily, y = n))+
  geom_col(fill='red')+
  geom_text(aes(label = n), vjust = -0.5) +
  labs(x = "Sản phẩm chính", y="Tần số", title = "Biểu đồ thể hiện tần số các sản phẩm chính")

2.8.2. Tần suất

table(a$ProductFamily)/sum(nrow(a))
## 
##          Drink           Food Non-Consumable 
##     0.08891102     0.72217085     0.18891813

Trong bộ dữ liệu này, các sản phẩm đồ uống (Drink) chiếm khoảng 8.8911018%, sản phẩm đồ ăn (Food) chiếm 72.2170851% và 18.8918131% là phần trăm sản phẩm Non - Consumable.

2.9. Biến ProductDepartment

2.9.1. Tần số và trực quan hóa

# Bảng tần số
table(a$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
# Biểu đồ thể hiện tần số 
ggplot(d, aes(x = ProductDepartment)) +
    geom_bar(fill = 'green') +
    labs(x = 'ProductDepartment', y = 'Tần số', title = "Biểu đồ thể hiện tần số các bộ phận sản phẩm cần mua") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Biến ProductDepartment thể hiện chi tiết các bộ phẩn sản phẩm cần mua trong từng nhóm sản phẩm chính, bao gồm: Seafood, Alcoholic Beverages, Household,…ứng với từng khách hàng.

2.9.2. Tần suất

Bảng tần suất thể hiện tỷ lệ của mỗi bộ phận sản phẩm trong biến ProductDepartment:

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

2.10. Biến ProductCategory

2.10.1. Tần số và trực quan hóa

# Bảng tần số 
table(a$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
# Đồ thị tần số
ggplot(d, aes(x = ProductCategory)) +
    geom_bar(fill = 'navy') +
    labs(x = 'ProducCategory', y = 'Tần số', title = "Biểu đồ thể hiện tần số các sản phẩm cần mua") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Tương tự ProductDepartment, biến ProductCategory là danh mục cụ thể của các sản phầm mà khách hàng cần mua, ví dụ Vegetables, Jams and Jellies, Baking Goods,…

2.10.2. Tần suất

Tỷ lệ các sản phẩm cụ thể cần mua của khách hàng được thể hiện thông qua bảng tần suất như sau:

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

Phần 3: Ước lượng khoảng và kiểm định giả thiết cho tỷ lệ (1 biến)

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

Ở phần này, ta chọn 3 hạng mục từ 3 biến định tính của dữ liệu. Các hạng mục được chọn bao gồm:

  • Hạng mục “F” của biến Gender là khách hàng có giới tính nữ.

  • Hạng mục “M” của biến MaritalStatus là khách hàng đã kết hôn.

  • Hạng mục “Food” của biến ProcductFamily là các sản phẩm đồ ăn.

3.2. Ước lượng khoảng tin cậy và kiểm định giả thuyết

Với khoảng tin cậy 95%, tỷ lệ của các hạng mục trong tổng thể được thể hiện như sau:

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

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

# Số lượng khách hàng là nữ 
female <- sum(a$Gender == "F")

# Tổng số khách hàng
total <- nrow(a)

# Ước lượng khoảng tin cậy 95%
prop.test(female, total, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  female out of total, 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
  • Tỷ lệ khách hàng nữ trong tập khách hàng là 0,509999 hay 50,99%.

  • Khoảng tin cậy 95% cho tỷ lệ này là **[50,17%, 51,83%].

Ý nghĩa: Với độ tin cậy 95%, khẳng định rằng tỷ lệ khách hàng là nữ trong toàn bộ khách hàng nằm trong khoảng 50,17% đến 51,83%.

Kiểm định Giả thuyết

Đặt giả thuyết:

  • H0: Tỷ lệ Nữ (F) trong tổng thể = 0,5;

  • H1: Tỷ lệ Nữ (F) ≠ 0,5.

# Kiểm định giả thuyết H0: tỷ lệ Nữ = 0,5
prop.test(female, total, p = 0.5, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  female out of total, 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

Kết quả thu được p_value = 0,0182. Vì p_value \(<\) 0.05, nên ta bác bỏ H0 ở mức ý nghĩa 5%. Do đó, kết luận rằng tỷ lệ Nữ giới trong toàn bộ khách hàng không phải là 50%, vượt 50% và nằm trong khoảng tin cậy.

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

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

# Số lượng khách hàng đã kết hôn 
mar <- sum(a$MaritalStatus == "M")

# Tổng số khách hàng
total_mar <- nrow(a)

# Ước lượng khoảng tin cậy 95%
prop.test(mar, total_mar, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  mar out of total_mar, 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
  • Tỷ lệ khách hàng đã kết hôn trong tập khách hàng được ước lượng là 48,84%.

  • Khoảng tin cậy 95% cho tỷ lệ này là từ [48,01%, 49,67%].

Ý nghĩa: Với độ tin cậy 95%, tỷ lệ khách hàng đã kết hôn trong toàn bộ khách hàng nằm trong khoảng từ 48,01% đến 49,67%.

Kiểm định giả thuyết

Đặt giả thuyết:

  • Giả thuyết H0: p = 0.5 (tỷ lệ kết hôn là 50%),

  • Giả thuyết H1: p ≠ 0.5 (tỷ lệ kết hôn ≠ 50%).

prop.test(mar, total_mar, p = 0.5, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  mar out of total_mar, 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ả kiểm định tỷ lệ cho thấy tỷ lệ kết hôn trong mẫu là 0.4883 (48,83%), với khoảng tin cậy 95% là từ 48,01% đến 49,67%.

Giá trị p_value thu được p_value = 0.0597, nhỏ hơn mức ý nghĩa α = 0.05. Do đó, giả thuyết H0 bị bác bỏ. Do đó, kết luận rằng tỷ lệ Nữ giới trong toàn bộ khách hàng không phải là 50% mà nằm trong khoảng tin cậy [48,01%, 49,67%].

3.2.3. Hạng mục “Food” của biến ProductFamily

Ước lượng khoảng tin cậy

# Số lượng Food trong tổng thể ProductFamily
fod <- sum(a$ProductFamily == "Food")

# Tổng số khách hàng
total_fod <- nrow(a)

# Ước lượng khoảng tin cậy
prop.test(fod, total_fod, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  fod out of total_fod, null probability 0.5
## X-squared = 2774.9, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.7146709 0.7295489
## sample estimates:
##         p 
## 0.7221709
  • Kết quả ước lượng cho thấy **tỷ lệ sản phẩm thuộc nhóm “Food” trong mẫu là 72.22%.

  • Khoảng tin cậy 95% cho tỷ lệ này từ 71,47% đến 72,95%

Ý nghĩa: Với độ tin cậy 95% có thể thấy rằng tỷ lệ thực tế của các sản phẩm “Food” trong toàn bộ tập khách hàng nằm trong khoảng từ 71.47% đến 72.95%. Điều này chứng tỏ, khách hàng tại siêu thị tập trung chủ yếu mua các sản phẩm là “Food”.

Kiểm định giải thuyết

Đặt giả thuyết:

  • Giả thuyết H0: p = 0.7 (tỷ lệ Food là 50%),

  • Giả thuyết H1: p ≠ 0.7 (tỷ lệ Food ≠ 50%).

prop.test(fod, total_fod, p = 0.7, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  fod out of total_fod, null probability 0.7
## X-squared = 32.802, df = 1, p-value = 1.02e-08
## alternative hypothesis: true p is not equal to 0.7
## 95 percent confidence interval:
##  0.7146709 0.7295489
## sample estimates:
##         p 
## 0.7221709

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

  • Giá trị p_value = 1.02e - 08 < 0.05.

  • Giá trị p_value thu được nhỏ hơn mức ý nghĩa α = 0.05, ta bác bỏ giả thuyết H0. Như vậy, tỷ lệ sản phẩm “Food” trong tổng thể thực sự khác 70%.

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

Tiến hành chọn 3 cặp biến để kiểm tra mối quan hệ giữa chúng. Ba cặp biến được chọn bao gồm:

  • GenderMaritalStatus,

  • HomeownerCountry,

  • AnnualIncomeHomeowner

4.1.Cặp biến Gender và MaritalStatus

4.1.1. Bảng tần suất chéo

Bảng tần suất chéo (contigency table) cho 2 biến Gender và MaritalStatus thể hiện như sau:

# Bảng tần suất chéo 
table_gender_Mari <- table(a$Gender, a$MaritalStatus)
table_gender_Mari
##    
##        M    S
##   F 3602 3568
##   M 3264 3625

Kết quả bảng tần suất giữa 2 biến như sau:

  • 3602 khách hàng nữ đã kết hôn3568 khách hàng nữ còn độc thân.

  • 3264 khách hàng nam đã kết hôn3625 khách hàng nam còn độc thân.

Tính toán tỷ lệ phần trăm theo hàng:

# Tính tỷ lệ % theo từng giới tính
prop.table(table_gender_Mari, margin = 1)
##    
##             M         S
##   F 0.5023710 0.4976290
##   M 0.4737988 0.5262012

Giải thích các câu lệnh:

  • prop.table(): được dùng để chuyển bảng đếm thành bảng tỷ lệ (proportion).

  • margin = 1: tính phần trăm theo hàng, với mỗi hàng tương ứng 100%.

Việc lựa chọn tính toán tỷ lệ phần trăm theo hàng (hay theo từng giới tính) nhằm tìm hiểu xu hướng hôn nhân của từng nhóm giới tính.

Kết quả tính toán cho thấy:

  • Trong tổng số khách hàng thuộc giới tính nữ, 50,24% khách hàng đã kết hôn và 49,76% khách hàng độc thân.

  • Trong tổng số khách hàng thuộc giới tính nam, 47,38% khách hàng đã kết hôn và 52,62% khách hàng độc thân.

4.1.2. Trực quan hóa

a %>%
  ggplot(aes(x = Gender, fill = MaritalStatus)) +
  geom_bar(position = "dodge") +
  labs(x = "Gender", y = "Số lượng khách hàng", title = "Tình trạng hôn nhân phân bổ theo giới tính")

Câu lệnh position = "dodge" dùng để điều chỉnh vị trí các cột của nhóm, hiển thị song song các cột trên cùng một trục x.

Nhận xét: Tổng số khách hàng nam và khách hàng nữ là tương đương nhau, tuy nhiên tình trạng hôn nhân phân bổ khác nhau giữa nam và nữ:

  • Đối với nữ giới:

    • Số lượng đã kết hôn (M) và độc thân (S) khá đồng đều, chênh lệch 34 người.
  • Đối với nam giới:

    • Ngược lại với nữ, nam giới có xu hướng độc thân (S) cao hơn đã kết hôn (M). Như vậy, những khách hàng nam có xu hướng thiên về cuộc sống độc thân.

4.1.3. Kiểm định thống kê (Kiểm định Chi - bình phương)

Để kiểm tra mối quan hệ giữa Gender và MaritalStatus, ta sử dụng kiểm định Chi-square test để khẳng định mối quan hệ này.

Đặt giả thuyết:

  • H0: Gender và MaritalStatus độc lập,

  • H1: Gender và MaritalStatus có liên quan

# Kiểm định tính độc lập cho 2 biến
chisq.test(table_gender_Mari)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table_gender_Mari
## X-squared = 11.365, df = 1, p-value = 0.0007485
  • Kết quả kiểm định:

    • Giá trị Chi - bình phương: X-square = 11.365,

    • Bậc tự do: df = 1,

    • Giá trị p_value = 0.0007485.

  • Kết luận thống kê: Giá trị p_value = 0.0007485 < 0.05 nên ta bác bỏ giả thuyết H0. Vậy giới tính Gender và tình trạng hôn nhân MaritalStatus có mối liên hệ với nhau.

Dựa trên biểu đồ phân bố tình trạng hôn nhân theo giới tính và kết quả kiểm định Chi-bình phương, có thể thấy rõ ràng rằng giới tính có ảnh hưởng đến tình trạng hôn nhân của khách hàng trong tập dữ liệu này. Cụ thể, tỷ lệ khách hàng nữ (F) đã kết hôn (M) cao hơn so với tỷ lệ nữ độc thân (S), trong khi đó, nam giới (M) lại có xu hướng độc thân nhiều hơn. Điều này có thể phản ánh nhóm khách hàng nữ có xu hướng lập gia đình sớm hơn. Từ đây, siêu thị có thể phát triển nhiều sản phẩm dựa trên giới tính và hôn nhân.

4.2.Cặp biến Homeowner và Country

4.2.1. Bảng tần suất chéo

Bảng tần suất chéo (contigency) cho Homeowner và Country như sau:

table_home_country <- table(a$Homeowner, a$Country)
table_home_country
##    
##     Canada Mexico  USA
##   N    320   1473 3822
##   Y    489   2215 5740

Kết quả bảng tần suất giữa 2 biến như sau:

  • Đối với khách hàng có nhà ở, có 320 khách đến từ Canada, 1473 khách hàng đến từ Mexico và 3822 khách từ USA.

  • Đối với khách hàng không có nhà, có 489 người đến từ Canada, 2215 người đến từ Mexico và 5740 người đến từ USA

Tính toán tỷ lệ phần trăm theo hàng

prop.table(table_home_country, margin = 2)
##    
##        Canada    Mexico       USA
##   N 0.3955501 0.3994035 0.3997072
##   Y 0.6044499 0.6005965 0.6002928

Việc lựa chọn tính toán tỷ lệ phần trăm theo quốc gia nhằm tìm hiểu xu hướng sở hữu nhà của từng quốc gia.

Kết quả tính toán cho thấy:

  • Trong tổng số khách hàng ở Canada, 39,56% khách hàng có nhà ở và 60,44% khách hàng không có nhà.

  • Trong tổng số khách hàng ở Mexico, 39,94% khách hàng có nhà ở và 60,06% khách hàng không có nhà.

  • Trong tổng số khách hàng ở Mỹ (USA), 39,97% khách hàng có nhà ở và 60,03% khách hàng không có nhà.

4.2.2. Trực quan hóa

a %>% ggplot(aes(x = Country, fill = Homeowner)) +
  geom_bar(position = "dodge") +
  labs(x = "Quốc gia", y = "Số lượng khách hàng", title = "Tình trạng nhà ở phân bổ theo quốc gia")

Nhận xét:

Biểu đồ trên thể hiện tình trạng nhà ở của khách hàng được phân bố theo ba quốc gia: Canada, Mexico và Hoa Kỳ (USA). Dễ dàng nhận thấy rằng ở cả hai nhóm khách hàng có nhà (Y) và không có nhà (N), số lượng khách hàng đến từ Hoa Kỳ luôn chiếm tỷ lệ cao nhất, trong đó nhóm có nhà ở chiếm ưu thế rõ rệt với 5740 người. Mexico đứng thứ hai về số lượng khách hàng ở cả hai nhóm, với số lượng khách hàng có nhà nhiều hơn so với không có nhà. Canada có số lượng khách hàng thấp nhất trong cả hai nhóm và chênh lệch giữa hai trạng thái nhà ở không quá lớn. Điều này cho thấy sự khác biệt đáng kể trong tình trạng nhà ở của khách hàng giữa các quốc gia, đặc biệt là Hoa Kỳ có tỷ lệ người sở hữu nhà cao hơn hẳn so với hai quốc gia còn lại.

4.2.3. Kiểm định thống kê (Kiểm định Chi - bình phương)

Để kiểm tra mối quan hệ giữa Homeowner và Country, ta sử dụng kiểm định Chi-square Test để khẳng định mối quan hệ này:

Đặt giả thuyết:

  • H0: Homeowner và Country độc lập,

  • H1: Homeowner và Country có mối liên hệ nhau

chisq.test(table_home_country)
## 
##  Pearson's Chi-squared test
## 
## data:  table_home_country
## X-squared = 0.053742, df = 2, p-value = 0.9735
  • Kết quả kiểm định:

    • Giá trị Chi - bình phương: X-square = 0.053742,

    • Bậc tự do: df = 2,

    • Giá trị p_value = 0.9735.

  • Kết luận thống kê: Giá trị p_value = 0.0007485 > 0.05 nên ta chấp nhận giả thuyết H0. Vậy tình trạng nhà ở Homeower và quốc gia Country không có mối liên hệ với nhau (2 biến độc lập).

4.3.Cặp biến AnnualIncome và Homeowner

4.3.1. Bảng tần suất chéo

Bảng tần suất chéo (contigency) cho AnnualIncome và Homeowner như sau:

table_income_home <- table(a$AnnualIncome, a$Homeowner)
table_income_home
##                
##                    N    Y
##   $10K - $30K   1359 1731
##   $110K - $130K  119  524
##   $130K - $150K  136  624
##   $150K +         48  225
##   $30K - $50K   2087 2514
##   $50K - $70K   1063 1307
##   $70K - $90K    686 1023
##   $90K - $110K   117  496
  • Nhận xét: Bảng tần suất chéo trên thể hiện mối phân bố giữa mức thu nhập hằng năm và tình trạng sở hữu nhà (Homeowner), với hai nhóm là “Y” (có nhà) và “N” (không có nhà). Cụ thể, ở nhóm thu nhập thấp từ $10K – $30K, số người không sở hữu nhà (1359) vẫn chiếm một tỷ lệ đáng kể so với người có nhà (1731). Tuy nhiên, ở các nhóm thu nhập cao hơn như $130K – $150K và $150K+, số lượng người sở hữu nhà (lần lượt là 624 và 225) vượt xa số người không sở hữu nhà (136 và 48). Điều này cho thấy mối quan hệ đồng biến giữa thu nhập và khả năng sở hữu nhà.Nhóm thu nhập trung bình từ $30K – $50K, số lượng 2087 người không sở hữu nhà và 2514 có sở hữu nhà).

Tính toán tỷ lệ phần trăm theo hàng:

prop.table(table_income_home, margin = 1)
##                
##                         N         Y
##   $10K - $30K   0.4398058 0.5601942
##   $110K - $130K 0.1850700 0.8149300
##   $130K - $150K 0.1789474 0.8210526
##   $150K +       0.1758242 0.8241758
##   $30K - $50K   0.4535970 0.5464030
##   $50K - $70K   0.4485232 0.5514768
##   $70K - $90K   0.4014043 0.5985957
##   $90K - $110K  0.1908646 0.8091354

Việc lựa chọn tính toán tỷ lệ phần trăm sở hữu nhà theo thu nhập hằng nhập hằng năm của khách hàng nhằm thấy xu hướng sở hữu nhà.

Kết quả tính toán cho thấy:

Kết quả cho thấy, tỷ lệ người sở hữu nhà (Y) có xu hướng tăng đáng kể ở các mức thu nhập cao hơn. Cụ thể, ở nhóm thu nhập từ $110K – $130K, có tới 81.49% người thuộc nhóm này sở hữu nhà; các nhóm $130K – $150K và $150K+ cũng duy trì tỷ lệ rất cao, lần lượt là 82.11% và 82.42%. Ngược lại, ở nhóm thu nhập thấp từ $10K – $30K, tỷ lệ người sở hữu nhà chỉ là 56.02%; Các nhóm thu nhập từ $30K - $50K, $50K - $70K, $70K - $90K và $90K - $110K có tỷ lệ sở hữu nhà lần lượt là: 54,64%, 55,15%, 59,86% và 80,91%.

4.3.2. Trực quan hóa

a %>% ggplot(aes(x = AnnualIncome, fill = Homeowner)) +
  geom_bar(position = "dodge") +
  labs(x = "Thu nhập hàng năm", y = "Số lượng khách hàng", title = "Tình trạng nhà ở phân bổ theo thu nhập") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Nhận xét:

Biểu đồ trên mô tả tình trạng nhà ở của khách hàng được phân bố theo các nhóm thu nhập hàng năm. Nhìn chung, số lượng khách hàng sở hữu nhà (màu xanh) có xu hướng cao hơn so với nhóm không sở hữu nhà (màu đỏ) ở hầu hết các mức thu nhập.Ở tất cả các mức thu nhập, số lượng khách hàng có nhà ở đều cao hơn so với nhóm không có nhà ở. Nhóm thu nhập từ $30K–$50K có số lượng khách hàng đông nhất, cả ở hai trạng thái có và không có nhà, trong đó khách hàng có nhà chiếm ưu thế rõ rệt. Tương tự, ở các nhóm thu nhập từ $50K–$70K và $70K–$90K, số lượng khách hàng có nhà cũng vượt trội hơn. Đáng chú ý, ngay cả ở các mức thu nhập thấp như $10K–$30K hay cao như trên $150K, số lượng khách hàng có nhà vẫn nhiều hơn nhóm không có nhà. Điều này cho thấy rằng dù thu nhập có ảnh hưởng đến tình trạng nhà ở, nhưng không phải là yếu tố duy nhất quyết định, và việc sở hữu nhà diễn ra ở mọi phân khúc thu nhập

4.3.3. Kiểm định thống kê (Kiểm định Chi - bình phương)

Để kiểm tra mối quan hệ giữa Homeowner và AnnualIncome, ta sử dụng kiểm định Chi-square Test để khẳng định mối quan hệ này:

Đặt giả thuyết:

  • H0: Homeowner và AnnualIncome độc lập,

  • H1: Homeowner và AnnualIncome có mối liên hệ nhau

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

    • Giá trị Chi - bình phương: X-square = 546.37,

    • Bậc tự do: df = 7,

    • Giá trị p_value < 2.2e - 16.

  • Kết luận thống kê: Giá trị p_value < 2.2e - 16 nhỏ hơn rất nhiều so với mức ý nghĩa 0.05 nên ta bác bỏ giả thuyết H0. Vậy thu nhập hằng năm AnnualIncome và tình trạng nhà ở Homeower có mối liên hệ với nhau.

Dựa trên biểu đồ phân bố nhà ở theo thu nhập và kết quả kiểm định Chi-bình phương, có thể thấy rõ ràng rằng thu nhập có ảnh hưởng đến tình trạng nhà ở của khách hàng trong tập dữ liệu này. Cụ thể, thu nhập càng tăng thì tỷ lệ sở hữu nhà càng cao.Một khách hàng có thu nhập cao thường có điều kiện kinh tế tốt hơn để sở hữu bất động sản. Mối quan hệ này cũng phản ánh một xu hướng tiêu dùng và tài chính đáng chú ý, giúp doanh nghiệp có thể xác định những phân khúc khách hàng tiềm năng trong các chiến lược bán hàng, tiếp thị hoặc cung cấp dịch vụ tài chính như cho vay mua nhà.

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

Dựa trên phân tích một số biến định tính trong bộ dữ liệu khách hàng của siêu thị, một số hiểu biết quan trọng có thể rút ra như sau:

  • Giới tính khách hàng (Gender): có sự phân bổ đồng đều giữa nam và nữ, cho thấy siêu thị thu hút cả hai giới gần như ngang nhau, không có sự thiên lệch rõ rệt.

  • Tương tự như giới tính, tình trạng hôn nhân (MaritalStatus) của khách hàng tại siêu thị khá đều, mặc dù tỷ lệ khách hàng độc thân chiếm ưu thế nhẹ. Khi phân tích mối quan hệ giữa giới tính và hôn nhân, kết quả cho thấy nữ giới có xu hướng kết hôn nhiều hơn so với nam giới.

  • Thu nhập của khách hàng tại thu nhập đa dạng trong nhiều khoảng, thu nhập này có mối liên hệ tới việc sở hữu nhà của mỗi người khách. Đặc biệt tại các quốc gia lớn như Hoa Kỳ (USA) việc sở hữu nhà cũng lớn hơn 2 quốc gia còn lại là Mexico và Canada.

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

Hạn chế của phân tích là giới hạn phân tích một số biến định tính gây ra giới hạn trong việc hiểu rõ hành vi mua sắm của khách hàng. Cụ thể, việc bỏ qua các biến định lượng như giá trị đơn hàng, số lượng mua hàng hay số con của khách hàng khiến cho bức tranh toàn diện về hành vi tiêu dùng chưa được phản ánh đầy đủ. Ngoài ra, dữ liệu phân tích không thể hiện rõ yếu tố mùa vụ dù thực tế nhân tố này cũng ảnh hưởng đến hành vi mua sắm.

5.3. Đề xuất

Dựa trên các đặc điểm định tính đã phân tích, siêu thị có thể xây dựng một số chiến lược marketing nhằm tối ưu hóa hoạt động kinh doanh và tăng cường hiệu quả tiếp cận khách hàng mục tiêu. Trước hết, với sự phân bố đồng đều giữa nam và nữ, siêu thị nên duy trì chiến lược tiếp thị trung tính về giới, đồng thời có thể thiết kế các chương trình ưu đãi hoặc sản phẩm phù hợp hơn với từng nhóm giới tính và tình trạng hôn nhân – chẳng hạn, các gói mua sắm gia đình dành cho nhóm khách hàng đã kết hôn, và các sản phẩm tiện lợi, cá nhân hóa cho khách hàng độc thân. Ngoài ra, sự khác biệt về thu nhập và tỷ lệ sở hữu nhà theo quốc gia gợi ý rằng siêu thị nên phân loại khách hàng theo mức thu nhập và khu vực địa lý để đưa ra các gói sản phẩm, mức giá hoặc ưu đãi phù hợp. Tại Hoa Kỳ – nơi tỷ lệ sở hữu nhà cao – siêu thị có thể đẩy mạnh các mặt hàng gia dụng, thiết bị nội thất hoặc các chương trình tích điểm dài hạn. Ngược lại, tại các khu vực như Mexico hoặc Canada, nơi mức độ sở hữu nhà thấp hơn, nên ưu tiên các sản phẩm tiêu dùng nhanh, tiện lợi và linh hoạt về giá cả.

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

Một số câu hỏi và hướng nghiên cứu nếu có thời gian và dữ liệu bổ sung như sau:

  • Liệu có mối quan hệ giữa trình độ học vấn, ngành nghề hoặc độ tuổi với hành vi tiêu dùng và mức thu nhập của khách hàng không?

  • Khách hàng có xu hướng mua sắm vào thời điểm nào trong ngày, trong tuần hoặc theo mùa vụ; mùa vụ có ảnh hưởng tới hiệu quả bán hàng hay không?

  • Có sự khác biệt đáng kể về hành vi tiêu dùng của khách hàng giữa các quốc gia (Mỹ, Canada, Mexico) không?

  • Nếu kết hợp với các biến định lượng như giá trị đơn hàng hoặc tần suất mua hàng, siêu thị có thể xây dựng phân khúc khách hàng được không?