1 缺失值产生的原因
机械原因是由于机械原因导致的数据 http://cda.pinggu.org/view/20393.html 收集或保存的失败造成的数据缺失, 比如数据存储的失败, 存储器损坏, 机械故障导致某段时间数据未能收集(对于定时数据采集而言).
人为原因是由于人的主观失误, 历史局限或有意隐瞒造成的数据缺失, 比如, 在市场调查中被访人拒绝透露相关问题的答案, 或者回答的问题是无效的, 数据录入人员失误漏录了数据.
2 缺失值的类型
完全随机缺失 (missing completely at random,MCAR) 指的是数据的缺失是随机的, 数据的缺失不依赖于任何不完全变量或完全变量.
随机缺失 (missing at random,MAR) 指的是数据的缺失不是完全随机的, 即该类数据的缺失依赖于其他完全变量. 完全非随机缺失 (missing not at random,MNAR) 指的是数据的缺失依赖于不完全变量自身.
从缺失值的所属属性上讲, 如果所有的缺失值都是同一属性, 那么这种缺失成为单值缺失, 如果缺失值属于不同的属性, 称为任意缺失. 另外对于时间序列类的数据, 可能存在随着时间的缺失, 这种缺失称为单调缺失.
3 缺失值的处理方法
对于缺失值的处理, 从总体上来说分为删除缺失值和缺失值插补.
3.1 删除含有缺失值的数据
如果在数据集中, 只有几条数据的某几列中存在缺失值, 那么可以直接把这几条数据删除. 但是一般在比赛中, 如果数据中存在缺失值, 那么不能直接将数据整行删除, 这里需要想其他办法处理, 比如填充等
如果在数据集中, 有一列或者多列数据删除, 我们可以将简单地将整列删除.
一般来说, 对于高维数据, 可以通过删除缺失率较高的特征, 可以减少噪音特征对模型的干扰. 但是某种情况下使用 xgb 和 lgb 等树模型训练数据发现, 直接删除缺失严重得的特征会稍微降低预测效果, 因为树模型自己在分裂节点的时候, 会自动选择特征, 确定特征的重要性, 那些缺失严重的特征, 重要性会等于 0. 这就像 L2 正则化一样, 对于一些特征进行惩罚, 使其特征权重等于 0. 所以实验表明, 直接删除缺失严重的特征, 会误删一些对模型有些许效果的特征, 而不删除, 其实对于模型来说, 影响不大.
3.2 可能值插补缺失值
(1)均值插补. 数据的属性分为定距型和非定距型. 如果缺失值是定距型的, 就以该属性存在值的平均值来插补缺失的值; 如果缺失值是非定距型的, 就根据统计学中的众数原理, 用该属性的众数 (即出现频率最高的值) 来补齐缺失的值.
(2)利用同类均值插补. 同均值插补的方法都属于单值插补, 不同的是, 它用层次聚类模型预测缺失变量的类型, 再以该类型的均值插补. 假设 X=(X1,X2...Xp)为信息完全的变量, Y 为存在缺失值的变量, 那么首先对 X 或其子集行聚类, 然后按缺失个案所属类来插补不同类的均值. 如果在以后统计分析中还需以引入的解释变量和 Y 做分析, 那么这种插补方法将在模型中引入自相关, 给分析造成障碍.
(3)极大似然估计(Max Likelihood ,ML). 在缺失类型为随机缺失的条件下, 假设模型对于完整的样本是正确的, 那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin). 这种方法也被称为忽略缺失值的极大似然估计, 对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM). 该方法比删除个案和单值插补更有吸引力, 它一个重要前提: 适用于大样本. 有效样本的数量足够以保证 ML 估计值是渐近无偏的并服从正态分布. 但是这种方法可能会陷入局部极值, 收敛速度也不是很快, 并且计算很复杂.
(4)多重插补(Multiple Imputation,MI). 多值插补的思想来源于贝叶斯估计, 认为待插补的值是随机的, 它的值来自于已观测到的值. 具体实践上通常是估计出待插补的值, 然后再加上不同的噪声, 形成多组可选插补值. 根据某种选择依据, 选取最合适的插补值.
4 参考资料
数据缺失值的 4 种处理方法 http://cda.pinggu.org/view/20394.html
数据科学竞赛总结与分享
机器学习中如何处理缺失数据? https://www.zhihu.com/question/26639110
来源: https://juejin.im/entry/5beed08b6fb9a049d235a1c5