南田
楼上有网友提到如何对缺失数据补值的问题。其设想是从未缺失数据中导出平均数和标准差,再利用正态分布随机数发生函数来generates一个随机数。这种方法可不可行,没有一定的答案,取决于数据缺失的原因。如果缺失不是随机现象,这种补法弊大于利。设想我们讨论的是家庭收入这个变量。任何社会中收入缺失都不是无心之过:高收入人群比低收入人群更有可能隐瞒自己的收入情况。用正态分布去补,只能离真实情况越远。一个可行的办法是利用回归或决策数从相关变量进行推导,例如收入和教育水平,职业,住房拥有状况等属性是相关联的,如果这些属性的数据缺失情况较轻,就可以考虑用它们来预测收入。
补值方法还要视数据缺失程度而定。如果如这位网友所说,缺失率达到了80%,那么与其补还不如不补。这种变量唯一的能用之处是它的残余信息:一个新的两元变量,以0和1表示是否处于缺失状态。而另一方面,如果缺失率是10%,那么使用正态发生函数又hardly worth the trouble,用平均数去补既简单,结果也不会有太大差别。(顺便说一句,那位网友提到的放弃非正态分布变量的做法是绝对不可取的)
缺失补值是门大学问,无数的学者写了无数的文章。但是千头万绪一句话,具体情况具体对待。最好搞清数据缺失原因和机制再行对策。有时,数据缺失不过是一种default状态,一旦该变量代表的事件发生才会改变。例如保险公司的数据库中对每种保险产品都会设一个单独的变量。当客户在一个特定保险产品的数值为缺失时,实际值应该是0:说明该客户还没有购买这个保险。
在数据挖掘中处理缺失值还要多一些考虑。回到开头所提的帖子,笔者注意到有的网友提出使用SAS的MI来impute填补数值,一般来说这是可以的。但如果把这个问题放到数据挖掘前提下来考虑,就要打一个问号。MI提供的不是一个公式或赋值语句,是对实际数据拟和出来的多重给值,这意味着在应用数据挖掘结果,对几百万客户进行预测时要重新跑一遍MI。这样做无论在难度,在保持预测结果与模型一致上都有很大的难度。因此从数据挖掘角度,从模型必须回放到数据库的角度,MI就不是一个太好的选择,因为可操作行不够。
最后,给读到这篇帖子的网友提一个问题,作为本贴的结尾。回答这个问题用不着SAS, SPSS, R, 甚至不需要计算机,有张纸和笔就够了:
一个银行的数据挖掘部门欲建立一个模型,预测现有客户购买一种新的金融产品的可能性。从数据中可以观察到,客户在该行开设的支票帐户户头和其购买新产品的可能性之间有一定联系。但是,有少数客户的支票帐户数目是缺值,说明他们虽然和银行有其他往来,但是从来没有在该行开设支票户头。下面是根据历史数据绘出的支票帐户拥有数目和新产品购买百分比:
1,7%;2,8%;3,11%;4,13%;5,14%;6,14%;缺失,12%
注:1, 7%表示在该行有一个支票户头的客户中有7%购买了这个新产品
Q: 如果由你来建立这个模型,对支票帐户缺失客户将如何补值?
莫名
对于这个问题,我想已经不属于一般的缺失值问题了,就你最后一段所谈到的,是因为其和银行没有支票业务往来而并不是其有往来而由于其他所不知原因造成的数据缺失。对于这种不是缺失的缺失,不需要处理,我认为只需把其看成另一类来处理,而不是要进行某种缺失填补。因为其就银行支票业务关系而言,有的客户有,有的没有,如果进行缺失弥补处理,将会使问题更复杂而得到到合理的解,所以缺失处理还是要从数据结构本身来说,依据不同情况进行不同处理,这就和你所提到的一样,。
南田
如果不填补这部分缺失,那么有两种可能的后果:或是放弃这部分客户,或者是放弃这个变量,两者都不可取。也许你所说的“处理”,指利用决策树之类软件对缺失值的处理功能来绕开人为补值这一步,但是软件在幕后还是要对缺失值作出某种假设和处理。我这个问题就是想把这个假设明确化。
让我们把这个问题简化一下,以求更明确的答案:设支票户头是唯一的自变量,且这个模型只能使用回归算法。
莫名
其实我说的也就是对缺失值处理,首要 我们应明白其实什么原因造成的,就如你最后所作假设一样,已经放弃另一方面的可能只是针对确确实实的一般意义而言的缺省了