python评分卡2_woe与IV分箱方法

本系列分以下章节:
python评分卡1_woe与IV值
python评分卡2_woe与IV分箱方法
python评分卡3_woe与IV分箱实现
python评分卡4_logistics原理与解法_sklearn英译汉
python评分卡5_Logit例1_plot_logistic_l1_l2_sparsity
python评分卡6_Logit例2plot_logistic_path

1.数据分箱

含义:

对连续变量离散化;实际上就是按照属性值划分的子区间,可以简单理解为分段处理(不同的是对特征进行分箱后,需要对分箱后的每组woe编码进行评估,才能放进模型训练);

意义:

1.模型更稳定,特征离散化后,起到简化逻辑回归模型的作用,降低过拟合风险;
2.变量离散化后对异常数据有很强的鲁棒性;
3.将逻辑回归模型转换为评分卡形式的时候,分箱也是必须的;

分组原则:

1.组间差异大;
2.组内差异小;
3.每组占比不低于5%
4.必须有1、0两种分类;

2.分箱方法

2.1无监督分箱:

2.1.1.等距离(宽度)分箱:

将变量的取值范围分为k个等宽的区间,每个区间当作一个分箱。

2.1.2.等频度(深度)分箱:

把观测值按照从小到大的顺序排列,根据观测的个数等分为k部分,每部分当作一个分箱,每箱具有相同的记录数; 例如,数值最小的1/k比例的观测形成第一个分箱,等等。

2.1.3.聚类分箱:

基于K-means聚类法将观测值聚为k类,但在聚类过程中需要保证分箱的有序性:第一个分箱中所有观测值都要小于第二个分箱中的观测值,第二个分箱中所有观测值都要小于第三个分箱中的观测值,等等。

2.1.4.用户自定义区间:

根据需要自定义区间,更多基于专家经验与业务逻辑,比如55岁对于职场女性,35岁对于初级程序员

2.2 有监督分箱: |

有监督分箱方法包括但不限于 最小熵(minimumentropy),Best-KS 分箱,卡方分箱等方法

3.最小熵(minimumentropy)

在分箱时考虑因变量的取值,使得分箱后达到最小熵(minimumentropy):
(1)熵值公式
(2)假设因变量为分类变量,可取值1,…,J。令pl(j)表示第l个分箱内因变量取值为j的观测的比例,l=1,…,k,j=1,…,J;那么第l个分箱的熵值为Jj=1[-pl(j)×log(pl(j))]。如果第l个分箱内因变量各类别的比例相等,即pl(1)=…=pl(J)=1/J,那么第l个分箱的熵值达到最大值;如果第l个分箱内因变量只有一种取值,即某个pl(j)等于1而其他类别的比例等于0,那么第l个分箱的熵值达到最小值。

(3)令rl表示第l个分箱的观测数占所有观测数的比例;那么总熵值为kl= 1rl×Jj=1[-pl(j)×log(pl(j ))]。需要使总熵值达到最小,也就是使分箱能够最大限度地区分因变量的各类别。

4.Best-KS 分箱

4.1 KS统计量的定义

KS(Kolmogorov-Smirnov)统计量由两位苏联数学家A.N. Kolmogorov和N.V. Smirnov提出。KS统计量是基于经验累积分布函数(Empirical Cumulative Distribution Function,ECDF)建立的,一般定义为:

KS = max{|cum(positive_rate|-cum(negative_rate)|}

4.2 KS的计算方式:

计算每个评分区间的正负样本数。
计算各每个评分区间的累计正样本数占总正样本数比率(positive%)和累计负样本数占总负样本数比率(negative%)。
计算每个评分区间累计正样本占比与累计负样本占比差的绝对值(cum(positive_rate|-cum(negative_rate)),然后对这些绝对值取最大值记得到KS值。

在风控中,KS常用于评估模型区分度。区分度越大,说明模型的风险排序能力(ranking ability)越强。这里要说的ks值是变量的KS值,而不是模型的KS值——指自变量x对于因变量y有没有区分度,我们常会分正负样本群体来观察该变量的分布差异里的KS值。KS值越大,表示该变量越能将正,负客户的区分程度越大。通常来说,KS>0.2即表示特征有较好的准确率。

通常来说,KS越大,表明正负样本区分程度越好。KS在模型中的业务评价标准下所示。由于理解因人而异,不一定完全合理,仅供参考。

KS 区分能力
<0.2 不建议采用
0.2-0.4 较好
0.4-0.5 良好
0.5-0.6 很强
0.6-0.75 非常强
>0.75 太强了,可能有问题

KS-曲线

python评分卡2_woe与IV分箱方法_第1张图片

4.3 Best-KS分箱

Best-KS分箱的算法执行过程是一个逐步拆分的过程:
1.将特征值值进行从小到大的排序。
2.计算出KS最大的那个值,即为切点,记为D。然后把数据切分成两部分。
3。重复步骤2,进行递归,D左右的数据进一步切割。直到KS的箱体数达到我们的预设阈值即可。

Best-KS分箱的特点:
连续型变量:分箱后的KS值<=分箱前的KS值
分箱过程中,决定分箱后的KS值是某一个切点,而不是多个切点的共同作用。这个切点的位置是原始KS值最大的位置

5.卡方分箱

主要讲卡方分布和卡方检验是什么,分箱算法ChiMerge

5.1 卡方分布

卡方分布(chi-square distribution, χ2-distribution)是概率统计里常用的一种概率分布,也是统计推断里应用最广泛的概率分布之一,在假设检验与置信区间的计算中经常能见到卡方分布的身影。定义如下:
若k个独立的随机变量Z1, Z2,…, Zk 满足标准正态分布 N(0,1) , 则这k个随机变量的平方和: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D3SVAKjI-1652003145674)(attachment:image.png)]
为服从自由度为k的卡方分布,记作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CtflXFg1-1652003145675)(attachment:image.png)]
或者
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3N9Fk5tO-1652003145675)(attachment:image-2.png)]

5.2 卡方检验

χ2检验是以χ2分布为基础的一种假设检验方法,主要用于分类变量之间的独立性检验。其基本思想是根据样本数据推断总体的分布与期望分布是否有显著性差异,或者推断两个分类变量是否相关或者独立。一般可以设原假设为 :观察频数与期望频数没有差异,或者两个变量相互独立不相关。实际应用中,我们先假设原假设成立,计算出卡方的值,卡方表示观察值与理论值间的偏离程度。卡方值用于衡量实际值与理论值的差异程度,这也是卡方检验的核心思想。
卡方值包含了以下两个信息:

1).实际值与理论值偏差的绝对大小。
2).差异程度与理论值的相对大小。

上述计算的卡方值服从卡方分布。根据卡方分布,卡方统计量以及自由度,可以确定在原假设成立的情况下获得当前统计量以及更极端情况的概率p。如果p很小,说明观察值与理论值的偏离程度大,应该拒绝原假设。否则不能拒绝原假设。

5.3 卡方检验实例

某医院对某种病症的患者使用了A,B两种不同的疗法,结果如 表1,问两种疗法有无差别?

表1 两种疗法治疗卵巢癌的疗效比较

组别 有效 无效 合计 有效率(%)
A组 19 24 43 44.2
B组 34 10 44 77.3
合计 53 34 87 60.9

可以计算出各格内的期望频数。
第1行1列: 43×53/87=26.2
第1行2列: 43×34/87=16.8
第2行1列: 44×53/87=26.8
第2行2列: 4×34/87=17.2
先建立原假设:A、B两种疗法没有区别。根据卡方值的计算公式,计算:算得卡方值=10.01。得到卡方值以后,接下来需要查询卡方分布表来判断p值,从而做出接受或拒绝原假设的决定。首先我们明确自由度的概念:自由度k=(行数-1)*(列数-1)。 这里k=1.然后看卡方分布的临界概率表,我们可以用如下代码生成:

import numpy as np
from scipy.stats import chi2
import pandas as pd
# chi square distribution
percents = [ 0.95, 0.90, 0.5,0.1, 0.05, 0.025, 0.01, 0.005]
df =pd.DataFrame(np.array([chi2.isf(percents, df=i) for i in range(1, 30)]))
df.columns = percents
df.index =df.index+1
pd.set_option('precision', 3)
df
0.950 0.900 0.500 0.100 0.050 0.025 0.010 0.005
1 0.004 0.016 0.455 2.706 3.841 5.024 6.635 7.879
2 0.103 0.211 1.386 4.605 5.991 7.378 9.210 10.597
3 0.352 0.584 2.366 6.251 7.815 9.348 11.345 12.838
4 0.711 1.064 3.357 7.779 9.488 11.143 13.277 14.860
5 1.145 1.610 4.351 9.236 11.070 12.833 15.086 16.750
6 1.635 2.204 5.348 10.645 12.592 14.449 16.812 18.548
7 2.167 2.833 6.346 12.017 14.067 16.013 18.475 20.278
8 2.733 3.490 7.344 13.362 15.507 17.535 20.090 21.955
9 3.325 4.168 8.343 14.684 16.919 19.023 21.666 23.589
10 3.940 4.865 9.342 15.987 18.307 20.483 23.209 25.188
11 4.575 5.578 10.341 17.275 19.675 21.920 24.725 26.757
12 5.226 6.304 11.340 18.549 21.026 23.337 26.217 28.300
13 5.892 7.042 12.340 19.812 22.362 24.736 27.688 29.819
14 6.571 7.790 13.339 21.064 23.685 26.119 29.141 31.319
15 7.261 8.547 14.339 22.307 24.996 27.488 30.578 32.801
16 7.962 9.312 15.338 23.542 26.296 28.845 32.000 34.267
17 8.672 10.085 16.338 24.769 27.587 30.191 33.409 35.718
18 9.390 10.865 17.338 25.989 28.869 31.526 34.805 37.156
19 10.117 11.651 18.338 27.204 30.144 32.852 36.191 38.582
20 10.851 12.443 19.337 28.412 31.410 34.170 37.566 39.997
21 11.591 13.240 20.337 29.615 32.671 35.479 38.932 41.401
22 12.338 14.041 21.337 30.813 33.924 36.781 40.289 42.796
23 13.091 14.848 22.337 32.007 35.172 38.076 41.638 44.181
24 13.848 15.659 23.337 33.196 36.415 39.364 42.980 45.559
25 14.611 16.473 24.337 34.382 37.652 40.646 44.314 46.928
26 15.379 17.292 25.336 35.563 38.885 41.923 45.642 48.290
27 16.151 18.114 26.336 36.741 40.113 43.195 46.963 49.645
28 16.928 18.939 27.336 37.916 41.337 44.461 48.278 50.993
29 17.708 19.768 28.336 39.087 42.557 45.722 49.588 52.336

查表自由度为1,p=0.05的卡方值为3.841,而此例卡方值10.01>3.841,因此 p < 0.05,说明原假设在0.05的显著性水平下是可以拒绝的。也就是说,原假设不成立。

5.4 ChiMerge分箱算法

ChiMerge卡方分箱算法由Kerber于1992提出。包括以下两个阶段:

(1).初始化阶段:

首先按照属性值的大小进行排序(对于非连续特征,需要先做数值转换,比如转为坏人率,然后排序),然后每个属性值单独作为一组。

(2).合并阶段:

a.对每一对相邻的组,计算卡方值。

b.根据计算的卡方值,对其中最小的一对邻组合并为一组。

c.不断重复a,b直到计算出的卡方值都不低于事先设定的阈值,或者分组数达到一定的条件(如最小分组数5,最大分组数8)。值得注意的是,小编之前发现有的实现方法在合并阶段,计算的并非相邻组的卡方值(只考虑在此两组内的样本,并计算期望频数),因为他们用整体样本来计算此相邻两组的期望频数。

参考引用

1.IV WOE & 评分卡 & 分箱
2.数据分箱的常用方法
3.Python评分卡建模—卡方分箱
4.模型指标—KS
5.【有监督分箱】方法二: Best-KS分箱
6.Python评分卡建模—卡方分箱


你可能感兴趣的:(python评分卡,python,数据挖掘,人工智能)