浅谈基于MDLP算法的数据分箱技术
导语
在数学建模当中,有些算法(如Logistic Regression、Naive Bayes)需要将连续型变量进行分箱处理,这样做既可以消除奇异值带来的影响,同时也便于业务部门后期根据模型的结果进行客户细分。但是如果是使用传统的无监督数据分箱(例如等频、等距),效果往往不甚理想。今天小编就来介绍一种简单易操作的监督式分箱技术MDLP(最小描述长度准则)。
1案例
某汽车厂商推出了一款中高级轿车,在一次推广活动现场对10位参加活动的来宾进行了问卷调研。问卷当中有涉及到一个客户的收入情况以及购买该款车型的意愿。他们希望能够通过问卷的结果知道哪个收入阶层才是该款车型的消费主力。
客户 | 年收入 | 购买意愿 |
10001 | 10 万 | 无 |
10002 | 50万 | 有 |
10003 | 15万 | 无 |
10004 | 50万 | 有 |
10005 | 25万 | 无 |
10006 | 50万 | 有 |
10007 | 20万 | 无 |
10008 | 100万 | 有 |
10009 | 20万 | 无 |
10010 | 10万 | 无 |
理论上来说,年收入越高,越有可能选择档次相对较高的车型。但是我们怎么把这种联系具体化呢?比如说年收入在20-40万之间的群体是中高级轿车的消费主力还是收入更高的群体。这其实就是一个变量分箱的过程,根据购买意愿的差异性按照收入这个指标来划分人群。
假如在受访者当中出现一个年收入过千万的,很显然他和其他人的收入存在着巨大的差异性。但是进行了分箱处理以后,可以把这个奇异点和其他高收入人群划为一类,这样就能够有效地防止出现所谓的奇异值了。此外,分箱的好处还在于方便业务部门后期制定相应的营销策略。他们需要了解的是哪一类人群会成为某一款车型的消费主力,从而针对这部分人制定更加有效的营销策略。所以通常的做法会是按照收入区间划分成几类人群,例如高收入人群、中等收入人群和低收入人群等。由此可见,变量的分箱在数据建模过程中是一个十分必要的步骤。
数据分箱一般可分为无监督数据分箱(如等频,等宽)和有监督数据分箱(如最小熵和MDLP)两大类。
2无监督数据分箱
常见的无监督方法有等频分箱和等宽分箱。
(1)等频分箱:按照观测个数均分为N等分,每个分箱里面的观测数量基本一致;
(2)等宽分箱:把观测值从最小值到最大值之间均分为N等份,每个区间当作一个分箱;
根据等频、等宽原则分别把10个受访者分成两部分人群。如果按照等频原则年收入10万-20万的5个人应该分为一类,25万-100万的5个人为另一类;按照等宽原则的话年收入10万-50万的9个受访者为一类,而年收入100万的一个人则单独被归为一类。无论按照哪种方式来划分两类人群,我们发现都无法把客户准确地分成两类人群(有购买意愿和无购买意愿)
客户 | 年收入 | 等频原则 | 等宽原则 |
10001 | 10万 | A类人群 | A类人群 |
10010 | 10万 | A类人群 | A类人群 |
10003 | 15万 | A类人群 | A类人群 |
10007 | 20万 | A类人群 | A类人群 |
10009 | 20万 | A类人群 | A类人群 |
10005 | 25万 | B类人群 | A类人群 |
10002 | 50万 | B类人群 | A类人群 |
10004 | 50万 | B类人群 | A类人群 |
10006 | 50万 | B类人群 | A类人群 |
10008 | 100万 | B类人群 | B类人群 |
无监督固然有简单易操作的优点,但是劣势也是显而易见的,那就是没有把因变量的因素也考虑进去。有监督分箱虽然运算过程比较复杂,而且耗时费力,但是分箱后的效果往往要优于无监督的方法。今天小编就给大家着重介绍一下MDLP算法(Minimum Deion Length Principle)。
3MDLP算法
MDLP最早是由Rissane在研究通用编码时提出的,用来描述数据进行编码压缩以及解压数据所需模型的最短长度(最小描述长度),其基本公式为:
其中Length(L)为解压数据模型本身包含的信息量(bit),Length(Data|L)表示数据按照模型压缩以后的信息量(bit).
如果现在有一个变量X,我们如何去判断该变量是否应该被切分?如果需要被切分,切分的位置在哪里?
在回答这些问题之前,先介绍两个数学上的概念。
- 信息熵
信息熵是平均信息量,用来衡量信息源所有可能发生情况的平均不确定性。信息熵其公式为:
- 信息增益
信息增益在这里可以简单地理解为当一个集合S按照某一个特征A分成两部分(切分点为T)以后的信息熵 E(A,T;S) 相对于集合S在没有分割之前的熵E(S)减少的信息量
就以上面的例子为例,我们来分别计算信息熵和信息增益。集合S购买意向的调研结果,其中6人没有购买意愿,4人有购买意愿。所以信息熵 E(S) 为
如果根据客户年收入这个特征,以年收入30万作为切分点,得到的E(A,T;S)就是
最后得到的信息增益就是
有了信息熵和信息增益的概念,现在就来介绍一下MDLP算法的具体步骤为:
- 找到最优的切分点。选择切分点的标准就是信息增益最大;
- 分别计算不切分变量情况下的最小描述长度和按照最优点切分以后的最小描述长度;
- 比较两者最小描述长度的大小,如果前者的最小描述长度值大于后者,那么变量就应该需要切分,否则就放弃切分变量;
- 切分后的每一段又可以重复上述的步骤并最终得到所有的切分点。
其中比较两者之间的最小描述长度又可以等价成为下面的不等式:
其中,N是集合S所包含的样本个数,这些样本又分别归属于k个大类。k1和k2分别是子集合S1和S2样本所属大类的个数。
不等式成立,说明不切分变量情况下的最小描述长度大于按照最优点切分以后的最小描述长度,所以需要进行切分。
再以上面的例子为例,我们知道年收入30万是一个最优切分点。根据之前计算得到的信息增益可知不等式左边为0.97。不等式的右边为:
显然最后的结果是满足不等式的,说明应该把上述人群以年收入30万为切分点划分成两类人群。
4R实现MDLP数据分箱
上面只是一个简单的例子,在真正的实际运用当中情况肯定要复杂的多,所以还是需要通过代码来实现运算过程。所幸在R里面已经提供了相应的程序包,应用起来方便简单。下面就来具体介绍一下怎么在R里面用MDLP算法来实现数据分箱的。
从程序得到的结果来看,切分点为年收入37.5万。和之前手动计算的结果略有出入,这是因为无论以30万还是37.5万来切分变量,得到的信息增益都是0.97,所以两者都是最优的切分点。更准确的来说,年收入在25万到50万之间的每个点都可以作为切分点。这主要是由于数据的样本量太少所造成的,如果数据点足够多的话,这个区间会变窄,切分点就能相对固定。
4小结
在实际的应用当中,小编发现MDLP的分箱效果还是很明显的,分箱之后每个组之间的好坏比差别比较大。当然,无论用什么技术来分箱,都需要后期进行人工调整。首先要确保分箱之后的结果不会出现过度拟合,对于样本量特别小的类(<5%整体样本量)需要进行合并。同时还要符合业务逻辑,有些切分点可以适当进行调整,方便业务部门对于模型的整体解读。