一条SQL搞定卡方检验计算

更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer

作者:周东谕

引言

上一篇文章《一条SQL搞定信息增益的计算》介绍了在机器学习特征工程中,如何使用SQL来进行信息增益的计算。卡方检验作为一种数理统计中的假设检验方法,也常用于特征选择中。本文简单介绍了卡方检验的原理,并用Hive SQL实现卡方检验值的计算。

卡方检验原理

卡方检验最基本的思想就是通过观察实际值与理论值的偏差来确定理论的正确与否。对应到我们实际工作中,我们的理论假设是:假设某特征(如性别、年龄)分布与Target值(以二分类为例,是否流失、是否付费,通常用[0,1]表示)的分布相互独立,通常我们把这个理论假设叫做“原假设”,用一句通俗的话来解释就是“用户是不是流失跟他/她的性别没有关系”。

然后我们手上有一堆样本数据了,我们要通过观察样本数据来判断我们的“原假设”是否成立。如果不成立,我们就要推翻“原假设”,证明实际情况是“用户流失跟他/她的性别可能有关系”。卡方检验值就是用来上述假设的P值。它的计算公式如下:

为例便于理解,公式还是以“性别对于用户流失是否有影响”为例进行描述。其中et表示特征的枚举,ec是Target枚举。N表示特征和Target划分下的数据量,用SQL描述就是特征维度和Target维度进行group by后count的量。从这里可以看出,卡方检验要求特征值为离散型的。E表示期望值,以特征为male,Target为1为例,计算其期望值如下:

这样分别求出特征与Target各种组合下的期望以及该特征的卡方值。还是以上文的一个例子来描述这个计算的过程:

数据如下:

统计数据如下:

根据统计结果,我们可以计算得如下表:

一共10项,每一项表示特征与Target各种组合下卡方值,然后求和得每个特征的卡方值:

通过查卡方值的P值表,我们可以看出来,sex性别的卡方值小于P=0.1的较为宽泛假设卡方值,此时我们要支持原假设,认为性别和是否流失相互独立的,不存在关联。而活跃度act的卡方值11.4大于P=0.001,此时我们要否定原假设,支持活跃度和是否流失可能相互不独立。

从结果来看,活跃度的卡方值更大,所以我们得出的结论是用户活跃度的大小和他/她是否流失关系相对于性别特征来说更大。

SQL代码及说明:

参考文献:

[1] 机器学习特征选择之卡方检验与互信息

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171229A0IOAZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券