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 ...
| 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 |
| 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 |
# 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.
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 ...
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()
}
}## 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.
## 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.
## 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.
## 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.
## 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.
## 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.
## country n percent
## 1 USA 9562 0.68013372
## 2 Mexico 3688 0.26232307
## 3 Canada 809 0.05754321
Nhận xét:
## 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ị.
## 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.
## 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.
# 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)
}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)
## 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ể.
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)
## 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ế.
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
## 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
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)
}##
## =============================
## 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ữ.
##
## =============================
## 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.
##
## =============================
## 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ệ.
| 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 | Có | < 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 |
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ệ.
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ỏ).
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:
3. Phân khúc khách hàng ổn định:
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.