1.前言
一些模型的工具包中自带对缺失值的处理,免去了手工补充。然而这种自动化处理方式存在风险,因为模型本身对输入数据并没有深刻的理解,简单粗暴的处理可能影响结果,并影响模型运行时效,尽管它可能能够处理不符合模型要求的输入数据使得运行更为顺滑。
“‘让它出错’(let it fail)。指的是如果程序在运行中出现了错误,应该抛出异常(raise exception)而不是默默地装作没看到继续运行。”
2.模型对缺失值的敏感度
不同模型决定了缺失值填充过的数据是否适用
-
树模型对缺失值敏感度相对低
-
KNN或SVM这样涉及距离度量的算法对缺失值敏感度高
-
线性模型的损失函数也涉及距离计算,对缺失值敏感度高
-
神经网络鲁棒性较好,对缺失值敏感度相对低
-
贝叶斯对缺失值敏感度较低
3.缺失数据的性质
具体填补数据还要取决于数据的性质。
例如,
“年收入”:商品推荐场景下填充平均值,借贷额度场景下填充最小值;
“行为时间点”:填充众数;
“价格”:商品推荐场景下填充最小值,商品匹配场景下填充平均值;
“人体寿命”:保险费用估计场景下填充最大值,人口估计场景下填充平均值;
“驾龄”:没有填写这一项的用户可能是没有车,为它填充为0较为合理;
”本科毕业时间”:没有填写这一项的用户可能是没有上大学,为它填充正无穷比较合理;
“婚姻状态”:没有填写这一项的用户可能对自己的隐私比较敏感,应单独设为一个分类,如已婚1、未婚0、未填-1。
4.缺失值填充方法
4.1 平均值填充(Mean/Mode Completer)
这里的平均值对数值输入类型与非数值输入类型有不同意义。
数值输入类型下,取同类数据的平均值;
非数值类型,取出现频率最高的值。
4.2 条件平均值填充法(Conditional Mean Completer)
这种填充方法更为精细,比起选择同类数据,它将选择更多属性相似的输入列数据作均值计算。
4.3 热卡填充/就近补齐(Hot deck imputation)
热卡填充法将在完整数据中找到一个与它最相似的对象,再找到缺失的那列数据填补自己。
但找到相似对象本身就是一个难以取舍的问题。
4.4 临近值填补
这种方法其实是给了缺失值一个随机值,这样的处理可以让数据通过模型顺利运行,适合对缺失值不敏感的模型。
4.5 K最近距离邻法(K-means clustering)
这种方法比热卡填充考虑更多的样本。它用欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。
但是这样计算的代价很大。
4.6 组合完整化方法(Combinatorial Completer)
用空缺属性值的所有可能的属性取值来试,并从最终属性的约简结果中选择最好的一个作为填补的属性值。这是以约简为目的的数据补齐方法,能够得到好的约简结果;
但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大。
4.7 回归拟合(Regression)
对完整的数据集建立回归方程,
对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。
但如果变量不是线性的,将导致估计偏差。
4.8 期望值最大化方法(Expectation maximization,EM)
EM算法将在不完全数据的情况下计算极大似然估计或者后验分布。
EM在每一迭代循环过程中交替执行两个步骤:
E步(Excepctaion step,期望步),在给定完全数据和前一次迭代所得到的参数估计的情况下计算完全数据对应的对数似然函数的条件期望;
M步(Maximzation step,极大化步),用极大化对数似然函数以确定参数的值,并用于下步的迭代。
EM在E步和M步之间不断迭代直至收敛,即两次迭代之间的参数变化小于一个预先给定的阈值时结束。
然而,该方法可能会陷入局部极值,收敛速度也不是很快,并且计EM算很复杂。
4.9 不处理
当干涉缺失数据,它可能会影响一些对缺失值敏感度高的模型,所以此时可以不处理数据,尽管不一定能通过运行。
4.10 特殊值填充
有时为空的数据可能也隐含一定信息,所以将空值视作一种特殊值,将它考虑为不同于其他值的意义。比如填充为UNK。