各位朋友,我已开通微信公共号:小程在线
我会把文章及时的更新到公共号上,欢迎大家的关注。
library(scorecard)
data("germancredit")
print(dim(germancredit))
print(names(germancredit))
print(head(germancredit[,20:21]))
# 变量选择
dt_s <- var_filter(germancredit, y="creditability")
print(dim(dt_s))
# 数据集划分为训练集和测试集
dt_list <- split_df(dt_s)
train <- dt_list$train
test <- dt_list$test
# woe 分箱 自动分箱
bins <- woebin(dt_s, y="creditability")
# 绘制分箱后的坏账率可视化,对应14张图,这里只展示最后一张
woebin_plot(bins)
train_woe <- woebin_ply(train, bins)
test_woe <- woebin_ply(test, bins)
print(dim(train_woe))
print(dim(test_woe))
m1 <- glm( creditability ~ ., family = binomial(), data = train_woe)
summary(m1)
# 逐步回归选择变量
m_step <- step(m1, direction="both", trace = FALSE)
m2 <- eval(m_step$call)
summary(m2)
# 模型性能验证 ks和roc
# 预测的概率
train_pred <- predict(m2, train_woe, type = 'response')
test_pred <- predict(m2, test_woe, type = 'response')
# 性能
train_perf <- perf_eva(train$creditability, train_pred, title = 'train')
test_perf <- perf_eva(test$creditability, test_pred, title = 'test')
# 生成评分卡
card <- scorecard(bins, m2)
card
train_score <- scorecard_ply(train, card, print_step = 0)
# 验证集评分
test_score <- scorecard_ply(test, card, print_step = 0)
print(train_score)
# 模型的稳定性度量
# psi
psi_result <- perf_psi(
score = list(train = train_score, test = test_score),
label = list(train = train$creditability, test = test$creditability)
)