WOE和IV计算步骤
- Step1,对于连续型变量,进行分箱(binning),可以选择等频、等距,或者自定义间隔,对于离散型变量,如果分箱太多,则进行分箱合并
- Step2,统计每个分箱里的好人数(bin_goods)和坏人数(bin_bads)
- Step3,分别除以总的好人数(total_goods)和坏人数(total_bads),得到每个分箱内的边际好人占比margin_good_rate和边际坏人比margin_bad_rate
- Step4,计算每个分箱的WOE
- Step5,检查每个分箱(除null分箱外)里WOE值是否满足单调性,若不满足,返回step1
说明:null分箱由于有明确的业务解释,因此不需要考虑满足单调性
- Step6,计算每个分箱里的IV,最终求和,即得到最终的IV
# 计算WOE 和 IV (公式)
margin_bad_rate = bad/total_bads
margin_good_rate = good/total_goods
WOE=ln(margin_bad_rate/margin_good_rate)
IV=(bad/total_bads - good/total_goods)*WOE
评分卡开发流程
- Step1,数据探索性分析
- 违约率分析
- 缺失值分析
- Step2,数据缺失值填充,采用简单规则,如使用中位数进行填充
- Step3,变量分箱
-
1)对于age字段,分成6段 [-math.inf, 25, 40, 50, 60, 70, math.inf]
-
2)对于NumberOfDependents(家属人数)字段,分成6段 [-math.inf,2,4,6,8,10,math.inf]
-
3)对于3种逾期次数,即NumberOfTime30-59DaysPastDueNotWorse,NumberOfTime60-89DaysPastDueNotWorse,NumberOfTimes90DaysLate,分成10段
[-math.inf,1,2,3,4,5,6,7,8,9,math.inf] -
4)对于其余字段,即RevolvingUtilizationOfUnsecuredLines, DebtRatio, MonthlyIncome, NumberOfOpenCreditLinesAndLoans, NumberRealEstateLoansOrLines 分成5段
-
- Step4,特征筛选
使用IV值衡量自变量的预测能力,筛选IV值>0.1的特征字段 - Step5,对于筛选出来的特征,计算每个bin的WOE值
- Step6,使用逻辑回归进行建模
- 训练集、测试集切分
- 计算LR的准确率
- Step7,评分卡模型转换
qcut和cut区别
qcut:传入参数,要将数据分成多少组,即组的个数,具体的组距是由代码计算
cut:传入参数,是分组依据。具体见示例
x = np.array([41, 3, 21, 34, 17, 8])
# 等频分
pd.qcut(x, 3).value_counts()
output:
(2.999, 14.0] 2
(14.0, 25.333] 2
(25.333, 41.0] 2
dtype: int64
# 等距分
pd.cut(x, 3).value_counts()
output:
(2.962, 15.667] 2
(15.667, 28.333] 2
(28.333, 41.0] 2
dtype: int64
特征分箱后的优势
- 连续变量离散化,或者将具有很多状态的离散变量合并成少状态
- 降低模型过拟合风险
- 可以学习到样本的非线性信息
评估指标KS
在风控中,KS常用于评估模型区分度。区分度越大,说明模型的风险排序能力(ranking ability)越强
计算每个分箱区间累计坏账户占比与累计好账户占比差的绝对值,得到KS曲线
在这些绝对值中取最大值,得到此变量最终的KS值
计算KS的常见方法
step 1. 对变量进行分箱(binning),可以选择等频、等距,或者自定义距离。
step 2. 计算每个分箱区间的好账户数(goods)和坏账户数(bads)。
step 3. 计算每个分箱区间的累计好账户数占总好账户数比率(cum_good_rate)和累计坏账户数占总坏账户数比率(cum_bad_rate)。
step 4. 计算每个分箱区间累计坏账户占比与累计好账户占比差的绝对值,得到KS曲线。
step 5. 在这些绝对值中取最大值,得到此变量最终的KS值。
KS 评估
KS值的取值范围是[0,1],一般习惯乘以100%。通常来说,KS越大,表明正负样本区分程度越好。但KS不仅仅只是一个数值指标,其背后蕴藏着很多原因,值得我们结合业务去认真分析