数据集ISLR包的Default数据集
目的是预测哪些客户将拖欠信用卡债务
有1万条数据、3个特征
#数据集
install.packages("ISLR")
library(ISLR)
library(tibble)
as_tibble(Default)
需要分析的是学生身份、信用卡余额、收入这3个特征,并对违约行为进行适当分类。
数据探索
#数据探索
library(ggplot2)
ggplot(data = Default,aes(x=balance,color=default))+geom_density()+labs(title = "defalut with balabce")
ggplot(data = Default,aes(x=income,color=default))+geom_density()+labs(title = "defalut with income")
ggplot(data = Default,aes(x=income,color=student))+geom_density()+labs(title = "student with income")
构建逻辑回归模型
#构建逻辑回归模型
#划分训练集和测试集
set.seed(42)
default_idx <- sample(nrow(Default),ceiling(nrow(Default)/2))
default_trn <- Default[default_idx,]
default_tst <- Default[-default_idx,]
#创建模型
model_glm <- glm(default~.,data = default_trn,family = "binomial")
summary(model_glm)
逻辑回归预测
#逻辑回归预测
head(predict(model_glm,type = "response"))
trn_pred <- ifelse(predict(model_glm,type = "response")>0.5,"Yes","No")
head(trn_pred)
逻辑回归模型评估
#交叉表/混淆矩阵
trn_tab <- table(predicted=trn_pred,actual=default_trn$default)
trn_tab
#错误率
calc_class_err <- function(actual,predicted){
mean(actual!=predicted)
}
calc_class_err(actual = default_trn$default,predicted = trn_pred)
#[1] 0.0274
#灵敏度、特异性等
install.packages("caret")
library(caret)
confusionMatrix(trn_tab,positive = "Yes")
#ROC曲线
library(pROC)
test_preb <- predict(model_glm,newdata = default_tst,type = "response")
test_roc <- roc(default_tst$default,test_preb,plot=TRUE,print.auc=TRUE)
as.numeric(test_roc$auc)