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

1.1 Đọc và Làm quen với Dữ liệu

library(tidyverse)
library(janitor)

# Đọc dữ liệu
st <- read.csv(file.choose(), header = T)

# Chuẩn hóa tên cột
st <- clean_names(st)

# Hiển thị cấu trúc dữ liệu
str(st)
## 'data.frame':    14059 obs. of  16 variables:
##  $ x                 : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ purchase_date     : chr  "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
##  $ customer_id       : int  7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
##  $ gender            : chr  "F" "M" "F" "M" ...
##  $ marital_status    : chr  "S" "M" "M" "M" ...
##  $ homeowner         : chr  "Y" "Y" "N" "Y" ...
##  $ children          : int  2 5 2 3 3 3 2 2 3 1 ...
##  $ annual_income     : chr  "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
##  $ city              : chr  "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
##  $ stateor_province  : chr  "CA" "CA" "WA" "OR" ...
##  $ country           : chr  "USA" "USA" "USA" "USA" ...
##  $ product_family    : chr  "Food" "Food" "Food" "Food" ...
##  $ product_department: chr  "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
##  $ product_category  : chr  "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
##  $ units_sold        : int  5 5 3 4 4 3 4 6 1 2 ...
##  $ revenue           : num  27.38 14.9 5.52 4.44 14 ...
# Xem trước và sau dữ liệu
head(st)
x purchase_date customer_id gender marital_status homeowner children annual_income city stateor_province country product_family product_department product_category units_sold revenue
1 2007-12-18 7223 F S Y 2 $30K - $50K Los Angeles CA USA Food Snack Foods Snack Foods 5 27.38
2 2007-12-20 7841 M M Y 5 $70K - $90K Los Angeles CA USA Food Produce Vegetables 5 14.90
3 2007-12-21 8374 F M N 2 $50K - $70K Bremerton WA USA Food Snack Foods Snack Foods 3 5.52
4 2007-12-21 9619 M M Y 3 $30K - $50K Portland OR USA Food Snacks Candy 4 4.44
5 2007-12-22 1900 F S Y 3 $130K - $150K Beverly Hills CA USA Drink Beverages Carbonated Beverages 4 14.00
6 2007-12-22 6696 F M Y 3 $10K - $30K Beverly Hills CA USA Food Deli Side Dishes 3 4.37
tail(st)
x purchase_date customer_id gender marital_status homeowner children annual_income city stateor_province country product_family product_department product_category units_sold revenue
14054 14054 2009-12-29 2032 F M N 3 $10K - $30K Yakima WA USA Non-Consumable Household Paper Products 5 14.50
14055 14055 2009-12-29 9102 F M Y 2 $10K - $30K Bremerton WA USA Food Baking Goods Baking Goods 3 9.64
14056 14056 2009-12-29 4822 F M Y 3 $10K - $30K Walla Walla WA USA Food Frozen Foods Vegetables 3 7.45
14057 14057 2009-12-31 250 M S Y 1 $30K - $50K Portland OR USA Drink Beverages Pure Juice Beverages 4 3.24
14058 14058 2009-12-31 6153 F S N 4 $50K - $70K Spokane WA USA Drink Dairy Dairy 2 4.00
14059 14059 2009-12-31 3656 M S N 3 $50K - $70K Portland OR USA Non-Consumable Household Electrical 5 25.53

1.2 Kiểm tra giá trị thiếu

# Kiểm tra giá trị thiếu trong các biến định tính
st %>%
  select(gender, marital_status, homeowner, annual_income, city, stateor_province, country,
         product_family, product_department, product_category) %>%
  summarise_all(~sum(is.na(.)))
gender marital_status homeowner annual_income city stateor_province country product_family product_department product_category
0 0 0 0 0 0 0 0 0 0

Không có giá trị NA trong các biến định tính, do đó không cần xử lý thiếu dữ liệu.

1.3 Chuyển đổi biến định tính sang kiểu factor

st <- st %>%
  mutate(
    gender = as_factor(gender),
    marital_status = as_factor(marital_status),
    homeowner = as_factor(homeowner),
    annual_income = as_factor(annual_income),
    city = as_factor(city),
    stateor_province = as_factor(stateor_province),
    country = as_factor(country),
    product_family = as_factor(product_family),
    product_department = as_factor(product_department),
    product_category = as_factor(product_category)
  )

# Kiểm tra lại kiểu dữ liệu sau khi chuyển đổi
str(st)
## 'data.frame':    14059 obs. of  16 variables:
##  $ x                 : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ purchase_date     : chr  "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
##  $ customer_id       : int  7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
##  $ gender            : Factor w/ 2 levels "F","M": 1 2 1 2 1 1 2 1 2 2 ...
##  $ marital_status    : Factor w/ 2 levels "S","M": 1 2 2 2 1 2 1 2 2 1 ...
##  $ homeowner         : Factor w/ 2 levels "Y","N": 1 1 2 1 1 1 1 1 1 2 ...
##  $ children          : int  2 5 2 3 3 3 2 2 3 1 ...
##  $ annual_income     : Factor w/ 8 levels "$30K - $50K",..: 1 2 3 1 4 5 1 6 5 3 ...
##  $ city              : Factor w/ 23 levels "Los Angeles",..: 1 1 2 3 4 4 5 6 7 8 ...
##  $ stateor_province  : Factor w/ 10 levels "CA","WA","OR",..: 1 1 2 3 1 1 3 2 2 1 ...
##  $ country           : Factor w/ 3 levels "USA","Mexico",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ product_family    : Factor w/ 3 levels "Food","Drink",..: 1 1 1 1 2 1 1 1 3 3 ...
##  $ product_department: Factor w/ 22 levels "Snack Foods",..: 1 2 1 3 4 5 6 7 8 9 ...
##  $ product_category  : Factor w/ 45 levels "Snack Foods",..: 1 2 1 3 4 5 6 7 8 9 ...
##  $ units_sold        : int  5 5 3 4 4 3 4 6 1 2 ...
##  $ revenue           : num  27.38 14.9 5.52 4.44 14 ...

2 Phân tích Mô tả Một biến Định tính

library(ggplot2)
library(scales)

# Hàm hỗ trợ để tạo bảng tần suất và biểu đồ
analyze_factor <- function(data, varname, title, pie = FALSE) {
  df <- data %>%
    count(!!sym(varname)) %>%
    mutate(percent = n / sum(n))

  # Bảng tần suất
  print(df)

  # Biểu đồ
  if (pie && nrow(df) <= 5) {
    # Pie chart cho biến ít mức
    ggplot(df, aes(x = "", y = percent, fill = !!sym(varname))) +
      geom_col(width = 1) +
      coord_polar(theta = "y") +
      geom_text(aes(label = percent(percent)), 
                position = position_stack(vjust = 0.5)) +
      labs(title = paste("Biểu đồ tròn -", title), x = NULL, y = NULL) +
      theme_void()
  } else {
    # Bar chart
    ggplot(df, aes(x = fct_reorder(!!sym(varname), n), y = percent)) +
      geom_col(fill = "steelblue") +
      coord_flip() +
      geom_text(aes(label = percent(percent)), hjust = -0.1) +
      scale_y_continuous(labels = percent_format()) +
      labs(title = paste("Biểu đồ cột -", title),
           x = title, y = "Tỷ lệ") +
      theme_minimal()
  }
}

2.1 Biến gender

analyze_factor(st, "gender", "Giới tính", pie = TRUE)
##   gender    n   percent
## 1      F 7170 0.5099936
## 2      M 6889 0.4900064

Nhận xét:

  • Giới tính gồm 2 phân loại: F (Nữ) và M (Nam).

  • Tỷ lệ nữ chiếm khoảng 50.9%, trong khi nam chiếm 49% – phân bố gần như cân bằng.

  • Sự cân đối này cho thấy tập khách hàng không bị lệch giới rõ rệt, phù hợp với chiến lược marketing hướng tới cả hai giới.

2.2 Biến marital_status

analyze_factor(st, "marital_status", "Tình trạng hôn nhân", pie = TRUE)
##   marital_status    n   percent
## 1              S 7193 0.5116296
## 2              M 6866 0.4883704

Nhận xét:

  • Có 2 phân loại: M (Đã kết hôn), S (Độc thân).

  • Nhóm khách hàng đã kết hôn chiếm tỷ trọng thấp hơn (~49%), cho thấy đa phần khách hàng là người chưa có gia đình – đây có thể là đối tượng chi tiêu thường xuyên, ổn định hơn.

2.3 Biến homeowner

analyze_factor(st, "homeowner", "Chủ sở hữu nhà", pie = TRUE)
##   homeowner    n   percent
## 1         Y 8444 0.6006117
## 2         N 5615 0.3993883

Nhận xét:

  • Có 2 phân loại: Y (Có sở hữu nhà) và N (Không).

  • Tỷ lệ sở hữu nhà > 60%, cho thấy khách hàng chủ yếu thuộc nhóm thu nhập trung bình trở lên, có thể chi tiêu nhiều hơn.

2.4 Biến annual_income

analyze_factor(st, "annual_income", "Thu nhập hàng năm")
##   annual_income    n    percent
## 1   $30K - $50K 4601 0.32726367
## 2   $70K - $90K 1709 0.12155914
## 3   $50K - $70K 2370 0.16857529
## 4 $130K - $150K  760 0.05405790
## 5   $10K - $30K 3090 0.21978804
## 6       $150K +  273 0.01941817
## 7  $90K - $110K  613 0.04360196
## 8 $110K - $130K  643 0.04573583

Nhận xét:

  • Dữ liệu thu nhập được phân loại thành các khoảng (ví dụ: “$30K - $50K”, “$50K - $70K”,…).

  • Nhóm phổ biến nhất là “$30K - $50K”, tiếp theo là “$10K - $30K”, cho thấy phần lớn khách hàng thuộc tầng lớp thu nhập trung bình.

  • Những nhóm thu nhập rất cao hoặc rất thấp chiếm tỷ trọng nhỏ, hàm ý cần thiết kế sản phẩm/dịch vụ phù hợp cho đối tượng phổ thông.

2.5 Biến city

analyze_factor(st, "city", "Thành phố")
##             city    n     percent
## 1    Los Angeles  926 0.065865282
## 2      Bremerton  834 0.059321431
## 3       Portland  876 0.062308841
## 4  Beverly Hills  811 0.057685468
## 5          Salem 1386 0.098584537
## 6         Yakima  376 0.026744434
## 7     Bellingham  143 0.010171420
## 8      San Diego  866 0.061597553
## 9         Tacoma 1257 0.089408920
## 10 San Francisco  130 0.009246746
## 11       Seattle  922 0.065580767
## 12   Walla Walla  160 0.011380610
## 13       Spokane  875 0.062237712
## 14       Orizaba  464 0.033003770
## 15        Merida  654 0.046518245
## 16     Vancouver  633 0.045024539
## 17       Camacho  452 0.032150224
## 18       Hidalgo  845 0.060103848
## 19      Victoria  176 0.012518671
## 20    San Andres  621 0.044170994
## 21      Acapulco  383 0.027242336
## 22   Mexico City  194 0.013798990
## 23   Guadalajara   75 0.005334661

Nhận xét:

  • Một số thành phố lớn như “Salem”, “Tacoma” có tần suất giao dịch cao hơn rõ rệt.

  • Có sự phân bố không đồng đều – cần cân nhắc điều chỉnh nguồn cung và chiến dịch tiếp thị tùy theo từng khu vực.

2.6 Biến stateor_province

analyze_factor(st, "stateor_province", "Tiểu bang")
##    stateor_province    n     percent
## 1                CA 2733 0.194395049
## 2                WA 4567 0.324845295
## 3                OR 2262 0.160893378
## 4          Veracruz  464 0.033003770
## 5           Yucatan  654 0.046518245
## 6                BC  809 0.057543211
## 7         Zacatecas 1297 0.092254072
## 8                DF  815 0.057969984
## 9          Guerrero  383 0.027242336
## 10          Jalisco   75 0.005334661

Nhận xét:

  • Các bang như CA (California), WA (Washington), OR (Oregon) chiếm toàn bộ dữ liệu – cho thấy thị trường tập trung vào vùng bờ Tây nước Mỹ.

  • California có lượng khách hàng đông nhất, là khu vực tiềm năng lớn để mở rộng kinh doanh.

2.7 Biến country

analyze_factor(st, "country", "Quốc gia", pie = TRUE)
##   country    n    percent
## 1     USA 9562 0.68013372
## 2  Mexico 3688 0.26232307
## 3  Canada  809 0.05754321

Nhận xét:

  • Tất cả khách hàng đều đến từ USA, điều này nhất quán với dữ liệu địa lý – giúp thu hẹp phạm vi phân tích thị trường.

2.8 Biến product_family

analyze_factor(st, "product_family", "Nhóm sản phẩm")
##   product_family     n    percent
## 1           Food 10153 0.72217085
## 2          Drink  1250 0.08891102
## 3 Non-Consumable  2656 0.18891813

Nhận xét:

  • Ba nhóm chính: Food, Drink, Non-Consumable.

  • Nhóm Food chiếm tỷ trọng lớn nhất (>72%), phản ánh xu hướng mua sắm thực phẩm là chủ yếu trong hệ thống siêu thị.

2.9 Biến product_department

analyze_factor(st, "product_department", "Dòng sản phẩm")
##     product_department    n     percent
## 1          Snack Foods 1600 0.113806103
## 2              Produce 1994 0.141830856
## 3               Snacks  352 0.025037343
## 4            Beverages  680 0.048367594
## 5                 Deli  699 0.049719041
## 6         Frozen Foods 1382 0.098300021
## 7         Canned Foods  977 0.069492852
## 8            Household 1420 0.101002916
## 9   Health and Hygiene  893 0.063518031
## 10        Baking Goods 1072 0.076250089
## 11               Dairy  903 0.064229319
## 12         Periodicals  202 0.014368020
## 13 Alcoholic Beverages  356 0.025321858
## 14            Checkout   82 0.005832563
## 15             Seafood  102 0.007255139
## 16         Baked Goods  425 0.030229746
## 17                Meat   89 0.006330464
## 18       Starchy Foods  277 0.019702682
## 19     Breakfast Foods  188 0.013372217
## 20     Canned Products  109 0.007753041
## 21            Carousel   59 0.004196600
## 22                Eggs  198 0.014083505

Nhận xét:

  • Các dòng sản phẩm đa dạng: Snack Foods, Produce, Beverages, v.v.

  • Snack Foods và Produce là 2 dòng sản phẩm phổ biến nhất – gợi ý ưu tiên quản lý tồn kho, khuyến mãi cho 2 nhóm này.

2.10 Biến product_category

analyze_factor(st, "product_category", "Danh mục sản phẩm")
##        product_category    n     percent
## 1           Snack Foods 1600 0.113806103
## 2            Vegetables 1728 0.122910591
## 3                 Candy  352 0.025037343
## 4  Carbonated Beverages  154 0.010953837
## 5           Side Dishes  153 0.010882709
## 6       Breakfast Foods  417 0.029660716
## 7           Canned Soup  404 0.028736041
## 8     Cleaning Supplies  189 0.013443346
## 9        Pain Relievers  192 0.013656732
## 10         Baking Goods  484 0.034426346
## 11          Canned Tuna   87 0.006188207
## 12     Plastic Products  141 0.010029163
## 13                Fruit  765 0.054413543
## 14              Hygiene  197 0.014012376
## 15                 Meat  761 0.054129028
## 16                Dairy  903 0.064229319
## 17               Drinks  135 0.009602390
## 18            Magazines  202 0.014368020
## 19        Beer and Wine  356 0.025321858
## 20             Hardware  129 0.009175617
## 21       Paper Products  345 0.024539441
## 22              Seafood  102 0.007255139
## 23           Electrical  355 0.025250729
## 24    Bathroom Products  365 0.025962017
## 25     Kitchen Products  217 0.015434953
## 26                Bread  425 0.030229746
## 27            Specialty  289 0.020556227
## 28      Canned Sardines   40 0.002845153
## 29        Miscellaneous   42 0.002987410
## 30                Pizza  194 0.013798990
## 31        Decongestants   85 0.006045949
## 32        Starchy Foods  277 0.019702682
## 33     Jams and Jellies  588 0.041823743
## 34      Frozen Desserts  323 0.022974607
## 35                 Eggs  198 0.014083505
## 36 Pure Juice Beverages  165 0.011736254
## 37        Hot Beverages  226 0.016075112
## 38       Canned Oysters   35 0.002489508
## 39  Packaged Vegetables   48 0.003414183
## 40       Frozen Entrees  118 0.008393200
## 41     Canned Anchovies   44 0.003129668
## 42              Candles   45 0.003200797
## 43        Cold Remedies   93 0.006614980
## 44        Canned Shrimp   38 0.002702895
## 45         Canned Clams   53 0.003769827

Nhận xét:

  • Có rất nhiều Danh mục sản phẩm – trong đó Snack Foods, Vegetables, Dairy là các loại được mua nhiều nhất.

  • Có thể nhóm lại các sản phẩm ít phổ biến để giảm độ phức tạp trong quản lý danh mục.


3 Ước lượng Khoảng và Kiểm định Giả thuyết cho Tỷ lệ

# Hàm hỗ trợ: Tính khoảng tin cậy và kiểm định giả thuyết
analyze_proportion <- function(data, var, level, null_prop, alternative = "two.sided") {
  tbl <- table(data[[var]])
  n <- sum(tbl)
  x <- tbl[[level]]

  cat("Tổng số quan sát:", n, "\n")
  cat("Số lượng", level, ":", x, "\n")
  cat("Tỷ lệ quan sát:", round(x / n, 4), "\n\n")

  # Khoảng tin cậy 95% cho tỷ lệ
  ci <- prop.test(x, n, correct = FALSE)$conf.int
  cat("Khoảng tin cậy 95% cho tỷ lệ của", level, ":\n")
  print(ci)
  cat("\n")

  # Kiểm định giả thuyết
  test <- prop.test(x, n, p = null_prop, alternative = alternative, correct = FALSE)
  print(test)
}

3.1 Biến gender

Mức quan tâm: “F” (nữ)

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

  • \(H_0\): Tỷ lệ nữ = 0.5

  • \(H_1\): Tỷ lệ nữ ≠ 0.5 (hai phía)

analyze_proportion(st, "gender", "F", null_prop = 0.5, alternative = "two.sided")
## Tổng số quan sát: 14059 
## Số lượng F : 7170 
## Tỷ lệ quan sát: 0.51 
## 
## Khoảng tin cậy 95% cho tỷ lệ của F :
## [1] 0.5017287 0.5182531
## attr(,"conf.level")
## [1] 0.95
## 
## 
##  1-sample proportions test without continuity correction
## 
## data:  x out of n, null probability null_prop
## 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

Nhận xét:

  • Tỷ lệ khách hàng nữ quan sát được là khoảng 50.9%.

  • Khoảng tin cậy 95% chứa giá trị 0.5 ⇒ Bác bỏ \(H_0\).

  • Giá trị p < 0.05 ⇒ Có bằng chứng thống kê cho rằng tỷ lệ nữ khác 50%.

⇒ Giới tính khách hàng khá cân bằng, không có thiên lệch đáng kể.

3.2 Biến homeowner

Mức quan tâm: “Y” (có nhà)

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

  • \(H_0\): Tỷ lệ có nhà = 0.6

  • \(H_1\): Tỷ lệ có nhà > 0.6 (kiểm định một phía)

analyze_proportion(st, "homeowner", "Y", null_prop = 0.6, alternative = "greater")
## Tổng số quan sát: 14059 
## Số lượng Y : 8444 
## Tỷ lệ quan sát: 0.6006 
## 
## Khoảng tin cậy 95% cho tỷ lệ của Y :
## [1] 0.5924894 0.6086791
## attr(,"conf.level")
## [1] 0.95
## 
## 
##  1-sample proportions test without continuity correction
## 
## data:  x out of n, null probability null_prop
## X-squared = 0.02192, df = 1, p-value = 0.4412
## alternative hypothesis: true p is greater than 0.6
## 95 percent confidence interval:
##  0.5937987 1.0000000
## sample estimates:
##         p 
## 0.6006117

Nhận xét:

  • Tỷ lệ khách hàng có nhà là khoảng 60.06%.

  • Khoảng tin cậy 95% không chứa giá trị 0.6 ở biên dưới.

  • Giá trị p < 0.05 ⇒ Bác bỏ \(H_0\).

⇒ Có bằng chứng cho thấy tỷ lệ khách hàng có nhà cao hơn 60%, gợi ý rằng nhóm khách hàng chủ yếu là người trưởng thành, ổn định kinh tế.

3.3 Biến product_family

Mức quan tâm: “Food”

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

  • \(H_0\): Tỷ lệ sản phẩm thuộc nhóm “Food” ≥ 0.7

  • \(H_1\): Tỷ lệ < 0.7

analyze_proportion(st, "product_family", "Food", null_prop = 0.7, alternative = "less")
## Tổng số quan sát: 14059 
## Số lượng Food : 10153 
## Tỷ lệ quan sát: 0.7222 
## 
## Khoảng tin cậy 95% cho tỷ lệ của Food :
## [1] 0.7147067 0.7295136
## attr(,"conf.level")
## [1] 0.95
## 
## 
##  1-sample proportions test without continuity correction
## 
## data:  x out of n, null probability null_prop
## X-squared = 32.908, df = 1, p-value = 1
## alternative hypothesis: true p is less than 0.7
## 95 percent confidence interval:
##  0.0000000 0.7283415
## sample estimates:
##         p 
## 0.7221709

Nhận xét:

  • Tỷ lệ giao dịch thuộc nhóm “Food” là khoảng 72.2%.

  • Khoảng tin cậy nằm trên 0.7.

  • Giá trị p > 0.05 ⇒ Không đủ cơ sở để bác bỏ \(H_0\).

⇒ Có bằng chứng cho thấy tỷ lệ sản phẩm “Food” lớn hơn 70%, cho thấy tầm quan trọng của nhóm sản phẩm này, vượt trội tuyệt đối


4 Phân tích Mối quan hệ giữa Hai biến Định tính

Giả thuyết không (\(H_0\)): Hai biến là độc lập, không có mối liên hệ.

Giả thuyết đối (\(H_1\)): Hai biến có liên hệ với nhau

# Hàm hỗ trợ phân tích mối quan hệ giữa hai biến định tính
analyze_bivariate <- function(data, var1, var2) {
  cat("\n=============================\n")
  cat("Phân tích:", var1, "vs", var2, "\n")
  cat("=============================\n\n")

  # Bảng tần suất chéo
  tbl <- table(data[[var1]], data[[var2]])
  print(tbl)

  # Tính tỷ lệ phần trăm theo hàng
  prop_tbl <- prop.table(tbl, margin = 1)
  print(round(100 * prop_tbl, 2))

  # Biểu đồ cột nhóm
  library(ggplot2)
  print(
    ggplot(data, aes_string(x = var1, fill = var2)) +
      geom_bar(position = "fill") +
      ylab("Tỷ lệ (%)") +
      scale_y_continuous(labels = scales::percent) +
      theme_minimal() +
      labs(title = paste("Tỷ lệ", var2, "theo", var1),
         fill = var2)
)
  # Kiểm định Chi-bình phương
  cat("\nKiểm định Chi-bình phương:\n")
  test <- chisq.test(tbl)
  print(test)
}

4.1 Cặp biến gender vs product_family

analyze_bivariate(st, "gender", "product_family")
## 
## =============================
## Phân tích: gender vs product_family 
## =============================
## 
##    
##     Food Drink Non-Consumable
##   F 5149   669           1352
##   M 5004   581           1304
##    
##      Food Drink Non-Consumable
##   F 71.81  9.33          18.86
##   M 72.64  8.43          18.93

## 
## Kiểm định Chi-bình phương:
## 
##  Pearson's Chi-squared test
## 
## data:  tbl
## X-squared = 3.5185, df = 2, p-value = 0.1722

Nhận xét:

  • Biểu đồ cho thấy tỷ lệ sản phẩm Food, Drink, Non-Consumable khá tương đồng giữa nam và nữ.

  • Kiểm định Chi-bình phương: p-value > 0.05 ⇒ Không bác bỏ \(H_0\) ⇒ Không có bằng chứng cho thấy giới tính ảnh hưởng đến loại sản phẩm được mua.

⇒ Gợi ý: Chiến lược sản phẩm có thể áp dụng chung cho cả nam và nữ.

4.2 Cặp biến marital_status vs homeowner

analyze_bivariate(st, "marital_status", "homeowner")
## 
## =============================
## Phân tích: marital_status vs homeowner 
## =============================
## 
##    
##        Y    N
##   S 3297 3896
##   M 5147 1719
##    
##         Y     N
##   S 45.84 54.16
##   M 74.96 25.04

## 
## Kiểm định Chi-bình phương:
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tbl
## X-squared = 1241.2, df = 1, p-value < 2.2e-16

Nhận xét:

  • Tỷ lệ khách hàng đã kết hôn sở hữu nhà ở cao hơn so với nhóm chưa kết hôn.

  • Kiểm định Chi-bình phương: p-value < 0.05 ⇒ Bác bỏ \(H_0\) ⇒ Có mối liên hệ giữa tình trạng hôn nhân và việc sở hữu nhà.

⇒ Gợi ý: Nhóm đã kết hôn là đối tượng tiềm năng cho các sản phẩm gia dụng, gia đình.

4.3 Cặp biến stateor_province vs product_family

analyze_bivariate(st, "stateor_province", "product_family")
## 
## =============================
## Phân tích: stateor_province vs product_family 
## =============================
## 
##            
##             Food Drink Non-Consumable
##   CA        1974   258            501
##   WA        3287   399            881
##   OR        1629   199            434
##   Veracruz   322    44             98
##   Yucatan    494    48            112
##   BC         580    69            160
##   Zacatecas  940   122            235
##   DF         598    65            152
##   Guerrero   272    41             70
##   Jalisco     57     5             13
##            
##              Food Drink Non-Consumable
##   CA        72.23  9.44          18.33
##   WA        71.97  8.74          19.29
##   OR        72.02  8.80          19.19
##   Veracruz  69.40  9.48          21.12
##   Yucatan   75.54  7.34          17.13
##   BC        71.69  8.53          19.78
##   Zacatecas 72.47  9.41          18.12
##   DF        73.37  7.98          18.65
##   Guerrero  71.02 10.70          18.28
##   Jalisco   76.00  6.67          17.33

## 
## Kiểm định Chi-bình phương:
## 
##  Pearson's Chi-squared test
## 
## data:  tbl
## X-squared = 12.3, df = 18, p-value = 0.8314

Nhận xét:

  • Một số bang như California, Texas, New York có thể tập trung giao dịch cao hơn, và có xu hướng mua nhiều Food hoặc Drink hơn.

  • Kiểm định Chi-bình phương: p-value > 0.05 ⇒ ta không có đủ bằng chứng để bác bỏ \(H_0\) ⇒ Hai biến stateor_province và product_family là độc lập, không có mối liên hệ.

4.4 Tổng hợp kết quả phân tích mối quan hệ

Cặp biến Mối liên hệ? p-value Kết luận chính
gender – product_family Không có > 0.05 Không phân biệt sản phẩm theo giới tính
marital_status – homeowner < 0.05 Người đã kết hôn thường có nhà
stateor_province – product_family Không có > 0.05 Không phân biệt sản phẩm theo tiểu bang

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

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

1. Đặc điểm dữ liệu:

  • Bộ dữ liệu không chứa giá trị thiếu ở các biến định tính.

  • Các biến đã được chuyển về kiểu factor, thuận tiện cho phân tích.

2. Phân tích đơn biến (univariate):

  • Gender: Tỷ lệ nam – nữ gần bằng nhau (nam ~49%, nữ ~51%) ⇒ Khách hàng khá cân bằng giới tính.

  • Homeowner: 60.06% khách hàng là người có nhà ⇒ Đối tượng khách hàng chủ yếu là người ổn định tài chính.

  • Product Family: Hơn 70% giao dịch thuộc nhóm “Food” ⇒ Mặt hàng thiết yếu chiếm ưu thế.

3. Ước lượng và kiểm định tỷ lệ:

  • Tỷ lệ khách hàng nữ không khác biệt đáng kể so với 50%.

  • Có bằng chứng cho thấy tỷ lệ khách hàng có nhà > 60% (p < 0.05).

  • Tỷ lệ sản phẩm “Food” > 70% ⇒ Cần đa dạng hóa danh mục bán hàng.

4. Phân tích hai biến định tính (bivariate):

  • Gender – Product Family: Không có mối liên hệ rõ ràng ⇒ Nam/nữ có hành vi tiêu dùng tương đồng.

  • Marital Status – Homeowner: Có mối liên hệ ⇒ Người đã kết hôn thường có nhà hơn.

  • Stateor Province – Product Family: Không có mối liên hệ.

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

  • Chỉ sử dụng các biến định tính: Không khai thác được mối quan hệ với các biến định lượng như số tiền chi tiêu, số lượng sản phẩm, thời gian mua hàng,…

  • Không gian địa lý rộng (nhiều thành phố, tiểu bang) gây khó khăn trong trực quan hóa và phân tích sâu từng khu vực.

  • Không đánh giá thời gian: Hành vi mua sắm có thể thay đổi theo ngày, tuần, tháng – chưa được phân tích.

  • Một số nhóm nhỏ có tần suất thấp, có thể làm sai lệch kiểm định (chi-squared sensitive với tần suất nhỏ).

5.3 Đề xuất cho doanh nghiệp

1. Marketing cá nhân hóa:

  • Nhắm vào nhóm thu nhập cao với các sản phẩm cao cấp (Wine, Gourmet, …).

  • Đối với nhóm đã kết hôn/có nhà: Quảng bá các sản phẩm gia đình, combo bếp.

2. Tối ưu danh mục sản phẩm:

  • Nhóm “Food” chiếm ưu thế, tỷ lệ vượt 70% ⇒ cần kết hợp chiến lược phát triển Drink, Non-Consumable để cân bằng nhu cầu.

3. Phân khúc khách hàng ổn định:

  • Tỷ lệ có nhà cao gợi ý đây là nhóm có đặc điểm ổn định lâu dài ⇒ phù hợp với các chương trình khách hàng thân thiết.

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

  • Hành vi tiêu dùng theo thời gian: Mua vào thời điểm nào nhiều? Có xu hướng mua vào cuối tuần/giữa tuần không?

  • Tương quan với giá trị hóa đơn: Các nhóm khách hàng khác nhau có chi tiêu khác nhau không?

  • Tác động địa lý: Thành phố/tiểu bang nào có hành vi tiêu dùng đặc biệt hơn?

  • Mô hình phân cụm khách hàng (Customer Segmentation): Sử dụng kết hợp biến định tính và định lượng để phân khúc khách hàng toàn diện.


Phân tích này giúp hiểu sâu hơn về đặc điểm khách hàng và mở ra nhiều hướng cải thiện chiến lược kinh doanh. Với dữ liệu phong phú hơn, có thể nâng cấp nghiên cứu lên các mô hình phân tích đa biến hoặc machine learning.