数据的获取途径主要有两个:
申请评分卡常用的特征
每一行代表一个样本(一笔成功成交借款),每个样本包含228多个各类字段
本项目一共三个表,下面分别介绍各个表的重要特征字段
Idx: 每一笔贷款的unique key,可以与另外2个文件里的idx相匹配。
UserInfo_: 借款人个人基础信息,例如学历,性别等
WeblogInfo_ : Weblog网络行为相关信息
Education_Info*: 学历学籍相关信息字段
ThirdParty_Info_PeriodN_* : 第三方数据时间段N字段
SocialNetwork_* : 社交网络字段
LinstingInfo : 借款成交时间
Target: 违约标签(1 = 贷款违约,0 = 正常还款)
idx: 每一笔贷款的unique key
ListingInfo : 借款成交时间
LogInfo1 : 操作代码
LogInfo2: 操作类别
LogInfo3: 登陆时间
idx: 每一笔贷款的unique key
ListingInfo1 : 借款成交时间
UserupdateInfo1: 修改内容
UserupdateInfo2 : 修改时间
该步骤主要是获取数据的大概情况,例如每个字段的缺失值情况、异常值情况、平均值、中位数、最大值、最小值、分布情况等。以便制定合理的数据预处理方案。
数据预处理主要包括数据清洗,变量分箱和 WOE 编码三个步骤。
数据清洗主要是对原始数据中脏数据,缺失值,异常值进行处理。
1.关于对缺失值和异常值的处理
我们采用的方法非常简单粗暴,即删除缺失率超过某一阈值(阈值自行设定,可以为30%,50%,90%等)的变量,将剩余变量中的缺失值和异常值作为一种状态 。
类别变量:将缺失作为一种状态
对于连续变量:缺失率超过30%,删除
或者:
利用随机抽样法填补
剔除极端值后用均值填补
在评分卡模型中,连续变量中的缺失值也可以作为一种状态
将连续变量离散化,将多状态的离散变量合并成少量状态
比如手机号这个特征,每个人的手机号都是不同的,如果有500条数据,就有500个手机号,如果将这500个特征值都输入模型,那么这个时间开销是非常大的。
为什么原本就是连续型的数据,要进行分箱操作,使之变成离散变量?
主要是因为可能会出现以下情况:
一般一个评分卡模型的有效持续时间是 1个月左右甚至更长时间,中间也许会有一些客户的数据发生变化,比如一个月之内工资上涨,但是只上涨了100元,客户的工资有1万块,变成1.01万块,实际上对于是否能及时还款并没有多大影响,但是却会导致模型的准确度等发生变化,而这样的波动是没有意义的。
假设我们将工资特征划分为5箱,即<3000, 3000-5000, 5000-8000, 8000-12000, >12000。客户工资从10000→10100,依然在8000-12000中。这样在考虑客户工资变化的前提下,不会因为客户工资的发生变化而变成了另外一个人,保证了模型的稳定性。
让缺失值单独分为一箱。
对于年龄特征我们划分为4段,即18-25, 25-35, 35-55, > 55,我们可以直接把500划分到>55这一个分箱中。另外我们也可以通过一些手段检测出异常值,将异常值单独分为一箱。
(1)无监督分箱
无监督的分箱主要包括以下几类:
由于无监督分箱仅仅考虑了各个变量自身的数据结构,并没有考虑自变量与目标变量之间的关系,因此无监督分箱不一定会带来模型性能的提升。
(2)有监督分箱
·Split 分箱是一种自上而下(即基于分裂)的数据分段方法。如下图所示,Split 分箱和决策树比较相似,切分点的选择指标主要有 entropy,gini 指数和 IV 值等。
·Merge 分箱,是一种自底向上(即基于合并)的数据离散化方法。如下图所示为Merge 分箱的示意图,
// 基本思想:
如果两个相邻的区间具有类似的类分布,则这两个区间合并;否则,它们应保持分开。Chimerge通常采用卡方值来衡量两相邻区间的类分布情况。
// 具体算法:
step1:预先设定一个卡方的阈值或者最小分箱数n
step2:初始化
1)连续值按升序排列,离散值先转化为坏客户的比率,然后再按升序排列;
2)为了减少计算量,对于状态数大于某一阈值 (建议为100) 的变量,利用等频分箱进行粗分箱。
3)若有缺失值,则缺失值单独作为一个分箱。
step3:合并区间
1)计算每一对相邻区间的卡方值;
2)将卡方值最小的一对区间合并;
step4:重复以上两个步骤,直到分箱数量不大于n,或者各个箱内阈值不小于初始设定的阈值。
step5:输出:分箱后的数据和分箱区间。
// 卡方阈值的确定:
根据显著性水平和自由度得到卡方值
自由度比类别数量小1。例如,有3类,自由度为2,则90%置信度(10%显著性水平)下,
卡方的值为4.6。
// 阈值的意义:
类别和属性独立时,有90%的可能性,计算得到的卡方值会小于4.6,这样,大于阈值的卡
方值就说明属性和类不是相互独立的,不能合并。如果阈值选的大,区间合并就会
进行很多次,离散后的区间数量少、区间大。
注:
1,ChiMerge算法推荐使用0.90、0.95、0.99置信度,最大区间数取10到15之间。
2,也可以不考虑卡方阈值,此时可以考虑最小区间数或者最大区间数。指定区间数量的 上限和下限,最多几个区间,最少几个区间。
3,对于类别型变量,需要分箱时需要按照某种方式进行排序 4,对于分箱后某一箱样本占比超过 95% 的箱子进行删除。
5,检查缺失分箱的坏客户比例是否和非缺失分箱相等,如果相等,进行合并 6,一个分箱内不能全为好客户或者全为坏客户
分箱之后我们便得到了一系列的离散变量,下面需要对变量进行编码,将离散变量转化为连续变量。WOE编码是评分卡模型常用的编码方式。
WOE 称为证据权重(weight of evidence),是一种有监督的编码方式,将预测类别的集中度的属性作为编码的数值。
每个分箱中要同时包含好坏两种类别的样本
从以上公式中我们可以发现,WOE表示的实际上是“当前分箱中坏客户占所有坏客户的比例”和“当前分箱中好客户占所有好客户的比例”的差异。
变换以后可以看出,WOE也可以理解为当前分箱中坏客户和好客户的比值,和所有样本中这个比值的差异 (也就是我们随机的坏客户和好客户的比例)。
WOE越大,这种差异越大,当前分组里的坏客户的可能性就越大,WOE越小,差异越小,
这个分组里的样本响应的可能性就越小。当分箱中坏客户和好客户的比例等于随机坏客户和好客户的比值时,说明这个分箱没有预测能力,即WOE=0。
Q:为什么选择采用WOE编码,而不用其他的one-hot编码方式呢?
one-hot 编码会将原始变量中的每个状态都做为作为一个新的特征,当原始特征状态较多时,数据经过one-hot编码之后特征数量会成倍的增加,同时新特征也会变得过于稀疏。在进行变量筛选的过程中,也会出现原始特征的一部分状态被筛选出来,另一部分状态未被筛选出来,造成特征的不完整。
1)可提升模型的预测效果
2)将自变量规范到同一尺度上
3)WOE能反映自变量取值的贡献情况
4)有利于对变量的每个分箱进行评分
5)转化为连续变量之后,便于分析变量与变量之间的相关性
6)与独热向量编码相比,可以保证变量的完整性,同时避免稀疏矩阵和维度灾难