library(readr)
## Warning: package 'readr' was built under R version 4.3.3
library(ggplot2)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(skimr)
library(psych)
## Warning: package 'psych' was built under R version 4.3.3
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(csv)
## Warning: package 'csv' was built under R version 4.3.3

1 Phần 1. TÌM HIỂU VÀ CHUẨN BỊ DỮ LIỆU

1.1 Đọc file dữ liệu

d <- read.csv("C:/Users/ASUS/Downloads/Supermarket Transactions.csv", header = T)

1.2 Danh sách các biến

names(d)
##  [1] "X"                 "PurchaseDate"      "CustomerID"       
##  [4] "Gender"            "MaritalStatus"     "Homeowner"        
##  [7] "Children"          "AnnualIncome"      "City"             
## [10] "StateorProvince"   "Country"           "ProductFamily"    
## [13] "ProductDepartment" "ProductCategory"   "UnitsSold"        
## [16] "Revenue"
Tên biến Ý nghĩa
X Ngày mua hàng (định dạng YYYY-MM-DD).
CustomerID Mã định danh duy nhất cho mỗi khách hàng.
Gender Giới tính của khách hàng (M = Male, F = Female).
MaritalStatus Tình trạng hôn nhân (S = Single, M = Married).
Homeowner Khách hàng có sở hữu nhà hay không (Y = Yes, N = No).
Children Số lượng con nhỏ trong gia đình (số nguyên).
AnnualIncome Khoảng thu nhập hàng năm (ví dụ <$25K, $25K–$50K, …).
City Thành phố sinh sống.
StateorProvince Bang hoặc tỉnh tương ứng với thành phố.
Country Quốc gia nơi giao dịch diễn ra.
ProductFamily Nhóm sản phẩm cấp cao (ví dụ Food, Drink, …).
ProductDepartment Bộ phận sản phẩm trong nhóm (ví dụ Beverages, Snack Foods, …).
ProductCategory Hạng mục sản phẩm cụ thể (ví dụ Carbonated Beverages, Candy, …).
UnitsSold Số lượng đơn vị bán ra trong mỗi giao dịch.
Revenue Doanh thu thu về từ giao dịch (đơn vị tiền tệ, ví dụ USD).

1.3 Số biến và số quan sát

dim(d)
## [1] 14059    16

1.4 Kiểm tra cấu trúc tổng quát

str(d)
## '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 ...

1.5 Chọn các biến định tính

dldt <- c("Gender", "MaritalStatus", "Homeowner","City", "StateorProvince", "Country", "ProductFamily", "ProductDepartment", "ProductCategory","AnnualIncome")
dldt
##  [1] "Gender"            "MaritalStatus"     "Homeowner"        
##  [4] "City"              "StateorProvince"   "Country"          
##  [7] "ProductFamily"     "ProductDepartment" "ProductCategory"  
## [10] "AnnualIncome"

1.6 Tạo bộ dữ liệu mới chỉ chứa các biến định tính

dt <- d[, dldt]

1.7 Cấu trúc bộ dữ liệu

str(dt)
## 'data.frame':    14059 obs. of  10 variables:
##  $ Gender           : chr  "F" "M" "F" "M" ...
##  $ MaritalStatus    : chr  "S" "M" "M" "M" ...
##  $ Homeowner        : chr  "Y" "Y" "N" "Y" ...
##  $ 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" ...
##  $ AnnualIncome     : chr  "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...

1.8 Một vài dòng đầu và dòng cuối

head(dt)
##   Gender MaritalStatus Homeowner          City StateorProvince Country
## 1      F             S         Y   Los Angeles              CA     USA
## 2      M             M         Y   Los Angeles              CA     USA
## 3      F             M         N     Bremerton              WA     USA
## 4      M             M         Y      Portland              OR     USA
## 5      F             S         Y Beverly Hills              CA     USA
## 6      F             M         Y Beverly Hills              CA     USA
##   ProductFamily ProductDepartment      ProductCategory  AnnualIncome
## 1          Food       Snack Foods          Snack Foods   $30K - $50K
## 2          Food           Produce           Vegetables   $70K - $90K
## 3          Food       Snack Foods          Snack Foods   $50K - $70K
## 4          Food            Snacks                Candy   $30K - $50K
## 5         Drink         Beverages Carbonated Beverages $130K - $150K
## 6          Food              Deli          Side Dishes   $10K - $30K
tail(dt)
##       Gender MaritalStatus Homeowner        City StateorProvince Country
## 14054      F             M         N      Yakima              WA     USA
## 14055      F             M         Y   Bremerton              WA     USA
## 14056      F             M         Y Walla Walla              WA     USA
## 14057      M             S         Y    Portland              OR     USA
## 14058      F             S         N     Spokane              WA     USA
## 14059      M             S         N    Portland              OR     USA
##        ProductFamily ProductDepartment      ProductCategory AnnualIncome
## 14054 Non-Consumable         Household       Paper Products  $10K - $30K
## 14055           Food      Baking Goods         Baking Goods  $10K - $30K
## 14056           Food      Frozen Foods           Vegetables  $10K - $30K
## 14057          Drink         Beverages Pure Juice Beverages  $30K - $50K
## 14058          Drink             Dairy                Dairy  $50K - $70K
## 14059 Non-Consumable         Household           Electrical  $50K - $70K

1.9 Kiểm tra NA

any(is.na(dt))
## [1] FALSE

Vậy bộ dữ liệu không có giá trị thiếu

1.10 Kiểm tra kiểu dữ liệu và đổi về factor

dt <- data.frame(lapply(dt, as.factor))
# Kiểm tra kiểu dữ liệu của từng biến trong dldt
sapply(dt, class)
##            Gender     MaritalStatus         Homeowner              City 
##          "factor"          "factor"          "factor"          "factor" 
##   StateorProvince           Country     ProductFamily ProductDepartment 
##          "factor"          "factor"          "factor"          "factor" 
##   ProductCategory      AnnualIncome 
##          "factor"          "factor"

2 Phần 2. PHÂN TÍCH MÔ TẢ MỘT BIẾN ĐỊNH TÍNH

2.1 Biến Gender

Bảng tần số

#Lập bảng tần số biến Gender
tanso_gender <- table(dt$Gender)
tanso_gender
## 
##    F    M 
## 7170 6889

Biểu đồ

# Vẽ biểu đồ cột cho bảng tần số Gender
barplot(
  tanso_gender,
  main   = "Tần số theo giới tính",
  xlab   = "Giới tính",
  ylab   = "Số quan sát",
  las    = 1,                      
  col    = c("blue", "tomato"),  
  border = "white")

Bảng tần suất

#Lập bảng tần suất của biến Gender
tansuat_gender <- tanso_gender/sum(nrow(dt))
tansuat_gender
## 
##         F         M 
## 0.5099936 0.4900064

Biểu đồ

# Màu cho từng lát
cols <- c("pink", "green")

# Nhãn phần trăm 
nhangender <- paste0(round(tansuat_gender * 100, 1), "%")

# Vẽ pie chart không nhãn
pie(
  tansuat_gender,
  labels = NA,               # ẩn nhãn ngay trên lát
  main   = "Tần suất theo giới tính",
  col    = cols,
  border = "white"
)

# Thêm legend bên ngoài góc phải
legend(
  x      = "topright",
  legend = paste(names(tansuat_gender), nhangender),
  fill   = cols,
)

Nhận xét:

counts <- table(dt$Gender)
diff_count <- abs(counts["F"] - counts["M"])
  • Vậy trong bộ dữ liệu này có 50.9993598 % nữ và 49.0006402% nam.

  • Trong bộ dữ liệu, số lượng nữ là 7170, số lượng nam là

  1. Sự chênh lệch về số lượng giữa nữ và nam là 281.

2.2 Biến Homeowner

Bảng tần số

#Lập bảng tần số biến Homeowner
tanso_homeowner <- table(dt$Homeowner)
tanso_homeowner
## 
##    N    Y 
## 5615 8444

Biểu đồ

barplot(
  tanso_homeowner,
  main = "tần số biến khách hàng có sở hửu nhà",
  xlab = "sỡ hữu nhà",
  ylab = "số lượng",
  las  = 1,
  col  = c("orange","purple"),
  border = "white"
)

Bảng tần suất

#Lập bảng tần suất của biến Homeowner
tansuat_homeowner <- tanso_homeowner/sum(nrow(dt))
tansuat_homeowner
## 
##         N         Y 
## 0.3993883 0.6006117

Biểu đồ

# màu cho từng lát
cols <- c("lightblue","lightpink")
# nhãn phần trăm 
nhanhomeowner <- paste0(round(tansuat_homeowner*100,1),"%")
# vẽ pie chart không nhãn
pie(
  tansuat_homeowner,
  labels = NA,
  main   = "tần số biến khách hàng có sở hửu nhà",
  col    = cols,
  border = "white")
# thêm legend bên ngoài góc phải
legend(
  x      = "topright",
  legend = paste(names(tansuat_homeowner),nhanhomeowner),
  fill   = cols
)

Nhận xét:

counts_homeowner <- table(dt$Homeowner)
diff_homeowner <- abs(counts_homeowner["Y"] - counts_homeowner["N"])
  • Vậy trong bộ dữ liệu này có 39.9388292 % không có nhà và 60.0611708% có nhà.

  • Số lượng người sở hữu nhà là 8444, số lượng người không sở hữu là 5615.

  • Sự chênh lệch về số lượng giữa hai nhóm là 2829 người, nghĩa là số người có nhà nhiều hơn khá đáng kể so với số người không có nhà.

2.3 Biến MaritalStatus

Bảng tần số

#Lập bảng tần số của biến MaritalStatus
tanso_maritalStatus <- table(dt$MaritalStatus)
tanso_maritalStatus
## 
##    M    S 
## 6866 7193

Biểu đồ

# Vẽ biểu đồ cột cho MaritalStatus
barplot(
  tanso_maritalStatus,
  main   = "Tần số biến tình trạng hôn nhân",
  xlab   = "tình trạng hôn nhân",
  ylab   = "Số quan sát",
  las    = 1,
  col    = c("yellow", "green"),
  border = "white"
)

Bảng tần suất

#Lập bảng tần suất của biến MaritalStatus
tansuat_maritalStatus <- tanso_maritalStatus/sum(nrow(dt))
tansuat_maritalStatus
## 
##         M         S 
## 0.4883704 0.5116296

Biểu đồ

# Nhãn phần trăm
nhanmaritalStatus <- paste0( round(tansuat_maritalStatus * 100, 1), "%")

# Vẽ pie chart ẩn nhãn
pie(
  tansuat_maritalStatus,
  labels = NA,
  main   = "Tần suất biến MaritalStatus",
  col    = rainbow(length(nhanmaritalStatus)),
  border = "white")

# Thêm legend bên ngoài
legend(
  x      ="topright",
  legend = paste(names(tansuat_maritalStatus),nhanmaritalStatus),
  fill   = rainbow(length(nhanmaritalStatus))
)

Nhận xét:

# Đếm số người kết hôn (M) và độc thân (S)
ms_counts <- table(dt$MaritalStatus)

# Chênh lệch về số lượng giữa hai nhóm
ms_diff <- abs(ms_counts["M"] - ms_counts["S"])
  • Vậy trong bộ dữ liệu này có 48.8370439 % đã kết hôn và 51.1629561% độc thân.

  • Trong bộ dữ liệu này có 6866 người đã kết hôn và 7193 người độc thân. Nhóm kết hôn nhiều hơn nhóm độc thân 327 người.

2.4 Biến City

Bảng tần số

# Lập bảng tần số biến City
tanso_city <- table(dt$City)

# Sắp xếp giảm dần để xem các thành phố phổ biến nhất
tanso_city <- sort(tanso_city, decreasing = TRUE)

# Hiển thị toàn bộ bảng tần số
tanso_city
## 
##         Salem        Tacoma   Los Angeles       Seattle      Portland 
##          1386          1257           926           922           876 
##       Spokane     San Diego       Hidalgo     Bremerton Beverly Hills 
##           875           866           845           834           811 
##        Merida     Vancouver    San Andres       Orizaba       Camacho 
##           654           633           621           464           452 
##      Acapulco        Yakima   Mexico City      Victoria   Walla Walla 
##           383           376           194           176           160 
##    Bellingham San Francisco   Guadalajara 
##           143           130            75

Biểu đồ

barplot(
  tanso_city,
  main   = "Tần số biến thành phố",
  cex.names = 0.4,
  xlab   = "Số quan sát",
  ylab   = "Thành phố",
  las    = 1,            # xoay nhãn trục y ngang
  col    = "steelblue",
  border = "white",
  horiz  = TRUE          # vẽ thanh ngang để đọc nhãn dễ hơn
)

Bảng tần suất

tansuat_city  <- tanso_city/sum(nrow(dt))
tansuat_city
## 
##         Salem        Tacoma   Los Angeles       Seattle      Portland 
##   0.098584537   0.089408920   0.065865282   0.065580767   0.062308841 
##       Spokane     San Diego       Hidalgo     Bremerton Beverly Hills 
##   0.062237712   0.061597553   0.060103848   0.059321431   0.057685468 
##        Merida     Vancouver    San Andres       Orizaba       Camacho 
##   0.046518245   0.045024539   0.044170994   0.033003770   0.032150224 
##      Acapulco        Yakima   Mexico City      Victoria   Walla Walla 
##   0.027242336   0.026744434   0.013798990   0.012518671   0.011380610 
##    Bellingham San Francisco   Guadalajara 
##   0.010171420   0.009246746   0.005334661

Biểu đồ

# Màu cho từng lát
cols <- rainbow(length(tansuat_city))

# Nhãn phần trăm
nhancity <- paste0( round(tansuat_city * 100, 1), "%")

# Vẽ pie chart ẩn nhãn
pie(
  tansuat_city,
  labels = NA,
  main   = "Tần suất biến city",
  col    = cols,
  border = "white")

# Thêm legend bên ngoài
legend(
  x         ="topright",
  legend    = paste(names(tansuat_city),nhancity),
  fill      = cols,
  bty       = "n",       # bỏ viền
  cex       = 0.5,       # thu nhỏ chữ
  ncol      = 2,         # chia thành 2 cột
  x.intersp = 0.5,       # giãn khoảng cách chữ–ký hiệu ngang
  y.intersp = 0.7        # giãn khoảng cách giữa các dòng
)

Nhận xét:

  • Trong bộ dữ liệu này, thành phố có tỷ lệ giao dịch cao nhất là Salem với khoảng 9.86%, tiếp theo là Tacoma (8.94%), Los Angeles (6.59%) và Seattle (6.56%).

  • Các thành phố nhỏ hơn như Hidalgo (6.01%) hoặc Guadalajara (0.53%) có tỷ lệ thấp hơn nhiều.

  • Điều này cho thấy giao dịch chủ yếu tập trung ở một số thành phố lớn với dân số hoặc hoạt động kinh tế cao hơn. Các thành phố nhỏ hơn đóng góp ít hơn vào tổng số giao dịch, có thể do quy mô thị trường nhỏ hoặc mức độ phổ biến của sản phẩm thấp.

  • Ngoài ra, việc phân bố này cũng có thể phản ánh chiến lược tiếp thị hoặc kênh phân phối mà siêu thị đang tập trung vào các khu vực đô thị lớn.

2.5 Biến StateorProvince

Bảng tần số

#Lập bảng tần số của biến StateorProvince
tanso_stateorProvince <- table(dt$StateorProvince)
tanso_stateorProvince
## 
##        BC        CA        DF  Guerrero   Jalisco        OR  Veracruz        WA 
##       809      2733       815       383        75      2262       464      4567 
##   Yucatan Zacatecas 
##       654      1297

Biểu đồ

barplot(
  tanso_stateorProvince,
  main   = "Tần số biến bang hoặc tỉnh",
  cex.names = 0.4,
  xlab   = "Số quan sát",
  ylab   = "bang hoặc tỉnh",
  las    = 1,            # xoay nhãn trục y ngang
  col    = "green",
  border = "white",
  horiz  = TRUE          # vẽ thanh ngang để đọc nhãn dễ hơn
)

Bảng tần suất

#Lập bảng tần suất của biến StateorProvince
tansuat_stateorProvince <- tanso_stateorProvince/sum(nrow(dt))
tansuat_stateorProvince
## 
##          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

Đồ thị

# Màu cho từng lát
cols <- rainbow(length(tansuat_stateorProvince))

# Nhãn phần trăm
nhanstateorProvince <- paste0( round(tansuat_stateorProvince * 100, 1), "%")

# Vẽ pie chart ẩn nhãn
pie(
  tansuat_stateorProvince,
  labels = NA,
  main   = "Tần suất biến bang hoặc tỉnh",
  col    = cols,
  border = "white")

# Thêm legend bên ngoài
legend(
  x         ="topright",
  legend    = paste(names(tansuat_stateorProvince),nhanstateorProvince),
  fill      = cols,
  bty       = "n",       # bỏ viền
  cex       = 0.5,       # thu nhỏ chữ
  ncol      = 2,         # chia thành 2 cột
)

Nhận xét: Trong bộ dữ liệu này, bang hoặc tỉnh có tỷ lệ giao dịch lớn nhất là WA với khoảng 32.48%, tiếp theo là CA (19.44%) và OR (16.09%). Các bang như Jalisco (0.53%) và Guerrero (2.72%) chiếm tỷ lệ thấp hơn. Như vậy, dữ liệu cho thấy sự tập trung giao dịch cao ở một số bang chính.

2.6 Biến Country

Bảng tần số

#Lập bảng tần số của biến Country
tanso_country <- table(dt$Country)
tanso_country
## 
## Canada Mexico    USA 
##    809   3688   9562

Biểu đồ

barplot(
  tanso_country,
  main   = "tần số biến quốc gia",
  xlab   = "quốc gia",
  ylab   = "số lượng",
  las    = 1,
  col    = c("brown","orange","pink"),
  border = "white"
)

Bảng tần suất

#Lập bảng tần suất của biến Country
tansuat_country <- tanso_country/sum(nrow(dt))
tansuat_country
## 
##     Canada     Mexico        USA 
## 0.05754321 0.26232307 0.68013372

Biểu đồ

# Nhãn phần trăm
nhancountry <- paste0( round(tansuat_country * 100, 1), "%")
# Vẽ pie chart ẩn nhãn
pie(
  tansuat_country,
  labels = NA,
  main   = "Tần suất biến quốc gia",
  col    = rainbow(length(nhancountry)),
  border = "white")

# Thêm legend bên ngoài
legend(
  x      ="topright",
  legend = paste(names(tansuat_country),nhancountry),
  fill   = rainbow(length(nhancountry)),
  bty    ="n"
)

Nhận xét:

# Đếm số bản ghi theo quốc gia
cty_counts <- table(dt$Country)

# Chênh lệch về số lượng giữa quốc gia đông nhất và ít nhất
cty_diff <- max(cty_counts) - min(cty_counts)
  • Vậy trong bộ dữ liệu này có 5.7543211 % ở Canada, 26.2323067% ở Mexico và 68.0133722% ở USA.

  • Quốc gia đông nhất có 9562, quốc gia ít nhất có 809.

  • Sự chênh lệch giữa hai quốc gia này là 8753 người.

2.7 Biến ProductFamily

Bảng tần số

#Lập bảng tần số của biến ProductFamily
tanso_productFamily <- table(dt$ProductFamily)
tanso_productFamily
## 
##          Drink           Food Non-Consumable 
##           1250          10153           2656

Biểu đồ

barplot(
  tanso_productFamily,
  main   = "tần số biến nhóm sản phẩm",
  xlab   = "nhóm sản phẩm",
  ylab   = "số lượng",
  las    = 1,
  col    = c("yellow","purple","pink"),
  border = "white"
)

Bảng tần suất

#Lập bảng tần suất của biến ProductFamily
tansuat_productFamily <- tanso_productFamily/sum(nrow(dt))
tansuat_productFamily
## 
##          Drink           Food Non-Consumable 
##     0.08891102     0.72217085     0.18891813

Biểu đồ

cols <- c("lightblue","lightpink","lightgreen")
# Nhãn phần trăm
nhanproductFamily <- paste0( round(tansuat_productFamily * 100, 1), "%")
# Vẽ pie chart ẩn nhãn
pie(
  tansuat_productFamily,
  labels = NA,
  main   = "Tần suất biến nhóm sản phẩm",
  col    = cols,
  border = "white")

# Thêm legend bên ngoài
legend(
  x      ="topright",
  legend = paste(names(tansuat_productFamily),nhanproductFamily),
  fill   = cols,
  )

Nhận xét:

  • Vậy trong bộ dữ liệu này có 8.8911018 % đồ uống, 72.2170851% thức ăn và 18.8918131% không tiêu thụ được.

2.8 Biến ProductDepartment

Bảng tần số

# Lập bảng tần số
tanso_productDepartment <- table(dt$ProductDepartment)
tanso_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 đồ

barplot(
  tanso_productDepartment,
  main   = "Tần số biến bộ phận sản phẩm trong nhóm",
  cex.names = 0.4,
  xlab   = "Số quan sát",
  ylab   = "",
  las    = 1,            # xoay nhãn trục y ngang
  col    = "lightblue",
  border = "white",
  horiz  = TRUE          # vẽ thanh ngang để đọc nhãn dễ hơn
)

Bảng tần suất

tansuat_productDepartment <-tanso_productDepartment/sum(nrow(dt))
tansuat_productDepartment
## 
## 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

Nhận xét:

  • Trong bộ dữ liệu, nhóm sản phẩm có tỷ lệ giao dịch cao nhất là Produce với 14.18%, tiếp theo là Snack Foods (11.38%) và Household (10.1%). Nhóm Frozen Foods cũng chiếm tỷ lệ đáng kể là 9.83%. Các nhóm như Carousel (0.42%) và Checkout (0.58%) có tỷ lệ thấp hơn nhiều.

2.9 Biến ProductCategory

Bảng tần số

tanso_productCategory <- table(dt$ProductCategory)
tanso_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

Biểu đồ

barplot(
  tanso_productCategory,
  main   = "Tần số biến hạng mục sản phẩm cụ thể",
  cex.names = 0.4,
  xlab   = "Số quan sát",
  ylab   = "",
  las    = 1,            # xoay nhãn trục y ngang
  col    = "lightpink",
  border = "white",
  horiz  = TRUE          # vẽ thanh ngang để đọc nhãn dễ hơn
)

Bảng tần suất

tansuat_productCategory <- tanso_productCategory/sum(nrow(dt)) 
tansuat_productCategory
## 
##         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

Nhận xét:

  • Trong bộ dữ liệu, nhóm sản phẩm có tỷ lệ giao dịch cao nhất là Vegetables với 12.29%, tiếp theo là Snack Foods (11.38%) và Dairy (6.42%). Các nhóm đóng hộp như Canned Oysters (0.25%) và Canned Clams (0.38%) chiếm tỷ lệ rất nhỏ, cho thấy sự ưu tiên mua hàng tươi và đồ ăn nhẹ.

2.10 Biến AnnualIncome

Bảng tần số

# Bảng tần suất cho AnnualIncome
tanso_annualIncome <- table(dt$AnnualIncome)
tanso_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 đồ

barplot(
  tanso_annualIncome,
  main   = "Tần số theo Thu nhập",
  cex.names = 0.4,
  xlab   = "AnnualIncome",
  ylab   = "số thu nhập",
  las    = 1,            # xoay nhãn trục y ngang
  col    = "lightblue",
  border = "white",
  horiz  = TRUE          # vẽ thanh ngang để đọc nhãn dễ hơn
)

Bảng tần suất

tansuat_annualIncome <- tanso_annualIncome/sum(nrow(dt)) 
tansuat_annualIncome
## 
##   $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

Biểu đồ

# Màu cho từng lát
cols <- rainbow(length(tansuat_annualIncome))

# Nhãn phần trăm
nhanannualIncome <- paste0( round(tansuat_annualIncome * 100, 1), "%")

# Vẽ pie chart ẩn nhãn
pie(
  tansuat_annualIncome,
  labels = NA,
  main   = "Tần suất biến thu nhập",
  col    = cols,
  border = "white")

# Thêm legend bên ngoài
legend(
  x         ="topright",
  legend    = paste(names(tansuat_annualIncome),nhanannualIncome),
  fill      = cols,
  bty       = "n",       # bỏ viền
  cex       = 0.5,       # thu nhỏ chữ
  ncol      = 2,         # chia thành 2 cột
  x.intersp = 0.5,       # giãn khoảng cách chữ–ký hiệu ngang
  y.intersp = 0.7        # giãn khoảng cách giữa các dòng
)

Nhận xét:

  • Sự phân bố thu nhập không đều phản ánh cơ cấu khách hàng của siêu thị hoặc đơn vị khảo sát: tập trung nhiều ở các nhóm thu nhập trung bình đến trung cao, trong khi nhóm thu nhập quá thấp hoặc quá cao xuất hiện ít hơn.

  • Đây có thể là dấu hiệu để doanh nghiệp điều chỉnh chiến lược tiếp cận thị trường, như tập trung nhiều hơn vào các nhóm thu nhập đang chiếm ưu thế, hoặc mở rộng các chính sách ưu đãi để thu hút nhóm khách hàng ít phổ biến hơn.

3 Phần 3. ƯỚC LƯỢNG KHOẢNG VÀ KIỂM ĐỊNH GIẢ THUYẾT CHO TỶ LỆ (MỘT BIẾN)

# Tổng số bản ghi (n)
n <- nrow(dt)

3.1 Gender (Nữ)

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

# Số người nữ (Gender = "F") và tổng số quan sát
n_female <- sum(dt$Gender == "F")
n_total  <- nrow(dt)

# Tính khoảng tin cậy 95% và kiểm định giả thuyết với tỷ lệ kỳ vọng p = 0.5
test_female <- prop.test(n_female, n_total, p = 0.5, correct = FALSE)
  • Tỷ lệ nữ trong dữ liệu là 0.51.

  • Khoảng tin cậy 95% cho tỷ lệ này là từ 0.5017 đến 0.5183.

Kiểm định giả thuyết

Giả thuyết đặt ra như sau:

  • H₀: p = 0.5 (Tỷ lệ nữ thuộc danh mục gender là 50%)

  • H₁: p ≠ 0.5 (Tỷ lệ nữ thuộc danh mục gender khác 50%)

# Kiểm định giả thuyết với prop.test
test_female <- prop.test(n_female, n_total, p = 0.5, correct = FALSE)
test_female
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_female out of n_total, null probability 0.5
## X-squared = 5.6164, df = 1, p-value = 0.01779
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.5017287 0.5182531
## sample estimates:
##         p 
## 0.5099936
#Giá trị thống kê Chi-bình phương: 5.6164 với bậc tự do 1.

#Giá trị p = 0.01779.

#Khoảng tin cậy 95% cho tỉ lệ nữ trong tổng thể là từ 0.5017 đến 0.5183.

#Ước lượng tỉ lệ mẫu: 0.5099936 (~50.999%).
  • Với mức ý nghĩa \(\alpha = 0.05\), kết quả kiểm định cho thấy giá trị p là 0.0178.

  • Vì p-value nhỏ hơn 0.05, chúng ta bác bỏ giả thuyết H₀. Vậy tỷ lệ nữ khác 50% .

# test_female$p.value:  Giá trị p (p-value) từ kiểm định tỷ lệ nữ
# ifelse(...):  Hàm điều kiện trong R. Nếu điều kiện đúng thì lấy phần 2, sai thì lấy phần 3

3.2 MaritalStatus (Đã kết hôn_M)

Ước lượng khoảng tin cậy cho tỷ lệ người đã kết hôn

# Số người đã kết hôn (ký hiệu M) và tổng số quan sát
n_married <- sum(dt$MaritalStatus == "M")
n_total   <- nrow(dt)

# Tính khoảng tin cậy 95% và kiểm định giả thuyết
test_married <- prop.test(n_married, n_total, p = 0.5, correct = FALSE)
test_married
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_married out of n_total, null probability 0.5
## X-squared = 7.6057, df = 1, p-value = 0.005818
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.4801120 0.4966352
## sample estimates:
##         p 
## 0.4883704
#Giá trị thống kê Chi-bình phương: 7.6057 (df=1).

#Giá trị p = 0.005818.

#Khoảng tin cậy 95% cho tỉ lệ người đã kết hôn trong tổng thể: từ 48.01% đến 49.66%.

#Tỉ lệ mẫu ước lượng: 48.84%.
#p = 0.5:   Tỷ lệ kỳ vọng trong giả thuyết không H₀ (ở đây: H₀: tỷ lệ đã kết hôn = 0.5)

#correct = FALSE:   Không dùng hiệu chỉnh liên tục (continuity correction), cho kết quả gần với lý thuyết hơn khi mẫu lớn
  • Tỷ lệ người đã kết hôn trong dữ liệu là 0.4884.

  • Khoảng tin cậy 95% cho tỷ lệ này là từ 0.4801 đến 0.4966.

# test_married$conf.int[1] → Cận dưới

# test_married$conf.int[2] → Cận trên

Kiểm định giả thuyết

Giả thuyết:

H₀: p = 0.5 (Tỷ lệ người đã kết hôn là 50%)

H₁: p ≠ 0.5 (Tỷ lệ người đã kết hôn khác 50%)

Giá trị p từ kiểm định là: p_value = 0.0058

Với mức ý nghĩa \(\alpha = 0.05\), Vì P_value < 0.05, ta bác bỏ giả thuyết H₀. Do đó, có bằng chứng thống kê cho thấy tỷ lệ người đã kết hôn khác 50% trong tổng thể.

3.3 ProductFamily (Drink)

# Đếm số sản phẩm là Food
n_drink <- sum(dt$ProductFamily == "Drink", na.rm = TRUE)

# Tổng số quan sát
n_total <- nrow(dt)

# Tỷ lệ sản phẩm Food
prop_drink <- n_drink / n_total
prop_drink
## [1] 0.08891102
  • Tỷ lệ sản phẩm Drink trong dữ liệu là 8.89%.

Ước lượng khoảng tin cậy cho nhóm sản phẩm Drink

ci_drink <- prop.test(n_drink, n_total, correct = FALSE)
  • Khoảng tin cậy 95% cho tỷ lệ sản phẩm thuộc nhóm Drink nằm trong khoảng từ 0.0843 đến 0.0937.

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

Giả thuyết:

  • H₀: p <= 0.09 (Tỷ lệ sản phẩm thuộc nhóm Drink là 9%)

  • H₁: p > 0.09 (Tỷ lệ sản phẩm thuộc nhóm Drink lớn hơn 9%)

test_drink <- prop.test(n_drink, n_total, p = 0.09, alternative = "greater", correct = FALSE)
# # alternative = "greater": kiểm định 1 phía, H1: tỷ lệ thực tế lớn hơn 0.09
test_drink
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_drink out of n_total, null probability 0.09
## X-squared = 0.20357, df = 1, p-value = 0.6741
## alternative hypothesis: true p is greater than 0.09
## 95 percent confidence interval:
##  0.08504142 1.00000000
## sample estimates:
##          p 
## 0.08891102
#Giá trị thống kê Chi-bình phương: 0.20357 (df=1).

#Giá trị p = 0.6741.

#Khoảng tin cậy 95% cho tỉ lệ sản phẩm Drink trong tổng thể là từ 8.5% đến 100% (khoảng trên không giới hạn vì kiểm định một phía).

#Tỉ lệ mẫu ước lượng: 8.89%.
  • Giá trị p từ kiểm định: P_value = 0.6741.

  • Với mức ý nghĩa \(\alpha = 0.05\), 0.6741, Vì P_value > 0.05, ta không đủ cơ sở bác bỏ giả thuyết H₀.

→ Kết luận: Tỷ lệ sản phẩm Drink không lớn hơn 9%.

4 Phần 4. PHÂN TÍCH MỐI QUAN HỆ GIỮA HAI BIẾN ĐỊNH TÍNH

4.1 Gender và ProductFamily

4.1.1 Bảng tần số và tần suất

# Bảng chéo counts
tab_gf <- table(Gender = dt$Gender, ProductFamily = dt$ProductFamily)
tab_gf
##       ProductFamily
## Gender Drink Food Non-Consumable
##      F   669 5149           1352
##      M   581 5004           1304
# Tỉ lệ theo hàng (row‐%)
pct_gf <- round(prop.table(tab_gf, margin = 1) * 100, 1)
pct_gf
##       ProductFamily
## Gender Drink Food Non-Consumable
##      F   9.3 71.8           18.9
##      M   8.4 72.6           18.9

Nhận xét

Drink

  • Về số lượng: nữ có 669 giao dịch so với 581 của nam, nhiều hơn 88 giao dịch.

  • Về tỉ lệ: nữ chiếm 9.3% tổng giao dịch của mình, nam chiếm 8.4%, chênh +0.9%.

Vậy phụ nữ có xu hướng mua đồ uống hơi nhiều hơn nam, nhưng chênh chưa đến 1%.

Food

  • Về số lượng: nữ 5.149 giao dịch, nam 5.004, nhiều hơn 145 giao dịch.

  • Về tỉ lệ: nữ 71.8%, nam 72.6%, chênh −0.8%.

Vậy dù có nhiều giao dịch Food hơn về con số tuyệt đối, vì tổng giao dịch của nữ cũng nhiều hơn, nên tỉ lệ lại thấp hơn nam một chút.

Non-Consumable

  • Về số lượng: nữ 1.352 giao dịch, nam 1.304, nhiều hơn 48 giao dịch.

  • Về tỉ lệ: cả hai đều 18.9%, chênh 0.0%.

vậy sự khác biệt thật sự rất nhỏ, tỉ lệ ngang bằng.

4.1.2 Đồ thị

library(ggplot2)
gf_df <- as.data.frame(table(Gender = dt$Gender, ProductFamily = dt$ProductFamily))

ggplot(  gf_df, aes(x     = ProductFamily,y     = Freq, fill  = Gender, group = Gender)) +
  geom_col(position = position_dodge(width = 0.8),  width    = 0.7) +
  scale_fill_manual(
    name   = "Giới tính",
    values = c("F" = "lightgreen", "M" = "yellow"),
    labels = c("Nữ", "Nam")
  ) +
  labs(
    title = "Số giao dịch theo sản phẩm & giới tính",
    x     = "Nhóm sản phẩm",
    y     = "Số giao dịch"
  ) +
  theme_minimal()

4.1.3 Kiểm định Chi-bình phương độc lập

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

  • H₀: Giới và nhóm sản phẩmlà hai biến độc lập.

  • H₁: Giới và nhóm sản phẩm có liên quan.

test_gf <- chisq.test(tab_gf)
test_gf
## 
##  Pearson's Chi-squared test
## 
## data:  tab_gf
## X-squared = 3.5185, df = 2, p-value = 0.1722

Nhận xét

  • p-value = 0.1722 > 0.05 vậy chấp nhận H₀ nghĩa là không đủ bằng chứng để cho rằng giới tính ảnh hưởng đáng kể đến nhóm sản phẩm mua.

4.2 MaritalStatus và Homeowner

4.2.1 Bảng tần số và tần suất

tab_mo <- table(Marital = dt$MaritalStatus, Owner = dt$Homeowner)
tab_mo
##        Owner
## Marital    N    Y
##       M 1719 5147
##       S 3896 3297
pct_mo <- round(prop.table(tab_mo, margin = 1) * 100, 1)
pct_mo
##        Owner
## Marital    N    Y
##       M 25.0 75.0
##       S 54.2 45.8
# Giả sử tab_mo đã được tạo như trên
diff_owner_count     <- tab_mo["M", "Y"] - tab_mo["S", "Y"]
diff_not_owner_count <- tab_mo["S", "N"] - tab_mo["M", "N"]

Nhận xét

  • Trong bộ dữ liệu, có 3896 người độc thân không sở hữu nhà và 3297 người độc thân sở hữu nhà. Ngoài ra, có 1719 người đã kết hôn không sở hữu nhà và 5147 người đã kết hôn sở hữu nhà.

  • Số người đã kết hôn sở hữu nhà nhiều hơn người độc thân là 1850 người.

  • Người độc thân không sở hữu nhà nhiều hơn người đã kết hôn là 2177 người.

4.2.2 Đồ thi

library(ggplot2)
mo_df <- as.data.frame(table(Marital = dt$MaritalStatus, Owner   = dt$Homeowner))

ggplot(  mo_df, aes(x     = Marital,y     = Freq, fill  = Owner, group = Owner)) +
  geom_col(position = position_dodge(width = 0.8),  width    = 0.7) +
  scale_fill_manual(
    name   = "Sở hữu nhà",
    values = c("Y" = "lightblue","N" = "lightpink"),
    labels = c("Có", "Không")
  ) +
  labs(
    title = "Số khách có/không sở hữu nhà theo tình trạng hôn nhân",
    x     = "Tình trạng hôn nhân",
    y     = "Số khách hàng"
  ) +
  theme_minimal()

4.2.3 Kiểm định Chi-bình phương độc lập

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

  • H₀: Tình trạng hôn nhân và việc sở hữu nhà là hai biến độc lập.

  • H₁: Tình trạng hôn nhân và việc sở hữu nhà có liên quan.

test_mo <- chisq.test(tab_mo)
test_mo
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tab_mo
## X-squared = 1241.2, df = 1, p-value < 2.2e-16

Nhận xét

  • p-value < 2.2e-16 < 0.05 vậy bác bỏ H₀ nghĩa là đủ bằng chứng để cho rằng Tình trạng hôn nhân và việc sở hữu nhà có liên quan.

4.3 AnnualIncome và ProductCategory

4.3.1 Bảng tần số và tần suất

tab_ap <- table(Income = dt$AnnualIncome, Category = dt$ProductCategory)
tab_ap
##                Category
## Income          Baking Goods Bathroom Products Beer and Wine Bread
##   $10K - $30K            119                85            80   108
##   $110K - $130K           18                16            14    23
##   $130K - $150K           22                19            15    24
##   $150K +                 11                 8             3    10
##   $30K - $50K            151               116           121   134
##   $50K - $70K             86                50            61    63
##   $70K - $90K             59                51            39    50
##   $90K - $110K            18                20            23    13
##                Category
## Income          Breakfast Foods Candles Candy Canned Anchovies Canned Clams
##   $10K - $30K               111       6    76               10           12
##   $110K - $130K               7       1    16                2            1
##   $130K - $150K              28       2    19                1            3
##   $150K +                     7       1     8                1            1
##   $30K - $50K               143      21   127               14           20
##   $50K - $70K                62       7    60                8            6
##   $70K - $90K                42       7    29                6            7
##   $90K - $110K               17       0    17                2            3
##                Category
## Income          Canned Oysters Canned Sardines Canned Shrimp Canned Soup
##   $10K - $30K                5               8             9          98
##   $110K - $130K              4               2             0          19
##   $130K - $150K              3               1             2          17
##   $150K +                    1               1             0           8
##   $30K - $50K               10              18            16         137
##   $50K - $70K                5               5             7          67
##   $70K - $90K                5               3             2          50
##   $90K - $110K               2               2             2           8
##                Category
## Income          Canned Tuna Carbonated Beverages Cleaning Supplies
##   $10K - $30K            13                   36                47
##   $110K - $130K           3                    6                 8
##   $130K - $150K           5                    3                 7
##   $150K +                 3                    6                 4
##   $30K - $50K            28                   51                51
##   $50K - $70K            19                   20                35
##   $70K - $90K            10                   23                25
##   $90K - $110K            6                    9                12
##                Category
## Income          Cold Remedies Dairy Decongestants Drinks Eggs Electrical
##   $10K - $30K              23   174            22     30   37         74
##   $110K - $130K             2    38             4      9    9         20
##   $130K - $150K             6    49             5      8   15         21
##   $150K +                   3    17             0      4    4          8
##   $30K - $50K              32   299            31     46   67        114
##   $50K - $70K              12   160             8     19   36         57
##   $70K - $90K              10   126            10     16   20         47
##   $90K - $110K              5    40             5      3   10         14
##                Category
## Income          Frozen Desserts Frozen Entrees Fruit Hardware Hot Beverages
##   $10K - $30K                75             20   150       31            48
##   $110K - $130K              17             10    29        3            11
##   $130K - $150K              17              5    48       10             9
##   $150K +                     8              2    10        1             5
##   $30K - $50K               112             35   252       41            79
##   $50K - $70K                44             21   136       25            33
##   $70K - $90K                36             18   104       13            26
##   $90K - $110K               14              7    36        5            15
##                Category
## Income          Hygiene Jams and Jellies Kitchen Products Magazines Meat
##   $10K - $30K        36              137               47        49  156
##   $110K - $130K       6               31                5        17   41
##   $130K - $150K      14               32               14         9   52
##   $150K +             4                8                3         1   14
##   $30K - $50K        62              185               74        65  253
##   $50K - $70K        37              103               51        36  115
##   $70K - $90K        29               71               20        18  100
##   $90K - $110K        9               21                3         7   30
##                Category
## Income          Miscellaneous Packaged Vegetables Pain Relievers Paper Products
##   $10K - $30K              10                   9             42             70
##   $110K - $130K             1                   1              7             19
##   $130K - $150K             6                   1              8             17
##   $150K +                   0                   2              5              8
##   $30K - $50K               8                  20             61            101
##   $50K - $70K              14                   8             34             67
##   $70K - $90K               2                   7             30             46
##   $90K - $110K              1                   0              5             17
##                Category
## Income          Pizza Plastic Products Pure Juice Beverages Seafood Side Dishes
##   $10K - $30K      50               41                   34      17          36
##   $110K - $130K    13                6                    9       3           2
##   $130K - $150K    12                7                    5       8           8
##   $150K +           1                2                    5       5           3
##   $30K - $50K      59               33                   52      44          53
##   $50K - $70K      31               31                   25      11          23
##   $70K - $90K      15               17                   26      12          23
##   $90K - $110K     13                4                    9       2           5
##                Category
## Income          Snack Foods Specialty Starchy Foods Vegetables
##   $10K - $30K           329        65            70        385
##   $110K - $130K          85        13            18         74
##   $130K - $150K          83        18            15         87
##   $150K +                35         5             5         32
##   $30K - $50K           533        96            85        551
##   $50K - $70K           274        50            48        300
##   $70K - $90K           184        32            28        215
##   $90K - $110K           77        10             8         84
pct_ap <- round(prop.table(tab_ap, margin = 1) * 100, 1)
pct_ap
##                Category
## Income          Baking Goods Bathroom Products Beer and Wine Bread
##   $10K - $30K            3.9               2.8           2.6   3.5
##   $110K - $130K          2.8               2.5           2.2   3.6
##   $130K - $150K          2.9               2.5           2.0   3.2
##   $150K +                4.0               2.9           1.1   3.7
##   $30K - $50K            3.3               2.5           2.6   2.9
##   $50K - $70K            3.6               2.1           2.6   2.7
##   $70K - $90K            3.5               3.0           2.3   2.9
##   $90K - $110K           2.9               3.3           3.8   2.1
##                Category
## Income          Breakfast Foods Candles Candy Canned Anchovies Canned Clams
##   $10K - $30K               3.6     0.2   2.5              0.3          0.4
##   $110K - $130K             1.1     0.2   2.5              0.3          0.2
##   $130K - $150K             3.7     0.3   2.5              0.1          0.4
##   $150K +                   2.6     0.4   2.9              0.4          0.4
##   $30K - $50K               3.1     0.5   2.8              0.3          0.4
##   $50K - $70K               2.6     0.3   2.5              0.3          0.3
##   $70K - $90K               2.5     0.4   1.7              0.4          0.4
##   $90K - $110K              2.8     0.0   2.8              0.3          0.5
##                Category
## Income          Canned Oysters Canned Sardines Canned Shrimp Canned Soup
##   $10K - $30K              0.2             0.3           0.3         3.2
##   $110K - $130K            0.6             0.3           0.0         3.0
##   $130K - $150K            0.4             0.1           0.3         2.2
##   $150K +                  0.4             0.4           0.0         2.9
##   $30K - $50K              0.2             0.4           0.3         3.0
##   $50K - $70K              0.2             0.2           0.3         2.8
##   $70K - $90K              0.3             0.2           0.1         2.9
##   $90K - $110K             0.3             0.3           0.3         1.3
##                Category
## Income          Canned Tuna Carbonated Beverages Cleaning Supplies
##   $10K - $30K           0.4                  1.2               1.5
##   $110K - $130K         0.5                  0.9               1.2
##   $130K - $150K         0.7                  0.4               0.9
##   $150K +               1.1                  2.2               1.5
##   $30K - $50K           0.6                  1.1               1.1
##   $50K - $70K           0.8                  0.8               1.5
##   $70K - $90K           0.6                  1.3               1.5
##   $90K - $110K          1.0                  1.5               2.0
##                Category
## Income          Cold Remedies Dairy Decongestants Drinks Eggs Electrical
##   $10K - $30K             0.7   5.6           0.7    1.0  1.2        2.4
##   $110K - $130K           0.3   5.9           0.6    1.4  1.4        3.1
##   $130K - $150K           0.8   6.4           0.7    1.1  2.0        2.8
##   $150K +                 1.1   6.2           0.0    1.5  1.5        2.9
##   $30K - $50K             0.7   6.5           0.7    1.0  1.5        2.5
##   $50K - $70K             0.5   6.8           0.3    0.8  1.5        2.4
##   $70K - $90K             0.6   7.4           0.6    0.9  1.2        2.8
##   $90K - $110K            0.8   6.5           0.8    0.5  1.6        2.3
##                Category
## Income          Frozen Desserts Frozen Entrees Fruit Hardware Hot Beverages
##   $10K - $30K               2.4            0.6   4.9      1.0           1.6
##   $110K - $130K             2.6            1.6   4.5      0.5           1.7
##   $130K - $150K             2.2            0.7   6.3      1.3           1.2
##   $150K +                   2.9            0.7   3.7      0.4           1.8
##   $30K - $50K               2.4            0.8   5.5      0.9           1.7
##   $50K - $70K               1.9            0.9   5.7      1.1           1.4
##   $70K - $90K               2.1            1.1   6.1      0.8           1.5
##   $90K - $110K              2.3            1.1   5.9      0.8           2.4
##                Category
## Income          Hygiene Jams and Jellies Kitchen Products Magazines Meat
##   $10K - $30K       1.2              4.4              1.5       1.6  5.0
##   $110K - $130K     0.9              4.8              0.8       2.6  6.4
##   $130K - $150K     1.8              4.2              1.8       1.2  6.8
##   $150K +           1.5              2.9              1.1       0.4  5.1
##   $30K - $50K       1.3              4.0              1.6       1.4  5.5
##   $50K - $70K       1.6              4.3              2.2       1.5  4.9
##   $70K - $90K       1.7              4.2              1.2       1.1  5.9
##   $90K - $110K      1.5              3.4              0.5       1.1  4.9
##                Category
## Income          Miscellaneous Packaged Vegetables Pain Relievers Paper Products
##   $10K - $30K             0.3                 0.3            1.4            2.3
##   $110K - $130K           0.2                 0.2            1.1            3.0
##   $130K - $150K           0.8                 0.1            1.1            2.2
##   $150K +                 0.0                 0.7            1.8            2.9
##   $30K - $50K             0.2                 0.4            1.3            2.2
##   $50K - $70K             0.6                 0.3            1.4            2.8
##   $70K - $90K             0.1                 0.4            1.8            2.7
##   $90K - $110K            0.2                 0.0            0.8            2.8
##                Category
## Income          Pizza Plastic Products Pure Juice Beverages Seafood Side Dishes
##   $10K - $30K     1.6              1.3                  1.1     0.6         1.2
##   $110K - $130K   2.0              0.9                  1.4     0.5         0.3
##   $130K - $150K   1.6              0.9                  0.7     1.1         1.1
##   $150K +         0.4              0.7                  1.8     1.8         1.1
##   $30K - $50K     1.3              0.7                  1.1     1.0         1.2
##   $50K - $70K     1.3              1.3                  1.1     0.5         1.0
##   $70K - $90K     0.9              1.0                  1.5     0.7         1.3
##   $90K - $110K    2.1              0.7                  1.5     0.3         0.8
##                Category
## Income          Snack Foods Specialty Starchy Foods Vegetables
##   $10K - $30K          10.6       2.1           2.3       12.5
##   $110K - $130K        13.2       2.0           2.8       11.5
##   $130K - $150K        10.9       2.4           2.0       11.4
##   $150K +              12.8       1.8           1.8       11.7
##   $30K - $50K          11.6       2.1           1.8       12.0
##   $50K - $70K          11.6       2.1           2.0       12.7
##   $70K - $90K          10.8       1.9           1.6       12.6
##   $90K - $110K         12.6       1.6           1.3       13.7

Nhận xét

  • Nhóm thu nhập từ "$30K - $50K" ghi nhận số giao dịch cao nhất ở hầu hết các danh mục, ví dụ:

    • Snack Foods: 533 giao dịch.
    • Vegetables: 551 giao dịch.
    • Dairy: 299 giao dịch.

    Điều này có thể là do nhóm thu nhập trung lưu có khả năng chi tiêu cao nhưng vẫn ưu tiên các mặt hàng thiết yếu.

  • Nhóm thu nhập thấp ("$10K - $30K") cũng có lượng giao dịch tương đối lớn, đặc biệt ở:

    • Vegetables: 385 giao dịch.
    • Snack Foods: 329 giao dịch.

    Điều này cho thấy nhu cầu với sản phẩm cơ bản, giá cả phải chăng vẫn rất cao.

  • Ngược lại, nhóm thu nhập cao ("$130K - $150K", "$150K +") có số giao dịch thấp hơn rõ rệt, ví dụ:

    • Snack Foods: 35 giao dịch.
    • Vegetables: 32 giao dịch.

    Có thể do số mẫu nhóm thu nhập cao ít hơn hoặc họ ưu tiên mua sắm online, sản phẩm cao cấp hơn.

4.3.2 Kiểm định Chi-bình phương độc lập

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

  • H₀: Hai biến khoảng thu nhập hằng năm và hạng mục sản phẩm là độc lập.

  • H₁: Hai biến khoảng thu nhập hằng năm và hạng mục sản phẩm có mối liên quan.

test_sp <- chisq.test(tab_ap)
## Warning in chisq.test(tab_ap): Chi-squared approximation may be incorrect
test_sp
## 
##  Pearson's Chi-squared test
## 
## data:  tab_ap
## X-squared = 295.23, df = 308, p-value = 0.6897

Nhận xét

  • p-value = 0.6897 > 0.05 vậy chấp nhận H₀ nghĩa là không đủ bằng chứng để cho rằng Hai biến khoảng thu nhập hằng năm và hạng mục sản phẩm là độc lập.

5 Phần 5: TỔNG KẾT VÀ THẢO LUẬN

5.1 Tóm tắt kết quả chính

5.1.1 Nhân khẩu học

  • Giới tính:
    • Nữ chiếm 51%, nam chiếm 49%—tương đối cân bằng.
    • Hành vi mua sắm tương đồng, chỉ khác biệt nhỏ ở một số danh mục (ví dụ: Women’s Health, Beauty).
  • Tình trạng hôn nhân & Nhà ở:
    • Người đã kết hôn (M) và độc thân (S) phân bố gần bằng nhau.
    • 60% khách hàng sở hữu nhà (Homeowner = Y).
    • Người kết hôn có tỉ lệ sở hữu nhà cao hơn (75% vs. 46%), thể hiện sự ổn định tài chính và nhu cầu mua sắm cho gia đình.

5.1.2 Thu nhập

  • Nhóm $30K–$50K chiếm đông nhất (32,7%), phản ánh tầng lớp trung lưu.
  • Nhóm thu nhập thấp ($10K–$30K) và trung bình–cao ($50K–$90K) cũng chiếm tỷ trọng lớn (~25% mỗi nhóm).
  • Nhóm > $150K chỉ ~2%, mẫu nhỏ nhưng có xu hướng tiêu dùng sản phẩm cao cấp, dịch vụ tiện lợi.

5.1.3 Phân bố địa lý

  • Quốc gia: 68% giao dịch từ Mỹ; còn lại từ Canada, Mexico.
  • Bang: WA, CA, OR chiếm phần lớn—tương ứng với các thành phố Salem, Tacoma, Los Angeles đứng đầu về số lượng giao dịch.
  • Thành phố: Salem (~10% giao dịch), Tacoma (~9%), Los Angeles (~6%).

5.1.4 Hành vi theo sản phẩm

  • ProductFamily:
    • Food (72,2%), Non-consumable (19%), Drink (9%).
  • ProductDepartment:
    • Produce (12,3%), Snack Foods (11,4%), Dairy (6,4%), Frozen Foods (9,8%).
  • ProductCategory:
    • Nhóm rau củ tươi và đồ ăn nhanh đứng đầu ở hầu hết các phân khúc thu nhập.
    • Nhóm thu nhập thấp–trung bình ưu tiên các mặt hàng thiết yếu, giá cả phải chăng; thu nhập cao mua nhiều snack, frozen và sản phẩm chăm sóc sức khỏe.

5.2 Hạn chế

  1. Thiếu biến định lượng: không phân tích sâu về tuổi, giá trị đơn hàng, tần suất mua.
  2. Mẫu không đồng đều: nhóm thu nhập rất cao và các thành phố nhỏ có ít quan sát, giảm tính đại diện.
  3. Tương quan chéo: chưa điều chỉnh mối liên hệ giữa thu nhập, nhà ở, địa lý.
  4. Giới tính & văn hóa: chưa khai thác khác biệt chi tiết giữa nam/nữ hoặc theo vùng miền.

5.3 Đề xuất chiến lược

  • Phân khúc & Marketing
    • Nhóm $30K–$70K: chú trọng combo rau củ tươi, sữa, thực phẩm đông lạnh; ưu đãi theo gói.
    • Nhóm đã kết hôn & có nhà: ưu đãi đồ gia dụng, gói giao hàng định kỳ.
  • Kênh phân phối
    • Mở rộng tại Salem, Tacoma, Los Angeles; tối ưu kệ hàng cho Produce, Snack Foods, Dairy.
    • Xem xét giảm diện tích với danh mục ít bán (ví dụ Canned Oysters, Candles).
  • Công nghệ & Cá nhân hóa
    • Dùng CRM thu thập thêm dữ liệu định lượng, phân tích hành vi theo thời gian thực; gợi ý sản phẩm tự động.

5.4 Hướng nghiên cứu tiếp theo

  1. So sánh “thu nhập cao + độc thân + có nhà” vs. “thu nhập cao + đã kết hôn” về hành vi mua sắm.
  2. Ảnh hưởng của tuổi kết hợp với hôn nhân và thu nhập đến lựa chọn sản phẩm.
  3. Sự khác biệt tiêu dùng tiện lợi (Frozen, Snack) giữa đô thị – nông thôn.
  4. Khách nào chi mạnh cho Non-consumable?
  5. Phân tích tỷ trọng chi tiêu chi tiết theo từng mức thu nhập và danh mục sản phẩm.