前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从论文分析,告诉你什么叫 “卡方分箱”?

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

作者头像
Python数据科学
发布2019-04-26 13:45:16
7.9K0
发布2019-04-26 13:45:16
举报
文章被收录于专栏:Python数据科学Python数据科学

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

什么是分箱?

说到分箱,可能很多朋友都非常熟悉,它是数据科学中常用到的一个技巧,意思就是将连续型的数据分成几个数据段,即离散化。很好理解,举个例子,比如将原本连续的年龄特征离散化,结果可变为0-18,18-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:分别是实际频数整列和整行的加和

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python数据科学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档