下面在此分享一下一次课程作业的答题思路及个人答题结果。如有错误欢迎指正。
*本文参考了很多文章。如有雷同纯属纯属巧合。
〇、题目
数据背景:数据1为用户申请手机分期的数据,共2000样本。数据2为某在线网贷平台数据,大家可以选择1个数据展开行业和意义写个报告。
数据集链接:R语言-基于广义线性模型的评分卡模型(数据集)资源-CSDN文库
目的:建立基于广义线性模型的评分卡并评估其效果。大家也可以对比其他数据挖掘方法,并对这些方法同基于原始数据的逻辑回归,以及基于WOE的逻辑回归进行比较。
内容要求:
1. 介绍背景和想要解决的问题。
2. 数据介绍,Y怎么定义,X都有哪些,为什么选这些X。
3. 方法介绍。
4. 方法评估。
5. 总结讨论。
一、案例说明
1.1案例背景
近年来,随着科学技术的发展以及人们物质水平生活的升高,手机在我们生活中扮演着越来越重要的角色,因此,出门在外手机就成为了一项必需品。然而手机价格也水涨船高,于是越来越多人在买手机时,选择分期付款。目前信用卡分期付款最常见的期限有3期、6期和12期,期限越长,手续费越高。用户在借贷时,应尽量选择大平台,规避过高的利息以及其他风险。同时,也需及时还款,避免逾期的情况发生。逾期不仅会导致后续无法借款,还会影响个人征信,更严重可能会面临刑事问题。
1.2案例数据
本分析主要采用数据为2018年1月用于申请手机分期的放款客户的数据,共2001个样本。base_info表中有效指标共44个,以个人信息数据为主。
1.2.1好坏样本定义
坏样本即为逾期样本,好样本即为为逾期样本。
1.2.2观测点选择
基于样本数据,我们选择2018年9月为观测点。
1.2.3观察窗口的选择
由于我们要制作的是申请评分卡,并未获得信用局数据,故没有观察窗口的概念。
1.2.4表现窗口的选择
考虑到最短产品期数为6个月,故我们可以初步选择8个月为表现窗口。
1.3研究目的
基于此数据,我们需要结合各放款客户的相关特征,建立手机分期付款的申请评分卡模型,评估其还款能力。再据此判断当前用户出现违约的可能性,对于分数较高但未还款客户及时催收其还款,减少损失。
二、模型准备
2.0数据类型分析
通过对表的初步分析,两表数据集中的数据类型有:文本型、数值型以及逻辑型。考虑到目标变量为逻辑型变量,后续应采用逻辑回归的方法进行回归分析。
2.1数据处理
2.1.1缺失值处理
对于base_info中数据,经过初步筛选,我们发现了在户籍类型中仅有6项不为空值,其余格中存在大量空值。因此该变量对研究意义不大,故删去户籍类型整列。
2.1.2异常值处理
经缺失值处理后,base_info中还有43个指标2001个样本。下面我们对10个数值类列变量中的值进行异常值检验。通过绘制箱线图观察,得到如下结果:
如图,我们可以发现在INCOME(个人收入)及LOAN_AMT(贷款金额)指标存在较大偏差。经检验,这两类数据并不服从正态分布,但是考虑到个人收入与贷款金额分布在人群中本身就具有随机性,故不做处理。
2.1.3数据划分
数据集进行划分,选择其中70%为训练集、30%为测试集,用训练集的数据进行模拟,测试集的数据进行验证。
2.2目标变量
在本案例中,我们选择STATUS列即截止至2018年9月逾期30天以上客户作为目标变量。0代表未逾期,1代表逾期。
2.3自变量选取
2.3.1相关性分析
由此除目标变量还有42列,这其余42个变量之间的相关关系,使用Spearman相关系数去表示相关关系的强弱情况并生成热力图如下:
根据热力图我们发现,有些变量具有强相关性,在后续回归时可以采用逐步回归的方法,减少变量间相互影响的作用。
【注:此处有很多变量为分类变量,按理说不应该按连续型变量进行相关系数分析,可以只做连续型变量的热力图】
2.3.2计算WOE及IV值
由于后续我们需要制作评分卡,故需要选择从原始数据生成WOE值,并用WOE值代替原始变量进行回归。为合理分段计算WOE值,在分箱时,需要先将各42列进行细分,再将相邻的且P(Y=1|X)相似的细分区合并在一起,避免维数过多引发“维数灾”。粗分后,计算他们的WOE值以及IV值,部分结果如下:
# install.packages('scorecard')
library(scorecard)
data <- read.csv('ibase_info.csv',header = TRUE, stringsAsFactors = F)
dt_s <- var_filter(data,y = 'STATUS')
set.seed(11)
bins <- woebin(dt_s, y="STATUS")
指标 |
类别 |
WOE |
IV |
IV_TOTAL |
申请时间 |
[-Inf,20180103) |
-0.13057 |
0.001024398 |
0.126118 |
[20180103,20180119) |
0.328706 |
0.056977843 |
||
[20180119, Inf) |
-0.41159 |
0.068115544 |
||
偿债比 |
[-Inf,1.2) |
-1.24071 |
0.36215936 |
0.587857 |
[1.2,1.26) |
0.296959 |
0.009537048 |
||
[1.26,1.34) |
-0.70341 |
0.035896696 |
||
[1.34, Inf) |
0.579977 |
0.180264282 |
||
身份证命中同盾欺诈低级灰名单 |
[-Inf,2) |
-0.12024 |
0.012194246 |
0.080823 |
[2, Inf) |
0.676708 |
0.068628769 |
||
… |
… |
… |
… |
… |
其中,WOE越大,代表着该数据区间中因变量为1的比例越高,即客户违约的可能性越搞。变量的IV值代表着该变量对因变量的区分度,IV越大,该变量越有价值。但是由于直接凭IV值大小选取,可能避免不了多重共线性的影响,在这里我们先将IV值最小的10个变量进行剔除,后续再选择用逐步回归的方法选择变量。
三、模型建立
3.1变量选择
考虑到变量过多,可以采取逐步回归的方法,自动从可供选择的变量中选取最重要的几个变量,每次逐个引入自变量时,要保证其偏回归平方和经检验后是显著的。且每引入一个新变量后,要对旧的自变量逐个检验,剔除偏回归平方和不显著的自变量。由此建立逻辑回归分析的解释(预测)模型。
由逻辑回归的基本原理,我们将客户违约(Y=1)的概率表示为p,则正常(Y=0)的概率为1-p,因此可用得到:
则客户违约的概率可表示为:
逻辑回归计算模型如下:
其中,变量 是出现在最终模型中的自变量,即为入模指标。由于此时所有变量都用WOE转换进行了转换,将这些
表示为
,其中式中
为第i行第j个变量的WOE,为已知变量;
为二元变量,表示变量i是否取第j个值。
经逐步回归计算,回归分析结果如下:
dt_list <- split_df(dt_s)
train <- dt_list$train
test <- dt_list$test
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( STATUS ~ ., family = binomial(), data = train_woe)
summary(m1)
# 逐步回归选择变量
m_step <- step(m1, direction="both", trace = FALSE)
m2 <- eval(m_step$call)
summary(m2)
library(car)
vif(m2)
变量 |
Estimate |