library(tidyselect)
## Warning: package 'tidyselect' was built under R version 3.6.3
library(epitools)
## Warning: package 'epitools' was built under R version 3.6.3
library(DescTools)
## Warning: package 'DescTools' was built under R version 3.6.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.6.3
##
## 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
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.6.3
library(caTools)
## Warning: package 'caTools' was built under R version 3.6.3
library(caret)
## Warning: package 'caret' was built under R version 3.6.3
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following objects are masked from 'package:DescTools':
##
## MAE, RMSE
library(fBasics)
## Warning: package 'fBasics' was built under R version 3.6.3
## Loading required package: timeDate
## Loading required package: timeSeries
library(lmtest)
## Warning: package 'lmtest' was built under R version 3.6.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 3.6.3
##
## Attaching package: 'zoo'
## The following object is masked from 'package:timeSeries':
##
## time<-
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
link tiểu luận (file pdf): https://drive.google.com/file/d/1eEctJgI8AECuvg9d6sEaSg4XabMQQL74/view?usp=sharing
File dữ liệu: https://drive.google.com/file/d/1WlDsnbdNxnN-Z__55tVxU5yg15LetA_3/view?usp=sharing
Bộ dữ liệu có 20 biến quan sát gồm 10.127 quan sát.
da<-file.choose()
mac<-read.csv(da, header = T)
mac$Attrition_Flag<- as.factor(mac$Attrition_Flag)
mac$Gender<-as.factor(mac$Gender)
mac$Education_Level<-as.factor(mac$Education_Level)
mac$Dependent_count<-as.factor(mac$Dependent_count)
mac$Marital_Status<-as.factor(mac$Marital_Status)
mac$Income_Category<-as.factor(mac$Income_Category)
mac$Card_Category<-as.factor(mac$Card_Category)
str(mac)
## 'data.frame': 10127 obs. of 20 variables:
## $ CLIENTNUM : int 768805383 818770008 713982108 769911858 709106358 713061558 810347208 818906208 710930508 719661558 ...
## $ Attrition_Flag : Factor w/ 2 levels "Attrited Customer",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ Customer_Age : int 45 49 51 40 40 44 51 32 37 48 ...
## $ Gender : Factor w/ 2 levels "F","M": 2 1 2 1 2 2 2 2 2 2 ...
## $ Dependent_count : Factor w/ 6 levels "0","1","2","3",..: 4 6 4 5 4 3 5 1 4 3 ...
## $ Education_Level : Factor w/ 7 levels "College","Doctorate",..: 4 3 3 4 6 3 7 4 6 3 ...
## $ Marital_Status : Factor w/ 4 levels "Divorced","Married",..: 2 3 2 4 2 2 2 4 3 3 ...
## $ Income_Category : Factor w/ 6 levels "$120K +","$40K - $60K",..: 3 5 4 5 3 2 1 3 3 4 ...
## $ Card_Category : Factor w/ 4 levels "Blue","Gold",..: 1 1 1 1 1 1 2 4 1 1 ...
## $ Months_on_book : int 39 44 36 34 21 36 46 27 36 36 ...
## $ Total_Relationship_Count: int 5 6 4 3 5 3 6 2 5 6 ...
## $ Months_Inactive_12_mon : int 1 1 1 4 1 1 1 2 2 3 ...
## $ Contacts_Count_12_mon : int 3 2 0 1 0 2 3 2 0 3 ...
## $ Credit_Limit : num 12691 8256 3418 3313 4716 ...
## $ Total_Revolving_Bal : int 777 864 0 2517 0 1247 2264 1396 2517 1677 ...
## $ Total_Amt_Chng_Q4_Q1 : num 1.33 1.54 2.59 1.4 2.17 ...
## $ Total_Trans_Amt : int 1144 1291 1887 1171 816 1088 1330 1538 1350 1441 ...
## $ Total_Trans_Ct : int 42 33 20 20 28 24 31 36 24 32 ...
## $ Total_Ct_Chng_Q4_Q1 : num 1.62 3.71 2.33 2.33 2.5 ...
## $ Avg_Utilization_Ratio : num 0.061 0.105 0 0.76 0 0.311 0.066 0.048 0.113 0.144 ...
table(mac$Attrition_Flag)
##
## Attrited Customer Existing Customer
## 1627 8500
table(mac$Attrition_Flag)/sum(table(mac$Attrition_Flag))
##
## Attrited Customer Existing Customer
## 0.1606596 0.8393404
Có 1627 khách hàng rời bỏ (Không còn sử dụng thẻ tín dụng của ngân hàng) chiếm tỷ lệ 16,06596% tổng số khách hàng.
ggplot(mac,aes(Attrition_Flag))+
geom_bar(color = "blue", fill = "green")+
geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat= 'count', color = 'black', vjust = -.5)+
ylab("Number of Customer")+ xlab("Attrition Flag")
table(mac$Gender)
##
## F M
## 5358 4769
Có 5358 khách hàng nữ và 4769 khách hàng nam.
ggplot(mac,aes(Gender))+
geom_bar(color = "blue", fill = "green")+
geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat= 'count', color = 'black', vjust = -.5)+
ylab("Number of Customer")+ xlab("Gender")
table(mac$Education_Level)
##
## College Doctorate Graduate High School Post-Graduate
## 1013 451 3128 2013 516
## Uneducated Unknown
## 1487 1519
Phân loại số khách hàng theo trình độ học vấn như sau:
ggplot(mac,aes(Education_Level))+
geom_bar(color = "blue", fill = "green")+
geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat= 'count', color = 'black', vjust = -.5)+
ylab("Number of Customer")+ xlab("Education_Level")
table(mac$Marital_Status)
##
## Divorced Married Single Unknown
## 748 4687 3943 749
ggplot(mac,aes(x = Marital_Status, y = after_stat(count)))+
geom_bar(color = "blue", fill = "green")+
geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat= 'count', color = 'black', vjust = -.5)+
ylab("Number of Customer")+ xlab("Marital_Status")
table(mac$Income_Category)
##
## $120K + $40K - $60K $60K - $80K $80K - $120K Less than $40K
## 727 1790 1402 1535 3561
## Unknown
## 1112
ggplot(mac, aes(x = "", fill = Income_Category)) +
geom_bar(color = "blue", width = 1, stat = "count") +
coord_polar("y", start = 0) +
ylab("Number of Customers") +
xlab("Income Category")
summary(mac$Card_Category)
## Blue Gold Platinum Silver
## 9436 116 20 555
ggplot(mac,aes(Card_Category))+
geom_bar(color = "blue", fill = "green")+
geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat= 'count', color = 'black', vjust = -.5)+
ylab("Number of Customer")+ xlab("Card Category")
Thống kê mô tả
mac1<-data.frame(mac$Total_Ct_Chng_Q4_Q1, mac$Avg_Utilization_Ratio, mac$Total_Relationship_Count, mac$Total_Trans_Amt, mac$Credit_Limit, mac$Contacts_Count_12_mon, mac$Months_Inactive_12_mon)
summary(mac1)
## mac.Total_Ct_Chng_Q4_Q1 mac.Avg_Utilization_Ratio mac.Total_Relationship_Count
## Min. :0.0000 Min. :0.0000 Min. :1.000
## 1st Qu.:0.5820 1st Qu.:0.0230 1st Qu.:3.000
## Median :0.7020 Median :0.1760 Median :4.000
## Mean :0.7122 Mean :0.2749 Mean :3.813
## 3rd Qu.:0.8180 3rd Qu.:0.5030 3rd Qu.:5.000
## Max. :3.7140 Max. :0.9990 Max. :6.000
## mac.Total_Trans_Amt mac.Credit_Limit mac.Contacts_Count_12_mon
## Min. : 510 Min. : 1438 Min. :0.000
## 1st Qu.: 2156 1st Qu.: 2555 1st Qu.:2.000
## Median : 3899 Median : 4549 Median :2.000
## Mean : 4404 Mean : 8632 Mean :2.455
## 3rd Qu.: 4741 3rd Qu.:11068 3rd Qu.:3.000
## Max. :18484 Max. :34516 Max. :6.000
## mac.Months_Inactive_12_mon
## Min. :0.000
## 1st Qu.:2.000
## Median :2.000
## Mean :2.341
## 3rd Qu.:3.000
## Max. :6.000
Từ kết quả thống kê mô tả cho thấy:
Thay đổi số lượng giao dịch thẻ tín dụng quý 4 so với quý 1 (Total_Ct_Chng_Q4_Q1): nhỏ nhất là 0; giá trị lớn nhất là 3,714; giá trị trung bình là 0,7122; 25% dữ liệu nhỏ hơn 0,582 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 0,702 (giá trị trung vị); 75% dữ liệu nhỏ hơn 0,818 (giá trị tứ phân vị thứ ba)
Tỷ lệ chi tiêu thẻ trung bình (Avg_Utilization_Ratio): giá trị nhỏ nhất của dữ liệu 0; giá trị lớn nhất là 0.999; giá trị trung bình là 0,2749; 25% dữ liệu nhỏ hơn 0,023 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 0,176 (giá trị trung vị); 75% dữ liệu nhỏ hơn 0,503 (giá trị tứ phân vị thứ ba)
Tổng số sản phẩm dịch vụ ngân hàng mà khách hàng nắm giữ (Total_Relationship_Count): giá trị nhỏ nhất của dữ liệu 1; giá trị lớn nhất là 6; giá trị trung bình là 3,813; 25% dữ liệu nhỏ hơn 3(giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 4 (giá trị trung vị); 75% dữ liệu nhỏ hơn 5 (giá trị tứ phân vị thứ ba)
Tổng mức chi tiêu thẻ tín dụng (Total_Trans_Amt): giá trị nhỏ nhất của dữ liệu 510; giá trị lớn nhất là 18.484; giá trị trung bình là 4.404; 25% dữ liệu nhỏ hơn 2.156 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 3.899 (giá trị trung vị); 75% dữ liệu nhỏ hơn 4.741 (giá trị tứ phân vị thứ ba)
Hạn mức thẻ tín dụng (Credit_Limit):giá trị nhỏ nhất của dữ liệu 1.438; giá trị lớn nhất là 34.516; giá trị trung bình là 8.632; 25% dữ liệu nhỏ hơn 2.555 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 4.549 (giá trị trung vị); 75% dữ liệu nhỏ hơn 11.068 (giá trị tứ phân vị thứ ba)
Số lần liên hệ của ngân hàng với khách hàng (Contacts_Count_12_mon): giá trị nhỏ nhất của dữ liệu 0; giá trị lớn nhất là 6; giá trị trung bình là 2,455; 25% dữ liệu nhỏ hơn 2 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 2 (giá trị trung vị); 75% dữ liệu nhỏ hơn 3 (giá trị tứ phân vị thứ ba)
Số tháng không hoạt động thẻ tín dụng (Months_Inactive_12_mon): giá trị nhỏ nhất của dữ liệu 0; giá trị lớn nhất là 6; giá trị trung bình là 2,3415; 25% dữ liệu nhỏ hơn 2 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 2 (giá trị trung vị); 75% dữ liệu nhỏ hơn 3 (giá trị tứ phân vị thứ ba)
Biểu đồ Histogram
hist(mac$Total_Amt_Chng_Q4_Q1)
Thay đổi số lượng giao dịch thẻ tín dụng quý 4 so với quý 1 (Total_Ct_Chng_Q4_Q1) nằm trong phạm vi 0,5 đến 1 xuất hiện nhiều nhất.
hist(mac$Avg_Utilization_Ratio)
Tỷ lệ chi tiêu thẻ trung bình (Avg_Utilization_Ratio) phân bố đều ở phạm vi giá trị từ 0.1 đến 1 và phạm vi giá trị từ 0 đến 0,5 xuất hiện nhiều nhất.
hist(mac$Total_Trans_Amt)
Tổng mức chi tiêu thẻ tín dụng (Total_Trans_Amt) ở phạm vi từ 1000 đến 5000 là nhiều nhất.
hist(mac$Credit_Limit)
Đa số khách hàng có hạn mức thẻ tín dụng (Credit_Limit) ở khoảng bé hơn 5000
rm<-table(mac$Gender,mac$Attrition_Flag)
rm
##
## Attrited Customer Existing Customer
## F 930 4428
## M 697 4072
ggplot(mac, aes(Gender, fill = Attrition_Flag)) + geom_bar(position = 'dodge')
Relative risk
RelRisk(rm)
## [1] 1.187613
Tỷ lệ khách hàng nữ không còn sử dụng thẻ tín dụng bằng 118,76% tỷ lệ khách hàng nam không còn sử dụng thẻ tín dụng.
Risk ratio
epitab(rm,method='riskratio',rev='c')
## $tab
##
## Existing Customer p0 Attrited Customer p1 riskratio lower
## F 4428 0.8264278 930 0.1735722 1.0000000 NA
## M 4072 0.8538478 697 0.1461522 0.8420254 0.7694698
##
## upper p.value
## F NA NA
## M 0.9214226 0.0001824515
##
## $measure
## [1] "wald"
##
## $conf.level
## [1] 0.95
##
## $pvalue
## [1] "fisher.exact"
Tỷ lệ khách hàng nam không còn sử dụng thẻ tín dụng bằng 84,2% tỷ lệ khách hàng nữ không còn sử dụng thẻ tín dụng.
epitab(rm, method = 'oddsratio', rev='c')
## $tab
##
## Existing Customer p0 Attrited Customer p1 oddsratio lower
## F 4428 0.5209412 930 0.5716042 1.0000000 NA
## M 4072 0.4790588 697 0.4283958 0.8149851 0.7322716
##
## upper p.value
## F NA NA
## M 0.9070415 0.0001824515
##
## $measure
## [1] "wald"
##
## $conf.level
## [1] 0.95
##
## $pvalue
## [1] "fisher.exact"
Tỷ lệ rời bỏ so với tỷ lệ còn sử dụng thẻ tín dụng của khách hàng nữ bằng 81,499% tỷ lệ rời bỏ so với tỷ lệ còn sử dụng thẻ tín dụng của khách hàng nam.
rm1<-table(mac$Education_Level,mac$Attrition_Flag)
rm1
##
## Attrited Customer Existing Customer
## College 154 859
## Doctorate 95 356
## Graduate 487 2641
## High School 306 1707
## Post-Graduate 92 424
## Uneducated 237 1250
## Unknown 256 1263
ggplot(mac, aes(Education_Level, fill = Attrition_Flag)) + geom_bar(position = 'dodge')
Nhìn vào biểu đồ ta thấy khách hàng có trình độ học vấn đại học có tỷ lệ rời bỏ sử dụng thẻ tín dụng cao nhất.
ggplot(mac, aes(x = Customer_Age, fill = Attrition_Flag)) + theme_bw()+ geom_histogram(binwidth = 8)+ labs(y = "Customer count", x = "Age", title = "Bankchuners rates by age")
Nhìn vào hình ta thấy đa số khách hàng rời bỏ thẻ tín dụng ở độ tuổi 40-60.
ggplot(mac, aes(x = Total_Trans_Amt, fill = Attrition_Flag)) + theme_bw()+ geom_histogram(binwidth = 8)+ labs(y = "Customer count", x = "Transaction", title = "Bankchuners rates by transaction")
Nhìn vào đồ thị ta thấy đa số khách hàng rời bỏ giảm dần theo tổng mức chi tiêu thẻ tín dụng. Khách hàng có tổng mức chi tiêu thẻ tín dụng nằm ở khoảng dưới 5000 có tỷ lệ rời bỏ thẻ tín dụng cao nhất.
rm2<-ftable(mac$Dependent_count, mac$Gender ,mac$Attrition_Flag)
rm2
## Attrited Customer Existing Customer
##
## 0 F 77 407
## M 58 362
## 1 F 169 827
## M 100 742
## 2 F 228 1160
## M 189 1078
## 3 F 272 1144
## M 210 1106
## 4 F 154 695
## M 106 619
## 5 F 30 195
## M 34 165
Đối với khách hàng có 0 người phụ thuộc
Đối với khách hàng có 1 người phụ thuộc
Đối với khách hàng có 2 người phụ thuộc
Đối với khách hàng có 3 người phụ thuộc
Đối với khách hàng có 4 người phụ thuộc
Đối với khách hàng có 5 người phụ thuộc
ggplot(mac, aes(x = Gender, fill = Attrition_Flag)) +
theme_bw()+
facet_wrap(~ Dependent_count)+
geom_bar()+
labs(y = "Customer count",
title = "Bankchuners rates by Gender and Dependent_count")
Nhìn vào hình vẽ ta thấy: khách hàng có 3 người phụ thuộc có tỷ lệ rời bỏ cao nhất trong khi khách hàng có 5 người phụ thuộc có tỷ lệ rời bỏ thấp nhất. Và tỷ lệ rời bỏ của khách hàng nữ đều cao hơn khách hàng nam (ngoại trừ khách hàng có 5 người phụ thuộc).
Kiểm định tính độc lập cho 2 biến Attrition_Flag và Gender
chisq.test(table(mac$Attrition_Flag,mac$Gender))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(mac$Attrition_Flag, mac$Gender)
## X-squared = 13.866, df = 1, p-value = 0.0001964
Với p_value < 5%, bác bỏ giả thuyết H0 do đó kết luận việc khách hàng rời bỏ có liên quan tới giới tính của khách hàng.
Kiểm định tính độc lập cho 2 biến Attrition_Flag và Income_Category
chisq.test(table(mac$Attrition_Flag,mac$Income_Category))
##
## Pearson's Chi-squared test
##
## data: table(mac$Attrition_Flag, mac$Income_Category)
## X-squared = 12.832, df = 5, p-value = 0.025
Qua kết quả kiểm định cho thấy việc khách hàng rời bỏ có liên quan tới mức thu nhập của khách hàng (p_value<5%).
Kiểm định tính độc lập cho 2 biến Attrition_Flag và Education_Level
chisq.test(table(mac$Attrition_Flag,mac$Education_Level))
##
## Pearson's Chi-squared test
##
## data: table(mac$Attrition_Flag, mac$Education_Level)
## X-squared = 12.511, df = 6, p-value = 0.05149
Với mức ý nghĩa 5% chưa đủ cơ sở kết luận việc khách hàng rời bỏ có liên quan tới trình độ học vấn
Kiểm định tính độc lập cho 2 biến Attrition_Flag và Card_Category
chisq.test(table(mac$Attrition_Flag,mac$Card_Category))
## Warning in chisq.test(table(mac$Attrition_Flag, mac$Card_Category)): Chi-squared
## approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: table(mac$Attrition_Flag, mac$Card_Category)
## X-squared = 2.2342, df = 3, p-value = 0.5252
Qua kết quả kiểm định cho thấy chưa đủ cơ sở kết luận việc khách hàng rời bỏ có liên quan tới loại thẻ tín dụng
rm<- mac[mac$Attrition_Flag =="Attrited Customer",]
rm1<- rm[rm$Gender == "M",]
prop.test(length(rm1$Gender), length(rm$Gender), p = 0.4)
##
## 1-sample proportions test with continuity correction
##
## data: length(rm1$Gender) out of length(rm$Gender), null probability 0.4
## X-squared = 5.3485, df = 1, p-value = 0.02074
## alternative hypothesis: true p is not equal to 0.4
## 95 percent confidence interval:
## 0.4042428 0.4528905
## sample estimates:
## p
## 0.4283958
Với khoảng tin cậy 95% uớc lượng tỷ lệ khách hàng nam rời bỏ thẻ tín dụng nằm trong khoảng từ 0,4042 đến 0,45289
p-value < 5%, bác bỏ giả thuyết H0. Do đó tỷ lệ khách hàng nam rời bỏ thẻ tín dụng không bằng 40% với mức ý nghĩa 5%.
rf<- mac[mac$Attrition_Flag =="Attrited Customer",]
rf1<- rm[rm$Gender == "F",]
prop.test(length(rm1$Gender), length(rm$Gender), p = 0.6)
##
## 1-sample proportions test with continuity correction
##
## data: length(rm1$Gender) out of length(rm$Gender), null probability 0.6
## X-squared = 198.92, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.6
## 95 percent confidence interval:
## 0.4042428 0.4528905
## sample estimates:
## p
## 0.4283958
Với khoảng tin cậy 95% uớc lượng tỷ lệ khách hàng nữ rời bỏ thẻ tín dụng nằm trong khoảng từ 0,5471 đến 0,5957
p-value < 5%, bác bỏ giả thuyết H0. Do đó tỷ lệ khách hàng nữ rời bỏ thẻ tín dụng không bằng 60% với mức ý nghĩa 5%.
a <- c(nrow(rm), nrow(rf))
b <- c(nrow(rm1), nrow(rf1))
prop.test(b,a)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: b out of a
## X-squared = 66.163, df = 1, p-value = 4.15e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.1778277 -0.1085890
## sample estimates:
## prop 1 prop 2
## 0.4283958 0.5716042
P_value < 5%, bác bỏ giả thuyết H0, do đó có sự chênh lệnh giữa tỷ lệ khách hàng nam và nữ rời bỏ thẻ tín dụng.
Khoảng tin cậy 95% cho chênh lệch tỷ lệ nằm trong khoảng từ -0,1778277 đến -0,108589.
# Chọn các biến số liên tục trong mô hình
continuous_vars <- mac[, sapply(mac, is.numeric)]
# Tính ma trận tương quan
cor_matrix <- cor(continuous_vars)
cor_matrix
## CLIENTNUM Customer_Age Months_on_book
## CLIENTNUM 1.0000000000 0.007612651 0.134587831
## Customer_Age 0.0076126512 1.000000000 0.788912359
## Months_on_book 0.1345878309 0.788912359 1.000000000
## Total_Relationship_Count 0.0069069051 -0.010931069 -0.009203080
## Months_Inactive_12_mon 0.0057285276 0.054360999 0.074163514
## Contacts_Count_12_mon 0.0056944278 -0.018451855 -0.010774479
## Credit_Limit 0.0057076227 0.002476227 0.007507009
## Total_Revolving_Bal 0.0008245041 0.014779895 0.008622804
## Total_Amt_Chng_Q4_Q1 0.0173693399 -0.062042092 -0.048959320
## Total_Trans_Amt -0.0196917088 -0.046446491 -0.038590629
## Total_Trans_Ct -0.0029610131 -0.067096864 -0.049819084
## Total_Ct_Chng_Q4_Q1 0.0076955755 -0.012142548 -0.014071671
## Avg_Utilization_Ratio 0.0002659600 0.007114222 -0.007540837
## Total_Relationship_Count Months_Inactive_12_mon
## CLIENTNUM 0.006906905 0.005728528
## Customer_Age -0.010931069 0.054360999
## Months_on_book -0.009203080 0.074163514
## Total_Relationship_Count 1.000000000 -0.003675377
## Months_Inactive_12_mon -0.003675377 1.000000000
## Contacts_Count_12_mon 0.055203163 0.029492910
## Credit_Limit -0.071385817 -0.020393791
## Total_Revolving_Bal 0.013725849 -0.042209609
## Total_Amt_Chng_Q4_Q1 0.050118644 -0.032246712
## Total_Trans_Amt -0.347228880 -0.036982425
## Total_Trans_Ct -0.241890850 -0.042787039
## Total_Ct_Chng_Q4_Q1 0.040831148 -0.038989338
## Avg_Utilization_Ratio 0.067662878 -0.007502633
## Contacts_Count_12_mon Credit_Limit Total_Revolving_Bal
## CLIENTNUM 0.005694428 0.005707623 0.0008245041
## Customer_Age -0.018451855 0.002476227 0.0147798946
## Months_on_book -0.010774479 0.007507009 0.0086228045
## Total_Relationship_Count 0.055203163 -0.071385817 0.0137258489
## Months_Inactive_12_mon 0.029492910 -0.020393791 -0.0422096088
## Contacts_Count_12_mon 1.000000000 0.020817012 -0.0539127312
## Credit_Limit 0.020817012 1.000000000 0.0424926073
## Total_Revolving_Bal -0.053912731 0.042492607 1.0000000000
## Total_Amt_Chng_Q4_Q1 -0.024445115 0.012812536 0.0581736645
## Total_Trans_Amt -0.112773929 0.171730150 0.0643704770
## Total_Trans_Ct -0.152212605 0.075926912 0.0560604930
## Total_Ct_Chng_Q4_Q1 -0.094996916 -0.002019850 0.0898610078
## Avg_Utilization_Ratio -0.055471285 -0.482965071 0.6240219910
## Total_Amt_Chng_Q4_Q1 Total_Trans_Amt Total_Trans_Ct
## CLIENTNUM 0.017369340 -0.01969171 -0.002961013
## Customer_Age -0.062042092 -0.04644649 -0.067096864
## Months_on_book -0.048959320 -0.03859063 -0.049819084
## Total_Relationship_Count 0.050118644 -0.34722888 -0.241890850
## Months_Inactive_12_mon -0.032246712 -0.03698243 -0.042787039
## Contacts_Count_12_mon -0.024445115 -0.11277393 -0.152212605
## Credit_Limit 0.012812536 0.17173015 0.075926912
## Total_Revolving_Bal 0.058173664 0.06437048 0.056060493
## Total_Amt_Chng_Q4_Q1 1.000000000 0.03967759 0.005468567
## Total_Trans_Amt 0.039677592 1.00000000 0.807192035
## Total_Trans_Ct 0.005468567 0.80719203 1.000000000
## Total_Ct_Chng_Q4_Q1 0.384189256 0.08558098 0.112324440
## Avg_Utilization_Ratio 0.035234835 -0.08303425 0.002838112
## Total_Ct_Chng_Q4_Q1 Avg_Utilization_Ratio
## CLIENTNUM 0.007695575 0.000265960
## Customer_Age -0.012142548 0.007114222
## Months_on_book -0.014071671 -0.007540837
## Total_Relationship_Count 0.040831148 0.067662878
## Months_Inactive_12_mon -0.038989338 -0.007502633
## Contacts_Count_12_mon -0.094996916 -0.055471285
## Credit_Limit -0.002019850 -0.482965071
## Total_Revolving_Bal 0.089861008 0.624021991
## Total_Amt_Chng_Q4_Q1 0.384189256 0.035234835
## Total_Trans_Amt 0.085580976 -0.083034246
## Total_Trans_Ct 0.112324440 0.002838112
## Total_Ct_Chng_Q4_Q1 1.000000000 0.074143210
## Avg_Utilization_Ratio 0.074143210 1.000000000
Qua trận hệ số tương quan giữa các biến ta thấy có mối tương quan mạnh giữa các cặp biến(Customer_Age, Months_on_book); (Total_Revovling_bal, Avg_utilization_Ratio) và (Total_trans_amt, total_trans_ct)
Mô hình có biến phụ thuộc: attrition_flag và các biến độc lập bao gồm 3 biến định tính: gender, Income_category, dependent_count; tất cả các biến định lượng trong bộ data.
mac1 <- mac %>% select(-c(CLIENTNUM, Marital_Status, Education_Level, Card_Category))
set.seed(42)
split <- sample.split(mac1$Attrition_Flag, SplitRatio = 0.8)
train_data1 <- subset(mac1, split == TRUE)
test_data1 <- subset(mac1, split == FALSE)
levels(mac1$Attrition_Flag)
## [1] "Attrited Customer" "Existing Customer"
mac1$Attrition_Flag <- factor(mac1$Attrition_Flag, levels = c("Existing Customer", "Attrited Customer"))
mh1 <- glm(Attrition_Flag ~., family = binomial(link = 'logit'), data = train_data1)
summary(mh1)
##
## Call:
## glm(formula = Attrition_Flag ~ ., family = binomial(link = "logit"),
## data = train_data1)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.4003 0.0701 0.1742 0.3657 2.9931
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -6.397e+00 5.059e-01 -12.645 < 2e-16 ***
## Customer_Age 7.215e-03 8.554e-03 0.843 0.39900
## GenderM 8.420e-01 1.605e-01 5.246 1.56e-07 ***
## Dependent_count1 -3.012e-02 1.750e-01 -0.172 0.86335
## Dependent_count2 -2.926e-01 1.666e-01 -1.756 0.07907 .
## Dependent_count3 -4.155e-01 1.669e-01 -2.490 0.01278 *
## Dependent_count4 -4.840e-01 1.814e-01 -2.668 0.00763 **
## Dependent_count5 -5.996e-01 2.607e-01 -2.300 0.02143 *
## Income_Category$40K - $60K 4.919e-01 2.213e-01 2.223 0.02622 *
## Income_Category$60K - $80K 4.236e-01 2.000e-01 2.118 0.03420 *
## Income_Category$80K - $120K 8.661e-03 1.870e-01 0.046 0.96306
## Income_CategoryLess than $40K 3.832e-01 2.399e-01 1.597 0.11026
## Income_CategoryUnknown 4.867e-01 2.585e-01 1.883 0.05970 .
## Months_on_book 9.480e-03 8.496e-03 1.116 0.26449
## Total_Relationship_Count 4.611e-01 3.060e-02 15.066 < 2e-16 ***
## Months_Inactive_12_mon -5.290e-01 4.234e-02 -12.494 < 2e-16 ***
## Contacts_Count_12_mon -5.015e-01 4.086e-02 -12.274 < 2e-16 ***
## Credit_Limit 7.885e-06 6.671e-06 1.182 0.23720
## Total_Revolving_Bal 9.364e-04 7.952e-05 11.776 < 2e-16 ***
## Total_Amt_Chng_Q4_Q1 4.898e-01 2.061e-01 2.376 0.01750 *
## Total_Trans_Amt -4.712e-04 2.522e-05 -18.680 < 2e-16 ***
## Total_Trans_Ct 1.156e-01 4.082e-03 28.314 < 2e-16 ***
## Total_Ct_Chng_Q4_Q1 2.805e+00 2.090e-01 13.417 < 2e-16 ***
## Avg_Utilization_Ratio 1.710e-01 2.717e-01 0.630 0.52892
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 7143.2 on 8101 degrees of freedom
## Residual deviance: 3800.6 on 8078 degrees of freedom
## AIC: 3848.6
##
## Number of Fisher Scoring iterations: 6
# Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic)
lr_test <- anova(mh1, test = "Chisq")
# Lấy giá trị Prob(LR statistic)
p_value <- lr_test$Pr[2]
p_value
## [1] 0.1732732
Kiểm định sự phù hơp của mô hình
Giả thuyết H0: mô hình không phù hợp Với P-value = Prob(LR) = 0, 1733 > 5% nên chưa đủ cơ sở bác bỏ giả thuyết H0 nên mô hình không phù hợp với dữ liệu.
Hệ số tương quan giữa customer_age và months_on_book là 0,7889 khá lớn nên CUstomer_Age không thực sự ảnh hướng đến xác suất rời bỏ thẻ tín dụng của khách hàng nên loại biến này.
Các biến trong mô hình 2 là các biến trong mô hình 1 đã loại bỏ đi biến Customer_age
mac2<- mac1 %>% select(-Customer_Age)
set.seed(42)
split <- sample.split(mac2$Attrition_Flag, SplitRatio = 0.8)
train_data2 <- subset(mac2, split == TRUE)
test_data2 <- subset(mac2, split == FALSE)
mh2 <- glm(Attrition_Flag ~., family = binomial(link = 'logit'), data = train_data2)
summary(mh2)
##
## Call:
## glm(formula = Attrition_Flag ~ ., family = binomial(link = "logit"),
## data = train_data2)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.9923 -0.3651 -0.1742 -0.0703 3.4053
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 6.228e+00 4.642e-01 13.416 < 2e-16 ***
## GenderM -8.360e-01 1.603e-01 -5.215 1.84e-07 ***
## Dependent_count1 2.811e-02 1.750e-01 0.161 0.87240
## Dependent_count2 2.933e-01 1.667e-01 1.760 0.07842 .
## Dependent_count3 4.186e-01 1.669e-01 2.508 0.01213 *
## Dependent_count4 4.858e-01 1.814e-01 2.677 0.00742 **
## Dependent_count5 6.026e-01 2.606e-01 2.312 0.02077 *
## Income_Category$40K - $60K -4.767e-01 2.206e-01 -2.161 0.03068 *
## Income_Category$60K - $80K -4.132e-01 1.997e-01 -2.069 0.03854 *
## Income_Category$80K - $120K -4.094e-04 1.868e-01 -0.002 0.99825
## Income_CategoryLess than $40K -3.679e-01 2.393e-01 -1.537 0.12420
## Income_CategoryUnknown -4.746e-01 2.581e-01 -1.839 0.06593 .
## Months_on_book -1.514e-02 5.210e-03 -2.905 0.00367 **
## Total_Relationship_Count -4.607e-01 3.059e-02 -15.059 < 2e-16 ***
## Months_Inactive_12_mon 5.304e-01 4.230e-02 12.537 < 2e-16 ***
## Contacts_Count_12_mon 5.027e-01 4.084e-02 12.308 < 2e-16 ***
## Credit_Limit -7.925e-06 6.671e-06 -1.188 0.23488
## Total_Revolving_Bal -9.350e-04 7.950e-05 -11.761 < 2e-16 ***
## Total_Amt_Chng_Q4_Q1 -4.794e-01 2.058e-01 -2.330 0.01980 *
## Total_Trans_Amt 4.699e-04 2.516e-05 18.676 < 2e-16 ***
## Total_Trans_Ct -1.153e-01 4.067e-03 -28.357 < 2e-16 ***
## Total_Ct_Chng_Q4_Q1 -2.809e+00 2.089e-01 -13.446 < 2e-16 ***
## Avg_Utilization_Ratio -1.765e-01 2.716e-01 -0.650 0.51581
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 7143.2 on 8101 degrees of freedom
## Residual deviance: 3801.3 on 8079 degrees of freedom
## AIC: 3847.3
##
## Number of Fisher Scoring iterations: 6
# Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic)
lr_test <- anova(mh2, test = "Chisq")
# Lấy giá trị Prob(LR statistic)
p_value <- lr_test$Pr[2]
p_value
## [1] 0.0001217857
Kiểm định sự phù hơp của mô hình
Giả thuyết H0: mô hình không phù hợp Với P-value = Prob(LR) = 0, 0001 < 5% bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.
Hệ số tương quan giữa total_revolving_bal và Avg_Utilization_Ratio là 0,624 khá lớn nên tiếp tục loại bỏ biến Avg_Utilization_Ratio và chạy mô hình 3
mac3<- mac2 %>% select(-Avg_Utilization_Ratio)
set.seed(42)
split <- sample.split(mac3$Attrition_Flag, SplitRatio = 0.8)
train_data3 <- subset(mac3, split == TRUE)
test_data3 <- subset(mac3, split == FALSE)
mh3 <- glm(Attrition_Flag ~., family = binomial(link = 'logit'), data = train_data3)
summary(mh3)
##
## Call:
## glm(formula = Attrition_Flag ~ ., family = binomial(link = "logit"),
## data = train_data3)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.0105 -0.3642 -0.1736 -0.0698 3.4210
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 6.213e+00 4.637e-01 13.400 < 2e-16 ***
## GenderM -8.349e-01 1.603e-01 -5.210 1.89e-07 ***
## Dependent_count1 2.786e-02 1.749e-01 0.159 0.87345
## Dependent_count2 2.934e-01 1.667e-01 1.761 0.07832 .
## Dependent_count3 4.189e-01 1.668e-01 2.511 0.01205 *
## Dependent_count4 4.863e-01 1.814e-01 2.681 0.00735 **
## Dependent_count5 6.060e-01 2.605e-01 2.326 0.02001 *
## Income_Category$40K - $60K -4.783e-01 2.208e-01 -2.166 0.03029 *
## Income_Category$60K - $80K -4.094e-01 1.998e-01 -2.049 0.04048 *
## Income_Category$80K - $120K 9.564e-04 1.870e-01 0.005 0.99592
## Income_CategoryLess than $40K -3.752e-01 2.392e-01 -1.569 0.11666
## Income_CategoryUnknown -4.729e-01 2.582e-01 -1.831 0.06704 .
## Months_on_book -1.509e-02 5.208e-03 -2.897 0.00377 **
## Total_Relationship_Count -4.608e-01 3.059e-02 -15.062 < 2e-16 ***
## Months_Inactive_12_mon 5.297e-01 4.228e-02 12.529 < 2e-16 ***
## Contacts_Count_12_mon 5.030e-01 4.084e-02 12.315 < 2e-16 ***
## Credit_Limit -5.960e-06 5.943e-06 -1.003 0.31590
## Total_Revolving_Bal -9.744e-04 5.170e-05 -18.846 < 2e-16 ***
## Total_Amt_Chng_Q4_Q1 -4.829e-01 2.057e-01 -2.347 0.01891 *
## Total_Trans_Amt 4.712e-04 2.510e-05 18.773 < 2e-16 ***
## Total_Trans_Ct -1.154e-01 4.064e-03 -28.405 < 2e-16 ***
## Total_Ct_Chng_Q4_Q1 -2.808e+00 2.089e-01 -13.446 < 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: 7143.2 on 8101 degrees of freedom
## Residual deviance: 3801.7 on 8080 degrees of freedom
## AIC: 3845.7
##
## Number of Fisher Scoring iterations: 6
# Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic)
lr_test <- anova(mh3, test = "Chisq")
# Lấy giá trị Prob(LR statistic)
p_value <- lr_test$Pr[2]
p_value
## [1] 0.0001217857
Kiểm định sự phù hơp của mô hình
Giả thuyết H0: mô hình không phù hợp Với P-value = Prob(LR) = 0, 0001 < 5% bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.
Hệ số tương quan giữa total_trans_amt và total_trans_ct là 0,8072 khá lớn , tiếp tục loại bỏ biến total_trans_amt và chạy mô hình 4.
mac4<- mac3 %>% select(- Total_Trans_Amt)
set.seed(42)
split <- sample.split(mac4$Attrition_Flag, SplitRatio = 0.8)
train_data4 <- subset(mac4, split == TRUE)
test_data4<- subset(mac4, split == FALSE)
mh4 <- glm(Attrition_Flag ~., family = binomial(link = 'logit'), data = train_data4)
summary(mh4)
##
## Call:
## glm(formula = Attrition_Flag ~ ., family = binomial(link = "logit"),
## data = train_data4)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.7394 -0.4106 -0.2092 -0.0907 3.7786
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 5.106e+00 4.412e-01 11.574 < 2e-16 ***
## GenderM -7.003e-01 1.552e-01 -4.511 6.46e-06 ***
## Dependent_count1 4.091e-02 1.685e-01 0.243 0.80818
## Dependent_count2 2.544e-01 1.604e-01 1.587 0.11262
## Dependent_count3 3.794e-01 1.598e-01 2.374 0.01758 *
## Dependent_count4 4.458e-01 1.738e-01 2.565 0.01033 *
## Dependent_count5 5.352e-01 2.485e-01 2.154 0.03123 *
## Income_Category$40K - $60K -3.268e-01 2.145e-01 -1.523 0.12764
## Income_Category$60K - $80K -3.174e-01 1.944e-01 -1.633 0.10254
## Income_Category$80K - $120K 4.488e-04 1.819e-01 0.002 0.99803
## Income_CategoryLess than $40K -2.466e-01 2.332e-01 -1.058 0.29021
## Income_CategoryUnknown -4.280e-01 2.494e-01 -1.716 0.08612 .
## Months_on_book -1.501e-02 5.024e-03 -2.987 0.00281 **
## Total_Relationship_Count -5.364e-01 2.956e-02 -18.144 < 2e-16 ***
## Months_Inactive_12_mon 4.844e-01 4.037e-02 11.997 < 2e-16 ***
## Contacts_Count_12_mon 4.584e-01 3.847e-02 11.916 < 2e-16 ***
## Credit_Limit 4.468e-06 5.718e-06 0.781 0.43454
## Total_Revolving_Bal -9.282e-04 4.987e-05 -18.612 < 2e-16 ***
## Total_Amt_Chng_Q4_Q1 -1.277e-01 1.913e-01 -0.668 0.50427
## Total_Trans_Ct -6.476e-02 2.371e-03 -27.312 < 2e-16 ***
## Total_Ct_Chng_Q4_Q1 -2.705e+00 2.036e-01 -13.284 < 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: 7143.2 on 8101 degrees of freedom
## Residual deviance: 4135.8 on 8081 degrees of freedom
## AIC: 4177.8
##
## Number of Fisher Scoring iterations: 6
# Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic)
lr_test <- anova(mh4, test = "Chisq")
# Lấy giá trị Prob(LR statistic)
p_value <- lr_test$Pr[2]
p_value
## [1] 0.0001217857
Kiểm định sự phù hơp của mô hình
Giả thuyết H0: mô hình không phù hợp Với P-value = Prob(LR) = 0, 0001 < 5% bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.
Sau khi thực hiện kiểm định sự phù hợp cuả 4 mô hình ta thấy: MH2, MH3 và MH4 đều phù hợp với dữ liệu do đó dùng 4 tiêu chí sau để tiếp tục lựa chọn ra mô hình phù hợp nhất
AIC(MH2) = 3847,3
AIC(MH3) = 3845,7
AIC(MH4) = 4135,8
Mô hình 3 có AIC nhỏ nhất nên ta chọn MH3.
Deviance(MH2) = 3801,3
Deviance(MH3) = 3801,7
Deviance(MH4) = 4177,8
Mô hình 2 deviance nhỏ nhất nên ta chọn MH2
BrierScore(mh2)
## [1] 0.06976853
BrierScore(mh3)
## [1] 0.0697465
BrierScore(mh4)
## [1] 0.07395472
Dựa vào tiêu chí Brier score ta thấy MH3 có giá trị nhỏ nhất nên ta chọn MH3
Mô hình 2
# Đánh giá mô hình trên tập kiểm tra
predictions <- predict(mh2, newdata = test_data2, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(test_data2$Attrition_Flag, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 1630 148
## 1 70 177
##
## Accuracy : 0.8923
## 95% CI : (0.878, 0.9055)
## No Information Rate : 0.8395
## P-Value [Acc > NIR] : 6.132e-12
##
## Kappa : 0.5576
##
## Mcnemar's Test P-Value : 1.837e-07
##
## Sensitivity : 0.9588
## Specificity : 0.5446
## Pos Pred Value : 0.9168
## Neg Pred Value : 0.7166
## Prevalence : 0.8395
## Detection Rate : 0.8049
## Detection Prevalence : 0.8780
## Balanced Accuracy : 0.7517
##
## 'Positive' Class : 0
##
MH2 có độ chính xác toàn thể là 89,23%, độ nhạy là 95,88% và độ hiệu quả là 54,46%
Mô hình 3
# Đánh giá mô hình trên tập kiểm tra
predictions <- predict(mh3, newdata = test_data3, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(test_data3$Attrition_Flag, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 1630 146
## 1 70 179
##
## Accuracy : 0.8933
## 95% CI : (0.8791, 0.9064)
## No Information Rate : 0.8395
## P-Value [Acc > NIR] : 2.386e-12
##
## Kappa : 0.5628
##
## Mcnemar's Test P-Value : 3.341e-07
##
## Sensitivity : 0.9588
## Specificity : 0.5508
## Pos Pred Value : 0.9178
## Neg Pred Value : 0.7189
## Prevalence : 0.8395
## Detection Rate : 0.8049
## Detection Prevalence : 0.8770
## Balanced Accuracy : 0.7548
##
## 'Positive' Class : 0
##
MH3 có độ chính xác toàn thể là 89,33%, độ nhạy là 95,88% và độ hiệu quả là 55,08%
MH3 có độ nhạy bằng và độ chính xác, độ hiệu quả cao hơn so với MH2 do đó chọn mô hình 3
Kết luận: Dựa vào 4 tiêu chuẩn trên ta thấy MH3 là mô hình được chọn nhiều nhất (3 tiêu chí) do đó để ước lượng mô hình logit ta chọn MH3.
probit <- glm(Attrition_Flag ~., family = binomial(link = 'probit'), data = train_data3)
summary(probit)
##
## Call:
## glm(formula = Attrition_Flag ~ ., family = binomial(link = "probit"),
## data = train_data3)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.1301 -0.3847 -0.1483 -0.0326 3.7118
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.325e+00 2.486e-01 13.378 < 2e-16 ***
## GenderM -4.463e-01 8.626e-02 -5.174 2.29e-07 ***
## Dependent_count1 7.479e-03 9.415e-02 0.079 0.93669
## Dependent_count2 1.400e-01 8.982e-02 1.559 0.11900
## Dependent_count3 2.054e-01 8.977e-02 2.288 0.02216 *
## Dependent_count4 2.397e-01 9.773e-02 2.453 0.01418 *
## Dependent_count5 3.062e-01 1.395e-01 2.194 0.02821 *
## Income_Category$40K - $60K -2.318e-01 1.189e-01 -1.949 0.05127 .
## Income_Category$60K - $80K -2.151e-01 1.078e-01 -1.995 0.04601 *
## Income_Category$80K - $120K -1.084e-02 1.014e-01 -0.107 0.91486
## Income_CategoryLess than $40K -1.938e-01 1.294e-01 -1.498 0.13418
## Income_CategoryUnknown -2.595e-01 1.394e-01 -1.862 0.06254 .
## Months_on_book -8.416e-03 2.816e-03 -2.989 0.00280 **
## Total_Relationship_Count -2.379e-01 1.627e-02 -14.626 < 2e-16 ***
## Months_Inactive_12_mon 2.906e-01 2.265e-02 12.827 < 2e-16 ***
## Contacts_Count_12_mon 2.770e-01 2.170e-02 12.762 < 2e-16 ***
## Credit_Limit -2.495e-06 3.193e-06 -0.782 0.43448
## Total_Revolving_Bal -5.059e-04 2.757e-05 -18.352 < 2e-16 ***
## Total_Amt_Chng_Q4_Q1 -2.943e-01 1.099e-01 -2.677 0.00743 **
## Total_Trans_Amt 2.638e-04 1.316e-05 20.043 < 2e-16 ***
## Total_Trans_Ct -6.377e-02 2.090e-03 -30.516 < 2e-16 ***
## Total_Ct_Chng_Q4_Q1 -1.511e+00 1.109e-01 -13.633 < 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: 7143.2 on 8101 degrees of freedom
## Residual deviance: 3821.3 on 8080 degrees of freedom
## AIC: 3865.3
##
## Number of Fisher Scoring iterations: 7
# Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic)
lr_test <- anova(probit, test = "Chisq")
# Lấy giá trị Prob(LR statistic)
p_value <- lr_test$Pr[2]
p_value
## [1] 0.0001217857
Kiểm định sự phù hơp của mô hình
Giả thuyết H0: mô hình không phù hợp Với P-value = Prob(LR) = 0, 0001 < 5% bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.
cloglog <- glm(Attrition_Flag ~., family = binomial(link = 'cloglog'), data = train_data3)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(cloglog)
##
## Call:
## glm(formula = Attrition_Flag ~ ., family = binomial(link = "cloglog"),
## data = train_data3)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -4.8586 -0.3951 -0.2255 -0.1141 3.1972
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.313e+00 3.468e-01 12.439 < 2e-16 ***
## GenderM -6.090e-01 1.229e-01 -4.955 7.24e-07 ***
## Dependent_count1 -4.832e-03 1.339e-01 -0.036 0.971204
## Dependent_count2 2.273e-01 1.271e-01 1.789 0.073615 .
## Dependent_count3 2.592e-01 1.266e-01 2.048 0.040565 *
## Dependent_count4 3.553e-01 1.367e-01 2.600 0.009327 **
## Dependent_count5 3.964e-01 1.972e-01 2.010 0.044399 *
## Income_Category$40K - $60K -5.755e-01 1.702e-01 -3.381 0.000721 ***
## Income_Category$60K - $80K -5.031e-01 1.545e-01 -3.257 0.001126 **
## Income_Category$80K - $120K -1.515e-01 1.445e-01 -1.049 0.294371
## Income_CategoryLess than $40K -4.879e-01 1.836e-01 -2.657 0.007892 **
## Income_CategoryUnknown -5.351e-01 1.970e-01 -2.716 0.006599 **
## Months_on_book -1.225e-02 3.986e-03 -3.074 0.002115 **
## Total_Relationship_Count -3.632e-01 2.254e-02 -16.117 < 2e-16 ***
## Months_Inactive_12_mon 3.927e-01 3.240e-02 12.122 < 2e-16 ***
## Contacts_Count_12_mon 3.753e-01 3.008e-02 12.476 < 2e-16 ***
## Credit_Limit -1.480e-05 4.711e-06 -3.142 0.001678 **
## Total_Revolving_Bal -7.402e-04 3.880e-05 -19.076 < 2e-16 ***
## Total_Amt_Chng_Q4_Q1 -2.347e-01 1.561e-01 -1.504 0.132688
## Total_Trans_Amt 3.414e-04 1.950e-05 17.505 < 2e-16 ***
## Total_Trans_Ct -8.356e-02 3.013e-03 -27.737 < 2e-16 ***
## Total_Ct_Chng_Q4_Q1 -2.158e+00 1.600e-01 -13.489 < 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: 7143.2 on 8101 degrees of freedom
## Residual deviance: 3866.9 on 8080 degrees of freedom
## AIC: 3910.9
##
## Number of Fisher Scoring iterations: 7
# Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic)
lr_test <- anova(cloglog, test = "Chisq")
# Lấy giá trị Prob(LR statistic)
p_value <- lr_test$Pr[2]
p_value
## [1] 0.0001217857
Kiểm định sự phù hơp của mô hình
Giả thuyết H0: mô hình không phù hợp Với P-value = Prob(LR) = 0, 0001 < 5% bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.
Sau khi thực hiện kiểm định sự phù hợp cuả mô hình logit, probit và cloglog ta thấy cả 3 mô hình đều phù hợp với dữ liệu, do đó sử dụng 4 tiêu chí sau để tìm ra mô hình phù hợp.
AIC(logit) = 3845,7
AIC(probit) = 3865,3
AIC(cloglog) = 3910,9
Mô hình logit có AIC nhỏ nhất nên ta chọn mô hình này.
Deviance(logit) = 3801,7
Deviance(progit) = 3821,3
Deviance(cloglog) = 3866,9
Mô hình logit có deviance nhỏ nhất nên ta chọn mô hình này
BrierScore(mh3) #mô hình logit
## [1] 0.0697465
BrierScore(probit)
## [1] 0.07025875
BrierScore(cloglog)
## [1] 0.07028891
Mô hình logit có chỉ số Brier nhỏ nhất nên ta chọn mô hình này.
predictions <- predict(mh3, newdata = test_data3, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(test_data3$Attrition_Flag, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 1630 146
## 1 70 179
##
## Accuracy : 0.8933
## 95% CI : (0.8791, 0.9064)
## No Information Rate : 0.8395
## P-Value [Acc > NIR] : 2.386e-12
##
## Kappa : 0.5628
##
## Mcnemar's Test P-Value : 3.341e-07
##
## Sensitivity : 0.9588
## Specificity : 0.5508
## Pos Pred Value : 0.9178
## Neg Pred Value : 0.7189
## Prevalence : 0.8395
## Detection Rate : 0.8049
## Detection Prevalence : 0.8770
## Balanced Accuracy : 0.7548
##
## 'Positive' Class : 0
##
Mô hình logit có độ chính xác toàn thể là 89,33%, độ nhạy là 95,88% và độ hiệu quả là 55,08%
predictions <- predict(probit, newdata = test_data3, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(test_data3$Attrition_Flag, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 1634 147
## 1 66 178
##
## Accuracy : 0.8948
## 95% CI : (0.8806, 0.9078)
## No Information Rate : 0.8395
## P-Value [Acc > NIR] : 5.575e-13
##
## Kappa : 0.5659
##
## Mcnemar's Test P-Value : 4.217e-08
##
## Sensitivity : 0.9612
## Specificity : 0.5477
## Pos Pred Value : 0.9175
## Neg Pred Value : 0.7295
## Prevalence : 0.8395
## Detection Rate : 0.8069
## Detection Prevalence : 0.8795
## Balanced Accuracy : 0.7544
##
## 'Positive' Class : 0
##
Mô hình probit có độ chính xác toàn thể là 89,48, độ nhạy là 96,12% và độ hiệu quả là 54,77%
predictions <- predict(cloglog, newdata = test_data3, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
head(predicted_classes,4)
## 1 2 4 13
## "0" "0" "0" "0"
predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(test_data3$Attrition_Flag, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 1649 165
## 1 51 160
##
## Accuracy : 0.8933
## 95% CI : (0.8791, 0.9064)
## No Information Rate : 0.8395
## P-Value [Acc > NIR] : 2.386e-12
##
## Kappa : 0.5387
##
## Mcnemar's Test P-Value : 1.487e-14
##
## Sensitivity : 0.9700
## Specificity : 0.4923
## Pos Pred Value : 0.9090
## Neg Pred Value : 0.7583
## Prevalence : 0.8395
## Detection Rate : 0.8143
## Detection Prevalence : 0.8958
## Balanced Accuracy : 0.7312
##
## 'Positive' Class : 0
##
Mô hình cloglog có độ chính xác toàn thể là 89,33%, độ nhạy là 97% và độ hiệu quả là 49,23%.
Độ chính xác toàn thể của mô hình probit cao nhất; độ nhạy của mô hình cloglog cao nhất và độ hiệu quả của mô hình cao nhất. Vì mục tiêu của bài tiểu luận là không bỏ sót các khách hàng có nguy cơ rời bỏ sử dụng dịch vụ thẻ tín dụng của ngân hàng. Do đó độ hiệu quả là tiêu chí quan trọng nhất để đánh giá trong trường hợp này, vì vậy mô hình lựa chọn là mô hình logit.
Kết luận: Dựa vào 4 tiêu chuẩn ta thấy mô hình logit là mô hình được lựa chọn nhiều nhất do đó MH logit được lựa chọn để phân tích các yếu tố ảnh hưởng đến quyết định rời bỏ thẻ tín dụng của khách hàng.
summary(mh3)
##
## Call:
## glm(formula = Attrition_Flag ~ ., family = binomial(link = "logit"),
## data = train_data3)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.0105 -0.3642 -0.1736 -0.0698 3.4210
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 6.213e+00 4.637e-01 13.400 < 2e-16 ***
## GenderM -8.349e-01 1.603e-01 -5.210 1.89e-07 ***
## Dependent_count1 2.786e-02 1.749e-01 0.159 0.87345
## Dependent_count2 2.934e-01 1.667e-01 1.761 0.07832 .
## Dependent_count3 4.189e-01 1.668e-01 2.511 0.01205 *
## Dependent_count4 4.863e-01 1.814e-01 2.681 0.00735 **
## Dependent_count5 6.060e-01 2.605e-01 2.326 0.02001 *
## Income_Category$40K - $60K -4.783e-01 2.208e-01 -2.166 0.03029 *
## Income_Category$60K - $80K -4.094e-01 1.998e-01 -2.049 0.04048 *
## Income_Category$80K - $120K 9.564e-04 1.870e-01 0.005 0.99592
## Income_CategoryLess than $40K -3.752e-01 2.392e-01 -1.569 0.11666
## Income_CategoryUnknown -4.729e-01 2.582e-01 -1.831 0.06704 .
## Months_on_book -1.509e-02 5.208e-03 -2.897 0.00377 **
## Total_Relationship_Count -4.608e-01 3.059e-02 -15.062 < 2e-16 ***
## Months_Inactive_12_mon 5.297e-01 4.228e-02 12.529 < 2e-16 ***
## Contacts_Count_12_mon 5.030e-01 4.084e-02 12.315 < 2e-16 ***
## Credit_Limit -5.960e-06 5.943e-06 -1.003 0.31590
## Total_Revolving_Bal -9.744e-04 5.170e-05 -18.846 < 2e-16 ***
## Total_Amt_Chng_Q4_Q1 -4.829e-01 2.057e-01 -2.347 0.01891 *
## Total_Trans_Amt 4.712e-04 2.510e-05 18.773 < 2e-16 ***
## Total_Trans_Ct -1.154e-01 4.064e-03 -28.405 < 2e-16 ***
## Total_Ct_Chng_Q4_Q1 -2.808e+00 2.089e-01 -13.446 < 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: 7143.2 on 8101 degrees of freedom
## Residual deviance: 3801.7 on 8080 degrees of freedom
## AIC: 3845.7
##
## Number of Fisher Scoring iterations: 6
Kết quả phân tích hồi quy Logit cho thấy, 21 biến đưa vào mô hình hồi quy để phân tích nhưng kết quả phân tích chỉ có 17 biến độc lập có ý nghĩa thống kê bao gồm:
Với giả thuyết các yếu tố khác không đổi, ảnh hưởng của từng biến đến được diễn giải như sau:
Biến giới tính trong mô hình có ý nghĩa thống kê về tỷ lệ rời bỏ thẻ tín dụng của khách hàng, ở mức ý nghĩa 1% thì khách hàng nam sẽ có xác suất rời bỏ cao hơn 30,26 % so với khách hàng nữ.
Số người phụ thuộc của khách hàng khác nhau sẽ có tác động đáng kể đến quyết định rời bỏ thẻ tín dụng của khách hàng. Ở mức ý nghĩa 10% thì khách hàng có 2 người phụ thuộc có xác suất rời bỏ cao hơn 57,28% so với khách hàng không có người phụ thuộc.Ở mức ý nghĩa 5% Khách hàng có 3 người phụ thuộc có xác suất rời bỏ cao hơn 60,32% so với ở mức thu nhập khách hàng không có người phụ thuộc.Ở mức ý nghĩa 1% Khách hàng có 4 người phụ thuộc có xác suất rời bỏ cao hơn 61,92% so với ở mức thu nhập khách hàng không có người phụ thuộc. Ở mức ý nghĩa 5% Khách hàng có 5 người phụ thuộc có xác suất rời bỏ cao hơn 64,7% so với ở mức thu nhập khách hàng không có người phụ thuộc.
Thu nhập của khách hàng ở các mức khác nhau sẽ có tác động đáng kể đến quyết định rời bỏ thẻ tín dụng của khách hàng. Ở mức ý nghĩa 5% thì khách hàng có thu nhập từ $40-$60 có xác suất rời bỏ cao hơn 61,73% so với ở mức thu nhập lớn hơn $120 . Trong khi đó khách hàng có mức thu nhập từ $60-$80 có xác suất cao hơn 60,09% so với khách hàng có mức thu nhập lớn hơn $120. Với mức ý nghĩa 10% thì khách hàng có thu nhập khác có xác suất rời bỏ cao hơn 61,61% so với ở mức thu nhập lớn hơn $120.
Ở mức ý nghĩa 1%, thời gian quan hệ với ngân hàng (Period of relationship with bank)( months_on_book), tổng số sản phẩm mà khách hàng nắm giữ ( total_Relationship_Count),tổng tín dụng quay vòng( Total_Revolving_Bal), thay đổi tổng mức chi tiêu thẻ tín dụng (Q4 so với Q1) (total_Amt_Chng_Q4_Q1), tổng số lượng giao dịch (12 tháng qua)( total_Trans_Ct), thay đổi tổng số giao dịch (Q4 so với Q1) (Total_Ct_Chng_Q4_Q1) có tác động tiêu cực lên khả năng rởi bỏ thẻ tín dụng của khách hàng. Trong khi các yếu tố: số lần liên hệ của ngân hàng với khách hàng (Contacts_Count_12_mon) , số tháng không hoạt động thẻ tín dụng (Months_Inactive_12_mon) và tổng mức chi tiêu thẻ tín dụng (12 tháng qua)(total_Trans_Amt) lại có tác động tích cực lên khả năng rởi bỏ thẻ tín dụng của khách hàng.
confint.default(mh3)
## 2.5 % 97.5 %
## (Intercept) 5.304385e+00 7.121915e+00
## GenderM -1.148941e+00 -5.207695e-01
## Dependent_count1 -3.149909e-01 3.707141e-01
## Dependent_count2 -3.323691e-02 6.200321e-01
## Dependent_count3 9.188186e-02 7.459095e-01
## Dependent_count4 1.307356e-01 8.418483e-01
## Dependent_count5 9.537716e-02 1.116529e+00
## Income_Category$40K - $60K -9.111017e-01 -4.555335e-02
## Income_Category$60K - $80K -8.010750e-01 -1.775864e-02
## Income_Category$80K - $120K -3.655805e-01 3.674932e-01
## Income_CategoryLess than $40K -8.439416e-01 9.351513e-02
## Income_CategoryUnknown -9.789782e-01 3.320185e-02
## Months_on_book -2.529605e-02 -4.879611e-03
## Total_Relationship_Count -5.207558e-01 -4.008349e-01
## Months_Inactive_12_mon 4.468573e-01 6.125929e-01
## Contacts_Count_12_mon 4.229297e-01 5.830270e-01
## Credit_Limit -1.760825e-05 5.687684e-06
## Total_Revolving_Bal -1.075700e-03 -8.730376e-04
## Total_Amt_Chng_Q4_Q1 -8.861509e-01 -7.967858e-02
## Total_Trans_Amt 4.220410e-04 5.204387e-04
## Total_Trans_Ct -1.234149e-01 -1.074827e-01
## Total_Ct_Chng_Q4_Q1 -3.217643e+00 -2.398942e+00
predictions <- predict(mh3, newdata = test_data3, type = "response")
head(round(predictions,4),10)
## 1 2 4 13 16 17 21 24 25 29
## 0.0030 0.0000 0.0120 0.0044 0.0108 0.0423 0.0125 0.8876 0.7622 0.2890