Bộ dữ liệu này là một phần của chiến dịch tiếp thị qua điện thoại được thực hiện bởi một ngân hàng tại Bồ Đào Nha, nhằm quảng bá sản phẩm tiền gửi kỳ hạn.
Đây là một biến thể của bộ dữ liệu nổi tiếng: Bank Marketing Dataset từ Kaggle.
Số quan sát: 2,675
Số biến: 17
# Đọc dữ liệu
data <- read.csv("C:/Users/Welcome !/OneDrive - UFM/Desktop/bank1.csv")
dim(data)
## [1] 2675 17
Biến định lượng
| Biến | Mô tả |
|---|---|
| 1. age | Tuổi của khách hàng |
| 2. balance | Số dư tài khoản ngân hàng |
| 3. day | Ngày trong tháng thực hiện cuộc gọi |
| 4. duration | Thời lượng cuộc gọi cuối cùng (tính bằng giây) |
| 5. campaign | Số lần liên hệ trong chiến dịch hiện tại |
| 6. pdays | Số ngày kể từ lần liên hệ cuối |
| 7. previous | Số lần liên hệ trước đó |
Biến định tính
| Biến | Mô tả |
|---|---|
| 8. job | Nghề nghiệp của khách hàng (admin., technician, services, retired, …) |
| 9. marital | Tình trạng hôn nhân (single, married, divorced) |
| 10. education | Trình độ học vấn (primary, secondary, tertiary) |
| 11. default | Có nợ xấu hay không (yes/no) |
| 12. housing | Có vay mua nhà hay không (yes/no) |
| 13. loan | Có vay tiêu dùng hay không (yes/no) |
| 14. contact | Phương thức liên hệ (cellular, telephone,) |
| 15. month | Tháng thực hiện cuộc gọi (jan, feb, mar, …, dec) |
| 16. poutcome | Kết quả chiến dịch marketing trước (success, failure, other) |
| 17. deposit | Khách hàng có đăng ký tiền gửi kỳ hạn hay không (yes/no) |
#Chuyển đổi các biến cần thiết sang kiểu factor**
data[] <- lapply(data, function(x) if (is.character(x)) as.factor(x) else x)
qual_data <- data[sapply(data, is.factor)]
Nhằm có được cái nhòn tổng quan về bộ dữ liệu ta sử dụng hàm head() và taid() để xem một số dòng đầu và dòng cuối của bộ dữ liệu
head(data)
## age job marital education default balance housing loan contact day
## 1 42 admin. single secondary no -247 yes yes telephone 21
## 2 33 services married secondary no 3444 yes no telephone 21
## 3 53 retired married tertiary no 2269 no no cellular 17
## 4 37 technician married secondary no 5115 yes no cellular 17
## 5 45 entrepreneur married secondary no 781 no yes cellular 17
## 6 34 management single tertiary no 1494 yes no cellular 18
## month duration campaign pdays previous poutcome deposit
## 1 oct 519 1 166 1 other yes
## 2 oct 144 1 91 4 failure yes
## 3 nov 1091 2 150 1 success yes
## 4 nov 1210 2 171 4 failure yes
## 5 nov 652 2 126 2 failure yes
## 6 nov 596 1 182 1 other yes
tail(data)
## age job marital education default balance housing loan contact
## 2670 30 blue-collar single secondary no 971 yes no cellular
## 2671 40 blue-collar divorced primary no 54 yes no cellular
## 2672 37 management married tertiary no 1594 yes no cellular
## 2673 60 retired divorced tertiary no -134 no no cellular
## 2674 35 blue-collar married secondary no 80 yes yes cellular
## 2675 43 technician married secondary no 0 no yes cellular
## day month duration campaign pdays previous poutcome deposit
## 2670 17 apr 283 1 317 2 other no
## 2671 13 may 10 5 362 3 other no
## 2672 17 apr 110 1 260 5 failure no
## 2673 12 may 243 1 271 4 failure no
## 2674 21 nov 38 2 172 2 failure no
## 2675 8 may 9 2 172 5 failure no
colSums(is.na(data))
## age job marital education default balance housing loan
## 0 0 0 0 0 0 0 0
## contact day month duration campaign pdays previous poutcome
## 0 0 0 0 0 0 0 0
## deposit
## 0
Tất cả 17 biến trong bộ dữ liệu không có giá trị bị thiếu
Định nghĩa: GLM (Generalized Linear Model) là khung mô hình thống kê tổng quát dùng để mô hình hóa mối quan hệ giữa kỳ vọng của biến phụ thuộc \(Y_i\) và tổ hợp tuyến tính của các biến độc lập, thông qua một hàm liên kết.
Công thức tổng quát:
\[ g(\mu_i) = \eta_i = \beta_0 + \beta_1 x_{1i} + \dots + \beta_k x_{ki} \]
Thành phần của GLM:
Khi nào sử dụng GLM:
Định nghĩa: Sử dụng khi biến phụ thuộc là nhị phân (0/1). Dùng hàm liên kết logit để mô hình hóa xác suất.
Ba thành phần:
Công thức:
\[ \log\left(\frac{p_i}{1 - p_i}\right) = \eta_i \Rightarrow p_i = \frac{\exp(\eta_i)}{1 + \exp(\eta_i)} \]
Khi nào dùng:
Định nghĩa: Hồi quy probit sử dụng hàm liên kết là nghịch đảo của hàm phân phối chuẩn tích lũy chuẩn tắc \(\Phi\).
Ba thành phần:
Công thức:
\[ \Phi^{-1}(p_i) = \eta_i \Rightarrow p_i = \Phi(\eta_i) \]
Khi nào dùng:
Định nghĩa: Dùng hàm liên kết không đối xứng để mô hình hóa xác suất xảy ra của các sự kiện hiếm hoặc gần như chắc chắn.
Ba thành phần:
Công thức:
\[ \log(-\log(1 - p_i)) = \eta_i \Rightarrow p_i = 1 - \exp(-\exp(\eta_i)) \]
Khi nào dùng:
Định nghĩa: Mở rộng của hồi quy logistic dùng cho biến phụ thuộc có nhiều mức không có thứ tự.
Ba thành phần:
Công thức:
\[ \log\left(\frac{P(Y = j)}{P(Y = \text{base})}\right) = \eta_{ij}, \quad j = 1, ..., J-1 \]
Khi nào dùng:
Định nghĩa: Sử dụng khi biến phụ thuộc có nhiều mức và có thứ tự phân cấp.
Ba thành phần:
Công thức:
\[ \log\left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \alpha_j - \eta_i \]
Khi nào dùng:
Định nghĩa: Dùng khi biến phụ thuộc là biến đếm, thể hiện số lần sự kiện xảy ra.
Ba thành phần:
Công thức:
\[ \log(\mu_i) = \eta_i \Rightarrow \mu_i = \exp(\eta_i) \]
Khi nào dùng:
| Tiêu chí | Logistic | Probit | Cloglog | Multinomial | Ordinal | Poisson |
|---|---|---|---|---|---|---|
| Loại biến phụ thuộc | Nhị phân (0/1) | Nhị phân (0/1) | Nhị phân (0/1) | Đa lớp không thứ tự | Đa lớp có thứ tự | Biến đếm (0, 1, 2,…) |
| Phân phối ngầm | Bernoulli | Bernoulli | Bernoulli | Multinomial | Cumulative multinomial | Poisson |
| Hàm liên kết | \(\log\left(\frac{p}{1-p} \right)\) | \(\Phi^{-1}(p)\) | \(\log(-\log(1 - p))\) | Logit (cho từng lớp) | Cumulative logit | \(\log(\mu)\) |
| Tính đối xứng | Có | Có | Không | Có | Có | Không |
| Giải thích hệ số | Odds ratio | Không trực tiếp | Gián tiếp | Odds ratio | Odds tích lũy | Tỷ lệ thay đổi theo log |
| Khi nào dùng | Sự kiện nhị phân phổ biến | Giả định sai số chuẩn | Sự kiện hiếm hoặc gần chắc chắn | Nhiều lớp không thứ tự | Nhiều lớp có thứ tự | Biến đếm |
| Ứng dụng phổ biến | Vay vốn, bệnh, spam | Hành vi lựa chọn | Tử vong, sự kiện hiếm | Chọn phương tiện | Mức độ hài lòng | Số ca bệnh, số lỗi |
| Hàm tuyến tính | Chung \(\eta_i = \beta_0 + \sum \beta_k x_{ki}\) | Như logistic | Như logistic | Riêng từng lớp | Dùng chung cho mọi mức | Chung cho toàn bộ |
# Tạo bảng tần số
freq_tabledeposit <- table(qual_data$deposit)
# Tính tỷ lệ phần trăm
percent_tabledeposit <- prop.table(freq_tabledeposit) * 100
## :Số khách hàng có/không gửi tiền kỳ hạn hay
##
## no yes
## 889 1786
## Tỷ lệ khách hàng có/không gửi tiền kỳ hạe:
##
## no yes
## 33.23 66.77
library(ggplot2)
# Chuyển bảng tần số sang dataframe
df_deposit <- as.data.frame(table(qual_data$deposit))
colnames(df_deposit) <- c("deposit", "count")
# Vẽ biểu đồ có số liệu trên đầu cột
ggplot(df_deposit, aes(x = deposit, y = count, fill = deposit)) +
geom_bar(stat = "identity", width = 0.6) +
geom_text(aes(label = count), vjust = -0.5, size = 4) +
scale_fill_manual(values = c("#006666", "#FFcccc")) +
labs(title = "Biểu đồ cột thể hiện số khách hàng có/không gửi tiền có kỳ hạn ",
x = "Trạng thái gửi tiền",
y = "Số khách hàng ") +
theme_minimal()
\[ \begin{cases} H_0: \text{Tỷ lệ khách hàng đồng ý mở tiền gửi kỳ hạn là 12% },p = 0.12 \\ H_1: \text{Tỷ lệ khách hàng đồng ý mở tiền kỳ hạn gửi khác 12%},p \ne 0.12 \end{cases} \]
# Tạo bảng tần số cho biến deposit
freq_tabledeposit <- table(qual_data$deposit)
# Lấy số lượng khách hàng trả lời "yes"
n_yes <- freq_tabledeposit["yes"]
n_total <- sum(freq_tabledeposit)
# Thực hiện ước lượng khoảng tin cậy 95% cho tỷ lệ "yes"
prop.test(x = n_yes, n = n_total, p = 0.12, conf.level = 0.95, correct = FALSE)
##
## 1-sample proportions test without continuity correction
##
## data: n_yes out of n_total, null probability 0.12
## X-squared = 7597.8, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.12
## 95 percent confidence interval:
## 0.6495837 0.6852626
## sample estimates:
## p
## 0.6676636
Kết quả kiểm định cho thấy:
Giá trị thống kê kiểm định (Chi-squared): X-squared = 7597.8
Bậc tự do: df = 1
Giá trị p (p-value): < 2.2e-16, tức là gần bằng 0
Khoảng tin cậy 95% cho tỷ lệ thực tế: từ 0.6496 đến 0.6853
Ước lượng tỷ lệ mẫu thực tế (p̂): 0.6677 (≈ 66.8%)
Vì p-value rất nhỏ (< 0.05) → bác bỏ giả thuyết H₀.
Do đó, kết luận rằng tỷ lệ khách hàng đồng ý mở tiền gửi kỳ hạn khác 12%.
Thực tế, tỷ lệ khách hàng mở tiền gửi theo mẫu là khoảng 66.8%, cao hơn rất nhiều so với giả thuyết 12%.
# Tạo bảng tần số thể hiện tác động của việc vay mua nhà đến quyết định đăng ký tiền gửi của khách hàng
table_housing_deposit <- table(qual_data$housing, qual_data$deposit)
# Gán nhãn rõ ràng cho hàng và cột
rownames(table_housing_deposit) <- c("Không vay mua nhà", "Có vay mua nhà")
colnames(table_housing_deposit) <- c("Không gửi tiền kỳ hạn", "Có gửi tiền kỳ hạn")
## Bảng tần số chéo thể hiện tác động của việc vay mua nhà đến quyết định đăng ký tiền gửi của khách hàng:
##
## Không gửi tiền kỳ hạn Có gửi tiền kỳ hạn
## Không vay mua nhà 282 1166
## Có vay mua nhà 607 620
# Tính tỷ lệ phần trăm theo hàng
prop_housing_deposit <- prop.table(table_housing_deposit, margin = 1)
cat("Tỷ lệ phần trăm đăng ký tiền gửi theo từng nhóm khách hàng (theo tình trạng vay mua nhà):\n")
## Tỷ lệ phần trăm đăng ký tiền gửi theo từng nhóm khách hàng (theo tình trạng vay mua nhà):
print(round(prop_housing_deposit * 100, 2))
##
## Không gửi tiền kỳ hạn Có gửi tiền kỳ hạn
## Không vay mua nhà 19.48 80.52
## Có vay mua nhà 49.47 50.53
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Tạo bảng dữ liệu tần số giữa housing và deposit
df_bar <- as.data.frame(table(qual_data$housing, qual_data$deposit))
colnames(df_bar) <- c("housing", "deposit", "count")
# Gắn nhãn rõ ràng cho các biến
df_bar$housing <- factor(df_bar$housing,
levels = c("no", "yes"),
labels = c("Không vay mua nhà", "Có vay mua nhà"))
df_bar$deposit <- factor(df_bar$deposit,
levels = c("no", "yes"),
labels = c("Không gửi tiền kỳ hạn", "Có gửi tiền kỳ hạn"))
# Tính vị trí để đặt nhãn số liệu trên cột chồng
df_bar <- df_bar %>%
group_by(housing) %>%
mutate(position = cumsum(count) - count / 2)
# Vẽ biểu đồ cột chồng với nhãn số
ggplot(df_bar, aes(x = housing, y = count, fill = deposit)) +
geom_bar(stat = "identity") +
geom_text(aes(y = position, label = count), color = "black", size = 4) +
labs(
title = "Tác động của vay mua nhà đến quyết định gửi tiền kỳ hạn",
x = "Tình trạng vay mua nhà",
y = "Số lượng khách hàng",
fill = "Tình trạng gửi tiền kỳ hạn"
) +
theme_minimal(base_size = 13)
Trong đó:
p1 là tỷ lệ khách hàng mở tiền gửi trong nhóm không vay mua nhà
𝑝2 là tỷ lệ khách hàng mở tiền gửi trong nhóm có đang vay mua nhà \[ \begin{cases} H_0: \text{Tỷ lệ khách hàng đồng ý mở tiền gửi trong nhóm có vay mua nhà bằng với tỷ lệ khách hàng đồng ý mở tiền gửi trong nhóm không vay mua nhà. },p1 = p2 \\ H_1: \text{Tỷ lệ khách hàng đồng ý mở tiền gửi trong hai nhóm khác nhau.},p1 \ne p2 \end{cases} \]
# Lấy số lượng khách hàng có deposit = "yes" trong từng nhóm housing
x1 <- table_housing_deposit["Có vay mua nhà", "Có gửi tiền kỳ hạn"] # Nhóm có vay mua nhà
n1 <- sum(table_housing_deposit["Có vay mua nhà", ]) # Tổng số nhóm housing = yes
x2 <- table_housing_deposit["Không vay mua nhà", "Có gửi tiền kỳ hạn"] # Nhóm không vay mua nhà
n2 <- sum(table_housing_deposit["Không vay mua nhà", ]) # Tổng số nhóm housing = no
# Thực hiện kiểm định 2 tỷ lệ
prop.test(x = c(x1, x2), n = c(n1, n2), correct = FALSE)
##
## 2-sample test for equality of proportions without continuity correction
##
## data: c(x1, x2) out of c(n1, n2)
## X-squared = 269.31, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.3345726 -0.2653296
## sample estimates:
## prop 1 prop 2
## 0.5052975 0.8052486
Kết quả kiểm định tỷ lệ cho hai nhóm cho thấy p-value < 0.05, do đó bác bỏ giả thuyết H₀. Có bằng chứng thống kê cho thấy tỷ lệ khách hàng đồng ý mở tiền gửi kỳ hạn khác nhau giữa nhóm có vay mua nhà và nhóm không vay. Cụ thể, tỷ lệ ở nhóm có vay nhà là 80.5%, cao hơn đáng kể so với nhóm không vay là 50.5%. Khoảng tin cậy 95% cho hiệu số tỷ lệ nằm trong khoảng từ -33.5% đến -26.5%.
\[ \begin{cases} H_0: \text{Hai biến housing và deposit độc lập với nhau. } \\ H_1: \text{Hai biến housing và deposit không độc lập.} \end{cases} \]
# Tạo bảng chéo tần số giữa hai biến housing và deposit
table_hd <- table(qual_data$housing, qual_data$deposit)
# Thực hiện kiểm định chi bình phương kiểm tra độc lập
chisq.test(table_hd)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table_hd
## X-squared = 267.96, df = 1, p-value < 2.2e-16
Hiệu chỉnh Yates: một sự điều chỉnh trong kiểm định Chi bình phương để cải thiện độ chính xác khi mẫu nhỏ.
Sau khi thực hiện kiểm định Chi bình phương với hiệu chỉnh Yates để kiểm tra mối quan hệ giữa hai biến định tính là housing (khách hàng có vay mua nhà hay không) và deposit (khách hàng có đồng ý mở tiền gửi kỳ hạn hay không), ta thu được kết quả như sau:
Giá trị thống kê Chi-squared: 433.38
Bậc tự do: 1
Giá trị p-value: nhỏ hơn 2.2e-16 (≈ 0) ta bác bỏ giả thuyết H₀.
Hai biến housing và deposit không độc lập với nhau.
Nói cách khác, tình trạng vay mua nhà của khách hàng có ảnh hưởng đến quyết định gửi tiền có kỳ hạn. Khách hàng không vay mua nhà có xu hướng gửi tiền kỳ hạn nhiều hơn so với nhóm khách hàng có vay.
Risk Ratio (RR) hay còn gọi là tỷ số rủi ro, dùng để so sánh xác suất xảy ra một sự kiện giữa hai nhóm.
Sự kiện quan tâm: Khách hàng đồng ý gửi tiền kỳ hạn (deposit = yes)
Hai nhóm so sánh:
Nhóm 1 (nhóm tham chiếu): Khách hàng không vay mua nhà (housing = no)
Nhóm 2: Khách hàng có vay mua nhà (housing = yes)
# Tải thư viện cần thiết
library(epitools)
# 1. Tạo bảng chéo giữa biến housing và deposit
tbl <- table(qual_data$housing, qual_data$deposit)
# 2. Đặt tên rõ ràng cho hàng và cột
rownames(tbl) <- c("Không vay mua nhà", "Có vay mua nhà")
colnames(tbl) <- c("Không gửi tiền kỳ hạn", "Có gửi tiền kỳ hạn")
# 3. Tính Risk Ratio (RR)
cat("\nKết quả Risk Ratio:\n")
##
## Kết quả Risk Ratio:
rr_result <- riskratio(tbl)
print(rr_result)
## $data
##
## Không gửi tiền kỳ hạn Có gửi tiền kỳ hạn Total
## Không vay mua nhà 282 1166 1448
## Có vay mua nhà 607 620 1227
## Total 889 1786 2675
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Không vay mua nhà 1.0000000 NA NA
## Có vay mua nhà 0.6275049 0.5904403 0.6668963
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Không vay mua nhà NA NA NA
## Có vay mua nhà 0 4.403729e-61 1.603195e-60
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
\[ \text{RR} = \frac{620/1227}{1166/1448} = 0.6275049 \] Ý nghĩa RR = 0.6275049 :
Khách hàng có vay mua nhà chỉ có khả năng mở tiền gửi kỳ hạn bằng khoảng 62.75% so với khách hàng không vay mua nhà. Điều này cho thấy: việc đang vay mua nhà có thể làm giảm xác suất khách hàng đăng ký tiền gửi kỳ hạn.
Sự kiện quan tâm: Khách hàng đồng ý gửi tiền kỳ hạn (deposit = yes)
Hai nhóm so sánh:
Nhóm 1 (nhóm tham chiếu):Khách hàng có vay mua nhà (housing = yes)
Nhóm 2: Khách hàng không vay mua nhà (housing = no)
# Sắp xếp lại để 'housing = yes' nằm trên → trở thành nhóm tham chiếu
tbl1 <- tbl[c("Có vay mua nhà", "Không vay mua nhà"), ]
# Tính Risk Ratio với nhóm tham chiếu là 'housing = ye
riskratio(tbl1)
## $data
##
## Không gửi tiền kỳ hạn Có gửi tiền kỳ hạn Total
## Có vay mua nhà 607 620 1227
## Không vay mua nhà 282 1166 1448
## Total 889 1786 2675
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Có vay mua nhà 1.000000 NA NA
## Không vay mua nhà 1.593613 1.499483 1.693651
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Có vay mua nhà NA NA NA
## Không vay mua nhà 0 4.403729e-61 1.603195e-60
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
\[ \text{RR} = \frac{1166/1448}{620/1227} = 1.593613 \] Khách hàng không vay mua nhà có khả năng gửi tiền kỳ hạn cao hơn khoảng 1.59 lần so với khách hàng có vay mua nhà.
Odds Ratio (OR) hay Tỷ số chênh lệch, là một chỉ số thống kê dùng để đo lường mối liên hệ giữa hai biến phân loại (thường là biến nhị phân), đặc biệt trong các nghiên cứu y học, xã hội, tài chính và kinh tế học.
Sự kiện quan tâm: Khách hàng gửi tiền kỳ hạn (deposit = yes)
Nhóm tham chiếu: Khách hàng không vay mua nhà (housing = no)
Nhóm so sánh (quan tâm): Khách hàng có vay mua nhà (housing = yes)
oddsratio(tbl)
## $data
##
## Không gửi tiền kỳ hạn Có gửi tiền kỳ hạn Total
## Không vay mua nhà 282 1166 1448
## Có vay mua nhà 607 620 1227
## Total 889 1786 2675
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Không vay mua nhà 1.0000000 NA NA
## Có vay mua nhà 0.2472356 0.2080297 0.2932527
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Không vay mua nhà NA NA NA
## Có vay mua nhà 0 4.403729e-61 1.603195e-60
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
\[ \text{OR} = \frac{620/607}{1166/282} = 0.2472356 \]
Kết quả này cho thấy rằng khách hàng có vay mua nhà có khả năng gửi tiền kỳ hạn thấp hơn đáng kể so với khách hàng không vay mua nhà.
Cụ thể, tỷ lệ khả năng gửi tiền kỳ hạn ở nhóm có vay mua nhà chỉ bằng khoảng 24.72% so với nhóm không vay mua nhà.
Sự kiện quan tâm: Khách hàng đồng ý gửi tiền kỳ hạn (deposit = yes)
Hai nhóm so sánh:
Nhóm 1 (nhóm tham chiếu):Khách hàng có vay mua nhà (housing = yes)
Nhóm 2: Khách hàng không vay mua nhà (housing = no)
oddsratio(tbl1)
## $data
##
## Không gửi tiền kỳ hạn Có gửi tiền kỳ hạn Total
## Có vay mua nhà 607 620 1227
## Không vay mua nhà 282 1166 1448
## Total 889 1786 2675
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Có vay mua nhà 1.00000 NA NA
## Không vay mua nhà 4.04474 3.410028 4.807005
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Có vay mua nhà NA NA NA
## Không vay mua nhà 0 4.403729e-61 1.603195e-60
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Phân tích tỷ số chênh lệch cho thấy rằng việc không vay mua nhà có liên quan chặt chẽ đến hành vi gửi tiền kỳ hạn. Khách hàng không vay nhà có khả năng gửi tiền kỳ hạn cao gấp hơn 4 lần so với khách hàng đang vay mua nhà
# Chuyển các biến nhị phân về dạng 0/1
data$deposit <- ifelse(data$deposit == "yes", 1, 0)
data$loan <- ifelse(data$loan == "yes", 1, 0)
# Kiểm tra lại biến
str(data)
## 'data.frame': 2675 obs. of 17 variables:
## $ age : int 42 33 53 37 45 34 46 43 33 46 ...
## $ job : Factor w/ 11 levels "admin.","blue-collar",..: 1 8 6 10 3 5 5 5 10 11 ...
## $ marital : Factor w/ 3 levels "divorced","married",..: 3 2 2 2 2 3 2 2 3 1 ...
## $ education: Factor w/ 3 levels "primary","secondary",..: 2 2 3 2 2 3 3 3 3 2 ...
## $ default : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
## $ balance : int -247 3444 2269 5115 781 1494 0 1429 149 3354 ...
## $ housing : Factor w/ 2 levels "no","yes": 2 2 1 2 1 2 1 2 2 2 ...
## $ loan : num 1 0 0 0 1 0 0 0 0 0 ...
## $ contact : Factor w/ 2 levels "cellular","telephone": 2 2 1 1 1 1 1 1 1 1 ...
## $ day : int 21 21 17 17 17 18 18 19 19 19 ...
## $ month : Factor w/ 12 levels "apr","aug","dec",..: 11 11 10 10 10 10 10 10 10 10 ...
## $ duration : int 519 144 1091 1210 652 596 716 1015 424 522 ...
## $ campaign : int 1 1 2 2 2 1 2 1 2 1 ...
## $ pdays : int 166 91 150 171 126 182 110 198 182 174 ...
## $ previous : int 1 4 1 4 2 1 3 2 1 1 ...
## $ poutcome : Factor w/ 3 levels "failure","other",..: 2 1 3 1 1 2 2 2 2 3 ...
## $ deposit : num 1 1 1 1 1 1 1 1 1 1 ...
# Hồi quy đơn biến với biến balance
model_deposit_simple <- glm(deposit ~ balance, data = data, family = "binomial")
# Kết quả
summary(model_deposit_simple)
##
## Call:
## glm(formula = deposit ~ balance, family = "binomial", data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 5.756e-01 4.889e-02 11.773 < 2e-16 ***
## balance 7.564e-05 1.788e-05 4.232 2.32e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 3401.6 on 2674 degrees of freedom
## Residual deviance: 3378.2 on 2673 degrees of freedom
## AIC: 3382.2
##
## Number of Fisher Scoring iterations: 4
Mô hình hồi quy logistic: deposit ~ balance
Mô hình được xây dựng nhằm phân tích mối quan hệ giữa xác suất khách
hàng gửi tiền định kỳ (deposit) và biến
độc lập số dư tài khoản (balance). Đây là
mô hình hồi quy logistic đơn biến, sử dụng phân phối nhị thức (binomial)
và liên kết logit.
Phương trình hồi quy (logit)
\[ \log\left( \frac{p}{1 - p} \right) = 0.5756 + 0.00007564 \times \text{balance} \]
Trong đó: - \(p\): xác suất khách
hàng gửi tiền định kỳ - balance: số dư tài khoản của khách
hàng
Diễn giải các hệ số
Hệ số chặn (Intercept = 0.5756):
Đây là log odds (logit) của việc gửi tiền khi số dư bằng 0. Mặc dù không
mang nhiều ý nghĩa thực tế (vì khách hàng thường không có số dư bằng 0),
nhưng hệ số này vẫn cần thiết để hoàn thiện mô hình.
Hệ số balance = 0.00007564:
Khi số dư tài khoản tăng thêm 1 đơn vị (ví dụ 1 USD), log odds của khả
năng khách hàng gửi tiền tăng 0.00007564 đơn vị. Nếu số dư tăng 1.000
đơn vị, log odds sẽ tăng khoảng 0.07564.
Tỷ số odds (odds ratio)
\[ \text{OR}_{balance} = e^{0.00007564} \approx 1.0000756 \]
→ Khi số dư tăng 1 đơn vị, odds (tỷ số khả năng gửi tiền so với không
gửi) tăng khoảng 0.0076%.
→ Nếu số dư tăng 1.000 đơn vị, odds tăng khoảng
7.86%.
Ý nghĩa thống kê
balance là một yếu tố có ảnh
hưởng thực sự đến quyết định gửi tiền của khách hàng.Độ phù hợp của mô hình
Chênh lệch giữa null deviance và residual deviance cho thấy biến
balance có đóng góp vào mô hình, làm giảm sai số.
Kết luận
Mô hình hồi quy logistic đơn biến cho thấy rằng số dư tài
khoản có tác động tích cực và có ý nghĩa thống kê đến xác suất
khách hàng gửi tiền định kỳ. Dù hệ số có vẻ nhỏ, nhưng với các khoản
tiền lớn, tác động của balance đến hành vi gửi tiền là đáng
kể. Đây là một biến quan trọng và nên được đưa vào các mô hình dự đoán
hành vi tài chính trong ngân hàng.
# Hồi quy đa biến
model_deposit_multi <- glm(deposit ~ balance + age + job + marital, data = data, family = "binomial")
# Kết quả
summary(model_deposit_multi)
##
## Call:
## glm(formula = deposit ~ balance + age + job + marital, family = "binomial",
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.385e-01 2.773e-01 0.499 0.617596
## balance 5.767e-05 1.767e-05 3.264 0.001099 **
## age 7.851e-03 5.033e-03 1.560 0.118805
## jobblue-collar -5.980e-01 1.523e-01 -3.927 8.60e-05 ***
## jobentrepreneur -5.492e-01 3.065e-01 -1.792 0.073115 .
## jobhousemaid 1.788e-02 3.225e-01 0.055 0.955786
## jobmanagement 3.084e-01 1.377e-01 2.239 0.025159 *
## jobretired 8.302e-01 2.463e-01 3.370 0.000750 ***
## jobself-employed 8.891e-02 2.457e-01 0.362 0.717429
## jobservices -1.774e-01 1.848e-01 -0.960 0.337019
## jobstudent 1.130e+00 2.804e-01 4.031 5.54e-05 ***
## jobtechnician -7.793e-02 1.474e-01 -0.529 0.597053
## jobunemployed 1.027e+00 2.945e-01 3.486 0.000491 ***
## maritalmarried 9.898e-03 1.497e-01 0.066 0.947277
## maritalsingle 1.421e-01 1.674e-01 0.849 0.396014
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 3401.6 on 2674 degrees of freedom
## Residual deviance: 3249.0 on 2660 degrees of freedom
## AIC: 3279
##
## Number of Fisher Scoring iterations: 4
Mô hình hồi quy logistic: deposit ~ balance + age + job + marital
Mô hình hồi quy logistic này được xây dựng để phân tích xác suất
khách hàng gửi tiền định kỳ (deposit = yes) dựa trên các
yếu tố: số dư tài khoản (balance), tuổi (age),
nghề nghiệp (job), và tình trạng hôn nhân
(marital). Đây là mô hình đa biến sử dụng phân phối nhị
thức (binomial) với hàm liên kết logit.
Phương trình hồi quy (logit)
\[ \log\left( \frac{p}{1 - p} \right) = \beta_0 + \beta_1 \cdot \text{balance} + \beta_2 \cdot \text{age} + \beta_3 \cdot \text{job} + \beta_4 \cdot \text{marital} \]
Trong đó: - \(p\): xác suất khách
hàng gửi tiền định kỳ - Các biến phân loại (job,
marital) được so sánh với nhóm tham chiếu (reference
group), mặc định là nhóm đầu tiên theo thứ tự chữ cái.
Diễn giải các hệ số
Intercept (0.1385, p = 0.6176): không có ý nghĩa thống kê. Đây là log odds khi tất cả biến độc lập ở giá trị cơ bản (balance = 0, tuổi = 0, job và marital ở nhóm tham chiếu).
Balance (0.00005767, p = 0.0011): có ý nghĩa thống kê ở mức 1%. Khi số dư tài khoản tăng 1 đơn vị, log odds của việc gửi tiền tăng khoảng 0.00005767. Dù hệ số nhỏ, nhưng với số dư lớn (ví dụ 1,000 đơn vị), ảnh hưởng sẽ rõ rệt.
Age (0.00785, p = 0.1188): không có ý nghĩa thống kê ở mức 5%. Tuổi không ảnh hưởng rõ rệt đến xác suất gửi tiền trong mô hình này.
Job variables:
Các nghề còn lại như housemaid, technician, self-employed, services không có ý nghĩa thống kê.
Marital variables:
Độ phù hợp của mô hình
Việc thêm các biến balance, age,
job, và marital đã giúp giảm sai số mô hình
(từ null deviance 3401.6 xuống còn 3249.0). AIC thấp hơn so với mô hình
đơn biến cho thấy mô hình này phù hợp hơn.
Kết luận
Trong mô hình hồi quy logistic này, balance là biến có
tác động tích cực và có ý nghĩa thống kê cao đến khả năng gửi tiền định
kỳ. Ngoài ra, một số nghề như student,
retired, và unemployed cũng có ảnh
hưởng tích cực rõ rệt đến hành vi gửi tiền. Ngược lại, các nhóm nghề
blue-collar và entrepreneur có xác
suất gửi tiền thấp hơn nhóm tham chiếu. Tuổi và tình trạng hôn nhân
không thể hiện ảnh hưởng đáng kể trong mô hình này.
Kết quả này giúp các tổ chức tài chính nhận diện tốt hơn các nhóm khách hàng tiềm năng cho sản phẩm tiền gửi, từ đó xây dựng chiến lược tiếp cận phù hợp hơn.
model_deposit <- glm(deposit ~ balance, family = binomial(link = "probit"), data = data)
summary(model_deposit)
##
## Call:
## glm(formula = deposit ~ balance, family = binomial(link = "probit"),
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.660e-01 2.959e-02 12.368 < 2e-16 ***
## balance 4.072e-05 9.960e-06 4.088 4.35e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 3401.6 on 2674 degrees of freedom
## Residual deviance: 3379.6 on 2673 degrees of freedom
## AIC: 3383.6
##
## Number of Fisher Scoring iterations: 4
Diễn giải hệ số
Hệ số chặn (Intercept) có giá trị -1.191 cho thấy rằng khi số dư tài khoản (balance) bằng 0, xác suất một người vay tiền là khá thấp. Điều này phản ánh rằng trong điều kiện không có tiền trong tài khoản, khả năng vay vốn vẫn không cao.
Hệ số của biến balance là -0.00007159 và có ý nghĩa thống kê rất mạnh (p = 0.00012 < 0.001). Dấu âm của hệ số này cho thấy rằng khi số dư tài khoản tăng lên, xác suất khách hàng vay tiền giảm xuống. Nói cách khác, người có nhiều tiền trong tài khoản thì ít có khả năng vay tiền hơn.
Độ phù hợp của mô hình
Null deviance là 1719.3 và residual deviance sau khi thêm biến balance là 1694.9. Sự giảm deviance này thể hiện rằng mô hình có cải thiện khi đưa biến giải thích vào. AIC của mô hình là 1698.9, cho thấy mức độ phù hợp khá tốt và có thể dùng để so sánh với các mô hình khác.
Kết luận
Mô hình hồi quy Probit chỉ ra rằng biến balance có ảnh hưởng tiêu cực và có ý nghĩa thống kê đến khả năng vay tiền của khách hàng. Cụ thể, những người có số dư tài khoản cao hơn sẽ có xác suất vay tiền thấp hơn. Kết quả này phù hợp với lý thuyết kinh tế, cho thấy mô hình có giá trị ứng dụng thực tiễn.
model_deposit_multi <- glm(deposit ~ age + balance + duration + poutcome,
family = binomial(link = "probit"), data = data)
summary(model_deposit_multi)
##
## Call:
## glm(formula = deposit ~ age + balance + duration + poutcome,
## family = binomial(link = "probit"), data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -8.118e-01 1.102e-01 -7.365 1.77e-13 ***
## age 1.762e-03 2.368e-03 0.744 0.45680
## balance 3.332e-05 1.067e-05 3.123 0.00179 **
## duration 2.139e-03 1.418e-04 15.086 < 2e-16 ***
## poutcomeother 1.309e-01 7.105e-02 1.843 0.06538 .
## poutcomesuccess 1.430e+00 7.069e-02 20.232 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 3401.6 on 2674 degrees of freedom
## Residual deviance: 2535.5 on 2669 degrees of freedom
## AIC: 2547.5
##
## Number of Fisher Scoring iterations: 6
Diễn giải hệ số
Hệ số chặn (Intercept) có giá trị -0.8118 và có ý nghĩa thống kê rất mạnh (p < 0.001). Điều này thể hiện rằng khi tất cả các biến độc lập bằng 0, xác suất khách hàng gửi tiền vào ngân hàng là tương đối thấp.
Biến age có hệ số dương (0.001762) nhưng không có ý nghĩa thống kê (p = 0.4568), cho thấy tuổi của khách hàng không ảnh hưởng rõ rệt đến xác suất gửi tiền trong mô hình này.
Biến balance có hệ số dương (0.00003332) và có ý nghĩa thống kê ở mức 1% (p = 0.00179). Điều này có nghĩa là khi số dư tài khoản tăng, xác suất khách hàng gửi tiền cũng tăng lên. Mối quan hệ này phù hợp với kỳ vọng, vì người có khả năng tài chính tốt hơn thường có xu hướng gửi tiết kiệm.
Biến duration có hệ số dương (0.002139) và có ý nghĩa thống kê rất mạnh (p < 0.001). Đây là biến ảnh hưởng mạnh nhất trong mô hình. Duration phản ánh thời gian cuộc gọi tư vấn – thời lượng cuộc gọi càng dài, khả năng khách hàng đồng ý gửi tiền càng cao.
Biến poutcome (kết quả của chiến dịch tiếp thị trước) có hai mức: -
poutcomeother có hệ số dương (0.1309) và có ý nghĩa thống
kê ở mức 10% (p = 0.06538), cho thấy ảnh hưởng nhẹ đến xác suất gửi
tiền. - poutcomesuccess có hệ số lớn và rất có ý nghĩa
thống kê (1.43, p < 0.001). Điều này khẳng định rằng nếu chiến dịch
tiếp thị trước đó thành công, thì xác suất khách hàng gửi tiền hiện tại
cao hơn rất nhiều.
Độ phù hợp của mô hình
Null deviance ban đầu là 3401.6 và giảm xuống còn 2535.5 sau khi thêm các biến giải thích, cho thấy mô hình cải thiện rõ rệt. AIC đạt 2547.5, là mức khá tốt để đánh giá mức độ phù hợp tổng thể của mô hình.
Kết luận
Mô hình Probit cho thấy các yếu tố ảnh hưởng đến xác suất khách hàng gửi tiền vào ngân hàng bao gồm: số dư tài khoản (balance), thời gian tư vấn (duration), và kết quả chiến dịch tiếp thị trước (poutcome). Tuổi của khách hàng (age) không có ảnh hưởng đáng kể. Đặc biệt, hiệu quả của chiến dịch tiếp thị trước là yếu tố then chốt làm tăng khả năng gửi tiền của khách hàng. Mô hình có ý nghĩa thống kê tổng thể tốt và phản ánh hợp lý hành vi tài chính của người tiêu dùng.
# Tạo bảng tần số
freq_tableloan <- table(qual_data$loan)
# Tính tỷ lệ phần trăm
percent_tableloan <- prop.table(freq_tableloan) * 100
## Số khách hàng có/không vay cá nhân :
##
## no yes
## 2412 263
## Tỷ lệ phần trăm Số khách hàng có/không vay cá nhân :
##
## no yes
## 90.17 9.83
# Vẽ biểu đồ cột với màu xanh navy và be
bar_colors <- c("blue", "#000080") # be và xanh navy
# Tạo biểu đồ
bar_positions <- barplot(freq_tableloan,
col = bar_colors,
ylim = c(0, max(freq_tableloan) * 1.1),
main = "Biểu đồ thể hiện tình trạng vay cá nhân của khách hàng",
ylab = "Số lượng khách hàng",
xlab = "Tình trạng vay cá nhân (loan)")
# Thêm nhãn số trên đầu cột
text(x = bar_positions,
y = freq_tableloan,
labels = freq_tableloan,
pos = 3,
cex = 0.9)
\[ \begin{cases} H_0: \text{Tỷ lệ khách hàng vay cá nhân là 50% },p = 0.5 \\ H_1: \text{Tỷ lệ khách hàng vay cá nhân khác 50%},p \ne 0.5 \end{cases} \]
# Tạo bảng tần số cho biến loan
freq_table_loan <- table(qual_data$loan)
# Ước lượng và kiểm định giả thuyết cho tỷ lệ khách hàng có loan = "yes"
prop.test(freq_table_loan["yes"], sum(freq_table_loan), p = 0.5,
alternative = "two.sided", correct = FALSE)
##
## 1-sample proportions test without continuity correction
##
## data: freq_table_loan["yes"] out of sum(freq_table_loan), null probability 0.5
## X-squared = 1726.4, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.08760405 0.11018349
## sample estimates:
## p
## 0.09831776
p-value trong kiểm định này đánh giá xác suất sai lầm khi ta giả sử rằng tỷ lệ khách hàng vay cá nhân là 50%. Vì p-value gần bằng 0, ta bác bỏ giả thuyết H₀: p = 0.5, và kết luận rằng tỷ lệ khách hàng vay cá nhân khác 50%, cụ thể là thấp hơn nhiều (ước lượng thực tế là 9.83%).
# Tạo bảng tần số chéo giữa loan và marital (tên mới để tránh trùng)
freq_marital_loan <- table(qual_data$marital, qual_data$loan)
# Chuyển thành data frame để ggplot sử dụng
df_freq_marital_loan <- as.data.frame(freq_marital_loan)
colnames(df_freq_marital_loan) <- c("marital", "loan", "frequency")
# Vẽ biểu đồ cột chồng theo tần số
library(ggplot2)
ggplot(df_freq_marital_loan, aes(x = marital, y = frequency, fill = loan)) +
geom_bar(stat = "identity", position = "stack") +
geom_text(aes(label = frequency),
position = position_stack(vjust = 0.5),
color = "white", size = 4) +
scale_fill_manual(values = c("yes" = "#000080", "no" = "brown")) + # navy & beige
labs(
title = "Biểu đồ thể hiện tình trạng hôn nhân tác động đến quuyết định vay cá nhân ",
x = "Tình trạng hôn nhân (marital)",
y = "Tần số",
fill = "Vay cá nhân (loan)"
) +
theme_minimal()
\[ \begin{cases} H_0: \text{Tỷ lệ khách hàng vay tiền ở nhóm đã kết hôn bằng tỷ lệ ở nhóm độc thân } \\ H_1: \text{Tỷ lệ khách hàng vay tiền ở nhóm đã kết hôn khác với nhóm độc thân.} \end{cases} \]
# Tạo bảng tần số loan theo marital
table_marital_loan <- table(qual_data$marital, qual_data$loan)
# Lấy số liệu
x1 <- table_marital_loan["married", "yes"]
n1 <- sum(table_marital_loan["married", ])
x2 <- table_marital_loan["single", "yes"]
n2 <- sum(table_marital_loan["single", ])
# Kiểm định 2 tỷ lệ (2-sample proportion test)
prop.test(x = c(x1, x2), n = c(n1, n2), correct = FALSE)
##
## 2-sample test for equality of proportions without continuity correction
##
## data: c(x1, x2) out of c(n1, n2)
## X-squared = 24.646, df = 1, p-value = 6.888e-07
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.03928032 0.08466633
## sample estimates:
## prop 1 prop 2
## 0.12306658 0.06109325
Đây là p-value của giả thuyết H₀: “Tỷ lệ khách hàng vay tiền ở nhóm đã kết hôn bằng với nhóm độc thân”. Vì p-value = 0.0000006888 < 0.05, ta bác bỏ H₀ và kết luận rằng tỷ lệ vay tiền giữa hai nhóm là khác nhau
\[ \begin{cases} H_0: \text{Hai biến loan và marital là độc lập với nhau } \\ H_1: \text{Hai biến không độc lập, tức là có mối liên hệ giữa tình trạng hôn nhân và việc vay tiền.} \end{cases} \]
# Tạo bảng tần số chéo giữa marital và loan
table_marital_loan <- table(qual_data$marital, qual_data$loan)
# Kiểm định độc lập
chisq.test(table_marital_loan)
##
## Pearson's Chi-squared test
##
## data: table_marital_loan
## X-squared = 25.047, df = 2, p-value = 3.64e-06
p-value = 3.64e-06 là xác suất để có được sự khác biệt rõ rệt trong dữ liệu giữa tình trạng hôn nhân và việc vay tiền cá nhân nếu thật sự không có mối liên hệ nào giữa hai yếu tố này.
Vì p-value = 0.00000364 < 0.05, ta bác bỏ giả thuyết H₀.
Nói cách khác, có bằng chứng thống kê rất mạnh cho thấy giữa tình trạng hôn nhân và hành vi vay tiền có mối liên hệ, tức là hai biến không độc lập.
Sự kiện quan tâm: Khách hàng có vay cá nhân (loan = yes)
Hai nhóm so sánh:
Nhóm 1 (nhóm tham chiếu): Khách hàng đã ly hôn (marital = divorced)
Nhóm 2:
Khách hàng đã kết hôn (marital = married)
Khách hàng độc thân (marital = single)
# Cài gói nếu chưa có
library(epitools)
# Tạo bảng tần số chéo giữa marital và loan
table_marital_loan <- table(qual_data$marital, qual_data$loan)
riskratio(table_marital_loan)
## $data
##
## no yes Total
## divorced 232 23 255
## married 1304 183 1487
## single 876 57 933
## Total 2412 263 2675
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## divorced 1.0000000 NA NA
## married 1.3644338 0.9030189 2.061617
## single 0.6773382 0.4259149 1.077180
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## divorced NA NA NA
## married 0.1284498 0.1424984 0.1331357
## single 0.1103732 0.1197584 0.1003032
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
\[ \text{RR} = \frac{183/1487}{23/255} = 1.3644338 \]
Khách hàng đã kết hôn có tỷ lệ vay cá nhân cao hơn 1.36 lần so với khách hàng đã ly hôn \[ \text{RR} = \frac{57/933}{23/255} = 0.6773382 \]
khách hàng độc thân có tỷ lệ vay thấp hơn nhóm đã ly hôn, chỉ bằng khoảng 0.68 lần (tức thấp hơn 32%).
Sự kiện quan tâm: Khách hàng có vay cá nhân (loan = no)
Hai nhóm so sánh:
Nhóm 1 (nhóm tham chiếu): Khách hàng đã ly hôn (marital = divorced)
Nhóm 2:
Khách hàng đã kết hôn (marital = married)
Khách hàng độc thân (marital = single)
# Tạo bảng tần số chéo giữa marital và loan
table_marital_loan <- table(qual_data$marital, qual_data$loan)
# Đảo ngược cột để "loan = no" là sự kiện quan tâm (nằm ở cột thứ hai)
table_marital_loan_rev <- table_marital_loan[, c("yes", "no")]
# Tính risk ratio với sự kiện quan tâm là loan = no
riskratio(table_marital_loan_rev)
## $data
##
## yes no Total
## divorced 23 232 255
## married 183 1304 1487
## single 57 876 933
## Total 263 2412 2675
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## divorced 1.0000000 NA NA
## married 0.9638708 0.9232276 1.006303
## single 1.0319880 0.9895731 1.076221
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## divorced NA NA NA
## married 0.1284498 0.1424984 0.1331357
## single 0.1103732 0.1197584 0.1003032
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
\[ \text{RR} = \frac{1304/1487}{232/255} = 0.9638708 \]
Khách hàng đã kết hôn có tỷ lệ không vay thấp hơn 3.6% so với khách hàng đã ly hôn.
\[ \text{RR} = \frac{876/933}{232/255} = 1.0319880 \]
TTỷ lệ khách hàng không vay trong nhóm độc thân cao hơn khoảng 3.2% so với nhóm đã ly hôn.
Sự kiện quan tâm: Khách hàng có vay cá nhân (loan = yes)
Hai nhóm so sánh:
Nhóm 1 (nhóm tham chiếu): Khách hàng đã ly hôn (marital = divorced)
Nhóm 2:
Khách hàng đã kết hôn (marital = married)
Khách hàng độc thân (marital = single)
oddsratio(table_marital_loan)
## $data
##
## no yes Total
## divorced 232 23 255
## married 1304 183 1487
## single 876 57 933
## Total 2412 263 2675
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## divorced 1.0000000 NA NA
## married 1.4074033 0.9097004 2.276469
## single 0.6540632 0.3991163 1.105538
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## divorced NA NA NA
## married 0.1284498 0.1424984 0.1331357
## single 0.1103732 0.1197584 0.1003032
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Đã kết hôn (Married):Xác suất vay cá nhân ở nhóm đã kết hôn có odds cao hơn khoảng 1.41 lần so với nhóm đã ly hôn.
\[ \text{OR} = \frac{183/1304}{23/232} = 1.4074033 \] Độc thân (Single):Xác suất vay cá nhân ở nhóm độc thân có odds thấp hơn khoảng 34.6% so với nhóm đã ly hôn.
\[ \text{OR} = \frac{57/876}{23/232} = 0.6540632 \]
Sự kiện quan tâm: Khách hàng có vay cá nhân (loan = no)
Hai nhóm so sánh:
Nhóm 1 (nhóm tham chiếu): Khách hàng đã ly hôn (marital = divorced)
Nhóm 2:
Khách hàng đã kết hôn (marital = married)
Khách hàng độc thân (marital = single)
oddsratio(table_marital_loan_rev)
## $data
##
## yes no Total
## divorced 23 232 255
## married 183 1304 1487
## single 57 876 933
## Total 263 2412 2675
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## divorced 1.0000000 NA NA
## married 0.7105369 0.4392767 1.099263
## single 1.5289159 0.9045370 2.505535
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## divorced NA NA NA
## married 0.1284498 0.1424984 0.1331357
## single 0.1103732 0.1197584 0.1003032
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Thực hiện bài toán kiểm định khi có giải thuyết Bài toán ước lượng Khi không có thông tin
# Hồi quy đơn biến với biến balance
model_loan_simple <- glm(loan ~ balance, data = data, family = "binomial")
# Kết quả
summary(model_loan_simple)
##
## Call:
## glm(formula = loan ~ balance, family = "binomial", data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.959e+00 7.971e-02 -24.577 < 2e-16 ***
## balance -1.989e-04 4.519e-05 -4.401 1.08e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1719.3 on 2674 degrees of freedom
## Residual deviance: 1689.5 on 2673 degrees of freedom
## AIC: 1693.5
##
## Number of Fisher Scoring iterations: 6
Mô hình hồi quy logistic:
loan ~ balance
Mô hình hồi quy logistic này nhằm phân tích mối quan hệ giữa
xác suất khách hàng vay tiền (loan = yes)
và biến độc lập số dư tài khoản
(balance).
Phương trình hồi quy (logit)
\[ \log\left(\frac{p}{1 - p}\right) = -1.959 - 0.0001989 \times \text{balance} \]
Trong đó:
- \(p\): xác suất khách hàng vay
tiền
- balance: số dư tài khoản của khách hàng
Diễn giải các hệ số
Hệ số chặn (Intercept = -1.959, p <
0.001):
Đây là log odds của việc vay tiền khi balance = 0. Mặc dù
không mang nhiều ý nghĩa thực tế (vì hiếm có khách hàng có số dư bằng
0), hệ số này vẫn cần thiết trong phương trình hồi quy.
Hệ số balance = -0.0001989 (p < 0.001):
Khi số dư tài khoản tăng thêm 1 đơn vị, log odds của việc vay tiền giảm
0.0001989. Với p-value < 0.001, hệ số này có ý nghĩa thống
kê, cho thấy balance là yếu tố quan trọng ảnh
hưởng đến quyết định vay tiền.
Tỷ số odds (odds ratio)
\[ OR_{\text{balance}} = e^{-0.0001989} \approx 0.9998 \]
→ Khi số dư tài khoản tăng 1 đơn vị, odds vay tiền giảm khoảng
0.02%.
Dù ảnh hưởng nhỏ cho mỗi đơn vị, nhưng với sự gia tăng lớn về số dư, tác
động sẽ rõ rệt hơn.
Độ phù hợp của mô hình
Việc đưa biến balance vào mô hình làm giảm deviance từ
1719.3 xuống 1689.5, cho thấy mô hình có cải thiện đáng
kể trong dự đoán so với mô hình không có biến độc lập.
Kết luận
Mô hình hồi quy logistic đơn biến cho thấy rằng số dư tài khoản có ảnh hưởng có ý nghĩa thống kê đến xác suất khách hàng vay tiền. Cụ thể, khách hàng có số dư càng cao thì khả năng vay tiền càng thấp, phù hợp với kỳ vọng thực tế. Để cải thiện mô hình, có thể đưa thêm các biến như tuổi, nghề nghiệp hoặc lịch sử tín dụng vào mô hình đa biến.
# Hồi quy đa biến
model_loan_multi <- glm(loan ~ age + job + education + balance, data = data, family = "binomial")
# Kết quả
summary(model_loan_multi)
##
## Call:
## glm(formula = loan ~ age + job + education + balance, family = "binomial",
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.109e+00 4.361e-01 -4.835 1.33e-06 ***
## age 6.922e-03 7.055e-03 0.981 0.326526
## jobblue-collar 1.114e-02 2.245e-01 0.050 0.960444
## jobentrepreneur 2.995e-01 4.201e-01 0.713 0.475854
## jobhousemaid -1.570e+01 5.620e+02 -0.028 0.977705
## jobmanagement -1.913e-01 2.562e-01 -0.747 0.455075
## jobretired -1.575e+00 4.602e-01 -3.422 0.000622 ***
## jobself-employed 1.237e-01 3.728e-01 0.332 0.739904
## jobservices -5.106e-02 2.640e-01 -0.193 0.846627
## jobstudent -1.555e+01 3.521e+02 -0.044 0.964784
## jobtechnician -1.200e-01 2.158e-01 -0.556 0.578187
## jobunemployed -1.006e+00 4.857e-01 -2.070 0.038416 *
## educationsecondary 2.646e-01 2.643e-01 1.001 0.316889
## educationtertiary -1.553e-01 3.146e-01 -0.494 0.621533
## balance -1.775e-04 4.481e-05 -3.961 7.48e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1719.3 on 2674 degrees of freedom
## Residual deviance: 1615.2 on 2660 degrees of freedom
## AIC: 1645.2
##
## Number of Fisher Scoring iterations: 16
Mô hình hồi quy logistic: loan ~ age + job + education + balance
Mô hình này nhằm phân tích xác suất khách hàng vay tiền
(loan = yes) dựa trên các đặc điểm nhân khẩu học và tài
chính bao gồm: tuổi (age), nghề nghiệp (job),
trình độ học vấn (education) và số dư tài khoản
(balance). Đây là mô hình hồi quy logistic đa biến, sử dụng
phân phối nhị thức (binomial) với liên kết logit.
Phương trình hồi quy (logit)
\[ \log\left( \frac{p}{1 - p} \right) = \beta_0 + \beta_1 \cdot \text{age} + \beta_2 \cdot \text{job} + \beta_3 \cdot \text{education} + \beta_4 \cdot \text{balance} \]
Trong đó: - \(p\): xác suất khách
hàng vay tiền - Các biến phân loại (job,
education) được so sánh với nhóm tham chiếu (mặc định là
nhóm đầu tiên theo thứ tự chữ cái)
Diễn giải các hệ số
Intercept (-2.109, p < 0.001):
Là log odds khi các biến độc lập bằng 0 hoặc ở nhóm tham chiếu. Có ý
nghĩa thống kê cao.
Age (0.00692, p = 0.327):
Khi tuổi tăng thêm 1 đơn vị, log odds của việc vay tiền tăng 0.00692.
Tuy nhiên, hệ số này không có ý nghĩa thống kê (p >
0.05).
Balance (-0.0001775, p < 0.001):
Biến số dư tài khoản có ý nghĩa thống kê rất cao. Khi số dư tăng 1 đơn
vị, log odds vay tiền giảm 0.0001775. Nếu số dư tăng
1,000 đơn vị, odds giảm khoảng 16.3%, cho thấy khách hàng có số dư cao
ít có nhu cầu vay hơn.
Nghề nghiệp (job):
Trình độ học vấn (education):
Tỷ số odds (odds ratio)
\[ \text{OR}_{\text{balance}} = e^{-0.0001775} \approx 0.9998 \]
→ Khi số dư tăng 1 đơn vị, odds vay tiền giảm khoảng
0.018%.
→ Nếu số dư tăng 1,000 đơn vị, odds giảm khoảng
16.3%
Độ phù hợp mô hình
Mô hình có cải thiện đáng kể so với mô hình không biến (null model).
Việc thêm các biến balance, job,
age, education đã giúp giảm sai số và cải
thiện độ phù hợp mô hình.
Kết luận
Mô hình hồi quy logistic này cho thấy rằng: - Số dư tài khoản
(balance) có ảnh hưởng ngược chiều và có ý nghĩa thống kê
cao đến khả năng vay tiền. Điều này phản ánh hợp lý rằng khách
hàng có dư tiền thường ít cần vay. - Tuổi và học vấn không có
ảnh hưởng đáng kể trong mô hình này. - Một số nhóm nghề
như nghỉ hưu và thất nghiệp có khả năng vay thấp hơn đáng kể so
với nhóm tham chiếu.
Kết quả này cung cấp thông tin quan trọng cho các ngân hàng trong việc phân loại khách hàng mục tiêu và thiết kế sản phẩm tín dụng phù hợp.
model_loan <- glm(loan ~ balance, family = binomial(link = "probit"), data = data)
summary(model_loan)
##
## Call:
## glm(formula = loan ~ balance, family = binomial(link = "probit"),
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.191e+00 4.064e-02 -29.297 < 2e-16 ***
## balance -7.159e-05 1.862e-05 -3.846 0.00012 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1719.3 on 2674 degrees of freedom
## Residual deviance: 1694.9 on 2673 degrees of freedom
## AIC: 1698.9
##
## Number of Fisher Scoring iterations: 7
Diễn giải hệ số
Hệ số chặn (Intercept) có giá trị -1.191 và có ý nghĩa thống kê rất
mạnh (p < 0.001). Điều này cho thấy rằng khi số dư tài khoản
(balance) bằng 0, xác suất khách hàng vay tiền là tương đối
thấp.
Biến balance có hệ số âm (-0.00007159) và có ý nghĩa
thống kê cao (p = 0.00012 < 0.001). Dấu âm của hệ số này cho thấy
rằng khi số dư tài khoản tăng, khả năng khách hàng vay tiền giảm. Điều
này phù hợp với kỳ vọng thực tiễn rằng người có điều kiện tài chính tốt
hơn sẽ ít cần vay vốn hơn.
Độ phù hợp của mô hình
Giá trị null deviance là 1719.3 và residual deviance sau khi đưa biến
balance vào mô hình giảm xuống còn 1694.9. Điều này cho
thấy mô hình có cải thiện nhất định. Giá trị AIC của mô hình là 1698.9,
mức này cho thấy mô hình có độ phù hợp trung bình và có thể so sánh với
các mô hình khác.
Kết luận
Mô hình Probit đơn biến cho thấy số dư tài khoản có ảnh hưởng tiêu cực và có ý nghĩa thống kê đến xác suất vay tiền. Cụ thể, khách hàng có nhiều tiền trong tài khoản thì xác suất vay tiền thấp hơn. Mô hình phản ánh hợp lý hành vi tài chính của khách hàng và có thể được sử dụng trong phân tích ra quyết định tín dụng.
model_loan_multi <- glm(loan ~ age + education + balance + housing,
family = binomial(link = "probit"), data = data)
summary(model_loan_multi)
##
## Call:
## glm(formula = loan ~ age + education + balance + housing, family = binomial(link = "probit"),
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.758e+00 2.015e-01 -8.724 < 2e-16 ***
## age 2.031e-03 3.047e-03 0.666 0.505149
## educationsecondary 2.622e-01 1.271e-01 2.063 0.039159 *
## educationtertiary 9.124e-02 1.335e-01 0.683 0.494415
## balance -6.295e-05 1.890e-05 -3.331 0.000865 ***
## housingyes 5.362e-01 7.164e-02 7.485 7.17e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1719.3 on 2674 degrees of freedom
## Residual deviance: 1624.9 on 2669 degrees of freedom
## AIC: 1636.9
##
## Number of Fisher Scoring iterations: 6
Diễn giải hệ số
Hệ số chặn (Intercept) có giá trị -1.758 và có ý nghĩa thống kê rất cao (p < 0.001). Điều này cho thấy khi các biến độc lập bằng 0 (ví dụ: tuổi bằng 0, không học vấn, không có nhà ở, số dư tài khoản bằng 0), thì xác suất vay tiền là rất thấp.
Biến age có hệ số dương (0.002031) nhưng không có ý
nghĩa thống kê (p = 0.505), cho thấy tuổi không có ảnh hưởng rõ ràng đến
xác suất vay tiền trong mô hình này.
Biến educationsecondary (trình độ học vấn trung học) có
hệ số dương (0.2622) và có ý nghĩa thống kê ở mức 5% (p = 0.039). Điều
này cho thấy so với nhóm trình độ tiểu học (mặc định), những người học
trung học có xác suất vay tiền cao hơn. Trong khi đó, biến
educationtertiary (đại học) không có ý nghĩa thống kê (p =
0.494), nên không thể kết luận chắc chắn về ảnh hưởng của nhóm này.
Biến balance có hệ số âm (-0.00006295) và có ý nghĩa
thống kê cao (p = 0.000865), phản ánh rằng khách hàng có số dư tài khoản
cao hơn thì khả năng vay tiền thấp hơn. Kết quả này phù hợp với kỳ vọng
thực tiễn.
Biến housingyes (có vay mua nhà) có hệ số dương (0.5362)
và rất có ý nghĩa thống kê (p < 0.001). Điều này cho thấy khách hàng
đã vay mua nhà có khả năng vay thêm cao hơn so với người không vay
nhà.
Độ phù hợp của mô hình
Null deviance ban đầu là 1719.3 và giảm xuống còn 1624.9 sau khi đưa các biến giải thích vào mô hình. Mức giảm này thể hiện mô hình có cải thiện rõ rệt. AIC của mô hình là 1636.9, thấp hơn so với mô hình đơn biến trước đó (AIC = 1698.9), cho thấy mô hình này có mức độ phù hợp tốt hơn.
Kết luận
Mô hình Probit cho thấy rằng số dư tài khoản và việc có vay mua nhà là những yếu tố ảnh hưởng rõ rệt và có ý nghĩa thống kê đến xác suất vay tiền. Cụ thể, khách hàng có nhiều tiền hơn thì ít vay, trong khi người đã vay nhà lại có khả năng vay thêm cao hơn. Trình độ học vấn trung học cũng có mối liên hệ tích cực với khả năng vay, trong khi tuổi và trình độ đại học không ảnh hưởng rõ ràng trong mô hình này. Mô hình có độ phù hợp tốt và phản ánh hợp lý hành vi vay vốn của khách hàng.
library(nnet)
## Warning: package 'nnet' was built under R version 4.5.1
# Đảm bảo biến phụ thuộc là factor
data$job <- as.factor(data$job)
# Hồi quy logistic đa thức với education và balance là biến độc lập
model_multinom <- multinom(job ~ education , data = data)
## # weights: 44 (30 variable)
## initial value 6414.369855
## iter 10 value 4979.066871
## iter 20 value 4834.648311
## iter 30 value 4804.252459
## final value 4803.822806
## converged
# Tóm tắt kết quả mô hình
summary(model_multinom)
## Call:
## multinom(formula = job ~ education, data = data)
##
## Coefficients:
## (Intercept) educationsecondary educationtertiary
## blue-collar 2.417930e+00 -2.66506003 -3.9474284
## entrepreneur -5.878354e-01 -1.91671427 -0.5620145
## housemaid 8.473029e-01 -3.79811973 -2.4565750
## management 4.419635e-01 -2.29416437 1.9030654
## retired 2.221669e+00 -3.34004233 -2.4873950
## self-employed -1.098159e+00 -1.53417166 1.2523048
## services 4.419279e-01 -1.07789021 -2.2337445
## student 1.460035e-04 -1.30488712 -0.6604739
## technician 3.013524e-05 -0.07818915 0.8400932
## unemployed 2.007290e-01 -1.89889752 -0.8939078
##
## Std. Errors:
## (Intercept) educationsecondary educationtertiary
## blue-collar 0.3478764 0.3584275 0.4632676
## entrepreneur 0.5577965 0.5953145 0.6167926
## housemaid 0.3984195 0.4738102 0.5086507
## management 0.4272467 0.4545742 0.4481117
## retired 0.3509488 0.3693682 0.4019600
## self-employed 0.6665707 0.7021611 0.6893978
## services 0.4272497 0.4381588 0.5470065
## student 0.4713995 0.4873745 0.5207128
## technician 0.4714131 0.4785730 0.4960762
## unemployed 0.4494723 0.4723872 0.5020229
##
## Residual Deviance: 9607.646
## AIC: 9667.646
Biến phụ thuộc (job): Nghề nghiệp – là
biến phân loại đa mức (đa thức), gồm nhiều nhóm như blue-collar,
entrepreneur, housemaid, management…
Biến độc lập (education): Trình độ học
vấn với 3 mức: primary (tham chiếu), secondary, tertiary
Phương pháp: Hồi quy logistic đa thức sử dụng hàm
multinom() từ package nnet
tham chiếu cho job:
admin.
Nhóm nghề blue-collar
\[ \log\left(\frac{P(\text{blue-collar})}{P(\text{admin.})}\right) = 2.805 - 2.776 \cdot \text{secondary} - 4.057 \cdot \text{tertiary} \]
Giải thích: - So với người có trình độ primary, người có trình độ secondary làm giảm log-odds chọn nghề blue-collar khoảng 2.776 đơn vị. - Người có trình độ tertiary càng ít làm nghề này hơn, log-odds giảm 4.057 đơn vị.
Nhóm nghề management
\[ \log\left(\frac{P(\text{management})}{P(\text{admin.})}\right) = 0.452 - 1.968 \cdot \text{secondary} + 2.110 \cdot \text{tertiary} \]
Giải thích: - Người có trình độ đại học trở lên (tertiary) có khả năng cao hơn làm quản lý. - Trình độ secondary làm giảm khả năng làm management so với người học primary.
Nhóm nghề technician
\[ \log\left(\frac{P(\text{technician})}{P(\text{admin.})}\right) = -0.024 + 0.133 \cdot \text{secondary} + 1.156 \cdot \text{tertiary} \]
Giải thích: - Trình độ tertiary làm tăng mạnh khả năng làm kỹ thuật viên (technician). - Người học secondary tăng nhẹ log-odds so với primary.
education có ý nghĩa thống kê đối
với nhiều nhóm nghề nghiệp.