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-曲线
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个随机变量的平方和:
为服从自由度为k的卡方分布,记作:
或者
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.模型指标—KS5.【有监督分箱】方法二: Best-KS分箱6.Python评分卡建模—卡方分箱