正负样本不均匀如何处理?
转自http://www.alidata.org/archives/205
-----------------------------------------------------------------------
今天在网上看到有人讨论这个问题,原问题描述如下:
类不均衡问题是“分类型数据挖掘”(我就直接按照目标变量来定义概念了哈)实际项目中很常见的一类问题,毕竟生活中像UCI上那种正负类样本点数据基本差不-多的情况是很少见的,至少在我所做过的两个项目中,所遇到的数据情况都是应该属于类极不均衡问题(正负类样本点的比例大致在1:100左右,在这里我将少类样本-定义为正类点,多类样本定义为负类点。由于项目原因,就不介绍具体背景了,反正无非就是在客户中发现有具有潜在风险的客户之类的)。
在有些算法中(主要是基于信息熵或GINI系数进行分类的算法),这种类极不均衡问题会带来算法失效的结果,例如:在使用DT算法进行分类的时候,类不均衡问题-会使得树无法继续生长,当然,通过调整阈值或设定树的最小层数也可以强制使得树继续生长,但对于大量的数据而言,这种做法多少有些拍脑袋的嫌疑。
在有些算法中(主要是基于样本点距分划面距离的算法),类不均衡问题会导致分划面的位置过于偏向于正类点的位置,例如:SVM方法中,以线性SVM为例,如果对-于正负类样本点采用同样的惩罚系数的话,可能最终结果是分化面基本上把几乎所有的正类点和负类点都划在分划面的一侧,使得最终的结果都为负类点。
在这些算法中,对于不均衡类问题都无法得到很好的解决。其实从一种比较通俗的角度来想,数据挖掘无非就是定义一个“规则”,这个规则或者是一堆的IF…ELSE-,或者就直接是一个简单或复杂的函数式,或是两者的结合。数据挖掘的训练过程就是寻找一个在全局或局部最优的“规则”来刻画某种想要的“模式(PATTERN)-”(在本案例中就是刻画潜在的风险客户的特征)。当类不均衡问题出现的时候,模型在训练过程中,最终找到的那种刻画方式往往会倾向于最显著的那种“规则”,当负-类点的的数量多到一定程度的时候,便把正类点的那种“模式”给淹没掉了。所以我们必须采用抽样的方式来使得正类点的“模式”再显现出来,所以,一种解决方式便是-通过分层抽样,来使得正负类样本点的数量比例维持在一个可接受的范围内,(听过一种说法是维持在1:10左右,但不知道这个比例也是拍脑袋得来的还是怎么证明得-到的)。
我的做法是这样的——如果正例(有欺诈)与反例(无欺诈)的原始比例是1:1000——因为决策树既能分辨正例又能分辨反例,如果反例的某些个分支既大又精确,那就把反例的那些个分支统统砍掉,砍完了(即把欺诈概率极小的人排掉)再用剩下的数据(此时再无抽骗的风险了)做一个决策树。