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

1.1 Đọc file dữ liệu

x <- read.csv("C:/Users/PHAN THANH TRONG/Downloads/Supermarket Transactions.csv")

1.2 Hiển thị cấu trúc của dữ liệu

str(x)
## 'data.frame':    14059 obs. of  16 variables:
##  $ STT              : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ PurchaseDate     : chr  "18/12/07" "20/12/07" "21/12/07" "21/12/07" ...
##  $ 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 ...

Dữ liệu gồm có 14059 quan sát và 16 biến

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

head(x)
##   STT PurchaseDate CustomerID Gender MaritalStatus Homeowner Children
## 1   1     18/12/07       7223      F             S         Y        2
## 2   2     20/12/07       7841      M             M         Y        5
## 3   3     21/12/07       8374      F             M         N        2
## 4   4     21/12/07       9619      M             M         Y        3
## 5   5     22/12/07       1900      F             S         Y        3
## 6   6     22/12/07       6696      F             M         Y        3
##    AnnualIncome          City StateorProvince Country ProductFamily
## 1   $30K - $50K   Los Angeles              CA     USA          Food
## 2   $70K - $90K   Los Angeles              CA     USA          Food
## 3   $50K - $70K     Bremerton              WA     USA          Food
## 4   $30K - $50K      Portland              OR     USA          Food
## 5 $130K - $150K Beverly Hills              CA     USA         Drink
## 6   $10K - $30K Beverly Hills              CA     USA          Food
##   ProductDepartment      ProductCategory UnitsSold Revenue
## 1       Snack Foods          Snack Foods         5   27.38
## 2           Produce           Vegetables         5   14.90
## 3       Snack Foods          Snack Foods         3    5.52
## 4            Snacks                Candy         4    4.44
## 5         Beverages Carbonated Beverages         4   14.00
## 6              Deli          Side Dishes         3    4.37
tail(x)
##         STT PurchaseDate CustomerID Gender MaritalStatus Homeowner Children
## 14054 14054     29/12/09       2032      F             M         N        3
## 14055 14055     29/12/09       9102      F             M         Y        2
## 14056 14056     29/12/09       4822      F             M         Y        3
## 14057 14057     31/12/09        250      M             S         Y        1
## 14058 14058     31/12/09       6153      F             S         N        4
## 14059 14059     31/12/09       3656      M             S         N        3
##       AnnualIncome        City StateorProvince Country  ProductFamily
## 14054  $10K - $30K      Yakima              WA     USA Non-Consumable
## 14055  $10K - $30K   Bremerton              WA     USA           Food
## 14056  $10K - $30K Walla Walla              WA     USA           Food
## 14057  $30K - $50K    Portland              OR     USA          Drink
## 14058  $50K - $70K     Spokane              WA     USA          Drink
## 14059  $50K - $70K    Portland              OR     USA Non-Consumable
##       ProductDepartment      ProductCategory UnitsSold Revenue
## 14054         Household       Paper Products         5   14.50
## 14055      Baking Goods         Baking Goods         3    9.64
## 14056      Frozen Foods           Vegetables         3    7.45
## 14057         Beverages Pure Juice Beverages         4    3.24
## 14058             Dairy                Dairy         2    4.00
## 14059         Household           Electrical         5   25.53

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

bien_dt <- c("Gender", "MaritalStatus", "Homeowner", "AnnualIncome" ,"City", "StateorProvince", "Country", "ProductFamily", "ProductDepartment", "ProductCategory")
dt <- x[, bien_dt]

1.5 Kiểm tra giá trị thiếu (NA)

colSums(is.na(dt))
##            Gender     MaritalStatus         Homeowner      AnnualIncome 
##                 0                 0                 0                 0 
##              City   StateorProvince           Country     ProductFamily 
##                 0                 0                 0                 0 
## ProductDepartment   ProductCategory 
##                 0                 0

Kết quả cho thấy dữ liệu không có giá trị bị thiếu

1.6 Kiểm tra và chuyển các biến trong dữ liệu về factor

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

2 Phần 2: Phân tích Mô tả Một biến Định tính (Univariate Descriptive Analysis)

2.1 Biến Gender

Bảng tần số

table(dt$Gender)
## 
##    F    M 
## 7170 6889

Bảng tần suất

table(dt$Gender)/sum(nrow(dt))
## 
##         F         M 
## 0.5099936 0.4900064

Biểu đồ

# Bảng tần suất và tỷ lệ 
tan_suat  <- table(dt$Gender)
ty_le   <- tan_suat / nrow(dt)
labels <- paste(names(tan_suat), round(ty_le*100, 1), "%")
# Biểu đồ tròn
pie(tan_suat,
    main   = "Biểu đồ tròn giới tính khách hàng",
    labels = labels,
    col    = c("blue", "red"))

Nhận xét

Vậy trong bộ dữ liệu này có 50.9993598 % nữ và 49.0006402% nam.

2.2 Biến MaritalStatus

Bảng tần số

table(dt$MaritalStatus)
## 
##    M    S 
## 6866 7193

Bảng tần suất

table(dt$MaritalStatus)/sum(nrow(dt))
## 
##         M         S 
## 0.4883704 0.5116296

Biểu đồ

# Bảng tần suất và tỷ lệ 
tan_suat1  <- table(dt$MaritalStatus)
ty_le1   <- tan_suat1 / nrow(dt)
labels <- paste(names(tan_suat1), round(ty_le1*100, 1), "%")
# Biểu đồ tròn
pie(tan_suat,
    main   = "Biểu đồ tròn tình trạng hôn nhân của khách hàng",
    labels = labels,
    col    = c("blue", "red"))

Nhận xét

Vậy trong bộ dữ liệu này có 48.8370439 % đã kết hôn và 51.1629561% độc thân.

2.3 Biến Homeowner

Bảng tần số

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

Bảng tần suất

table(dt$Homeowner)/sum(nrow(dt))
## 
##         N         Y 
## 0.3993883 0.6006117

Biểu đồ

# Bảng tần suất và tỷ lệ 
tan_suat2  <- table(dt$Homeowner)
ty_le2   <- tan_suat2 / nrow(dt)
labels <- paste(names(tan_suat2), round(ty_le2*100, 1), "%")
# Biểu đồ tròn
pie(tan_suat,
    main   = "Biểu đồ tròn tình trạng khách hàng sở hữu nhà",
    labels = labels,
    col    = c("blue", "red"))

Nhận xét

Vậy trong bộ dữ liệu này có 39.9388292 % không có nhà và 60.0611708% có nhà.

2.4 Biến AnnualIncome

Bảng tần số

table(dt$AnnualIncome)
## 
##   $10K - $30K $110K - $130K $130K - $150K       $150K +   $30K - $50K 
##          3090           643           760           273          4601 
##   $50K - $70K   $70K - $90K  $90K - $110K 
##          2370          1709           613

Bảng tần suất

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

library(ggplot2)
ggplot(dt, aes(x = AnnualIncome, fill = AnnualIncome)) +
  geom_bar() +
  theme_minimal() +
  labs(title = "Biểu đồ tần số khách hàng theo mức thu nhập hằng năm", x = "Khoảng thu nhập", y = "Tần số")

Nhận xét

  • Mức thu nhập phổ biến nhất là $30K - $50K chiếm 32.73% tổng số khách. Nhìn chung khách hàng chủ yếu có mức thu nhập dưới $70K (gần 73%). Nhóm thu nhập cao hơn chỉ chiếm hơn 1/4 số lượng mẫu.

2.5 Biến City

Bảng tần số

table(dt$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

Bảng tần suất

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

Biểu đồ

ggplot(dt, aes(x = City, fill = City)) +
  geom_bar() +
  coord_flip() +                             
  labs(title = "Tần số giao dịch theo City",
       x = "City", y = "Số giao dịch")

Nhận xét

  • Sự phân bố tần số giao dịch không đồng đều. Thành phố có tỷ lệ giao dịch cao nhất là Salem với khoảng 9.86%, thấp nhất là Guadalajara (0.53%). Có nhiều nguyên nhân dẫn đến sự chênh lêch này như quy mô dân số, vị trí hoạt động, đối thủ cạnh tranh,… Điều này cho thấy siêu thị có thể cần tập trung và phân bổ nguồn lực khác nhau tùy theo mức độ hoạt động của khách hàng ở từng địa điểm để tối ưu hóa hiệu quả kinh doanh.

##Biến StateorProvince

Bảng tần số

table(dt$StateorProvince)
## 
##        BC        CA        DF  Guerrero   Jalisco        OR  Veracruz        WA 
##       809      2733       815       383        75      2262       464      4567 
##   Yucatan Zacatecas 
##       654      1297

Bảng tần suất

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

Biểu đồ

ggplot(dt, aes(x = StateorProvince, fill = StateorProvince)) +
  geom_bar() +
  coord_flip() +
  labs(title = "Tần số giao dịch theo tiểu bang hoặc tỉnh",
       x = "StateorProvince", y = "Số giao dịch")

Nhận xét

  • WA và CA là hai thành phố có nhiều khách hàng nhất với tổng tỷ lệ chiếm khoảng 32.48% và 19.44%. Đây có thể là các thị trường chính mà doanh nghiệp đang tập trung.

  • Ngược lại các thành phố như Jalisco (0.53%) và Guerrero (2.72%) chiếm tỷ lệ rất thấp.

3 Phần 3: Ước lượng Khoảng và Kiểm định Giả thuyết cho Tỷ lệ (Một biến)

3.1 Biến 1: Country - Hạng mục quan tâm: “USA”

# Số lượng khách hàng đến từ USA
n_usa <- sum(dt$Country == "USA")

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

# Kiểm định giả thuyết và ước lượng khoảng tin cậy 95% cho tỷ lệ khách hàng đến từ USA
prop.test(n_usa, n_total, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_usa out of n_total, null probability 0.5
## X-squared = 1824, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.6723397 0.6878289
## sample estimates:
##         p 
## 0.6801337

Từ kết quả kiểm định tỷ lệ khách hàng đến từ USA là 0.6801 (68.01%). Khoảng tin cậy 95% của tỷ lệ này là [67.23%, 68.78%] cho thấy mức độ chính xác rất cao.

Bài toán kiểm định:

Giả thuyết không H₀: p = 0.5 (tỷ lệ khách hàng từ USA bằng 50%)

Giả thuyết đối H₁: p ≠ 0.5 (tỷ lệ khách hàng từ USA khác 50%)

Mức ý nghĩa: α = 0.05

Kết luận: Với p-value < 0.05, ta bác bỏ giả thuyết H₀.

Do đó, có bằng chứng thống kê khẳng định tỷ lệ khách hàng đến từ USA khác 50% với mức ý nghĩa 5%.

3.2 Biến 2: Gender - Hạng mục quan tâm: “M” (Nam)

Ước lượng khoảng tin cậy 95% cho tỷ lệ “Nam”

# Số lượng khách hàng đến từ USA
n_M <- sum(dt$Gender == "M")

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

# Kiểm định giả thuyết và ước lượng khoảng tin cậy 95% cho tỷ lệ khách hàng là Nam
prop.test(n_M, n_total, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_M out of n_total, null probability 0.5
## X-squared = 5.5765, df = 1, p-value = 0.0182
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.4817114 0.4983069
## sample estimates:
##         p 
## 0.4900064

Từ kết quả kiểm định tỷ lệ khách hàng Nam là 0.4900064 (49%). Khoảng tin cậy 95% của tỷ lệ này là [48.17%, 49.83%] cho thấy mức độ chính xác rất cao.

Bài toán kiểm định:

Giả thuyết không H₀: p = 0.5 (tỷ lệ khách hàng nam bằng 50%)

Giả thuyết đối H₁: p ≠ 0.5 (tỷ lệ khách hàng nam khác 50%)

Mức ý nghĩa: α = 0.05

Kết luận: Với p-value = 0.0182 < 0.05, ta bác bỏ giả thuyết H₀.

Do đó, có bằng chứng thống kê khẳng định tỷ lệ khách hàng nam khác 50% với mức ý nghĩa 5%.

# Số lượng khách hàng đến từ USA
n_mexico <- sum(dt$Country == "Mexico") # 250
n_canada <- sum(dt$Country == "Canada") # 150
# Tổng số quan sát
N_total_overall <- nrow(dt) # 1000

cat("Số khách hàng từ Mexico:", n_mexico, "\n")
## Số khách hàng từ Mexico: 3688
cat("Số khách hàng từ Canada:", n_canada, "\n")
## Số khách hàng từ Canada: 809
cat("Tổng số khách hàng:", N_total_overall, "\n\n")
## Tổng số khách hàng: 14059
test_result <- prop.test(x = c(n_mexico, n_canada),
                         n = c(N_total_overall, N_total_overall),
                         alternative = "less", # Kiểm định một phía bên trái (P_Mexico < P_Canada)
                         conf.level = 0.95)

print(test_result)
## 
##  2-sample test for equality of proportions with continuity correction
## 
## data:  c(n_mexico, n_canada) out of c(N_total_overall, N_total_overall)
## X-squared = 2192.5, df = 1, p-value = 1
## alternative hypothesis: less
## 95 percent confidence interval:
##  -1.0000000  0.2117558
## sample estimates:
##     prop 1     prop 2 
## 0.26232307 0.05754321

3.3 Biến 3: MaritalStatus - Hạng mục quan tâm: “S” (Độc thân)

Ước lượng khoảng tin cậy 95% cho tỷ lệ “Độc thân”

#Số người độc thân
n_single <- sum(dt$MaritalStatus == "S")
#Tổng số quan sát
n_total <- nrow(dt)

#Tính khoảng tin cậy 95%
prop.test(n_single, n_total, correct = FALSE)
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_single 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.5033648 0.5198880
## sample estimates:
##         p 
## 0.5116296

Từ kết quả kiểm định tỷ lệ khách hàng chưa kết hôn là 0.5116296 (51.16%). Khoảng tin cậy 95% của tỷ lệ này là [50.33%, 51.99%] cho thấy mức độ chính xác rất cao.

Bài toán kiểm định:

Giả thuyết không H₀: p = 0.5 (tỷ lệ khách hàng chưa kết hôn bằng 50%)

Giả thuyết đối H₁: p ≠ 0.5 (tỷ lệ khách hàng chưa kết hôn khác 50%)

Mức ý nghĩa: α = 0.05

Kết luận: Với p-value = 0.005818 < 0.05, ta bác bỏ giả thuyết H₀.

Do đó, có bằng chứng thống kê khẳng định tỷ lệ khách hàng chưa kết hôn khác 50% với độ mức ý nghĩa 5%.

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

4.1 MaritalStatus và Homeowner

4.1.1 Bảng tần số chéo

bts_MaritalStatus_Homeowner <- table(dt$MaritalStatus, dt$Homeowner)
prop.table(bts_MaritalStatus_Homeowner, margin = 1)
##    
##             N         Y
##   M 0.2503641 0.7496359
##   S 0.5416377 0.4583623
  • Trong nhóm khách hàng đã kết hôn có khoảng 25.04% không sở hữu nhà và 74.96% sở hữu nhà
  • Trong nhóm khách hàng chưa kết hôn có khoảng 54.16% không sở hữu nhà và 45.84% sở hữu nhà Cho thấy tỷ lệ người đã kết hôn sở hữu nhà cao hơn người độc thân.

4.1.2 Trực quan hóa

hn_nha_o <- as.data.frame(bts_MaritalStatus_Homeowner)
colnames(hn_nha_o) <- c("MaritalStatus", "Homeowner", "Count")
# Vẽ biểu đồ
library(ggplot2)
ggplot(hn_nha_o, aes(MaritalStatus, Count, fill = Homeowner)) + 
  geom_bar(stat = "identity", position = "dodge") + 
  labs(title = "Biểu đồ cột nhóm MaritalStatus và Homeowner",
       x = "Tình trạng hôn nhân", y = "Tần số", fill = "Tình trạng") + 
  theme_minimal()

Nhận xét:

Hai biểu đồ cho thấy mối quan hệ giữa tình trạng hôn nhân và khả năng sở hữu nhà:

Trong nhóm đã kết hôn (M) số lượng khách hàng có sở hữu nhà (4,503) vượt trội so với không sở hữu nhà (2,363).

Ngược lại nhóm độc thân (S) lại có nhiều người không sở hữu nhà (3,783) hơn có nhà (3,410).

Điều cho thấy người đã kết hôn có xu hướng sở hữu nhà nhiều hơn, phản ánh hành vi tiêu dùng và ổn định tài chính gắn với hôn nhân.

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

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

H₀ (Giả thuyết không): Hai biến MaritalStatus và Homeowner là độc lập với nhau.

H₁ (Giả thuyết đối): Hai biến MaritalStatus và Homeowner có mối liên hệ với nhau.

chi_test <- chisq.test(table(dt$MaritalStatus, dt$Homeowner))
chi_test
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(dt$MaritalStatus, dt$Homeowner)
## X-squared = 1241.2, df = 1, p-value < 2.2e-16

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

Chi-squared (X²): 1241.218

df: 1

p-value: < 0.05

Kết luận thống kê:

Vì p < 0.05, ta bác bỏ H₀ cho thấy có mối liên hệ có ý nghĩa thống kê giữa tình trạng hôn nhân và sở hữu nhà ở mức ý nghĩa 5%

Trong thực tế việc sở hữu nhà thường gắn liền với giai đoạn ổn định tài chính và điều đó thường diễn ra sau khi kết hôn. Người đã lập gia đình có xu hướng ưu tiên việc mua nhà để tạo nền tảng ổn định cho cuộc sống hôn nhân, nuôi con, và lập kế hoạch dài hạn.

Ngược lại ở nhóm độc thân thường - những người trẻ tuổi ưu tiên sự linh hoạt chưa cần cam kết tài chính dài hạn như mua nhà hoặc chưa đủ điều kiện để vay vốn và trả nợ thế chấp.

4.2 Gender và MaritalStatus

4.2.1 Bảng tần số chéo

# Bảng tần số chéo
bts_Gender_MaritalStatus <- table(dt$Gender, dt$MaritalStatus)
# Tỷ lệ 
prop.table(bts_Gender_MaritalStatus, margin = 1)
##    
##             M         S
##   F 0.5023710 0.4976290
##   M 0.4737988 0.5262012

Nhận xét:

  • Trong số nữ (F): có 3,602 người đã kết hôn và 3,568 người độc thân. Tỷ lệ gần bằng nhau (50.2% kết hôn, 49.8% độc thân).
  • Trong số nam (M): có 3,264 người đã kết hôn và 3,625 người độc thân. Tỷ lệ độc thân cao không đáng kể (47.4% kết hôn, 52.6% độc thân).

Cho thấy Nữ giới có tỷ lệ kết hôn cao hơn namnam giới độc thân cao hơn so với nữ.

4.2.2 Trực quan hóa

gt_tthn <- as.data.frame(bts_Gender_MaritalStatus)
colnames(gt_tthn) <- c("Gender", "MaritalStatus", "Count")
# Vẽ biểu đồ
library(ggplot2)
ggplot(gt_tthn , aes(Gender, Count, fill = MaritalStatus)) + 
  geom_bar(stat = "identity", position = "dodge") + 
  labs(title = "Biểu đồ cột nhóm Gender và MaritalStatus",
       x = "Giới tính", y = "Tần số", fill = "Tình trạng") + 
  theme_minimal()

Nhận xét:

  • Ở nhóm nữ (Gender = F): Số lượng khách hàng độc thân (3568) và đã kết hôn (3602) tương đối cân bằng cho thấy không có sự chênh lệch lớn về tình trạng hôn nhân trong nhóm nữ.

  • Ở nhóm nam (Gender = M): Tỷ lệ đã kết hôn cao hơn rõ rệt so với tỷ lệ độc thân (3,625 so với 3,264 đã kết hôn). Điều này có thể phản ánh một số đặc điểm về độ tuổi trung bình của nhóm nam hoặc xu hướng hôn nhân sớm hơn ở nam giới trong tập dữ liệu này.

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

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

H₀ (Giả thuyết không): Hai biến Gender và MaritalStatus độc lập với nhau (giới tính không ảnh hưởng đến tình trạng hôn nhân).

H₁ (Giả thuyết đối): Hai biến có mối liên hệ với nhau (giới tính ảnh hưởng đến tình trạng hôn nhân).

chi_test1 <- chisq.test(bts_Gender_MaritalStatus)
chi_test1
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  bts_Gender_MaritalStatus
## X-squared = 11.365, df = 1, p-value = 0.0007485

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

Chi-squared (X²): 11.365

df: 1

p-value = 0.0007485 < 0.05

Kết luận thống kê:

  • Vì p = 0.0007 < 0.05, ta bác bỏ giả thuyết không H₀. Cho thấy có tồn tại mối liên hệ giữa giới tính và tình trạng hôn nhân.

  • Trong nhóm nam giới (M): có 3,625 người độc thân và 3,264 người đã kết hôn thể hiện xu hướng độc thân nhiều hơn.

  • Trong nhóm nữ giới (F): có 3,568 người độc thân và 3,602 người đã kết hôn cho thấy tỷ lệ gần như cân bằng.

  • Mặc dù sự chênh lệch không quá lớn nhưng có thể thấy rằng giới tính có thể là một yếu tố liên quan đến tình trạng hôn nhân trong hành vi tiêu dùng hoặc hồ sơ khách hàng siêu thị.

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

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

  • Giới tính: Khách hàng nữ chiếm 51.0% nhỉnh hơn khách hàng nam (49.0%). Điều này cho thấy không có sự chênh lệch đáng kể giữa hai giới tính của khách hàng, cả hai đều là khách hàng tiềm năng

  • Tình trạng hôn nhân: Khách hàng đã kết hôn có xu hướng mua sắm nhiều hơn có thể do nhu cầu cao hơn.

  • Sở hữu nhà: Người sở hữu nhà có số giao dịch cao hơn → nhóm khách hàng ổn định, tiềm năng.

  • Thu nhập: Nhóm có mức thu nhập dưới 70K$ chiếm tỷ phần lớn tỷ lệ khách hàng (gần 73%) cho thấy phân khúc thu nhập trung bình – thấp là phổ biến trong hệ thống siêu thị từ đó mở ra nhiều gợi ý về chiến lược giá, khuyến mãi, và nhóm sản phẩm phù hợp.

Mối quan hệ giữa các biến định tính:

  • Gender và MaritalStatus: Nữ giới có xu hướng kết hôn cao hơn nam, trong khi nam giới độc thân chiếm ưu thế nhẹ.

  • MaritalStatus và Homeowner: Người đã kết hôn có xu hướng sở hữu nhà cao hơn rõ rệt – phản ánh sự ổn định tài chính gắn liền với hôn nhân.

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

  • Giới hạn về chiều sâu phân tích, các phân tích mới dừng lại ở thống kê mô tả và kiểm định giả thuyết cho các biến định tính.

  • Chỉ sử dụng biến định tính chưa phản ánh được giá trị giao dịch đơn hàng cụ thể.

  • Phân bố quốc gia không đều, với hơn 2/3 dữ liệu đến từ USA có thể gây thiên lệch khi khái quát hóa cho toàn bộ khu vực Bắc Mỹ.

  • Thiếu yếu tố thời gian để đánh giá xu hướng tiêu dùng.

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

  • Kết hợp thêm các biến định lượng như giá trị đơn hàng, tần suất mua.

  • Phân tích hành vi theo thời gian (ngày, tháng, mùa).

  • Phân khúc khách hàng bằng mô hình nhóm hoặc dự đoán hành vi mua sắm.

  • Thiếu yếu tố thời gian và hành vi lặp lại → khó nắm được xu hướng lâu dài.

6 Phần 6: Ôn tập

6.1 Relative Risk (RR) - Tỷ số Nguy cơ Tương đối

Relative Risk (RR), hay còn gọi là Tỷ số nguy cơ tương đối (hoặc Tỷ suất nguy cơ - Risk Ratio), là một chỉ số quan trọng trong dịch tễ học, y học, và các lĩnh vực nghiên cứu về sức khỏe cộng đồng, cũng như trong các nghiên cứu nhân quả khác. Nó được sử dụng để định lượng mức độ ảnh hưởng của một yếu tố phơi nhiễm (exposure) đối với nguy cơ mắc một bệnh hoặc một kết cục (outcome) nhất định.

6.2 Định nghĩa và Ý nghĩa của Relative Risk (RR)

6.2.1 Khái niệm cốt lõi

Relative Risk (RR) đo lường tỷ lệ khả năng (risk) hoặc tỷ lệ mắc mới (incidence rate) của một kết cục (ví dụ: mắc bệnh) ở nhóm tiếp xúc với một yếu tố nào đó (nhóm phơi nhiễm) so với nhóm không tiếp xúc với yếu tố đó (nhóm không phơi nhiễm).

Ý nghĩa cốt lõi: RR cho chúng ta biết một người đã tiếp xúc với một yếu tố nguy cơ có nguy cơ mắc bệnh gấp bao nhiêu lần so với một người không tiếp xúc.

6.2.2 Khi nào sử dụng RR?

RR chủ yếu được sử dụng trong các nghiên cứu tiến cứu (prospective studies) như nghiên cứu đoàn hệ (cohort studies) hoặc thử nghiệm lâm sàng ngẫu nhiên có kiểm soát (randomized controlled trials - RCTs). Trong các loại hình nghiên cứu này, chúng ta theo dõi các nhóm người (phơi nhiễm và không phơi nhiễm) theo thời gian để xem ai mắc bệnh và ai không, do đó chúng ta có thể tính toán trực tiếp nguy cơ (probability) mắc bệnh trong mỗi nhóm.


6.3 Cách tính Relative Risk (RR)

Để tính toán RR, chúng ta thường sử dụng một bảng tần số 2x2 (contingency table) như sau:

Mắc bệnh (Outcome +) Không mắc bệnh (Outcome -) Tổng số
Phơi nhiễm a b a + b
Không phơi nhiễm c d c + d
Tổng cộng a + c b + d a + b + c + d

Trong đó: * a: Số người phơi nhiễm và mắc bệnh. * b: Số người phơi nhiễm và không mắc bệnh. * c: Số người không phơi nhiễm và mắc bệnh. * d: Số người không phơi nhiễm và không mắc bệnh.

Các bước tính RR:

  1. Tính Nguy cơ mắc bệnh ở nhóm Phơi nhiễm (\(R_E\)): \[R_E = \frac{a}{a+b}\] (Đây là tỷ lệ người mắc bệnh trong số những người đã phơi nhiễm)

  2. Tính Nguy cơ mắc bệnh ở nhóm Không Phơi nhiễm (\(R_{NE}\)): \[R_{NE} = \frac{c}{c+d}\] (Đây là tỷ lệ người mắc bệnh trong số những người không phơi nhiễm)

  3. Tính Relative Risk (RR): \[RR = \frac{R_E}{R_{NE}} = \frac{a/(a+b)}{c/(c+d)}\]


6.4 Diễn giải Relative Risk (RR)

Giá trị của RR cho chúng ta biết mối quan hệ giữa yếu tố phơi nhiễm và kết cục:

  • RR = 1:
    • Ý nghĩa: Không có mối liên hệ giữa yếu tố phơi nhiễm và kết cục. Nguy cơ mắc bệnh ở nhóm phơi nhiễm và nhóm không phơi nhiễm là như nhau.
    • Diễn giải: “Yếu tố X không làm tăng hay giảm nguy cơ mắc bệnh Y.”
  • RR > 1:
    • Ý nghĩa: Yếu tố phơi nhiễm làm tăng nguy cơ mắc kết cục. Nhóm phơi nhiễm có nguy cơ mắc bệnh cao hơn nhóm không phơi nhiễm.
    • Diễn giải: “Những người phơi nhiễm với yếu tố X có nguy cơ mắc bệnh Y cao gấp RR lần so với những người không phơi nhiễm.”
    • Ví dụ: Nếu RR = 2.5, “Những người phơi nhiễm có nguy cơ mắc bệnh Y cao gấp 2.5 lần (hoặc 150% cao hơn) so với người không phơi nhiễm.” \((2.5 - 1 = 1.5 = 150\%)\)
  • RR < 1:
    • Ý nghĩa: Yếu tố phơi nhiễm làm giảm nguy cơ mắc kết cục (có tác dụng bảo vệ). Nhóm phơi nhiễm có nguy cơ mắc bệnh thấp hơn nhóm không phơi nhiễm.
    • Diễn giải: “Những người phơi nhiễm với yếu tố X có nguy cơ mắc bệnh Y thấp hơn \((1 - RR) \times 100\%\) so với những người không phơi nhiễm.”
    • Ví dụ: Nếu RR = 0.6, “Những người phơi nhiễm có nguy cơ mắc bệnh Y thấp hơn \((1 - 0.6) \times 100\% = 40\%\) so với người không phơi nhiễm.” Hoặc “Nguy cơ mắc bệnh Y ở nhóm phơi nhiễm bằng 60% nguy cơ ở nhóm không phơi nhiễm.”

6.5 Ví dụ Thực tiễn: Hút thuốc và Nguy cơ Ung thư Phổi

Hãy xem xét một nghiên cứu đoàn hệ (cohort study) theo dõi 10,000 người trưởng thành trong 20 năm để xem xét mối liên hệ giữa hút thuốc lá và ung thư phổi.

Ung thư phổi (+) Không ung thư phổi (-) Tổng cộng
Hút thuốc 300 4700 5000
Không hút thuốc 50 4950 5000

Tính toán:

  1. Nguy cơ ung thư phổi ở nhóm Hút thuốc (\(R_E\)): \[R_E = \frac{300}{5000} = 0.06\]

  2. Nguy cơ ung thư phổi ở nhóm Không hút thuốc (\(R_{NE}\)): \[R_{NE} = \frac{50}{5000} = 0.01\]

  3. Relative Risk (RR): \[RR = \frac{0.06}{0.01} = 6\]

Diễn giải kết quả:

\(RR = 6\) cho thấy rằng những người hút thuốc lá có nguy cơ mắc ung thư phổi cao gấp 6 lần so với những người không hút thuốc lá trong quần thể nghiên cứu này.


6.6 Một số Lưu ý Quan trọng về Relative Risk:

  • Không phải Nguyên nhân-Kết quả: RR chỉ cho thấy một mối liên hệ thống kê (association), không nhất thiết là mối quan hệ nhân quả (causation). Cần xem xét các yếu tố gây nhiễu (confounding factors) và các tiêu chí khác (như tiêu chí Hill) để khẳng định nhân quả.
  • Giá trị Tuyệt đối (Absolute Risk): RR cho biết mối liên hệ tương đối. Ngay cả một RR cao cũng có thể không có ý nghĩa lâm sàng nếu nguy cơ mắc bệnh cơ bản (baseline risk) là rất thấp. Cần xem xét cả nguy cơ tuyệt đối (absolute risk) và giảm/tăng nguy cơ tuyệt đối (Absolute Risk Reduction/Increase).
  • Khoảng tin cậy (Confidence Interval - CI): Luôn đi kèm RR với khoảng tin cậy. Nếu khoảng tin cậy của RR không chứa 1, thì mối liên hệ được coi là có ý nghĩa thống kê ở mức ý nghĩa đã chọn.
    • Ví dụ: CI 95% cho RR là (4.5, 8.0) cho thấy RR = 6 là có ý nghĩa thống kê và vững chắc.
    • Ví dụ: CI 95% cho RR là (0.8, 1.5) (chứa 1) cho thấy RR = 1.1 có thể không có ý nghĩa thống kê.
  • Phân biệt với Odds Ratio (OR):
    • RR: Được sử dụng khi có thể tính toán trực tiếp nguy cơ mắc bệnh (nghiên cứu tiến cứu - cohort, RCT).
    • OR: Được sử dụng khi không thể tính toán trực tiếp nguy cơ mắc bệnh (đặc biệt trong nghiên cứu bệnh-chứng - case-control studies). OR là một ước lượng của RR khi bệnh rất hiếm.

library(epitools)
marital_homeowner <- table(dt$MaritalStatus, dt$Homeowner)
addmargins(marital_homeowner)
##      
##           N     Y   Sum
##   M    1719  5147  6866
##   S    3896  3297  7193
##   Sum  5615  8444 14059
riskratio(marital_homeowner)
## $data
##        
##            N    Y Total
##   M     1719 5147  6866
##   S     3896 3297  7193
##   Total 5615 8444 14059
## 
## $measure
##    risk ratio with 95% C.I.
##      estimate     lower     upper
##   M 1.0000000        NA        NA
##   S 0.6114466 0.5942071 0.6291862
## 
## $p.value
##    two-sided
##     midp.exact  fisher.exact    chi.square
##   M         NA            NA            NA
##   S          0 1.822183e-277 3.663022e-272
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Gender_homeowner <- table(dt$Gender, dt$Homeowner)
addmargins(Gender_homeowner)
##      
##           N     Y   Sum
##   F    2826  4344  7170
##   M    2789  4100  6889
##   Sum  5615  8444 14059
riskratio(Gender_homeowner)
## $data
##        
##            N    Y Total
##   F     2826 4344  7170
##   M     2789 4100  6889
##   Total 5615 8444 14059
## 
## $measure
##    risk ratio with 95% C.I.
##      estimate     lower    upper
##   F 1.0000000        NA       NA
##   M 0.9823291 0.9561812 1.009192
## 
## $p.value
##    two-sided
##     midp.exact fisher.exact chi.square
##   F         NA           NA         NA
##   M   0.195158    0.1964833  0.1950884
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
dt$Gender <- factor(dt$Gender, levels = c("M", "F"))

# Tạo bảng lại
Gender_homeowner <- table(dt$Gender, dt$Homeowner)

# Hiển thị bảng và tính risk ratio
addmargins(Gender_homeowner)
##      
##           N     Y   Sum
##   M    2789  4100  6889
##   F    2826  4344  7170
##   Sum  5615  8444 14059
riskratio(Gender_homeowner)
## $data
##        
##            N    Y Total
##   M     2789 4100  6889
##   F     2826 4344  7170
##   Total 5615 8444 14059
## 
## $measure
##    risk ratio with 95% C.I.
##     estimate     lower    upper
##   M 1.000000        NA       NA
##   F 1.017989 0.9908917 1.045827
## 
## $p.value
##    two-sided
##     midp.exact fisher.exact chi.square
##   M         NA           NA         NA
##   F   0.195158    0.1964833  0.1950884
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"