介绍分箱方法之前,首先要了解为什么分箱?
分箱的好处:
- 1.分箱后的特征对异常数据有更强的鲁棒性。比如年龄中有一个异常值为300,分箱之后就可能划到>80这一箱中,而如果直接入模的话会对模型造成很大干扰。
- 2.特征离散化之后,每个变量有单独的权重,可以为逻辑回归模型引入了非线性,能够提升模型表达能力,加大拟合。
- 3.特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
- 4.可以将缺失作为独立的一类带入模型。
- 5.稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展。
引用来源:知乎链接
构建风控模型时,常用特征的分箱方法可以分为两大类:
有监督
Best-KS
ChiMerge
无监督
等频
等距
聚类
有监督分箱
1. Best-KS
1.1 KS值介绍
KS(Kolmogorov-Smirnov)用于模型风险区分能力进行评估,指标衡量的是好坏样本累计部分之间的差距 。KS值越大,表示该变量越能将正,负客户的区分程度越大。通常来说,KS>0.2即表示特征有较好的准确率。强调一下,这
里的KS值是变量的KS值,而不是模型的KS值。(后面的模型评估里会重点讲解模型的KS值)。
BestKs方法其实就是找到变量中的最优KS值进行切分。
1.2 KS的计算方式:
计算每个评分区间的好坏账户数。
计算各每个评分区间的累计好账户数占总好账户数比率(good%)和累计坏账户数占总坏账户数比率(bad%)。
计算每个评分区间累计坏账户比与累计好账户占比差的绝对值(累计good%-累计bad%),然后对这些绝对值取最大值记得到KS值。
在例子中,以第一行为例:
cum_bad_rate = 88/(88+65+49+45+36+26+22+9+2+0)=88/342 = 25.73%
cum_good_rate = 2/(2+24+40+45+52+63+67+97+83+76)=2/549=0.36%
ks = |cum_good_rate - cum_bad_rate|≈25.4%
1.3 Best-KS分箱步骤
参考文档:
https://www.cnblogs.com/wqbin/p/10549683.html
https://zhuanlan.zhihu.com/p/79934510
2. 卡方分箱(ChiMerge)
提到卡方分箱,必须要提到卡方检验.
2.1 什么是卡方检验
卡方检验是统计学中经常用到的一种假设检验。理解起来就是,卡方检验就是对分类数据的频数进行分析的一种方法,它的应用主要表现在两个方面:拟合优度检验和独立性检验(列联分析)。
- 拟合优度检验
拟合优度是对一个分类变量的检验,即根据总体分布状况,计算出分类变量中各类别的期望频数,与分布的观察频数进行对比,判断期望频数与观察频数是否有显著差异,从而达到对分类变量进行分析的目的。比如,泰坦尼克号中我们观察幸存者是否与性别有关,可以理解为一个X是否与Y有必然联系。 - 独立性检验
独立性检验是两个特征变量之间的计算,它可以用来分析两个分类变量是否独立,或者是否有关联。比如某原料质量和产地是否依赖关系,可以理解为一个X与另一个X是否独立。
2.2 卡方检验步骤
卡方检验也是一种假设检验,与常见的假设检验方法一致。
- 提出假设,比如假设两个变量之间独立
- 根据分类的观察频数计算期望频数
- 根据卡方公式,计算实际频数与期望频数的卡方值
- 根据自由度和事先确定的显著性水平,查找卡方分布表计算卡法值,并与上一步卡方值比较
- 得出结果判断是否拒绝原假设
2.3 卡方分箱:
卡方分箱是自底向上的(即基于合并的)数据离散化方法。具有最小卡方值的相邻区间合并在一起,直到满足确定的停止准则。
2.3.1 基本思想:
对于精确的离散化,相对类频率在一个区间内应当完全一致。
因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;
否则,它们应当保持分开。而低卡方值表明它们具有相似的类分布。
2.3.2 分箱步骤:
- 1)设定卡方阈值
- 2)根据要离散的属性值对实例进行排序
- 3)计算每一对相邻区间的卡方值
- 4)将卡方值最小的一对区间进行合并
- 5)重复3)4)两步直至满足停止条件
2.3.3 步骤拆解
简单将步骤拆分为两步: 初始化和合并
-
1初始化:
- 根据连续变量值大小进行排序
- 构建最初的离散化,即把每一个单独的值视为一个箱体。这样做的目的就是想从每个单独的个体开始逐渐合并。
-
2.合并:
上面已经将初始化的内容构建完毕,这一步就是不断地合并了,自底向上的合并,直到满足停止条件。那么它是如何合并的呢?
论文中提到的具体操作是这样的:
计算所有相邻分箱的卡方值:也就是说如果有1,2,3,4个分箱,
那么就需要绑定相邻的两个分箱,共三组:12,23,34。然后分别计算三个绑定组的卡方值。
从计算的卡方值中找出最小的一个,并把这两个分箱合并:
比如,23是卡方值最小的一个,那么就将2和3合并,本轮计算中分箱就变为了1,23,4。
背后的基本思想是:
如果两个相邻的区间具有非常类似的类分布,那么这两个区间可以合并。否则,它们应该分开。低卡方值表明它们具有相似的类分布。
- 3.停止条件
上面的步骤只是每一轮需要计算的内容,如果我们不设置停止条件,算法就会一直运行。当然,我们一般会设置一些停止条件:
卡方停止的阈值
分箱数目的限制
- 3.1卡方阈值确定:
只要当所有分箱对的卡方值都大于阈值,并且分箱数目小于最大分箱数时,计算就会继续,直到不满足。
这两个值根据根据显著性水平和自由度和我们的经验来定义,作为函数参数设置,一般推荐使用0.9,0.95,0.99的置信度(即显著性0.1, 0.05,0.01)。
自由度比类别数量小1。例如:有3类,自由度为2,则90%置信度(10%显著性水平)下,卡方的值为4.605。
阈值的意义
类别和属性独立时,有90%的可能性,计算得到的卡方值会小于4.6。
大于阈值4.6的卡方值就说明属性和类不是相互独立的,不能合并。如果阈值选的大,区间合并就会进行很多次,离散后的区间数量少、区间大。
- 3.2分箱数目的确定:
一般设置为自己需要的箱数。
2.3.4 卡方值计算
单变量决策树分类(粗略)
简单介绍下理论,后续再填坑:
CART是二叉树,每次仅进行二元分类,对于连续性变量,方法是依次计算相邻两元素值的中位数,将数据集一分为二,计算该点作为切割点时的基尼值较分割前的基尼值下降程度,每次切分时,选择基尼下降程度最大的点为最优切分点,再将切分后的数据集按同样原则切分,直至终止条件为止。
关于CART分类的终止条件:视实际情况而定,我的案例设置为 a.每个叶子节点的样本量>=总样本量的5% b.内部节点再划分所需的最小样本数>=总样本量的10%
参考链接:链接
无监督
1. 等频分箱
每个分箱中数量大致相等。
2. 等距分箱
以相同的距离度量对特征数据进行划分。
3. 聚类分箱
基于无监督KMeans聚类算法衍生而来的分箱方法。
聚类分析是一个无监督学习 (Unsupervised Learning) 过程, 一般是用来对数据对象按照其特征属性进行分组,经常被应用在客户分群,欺诈检测,图像分析等领域。K-means 应该是最有名并且最经常使用的聚类算法了,其原理比较容易理解,并且聚类效果良好,有着广泛的使用。
3.1 步骤(和KMeans聚类完全一样):
3.2 面临问题及spark MLlib解决方案:
- K如何选择
解决方案:
K 的选择是 K-means 算法的关键.
Spark MLlib 在 KMeansModel 类里提供了 computeCost 方法,
该方法通过计算所有数据点到其最近的中心点的平方和来评估聚类的效果。
一般来说,同样的迭代次数和算法跑的次数,这个值越小代表聚类的效果越好。
但是在实际情况下,我们还要考虑到聚类结果的可解释性,
不能一味的选择使 computeCost 结果值最小的那个 K。
- 初始聚类中心怎么选择
解决方案:
Spark MLlib K-means 算法的实现在初始聚类点的选择上,
借鉴了一个叫 K-means||的类 K-means++ 实现。
K-means++ 算法在初始点选择上遵循一个基本原则:
初始聚类中心点相互之间的距离应该尽可能的远。
整体参考:
https://www.cnblogs.com/wqbin/p/10547167.html
http://dmlcoding.com/15505602742016.html
https://www.jianshu.com/p/69228db7c5d7
https://education.ti.com/sites/CHINA/downloads/pdf/chi_square_tests_xudeqian.pdf