一个缺失值处理的经典坑 2012-03-28

缺失值可能会导致错误的结果,但也可能是问题的答案(比如臭氧空洞),所以要仔细检查这些缺失才做相应处理。

在工作当中需要根据某个客户去年淡季期间某个指标的情况来推测该客户今年在淡季期间的某指标情况。对去年指标有所下降的客户,预测也就会相应会调整下降,反之亦然。那么首先,为了不迁就那些指标下降很大的客户,需要设置一个最低的阈值;其次由于之前已经充分考虑了客户群体及自身的各种影响指标的因素,也不能给指标曾在淡季没有下降的客户额外太多的压力。出于以上两点考虑,折衷设计了一种取对数的算法y=1+log(x)*0.2,x为去年淡季期间指标的环比,y为预测所要求的个性化系数。在这里之所以选对数函数,是因为它既是递增的函数,但却增长越来越慢。

以上为背景。因为不是每个客户都在去年淡季期间有指标记录的,因此这个x会有缺失值。本来打算把所有x的缺失默认值设为1(就是默认缺失客户没有先验),但是后来经别人提醒这个记录值的缺失实际上有两个原因,要么是新客户,要么就干脆是淡季期间从不产生指标也就没有记录的客户。默认值设为1实际上给后者做了一个人为的拔高——其实他们已经停止产生指标了。所以正确的处理是,把注册信息也拿进来,如果客户的合作历史超过一年的,则说明它是去年淡季期间从未消费的,那么这里的缺失值就应该填成指标降低最多的那一档,而不是处于中间位置的1了。

这里我差点踩到的是一个经典的坑——“忽略沉默的用户”。

有个故事专门讲这个:说是二战时英国空军为了降低飞机的损失,决定给飞机的机身进行装甲加固。由于当时条件所限,只能用装甲加固飞机上的少数部位。他们对执行完轰炸任务返航的飞机进行仔细的观察、分析、统计。发现大多数的弹孔,都集中在飞机的机翼上;只有少数弹孔位于驾驶舱。从数据上说, 加固机翼的性价比最高。 但实际情况缺恰恰相反, 驾驶舱才是最应加固的地方, 因为驾驶舱被击中的飞机几乎都没飞回来。“发声”的数据是最好获取的, 但如果没把这些沉默的数据考虑进来, 那么分析结果就不可靠了。



Powered by Jekyll on GitHub | ©2016 Meroa | Last modified: 2021-04-28