library(xlsx)
library(ggplot2)
library(dplyr)
library(csv)
library(scales)
library(DT)
Nhập dữ liệu
data <- read.csv("D:\\Downloads\\Supermarket Transactions.csv", header = T)
Cấu trúc dữ liệu
str(data)
## 'data.frame': 14059 obs. of 16 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ PurchaseDate : chr "12/18/2007" "12/20/2007" "12/21/2007" "12/21/2007" ...
## $ CustomerID : int 7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
## $ Gender : chr "F" "M" "F" "M" ...
## $ MaritalStatus : chr "S" "M" "M" "M" ...
## $ Homeowner : chr "Y" "Y" "N" "Y" ...
## $ Children : int 2 5 2 3 3 3 2 2 3 1 ...
## $ AnnualIncome : chr "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
## $ City : chr "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
## $ StateorProvince : chr "CA" "CA" "WA" "OR" ...
## $ Country : chr "USA" "USA" "USA" "USA" ...
## $ ProductFamily : chr "Food" "Food" "Food" "Food" ...
## $ ProductDepartment: chr "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
## $ ProductCategory : chr "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
## $ UnitsSold : int 5 5 3 4 4 3 4 6 1 2 ...
## $ Revenue : num 27.38 14.9 5.52 4.44 14 ...
Hiển thị các dòng đầu và dòng cuối của dữ liệu
datatable(head(data),options = list(scrollX = TRUE))
datatable(tail(data),options = list(scrollX = TRUE))
Kiểm tra giá trị thiếu
colSums(is.na(data))
## X PurchaseDate CustomerID Gender
## 0 0 0 0
## MaritalStatus Homeowner Children AnnualIncome
## 0 0 0 0
## City StateorProvince Country ProductFamily
## 0 0 0 0
## ProductDepartment ProductCategory UnitsSold Revenue
## 0 0 0 0
# Kiểm tra kiểu dữ liệu của các cột
sapply(data, class)
## X PurchaseDate CustomerID Gender
## "integer" "character" "integer" "character"
## MaritalStatus Homeowner Children AnnualIncome
## "character" "character" "integer" "character"
## City StateorProvince Country ProductFamily
## "character" "character" "character" "character"
## ProductDepartment ProductCategory UnitsSold Revenue
## "character" "character" "integer" "numeric"
Thống kê tần suất
##
## F M
## 7170 6889
##
## F M
## 0.5099936 0.4900064
Trực quan hóa
gender_count <- data %>%
count(Gender) %>%
mutate(prop = n / sum(n),
label = paste0(Gender, " (", percent(prop)))
gender_percent <- gender_count %>%
mutate(Percentage = round(prop * 100, 2))
ggplot(gender_percent, aes(x = "", y = Percentage, fill = Gender)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(Percentage, "%")), position = position_stack(vjust = 0.5)) +
labs(title = "Tỷ lệ khách hàng theo giới tính") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))
Nhận xét: Phân bố giới tính trong tập dữ liệu khá đồng đều, với tỷ lệ nam giới chiếm 50.21% và nữ giới chiếm 49.79%. Sự cân bằng này cho thấy không có thiên lệch đáng kể trong cơ cấu khách hàng theo giới tính.
Thống kê tần suất
##
## M S
## 6866 7193
##
## M S
## 0.4883704 0.5116296
Trực quan hóa
marital_count <- data %>%
count(MaritalStatus) %>%
mutate(prop = n / sum(n),
label = paste0(MaritalStatus, " (", scales::percent(prop)))
marital_percent <- marital_count %>%
mutate(Percentage = round(prop * 100, 2))
ggplot(marital_percent, aes(x = "", y = Percentage, fill = MaritalStatus)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(Percentage, "%")), position = position_stack(vjust = 0.5)) +
labs(title = "Tỷ lệ khách hàng theo tình trạng hôn nhân") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5, face = "bold")) +
scale_fill_brewer(palette = "Set2")
Nhận xét: Nhóm khách hàng độc thân chiếm tỷ lệ 51.16%. Trong khi đó, nhóm đã kết hôn chiếm 48.84%. Như vậy, nhóm độc thân chiếm tỷ lệ cao hơn một chút so với nhóm đã kết hôn. Sự chênh lệch giữa hai nhóm không lớn, chỉ khoảng 2.32%. Điều này cho thấy số lượng khách hàng giữa hai nhóm khá cân bằng, không có nhóm nào chiếm số lượng vượt trội.
Thống kê tần suất
table(data$Homeowner)
##
## N Y
## 5615 8444
table(data$Homeowner)/sum(table(data$Homeowner))
##
## N Y
## 0.3993883 0.6006117
Trực quan hóa
homeowner_count <- data %>%
count(Homeowner) %>%
mutate(prop = n / sum(n),
label = paste0(Homeowner, " (", scales::percent(prop)))
homeowner_percent <- homeowner_count %>%
mutate(Percentage = round(prop * 100, 2))
ggplot(homeowner_percent, aes(x = "", y = Percentage, fill = Homeowner)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(Percentage, "%")), position = position_stack(vjust = 0.5)) +
labs(title = "Tỷ lệ khách hàng theo tình trạng sở hữu nhà") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))
Nhận xét: Khách hàng sở hữu nhà chiếm tỷ lệ 60.06%, trong khi khách hàng không sở hữu nhà chỉ chiếm 39.94%. Như vậy, phần lớn khách hàng trong dữ liệu là người sở hữu nhà. Tỷ lệ giữa hai nhóm có sự chênh lệch rõ rệt, với nhóm có nhà nhiều hơn gần 20% so với nhóm không có nhà.
Thống kê tần suất
table(data$AnnualIncome)
##
## $10K - $30K $110K - $130K $130K - $150K $150K + $30K - $50K
## 3090 643 760 273 4601
## $50K - $70K $70K - $90K $90K - $110K
## 2370 1709 613
table(data$AnnualIncome) / sum(table(data$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
Trực quan hóa
# Tính tỷ lệ % cho các nhóm thu nhập
AnnualIncome_count <- data %>%
count(AnnualIncome) %>%
mutate(prop = n / sum(n),
label = paste0(AnnualIncome, " (", scales::percent(prop)))
AnnualIncome_percent <- AnnualIncome_count %>%
mutate(Percentage = round(prop * 100, 2))
ggplot(AnnualIncome_percent, aes(x = "", y = Percentage, fill = AnnualIncome)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(Percentage, "%")), position = position_stack(vjust = 0.5), size = 3) +
labs(title = "Tỷ lệ khách hàng theo thu nhập hàng năm") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))
Nhận xét: nhóm khách hàng có thu nhập $30K – $50K chiếm tỷ trọng lớn nhất, đạt khoảng 32.73%, nhóm tiếp theo là $10K – $30K (21.98%) và $50K – $70K (16.86%). Trong khi đó, các nhóm thu nhập cao như $110K – $130K, $130K – $150K và $150K+ chỉ chiếm lần lượt 4.57%, 5.41% và 1.94%, cho thấy đối tượng khách hàng giàu có chiếm tỷ lệ nhỏ trong tập dữ liệu. Nhóm $90K – $110K cũng chỉ chiếm 4.36%, thấp hơn đáng kể so với các nhóm thu nhập thấp hơn.
Thống kê tần suất
table(data$City)
##
## Acapulco Bellingham Beverly Hills Bremerton Camacho
## 383 143 811 834 452
## Guadalajara Hidalgo Los Angeles Merida Mexico City
## 75 845 926 654 194
## Orizaba Portland Salem San Andres San Diego
## 464 876 1386 621 866
## San Francisco Seattle Spokane Tacoma Vancouver
## 130 922 875 1257 633
## Victoria Walla Walla Yakima
## 176 160 376
table(data$City) / sum(table(data$City))
##
## Acapulco Bellingham Beverly Hills Bremerton Camacho
## 0.027242336 0.010171420 0.057685468 0.059321431 0.032150224
## Guadalajara Hidalgo Los Angeles Merida Mexico City
## 0.005334661 0.060103848 0.065865282 0.046518245 0.013798990
## Orizaba Portland Salem San Andres San Diego
## 0.033003770 0.062308841 0.098584537 0.044170994 0.061597553
## San Francisco Seattle Spokane Tacoma Vancouver
## 0.009246746 0.065580767 0.062237712 0.089408920 0.045024539
## Victoria Walla Walla Yakima
## 0.012518671 0.011380610 0.026744434
Trưc quan hóa
# Tính tỷ lệ % cho các thành phố
city_count <- data %>%
count(City) %>%
mutate(prop = n / sum(n),
Percentage = round(prop * 100, 1))
# Vẽ biểu đồ cột
ggplot(city_count, aes(x = reorder(City, -Percentage), y = Percentage, fill = City)) +
geom_col(width = 0.7) + # Độ rộng cột
geom_text(aes(label = paste0(Percentage, "%")),
vjust = -0.5, # Đặt nhãn phía trên cột
size = 2.5) +
labs(title = "Tỷ lệ khách hàng theo thành phố",
x = NULL, # Ẩn nhãn trục x
y = "Tỷ lệ (%)") +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) + # Thêm khoảng trống phía trên
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
axis.text.x = element_text(angle = 45, hjust = 1, size = 6), # Xoay nhãn trục x 45 độ
legend.position = "none") # Ẩn chú thích
Nhận xét: Khách hàng phân bố không đều giữa các thành phố. Một số khu vực có lượng khách hàng rất cao, trong khi nhiều thành phố khác chỉ chiếm tỷ lệ nhỏ. Cụ thể thành phố Salem chiếm tỷ lệ cao nhất với 9.9%, theo sau là Tacoma với 8.9%. Đây là hai nơi tập trung nhiều khách hàng nhất trong bộ dữ liệu.Các thành phố như Los Angeles, Seattle, Portland, San Diego và Spokane đều có tỷ lệ dao động từ 6.2% – 6.6%, chứng tỏ đây cũng là những khu vực có lượng khách hàng đáng kể.Trong khi đó, Một số thành phố như Yakima, Mexico City, Wenatchee, Walla Walla, Bellingham, San Francisco và Guadalupe có tỷ lệ thấp, chỉ dưới 2%. Guadalupe có tỷ lệ thấp nhất, chỉ 0.5%.
Thống kê Tần suất
table(data$StateorProvince)
##
## BC CA DF Guerrero Jalisco OR Veracruz WA
## 809 2733 815 383 75 2262 464 4567
## Yucatan Zacatecas
## 654 1297
table(data$StateorProvince) / sum(table(data$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
Trục qưan hóa
# Tính toán dữ liệu
state_count <- data %>%
count(StateorProvince) %>%
mutate(Percentage = round(n / sum(n) * 100, 2)) %>%
arrange(-Percentage) # Sắp xếp giảm dần
# Vẽ biểu đồ cột
ggplot(state_count, aes(x = reorder(StateorProvince, Percentage),
y = Percentage,
fill = Percentage)) + # Dùng gradient màu theo %
geom_col(width = 0.7) +
geom_text(aes(label = paste0(Percentage, "%")),
vjust = -0.8,
size = 3) +
labs(title = "Tỷ lệ khách hàng theo bang",
x = NULL,
y = "Tỷ lệ (%)") +
scale_fill_gradient(low = "lightblue", high = "#08519c") +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
legend.position = "none"
)
Nhận xét: Tỷ lệ khách hàng theo bang cho thấy sự phân bố không đồng đều giữa các khu vực. Bang WA (Washington) chiếm tỷ lệ cao nhất với 32.48%, tiếp theo là CA (California) với 19.44% và OR (Oregon) với 16.09%. Đây là ba bang có lượng khách hàng đông đảo nhất. Trong khi đó, các bang như Zacatecas (9.23%), DF (5.8%) và BC (5.75%) thuộc nhóm trung bình. Các bang còn lại như Yucatan, Veracruz, Guerrero và đặc biệt là Jalisco với chỉ 0.53% có tỷ lệ khách hàng rất thấp. Điều này cho thấy khách hàng tập trung chủ yếu ở một số bang nhất định, đặc biệt là các bang thuộc khu vực phía tây nước Mỹ.
Thống kê tần suất
table(data$Country)
##
## Canada Mexico USA
## 809 3688 9562
table(data$Country) / sum(table(data$Country))
##
## Canada Mexico USA
## 0.05754321 0.26232307 0.68013372
Trực quan hóa
# Tính toán dữ liệu
country_count <- data %>%
count(Country) %>%
mutate(prop = n / sum(n),
label = paste0(Country, " (", scales::percent(prop))) # Thêm % vào nhãn
country_percent <- country_count %>%
mutate(Percentage = round(prop * 100, 2))
# Vẽ biểu đồ tròn
ggplot(country_percent, aes(x = "", y = Percentage, fill = Country)) +
geom_bar(stat = "identity", width = 1, color = "white") + # Thêm viền trắng
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(Percentage, "%")),
position = position_stack(vjust = 0.5),
size = 3) +
labs(title = "Tỷ lệ khách hàng theo quốc gia") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
legend.position = "right") + # Hiển thị chú thích bên phải
scale_fill_brewer(palette = "Set2") # Màu sắc rõ ràng
Nhận xét: Tỷ lệ khách hàng theo quốc gia cho thấy phần lớn khách hàng đến từ Hoa Kỳ (USA) với 68.01%, tiếp theo là Mexico chiếm 26.23% và cuối cùng là Canada với 5.75%. Điều này cho thấy thị trường chủ yếu tập trung ở Mỹ, chiếm hơn 2/3 tổng số khách hàng. Mexico cũng là thị trường tiềm năng với hơn 1/4 khách hàng, trong khi Canada chiếm tỷ lệ thấp nhất.
Thống kê tần suất
table(data$ProductFamily)
##
## Drink Food Non-Consumable
## 1250 10153 2656
table(data$ProductFamily) / sum(table(data$ProductFamily))
##
## Drink Food Non-Consumable
## 0.08891102 0.72217085 0.18891813
Trực quan hóa
product_count <- data %>%
count(ProductFamily) %>% # Đổi thành ProductFamily
mutate(prop = n / sum(n),
label = paste0(ProductFamily, " (", scales::percent(prop)))
product_percent <- product_count %>%
mutate(Percentage = round(prop * 100, 2))
ggplot(product_percent, aes(x = "", y = Percentage, fill = ProductFamily)) + # Đổi fill
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(Percentage, "%")),
position = position_stack(vjust = 0.5),
size = 3) +
labs(title = "Tỷ lệ khách hàng theo dòng sản phẩm") + # Đổi tiêu đề
theme_void() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))+
scale_fill_brewer(palette = "Pastel1", direction = -1)
Nhận xét: Dòng sản phẩm được khách hàng lựa chọn nhiều nhất là thực phẩm (Food), chiếm tới 72.22% tổng số khách hàng. Dòng sản phẩm không tiêu dùng (Non-Consumable) đứng thứ hai với 18.89%, trong khi đồ uống (Drink) chiếm tỷ lệ nhỏ nhất chỉ 8.89%. Điều này cho thấy thực phẩm là nhóm sản phẩm chủ lực, được tiêu thụ nhiều hơn hẳn so với hai nhóm còn lại.
Thống kê tần suất
table(data$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
table(data$ProductDepartment) / sum(table(data$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
Trực quan hóa
dept_count <- data %>%
count(ProductDepartment) %>%
mutate(Percentage = round(n / sum(n) * 100, 1)) %>%
arrange(-Percentage) # Sắp xếp giảm dần
ggplot(dept_count, aes(x = reorder(ProductDepartment, Percentage),
y = Percentage,
fill = Percentage)) + # Giữ nguyên gradient
geom_col(width = 0.7) +
geom_text(aes(label = paste0(Percentage, "%")),
vjust = -0.5,
size = 2.5) +
labs(title = "Tỷ lệ khách hàng theo ngành sản phẩm",
x = NULL,
y = "Tỷ lệ (%)") +
scale_fill_gradient(low = "lightblue", high = "green") +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1, size = 6)
)
Nhẫn xét: Sự phân bố khách hàng không đồng đều giữa các ngành hàng. Nhóm sản phẩm “Produce” (Rau củ quả) chiếm tỷ lệ cao nhất với 14.2%, cho thấy đây là mặt hàng được ưa chuộng và tiêu dùng thường xuyên nhất. Tiếp theo là “Snack Foods” (11.4%) và “Household” (10.1%), phản ánh nhu cầu lớn đối với đồ ăn vặt và các sản phẩm gia dụng. Các ngành như “Frozen Foods”, “Baking Goods”, “Canned Foods” và “Health and Hygiene” cũng có tỷ lệ khách hàng đáng kể, dao động từ 6.4% đến 9.8%, cho thấy mức tiêu thụ ổn định đối với các mặt hàng thiết yếu. Ngược lại, các ngành như “Check-out”, “Meat”, “Seafood”, “Canned Products” hay “Breakfast Foods” có tỷ lệ rất thấp, dưới 1%, trong đó thấp nhất là “Cheese” với chỉ 0.4%. Điều này phản ánh xu hướng tiêu dùng tập trung nhiều vào các sản phẩm thiết yếu, dễ sử dụng và bảo quản, trong khi các mặt hàng chuyên biệt có mức độ thu hút thấp hơn.
Thống kê tần suất
table(data$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
table(data$ProductCategory) / sum(table(data$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: sự phân bố khách hàng khá đa dạng nhưng không đồng đều giữa các nhóm hàng. Danh mục “Vegetables” chiếm tỷ lệ cao nhất với 12.29%, tiếp theo là “Snack Foods” (11.38%) và “Dairy” (6.42%), phản ánh xu hướng tiêu dùng tập trung vào các sản phẩm thiết yếu và được sử dụng thường xuyên. Những nhóm như “Fruit” (5.44%), “Meat” (5.41%) và “Jams and Jellies” (4.18%) cũng đạt tỷ lệ đáng kể, cho thấy nhu cầu lớn từ phía khách hàng. Ngược lại, các danh mục như “Canned Oysters”, “Canned Sardines”, “Candles” và “Miscellaneous” chỉ dao động quanh mức 0.2% – 0.3%, cho thấy đây là những mặt hàng ít phổ biến và ít được lựa chọn hơn.
Ước lượng Khoảng tin cậy 95% cho số khách hàng sở hữu nhà
data_H_Y <- sum(data$Homeowner == "Y")
prop.test(data_H_Y, length(data$Homeowner), conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: data_H_Y out of length(data$Homeowner), null probability 0.5
## X-squared = 568.86, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5924537 0.6087145
## sample estimates:
## p
## 0.6006117
Tức là với mức tin cậy 95%, tỷ lệ thật khách hàng sở hữu nhà nằm trong khoảng từ 59.25% đến 60.87%
Bài toán kiểm định
\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ sở hữu nhà trong tổng số khách hàng là 60% } \\\\ H_1: & \text{Tỷ lệ sở hữu nhà trong tổng số khách hàng khác 60%.} \ \end{array} \right. \]
prop.test(data_H_Y,length(data$Homeowner), p = 0.6, alternative = "two.sided", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: data_H_Y out of length(data$Homeowner), null probability 0.6
## X-squared = 0.019445, df = 1, p-value = 0.8891
## alternative hypothesis: true p is not equal to 0.6
## 95 percent confidence interval:
## 0.5924537 0.6087145
## sample estimates:
## p
## 0.6006117
Kết quả kiểm định giả thuyết tỷ lệ cho thấy p-value = 0.8891 > 0.05, vì vậy không đủ cơ sở thống kê để bác bỏ giả thuyết H₀ hay với mức ý nghĩa 5% thì tỷ lệ số khách hàng sở hữu nhà là 60%.
Ước lượng Khoảng Tin cậy 95% cho số số khách hàng đã kết hôn
data_M_M <- sum(data$MaritalStatus == "M")
prop.test(data_M_M, length(data$MaritalStatus), conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: data_M_M out of length(data$MaritalStatus), null probability 0.5
## X-squared = 7.5593, df = 1, p-value = 0.00597
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.4800765 0.4966708
## sample estimates:
## p
## 0.4883704
Với độ tin cậy 95%, tỷ lệ người đã kết hôn trong tổng số khách hàng là từ 48.01% đến 49.67%.
Bài toán kiểm định
\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ đã kết hôn trong tổng số khách hàng là ít nhất 50% .} \\\\ H_1: & \text{Tỷ lệ đã kết hôn trong tổng số khách hàng là nhỏ hơn 50% .} \ \end{array} \right. \]
prop.test(data_M_M, length(data$MaritalStatus), p = 0.5, alternative = "less", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: data_M_M out of length(data$MaritalStatus), null probability 0.5
## X-squared = 7.5593, df = 1, p-value = 0.002985
## alternative hypothesis: true p is less than 0.5
## 95 percent confidence interval:
## 0.0000000 0.4953419
## sample estimates:
## p
## 0.4883704
Vì p-value < 0.05, ta bác bỏ giả thuyết H₀ hay với mức ý nghĩa 5%, tỷ lệ khách hàng đã kết hôn nhỏ hơn 50% trong tổng số khách hàng.
Ước lượng Khoảng Tin cậy 95% cho số khách hàng mua thực phẩm
data_P_F <- sum(data$ProductFamily == "Food")
prop.test(data_P_F, length(data$ProductFamily), conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: data_P_F out of length(data$ProductFamily), null probability 0.5
## X-squared = 2774.9, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.7146709 0.7295489
## sample estimates:
## p
## 0.7221709
Với độ tin cậy 95%, tỷ lệ khách hàng mua hàng thuôc dòng thực phẩm là từ 71.47% đến 72.95%.
Bài toán kiểm định
\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ khách hàng mua thực phẩm không vượt quá 70% } \\\\ H_1: & \text{Tỷ lệ khách hàng mua thực phẩm lớn hơn 70%} \ \end{array} \right. \]
prop.test(data_P_F, length(data$ProductFamily), p = 0.7, alternative = "greater", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: data_P_F out of length(data$ProductFamily), null probability 0.7
## X-squared = 32.802, df = 1, p-value = 5.101e-09
## alternative hypothesis: true p is greater than 0.7
## 95 percent confidence interval:
## 0.7158789 1.0000000
## sample estimates:
## p
## 0.7221709
Vì p-value < 0.05, ta bác bỏ giả thuyết H₀ hay với mức ý nghĩa 5%, tỷ lệ khách hàng thực phẩm lớn hơn 70% trong tổng số khách hàng.
Bảng tần suất chéo
table(data$MaritalStatus, data$Homeowner)
##
## N Y
## M 1719 5147
## S 3896 3297
prop.table(table(data$MaritalStatus, data$Homeowner), margin = 1)
##
## N Y
## M 0.2503641 0.7496359
## S 0.5416377 0.4583623
Trực quan hóa
df_MH <- data %>%
count(MaritalStatus, Homeowner) %>%
group_by(MaritalStatus) %>%
mutate(Percent = n / sum(n) * 100)
ggplot(df_MH, aes(x = MaritalStatus, y = Percent, fill = Homeowner)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.6) +
geom_text(aes(label = paste0(round(Percent, 2), "%")),
position = position_dodge(width = 0.7),
vjust = -0.5, size = 3) +
labs(title = "Tỷ lệ sở hữu nhà theo tình trạng hôn nhân",
x = "MaritalStatus",
y = "Tỷ lệ (%)",
fill = "Homeowner") +
theme_minimal()+
theme(
plot.title = element_text(hjust = 0.6, size = 13, face = "bold")
)
Nhận xét mô tả
Ở nhóm khách hàng đã kết hôn, phần lớn có sở hữu nhà. Cụ thể, khoảng 74.96% khách hàng trong nhóm này sở hữu nhà, trong khi chỉ 25.04% là không sở hữu. Đây là một tỷ lệ sở hữu nhà khá cao. Ngược lại, ở nhóm khách hàng chưa kết hôn, tỷ lệ sở hữu nhà lại thấp hơn. Chỉ 45.84% khách hàng chưa kết hôn có sở hữu nhà, trong khi phần lớn (54.16%) không sở hữu.
Từ biểu đồ, chúng ta có thể thấy một xu hướng rõ ràng: Khách hàng đã kết hôn có xu hướng sở hữu nhà cao hơn so với khách hàng chưa kết hôn. Điều này có thể phản ánh thực tế rằng người đã lập gia đình thường có nhu cầu và khả năng tài chính ổn định hơn để mua nhà.
Kiểm định Thống kê
\[ \left\{ \begin{array}{ll} H_0: & \text{Tình trạng hôn nhân và tình trạng sở hữu nhà là độc lập nhau} \\\\ H_1: & \text{Tình trạng hôn nhân và tình trạng sở hữu nhà có môi liên quan với nhau.} \ \end{array} \right. \]
chisq.test(table(data$MaritalStatus, data$Homeowner))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(data$MaritalStatus, data$Homeowner)
## X-squared = 1241.2, df = 1, p-value < 2.2e-16
Kết quả kiểm định
Giá trị thống kê Chi-bình phương: 1241.2
Bậc tự do (df): 1
Giá trị p: < 2.2e-16
Nhận xét
Vì p-value < 0.05, ta bác bỏ giả thuyết H₀. Điều này cho thấy với mức ý nghĩa 5% thì có mối quan hệ giữa tình trạng hôn nhân và việc sở hữu nhà.
Thảo luận
Kết quả kiểm định khẳng định rằng có mối liên quan giữa việc sở hữu nhà với tình trạng hôn nhân. Điều này phù hợp với kết quả của bảng tần số: tỷ lệ người đã kết hôn sở hữu nhà cao hơn nhiều so với người độc thân. Có thể lý giải rằng người đã kết hôn thường có xu hướng ổn định về nhà ở hơn, hoặc có khả năng tài chính tốt hơn để mua nhà.
Bảng tần suất chéo
table(data$Gender, data$ProductFamily)
##
## Drink Food Non-Consumable
## F 669 5149 1352
## M 581 5004 1304
prop.table(table(data$Gender, data$ProductFamily), margin = 1)
##
## Drink Food Non-Consumable
## F 0.09330544 0.71813110 0.18856346
## M 0.08433735 0.72637538 0.18928727
Trực quan hóa
df_GP <- data %>%
count(Gender, ProductFamily) %>%
group_by(Gender) %>%
mutate(Percent = n / sum(n) * 100)
ggplot(df_GP, aes(x = Gender, y = Percent, fill = ProductFamily)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.6) +
geom_text(aes(label = paste0(round(Percent, 2), "%")),
position = position_dodge(width = 0.7),
vjust = -0.5, size = 3) +
labs(title = "Tỷ lệ phân bổ dòng sản phẩm theo giới tính",
x = "Gender",
y = "Tỷ lệ (%)",
fill = "ProductFamily") +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 13, face = "bold"),
)
Nhận xét mô tả
Ở nhóm khách hàng nữ, phần lớn mua các sản phẩm thuộc nhóm Food, chiếm tới 71.81%. Nhóm sản phẩm Non-Consumable chiếm tỷ lệ nhỏ hơn (18.86%), trong khi Drink là dòng sản phẩm ít phổ biến nhất với chỉ 9.33%. Điều này cho thấy thực phẩm là nhu cầu mua sắm chủ yếu của khách hàng nữ.
Tương tự, ở nhóm khách hàng nam, sản phẩm Food cũng chiếm ưu thế rõ rệt với tỷ lệ 72.64%. Các sản phẩm Non-Consumable chiếm tỷ lệ tương đương với nhóm nữ (18.93%), còn sản phẩm Drink có tỷ lệ thấp nhất là 8.43%.
Từ biểu đồ, có thể thấy rằng bất kể giới tính, khách hàng đều có xu hướng ưu tiên mua sắm các sản phẩm thuộc dòng Food, trong khi dòng Drink chỉ chiếm một tỷ lệ nhỏ. Tuy nhiên, sự chênh lệch giữa nam và nữ là không đáng kể, cho thấy hành vi tiêu dùng theo dòng sản phẩm khá tương đồng giữa hai giới.
Kiểm định Thống kê
\[ \left\{ \begin{array}{ll} H_0: & \text{Giới tính và dòng sản phẩm là độc lập nhau} \\\\ H_1: & \text{Giới tính và dòng sản phẩm có môi liên quan với nhau.} \ \end{array} \right. \]
chisq.test(table(data$Gender, data$ProductFamily))
##
## Pearson's Chi-squared test
##
## data: table(data$Gender, data$ProductFamily)
## X-squared = 3.5185, df = 2, p-value = 0.1722
Kết quả kiểm định
Giá trị thống kê Chi-bình phương: 3.5185
Bậc tự do (df): 2
Giá trị p: 0.1722
Nhận xét
Vì p-value > 0.05 nên không đủ điều kiện bác bỏ giả thuyết H₀. Điều này cho thấy không có mối quan hệ giữa giới tính và dòng sản phẩm. Nói cách khác, lựa chọn dòng sản phẩm của khách hàng không khác biệt đáng kể giữa nam và nữ.
Thảo luận
Kết quả kiểm định cho thấy không có mối liên quan có ý nghĩa thống kê giữa giới tính và dòng sản phẩm. Điều này cũng phù hợp với biểu đồ phân bố: tỷ lệ lựa chọn các dòng sản phẩm giữa nam và nữ không có sự khác biệt đáng kể. Dù có một số chênh lệch nhỏ về tỷ lệ, chẳng hạn như nữ có xu hướng mua đồ uống nhiều hơn nam, nhưng mức độ chênh lệch này không đủ lớn để kết luận rằng giới tính ảnh hưởng đến lựa chọn dòng sản phẩm.
Bảng tần suất chéo
table(data$AnnualIncome, data$Homeowner)
##
## N Y
## $10K - $30K 1359 1731
## $110K - $130K 119 524
## $130K - $150K 136 624
## $150K + 48 225
## $30K - $50K 2087 2514
## $50K - $70K 1063 1307
## $70K - $90K 686 1023
## $90K - $110K 117 496
prop.table(table(data$AnnualIncome, data$Homeowner), margin = 1)
##
## N Y
## $10K - $30K 0.4398058 0.5601942
## $110K - $130K 0.1850700 0.8149300
## $130K - $150K 0.1789474 0.8210526
## $150K + 0.1758242 0.8241758
## $30K - $50K 0.4535970 0.5464030
## $50K - $70K 0.4485232 0.5514768
## $70K - $90K 0.4014043 0.5985957
## $90K - $110K 0.1908646 0.8091354
Trực quan hóa
df_income_homeowner <- data %>%
count(AnnualIncome, Homeowner) %>%
group_by(AnnualIncome) %>%
mutate(Percent = n / sum(n) * 100)
ggplot(df_income_homeowner, aes(x = AnnualIncome, y = Percent, fill = Homeowner)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.8), width = 0.7) +
geom_text(aes(label = paste0(round(Percent, 2), "%")),
position = position_dodge(width = 0.8),
vjust = -0.5, size = 2) +
labs(title = "Tỷ lệ chủ sở hữu nhà theo nhóm thu nhập",
x = "Nhóm Thu nhập",
y = "Tỷ lệ (%)",
fill = "Homeowner") +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(hjust = 0.5, size = 13, face = "bold")
)
Biểu đồ thể hiện tỷ lệ sở hữu nhà ở các nhóm thu nhập khác nhau cho thấy một xu hướng rõ rệt: thu nhập càng cao thì tỷ lệ sở hữu nhà càng lớn. Cụ thể, ở nhóm thu nhập thấp nhất từ $10K - $30K, chỉ có khoảng 56.02% khách hàng sở hữu nhà, trong khi 43.98% không sở hữu. Ngược lại, ở các nhóm thu nhập cao từ $110K trở lên, tỷ lệ sở hữu nhà luôn trên 80%.
Đối với các nhóm thu nhập trung bình từ $30K - $90K, tỷ lệ sở hữu nhà dao động trong khoảng 54% đến 60%, phản ánh một mức độ sở hữu tương đối cân bằng giữa hai nhóm “có” và “không” sở hữu nhà. Trong khi đó, mhóm thu nhập thấp ($10K - $30K) là nhóm duy nhất mà tỷ lệ không sở hữu nhà gần bằng tỷ lệ sở hữu, với 43.98% không sở hữu.
Kiểm định Thống kê
\[ \left\{ \begin{array}{ll} H_0: & \text{Việc sở hữu nhà và thu nhập nhập hàng năm là độc lập với nhau} \\\\ H_1: & \text{Việc sở hữu nhà và thu nhập hàng năm có mối liên quan với nhau.} \ \end{array} \right. \]
chisq.test(table(data$AnnualIncome, data$Homeowner))
##
## Pearson's Chi-squared test
##
## data: table(data$AnnualIncome, data$Homeowner)
## X-squared = 546.37, df = 7, p-value < 2.2e-16
Kết quả kiểm định
Giá trị thống kê Chi-bình phương: 546.37
Bậc tự do (df): 2
Giá trị p: 2.2e-16
Nhận xét
Vì p-value < 0.05 nên ta bác bỏ giả thuyết H₀. Điều này cho thấy với mức ý nghĩa 5% thì việc sở hữu nhà và mức thu nhập hàng năm có mối liên hệ với nhau.
Thảo luận
Kết quả phân tích cho thấy có mối liên hệ rất rõ ràng giữa mức thu nhập và khả năng sở hữu nhà. Tỷ lệ sở Kết quả cũng cho thấy sự chênh lệch rõ rệt giữa hai nhóm “có” và “không” sở hữu nhà trở nên lớn hơn ở các mức thu nhập cao, trong khi ở nhóm thu nhập thấp, tỷ lệ này tương đối cân bằng. Điều này cho thấy rằng thu nhập là yếu tố then chốt ảnh hưởng đến việc sở hữu nhà ở.
Kết quả phân tích cho thấy phần lớn khách hàng là nữ giới (chiếm khoảng 51%) và cư trú tại Hoa Kỳ (khoảng 68%). Điều này cho thấy thị trường chủ lực của doanh nghiệp đang tập trung ở Mỹ với đối tượng khách hàng chủ yếu là phụ nữ. Dòng sản phẩm “Food” chiếm tỷ trọng vượt trội (hơn 72%), thể hiện nhu cầu cao của người tiêu dùng đối với các sản phẩm thực phẩm. Kết quả kiểm định cũng ghi nhận mối quan hệ có ý nghĩa thống kê giữa tình trạng hôn nhân và việc sở hữu nhà, cũng như giữa thu nhập và khả năng sở hữu nhà. Ngược lại, giới tính và dòng sản phẩm không có mối liên hệ đáng kể, cho thấy lựa chọn sản phẩm ít bị ảnh hưởng bởi yếu tố giới tính. Trong các danh mục cụ thể, nhóm sản phẩm như “Vegetables”, “Snack Foods” và “Dairy” có tỷ lệ tiêu dùng cao, phản ánh xu hướng tiêu dùng thiết yếu và tiện lợi.
Phân tích mới dừng ở mức mô tả, chưa đi sâu vào mô hình dự đoán hành vi khách hàng.
Doanh nghiệp nên tiếp tục tập trung phát triển nhóm sản phẩm thực phẩm, đặc biệt là các danh mục đang được tiêu thụ nhiều như rau củ, đồ ăn nhẹ và sản phẩm từ sữa. Việc xây dựng các chiến lược marketing dựa trên tình trạng hôn nhân và thu nhập có thể giúp tiếp cận nhóm khách hàng tiềm năng hiệu quả hơn, nhất là với các sản phẩm giá trị cao hoặc dài hạn như gia dụng. Vì giới tính không tạo ra sự khác biệt đáng kể trong hành vi tiêu dùng, nên doanh nghiệp có thể cân nhắc giảm trọng số của yếu tố này trong các chiến dịch quảng cáo hoặc điều chỉnh linh hoạt để tiết kiệm chi phí truyền thông.
Một số hướng nghiên cứu tiếp theo có thể giúp mở rộng phân tích hiện tại. Chẳng hạn, việc tìm hiểu hành vi tiêu dùng theo mùa vụ hoặc thời điểm trong năm sẽ mang lại thông tin hữu ích để tối ưu hóa hàng tồn kho và chương trình khuyến mãi. Ngoài ra, khai thác thêm dữ liệu về số lần mua hàng, giá trị trung bình mỗi đơn hàng hoặc thời gian giữa các lần mua sẽ giúp doanh nghiệp đánh giá khả năng giữ chân khách hàng và xây dựng chiến lược chăm sóc phù hợp. Các mô hình phân tích nâng cao như dự báo nhu cầu, phân cụm khách hàng hay phân tích giá trị vòng đời khách hàng (CLV) cũng có thể là hướng phát triển tiềm năng trong các nghiên cứu tiếp theo.