从论文分析,告诉你什么叫 “卡方分箱”?

卡方分箱原理详解

来源:Python数据科学

作者:东哥起飞

前些日子,微信群里讨论风控建模面试中的一些问题,其中就提到了 “卡方分箱”。大家对卡方分箱都有或多或少的疑问,应星球朋友要求,最近整理了一下我对卡方分箱的理解,也借此分享给公众号的朋友们。

什么是分箱?

说到分箱,可能很多朋友都非常熟悉,它是数据科学中常用到的一个技巧,意思就是将连续型的数据分成几个数据段,即离散化。很好理解,举个例子,比如将原本连续的年龄特征离散化,结果可变为0-1818-30, 30-50>50等4个范围的特征值,而非连续的无穷的特征值。简单理解,这个过程其实就是:连续 —>不连续

为什么要分箱?

分箱的好处还是很多的,尤其是使用逻辑回归的评分卡建模中,分箱woe也是一种标配。总的来说,分箱有这么几个用处:

  • 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;

  • 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;

  • 单变量离散化后,每个变量有单独的权重,可以为逻辑回归模型引入了非线性,能够提升模型表达能力,加大拟合;

  • 特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

  • 可以将缺失作为独立的一类带入模型。

什么是卡方检验?

卡方检验是统计学中经常用到的一种假设检验。用我的理解总结起来,卡方检验就是对分类数据的频数进行分析的一种方法,它的应用主要表现在两个方面:拟合优度检验和独立性检验(列联分析)。

拟合优度

拟合优度是对一个分类变量的检验,即根据总体分布状况,计算出分类变量中各类别的期望频数,与分布的观察频数进行对比,判断期望频数与观察频数是否有显著差异,从而达到对分类变量进行分析的目的。比如,泰坦尼克号中我们观察幸存者是否与性别有关,可以理解为一个X是否与Y有必然联系。

独立性检验

独立性检验是两个特征变量之间的计算,它可以用来分析两个分类变量是否独立,或者是否有关联。比如某原料质量和产地是否依赖关系,可以理解为一个X与另一个X是否独立。

卡方检验步骤

卡方检验的步骤其实就是一般假设检验的过程。下面列出独立性检验的大致步骤,如下:

  • 提出假设,比如假设两个变量之间独立

  • 根据分类的观察频数计算期望频数

  • 根据卡方公式,计算实际频数与期望频数的卡方值

  • 根据自由度和事先确定的显著性水平,查找卡方分布表计算卡法值,并与上一步卡方值比较

  • 得出结果判断是否拒绝原假设

什么是卡方分箱?

分箱的方法有很多,卡方分箱属于其中一种,属于有监督系列的。卡方分箱正是一种基于卡方检验的分箱方法,更具地说是基于上面提到的第二种应用,独立性检验,来实现核心分箱功能的。

网上关于卡方分箱的理解也有一些,但是我们直接从算法提出者的论文来理解一下。下面这部分截取是算法的核心部分。

从论文分析,告诉你什么叫 “卡方分箱”?

卡方分箱算法简单来说,有两个部分组成:1)初始化步骤;2)合并。

初始化步骤

  • 根据连续变量值大小进行排序

  • 构建最初的离散化,即把每一个单独的值视为一个箱体。这样做的目的就是想从每个单独的个体开始逐渐合并。

合并

上面已经将初始化的内容构建完毕,这一步就是不断地合并了,自底向上的合并,直到满足停止条件。那么它是如何合并的呢?

论文中提到的具体操作是这样的:

  • 计算所有相邻分箱的卡方值:也就是说如果有1,2,3,4个分箱,那么就需要绑定相邻的两个分箱,共三组:12,23,34。然后分别计算三个绑定组的卡方值。

  • 从计算的卡方值中找出最小的一个,并把这两个分箱合并:比如,23是卡方值最小的一个,那么就将2和3合并,本轮计算中分箱就变为了1,23,4。

背后的基本思想是:如果两个相邻的区间具有非常类似的类分布,那么这两个区间可以合并。否则,它们应该分开。低卡方值表明它们具有相似的类分布。

停止条件

上面的步骤只是每一轮需要计算的内容,如果我们不设置停止条件,算法就会一直运行。当然,我们一般会设置一些停止条件:

  • 卡方停止的阈值

  • 分箱数目的限制

意思就是说,只要当所有分箱对的卡方值都大于阈值,并且分箱数目小于最大分箱数时,计算就会继续,直到不满足。这两个值根据我们的经验来定义,作为函数参数设置,一般推荐使用0.9,0.95,0.99的置信度,分箱数一般可以设置为5。

卡方分箱公式理解

有的朋友问我了,说上面内容可以理解,但是公式看不懂。公式是什么样的呢?根据论文中可以看到,它长这个样的:

从论文分析,告诉你什么叫 “卡方分箱”?

  • m=2:表示相邻的两个分箱数目

  • k:表示目标变量的类别数,比如目标是网贷违约的好和坏,那么k=2。k也可以是多类,大于2。

  • Aij:实际频数,即第i个分箱的j类频数

  • Eij:期望频数

其中,期望频数的公式如下,可根据P(AB)=P(A)P(B)推导出来:

从论文分析,告诉你什么叫 “卡方分箱”?

  • Ri&Cj:分别是实际频数整列和整行的加和

举个例子说明一下这个公式是如何用的,对于相邻两个分箱的卡方值计算:

从论文分析,告诉你什么叫 “卡方分箱”?

实际频数和期望频数都有了,带入卡方公式求解,过程如下:

从论文分析,告诉你什么叫 “卡方分箱”?

如果计算结果是所有卡方值中最小的,说明:这组中两个分箱具有最相似的类分布,因此把它们合并。

以上就是结合论文对卡方分箱原理的一个解读。对于卡方分箱的实现有一些特殊情况需要注意,比如初始分箱中每个分箱中的数量,以及是否有全是同一类别的分箱出现等等。不过,如果掌握了上面的核心原理和计算部分,这些特殊情况都可迎刃而解。

文章公众号链接:https://mp.weixin.qq.com/s/C1So2rBjQhXNdubAUS0PoA

关注公众号:Python数据科学,get更多干货。

从论文分析,告诉你什么叫 “卡方分箱”?

禁止转载,本文首发于Python数据科学公众号,发布者:东哥起飞,如需转载请联系作者授权https://mp.weixin.qq.com/s/C1So2rBjQhXNdubAUS0PoA

发表评论

电子邮件地址不会被公开。 必填项已用*标注