数据的缺失主要包含记录的缺失和记录中某个字段的缺失,两者都会造成分析结果的不准确。以下将从缺失值产生的原因、缺失值产生的影响、缺失值的类型以及缺失值处理三个方面展开分析。
1. 缺失值产生的原因
- 信息暂时无法获取。
如商品售后评价、双十一的退货商品数量和价格等具有滞后效应; - 信息被遗漏。
可能是因为输入时认为不重要、忘记填写了或对数据理解错误而遗漏,也可能是由于数据采集设备的故障、存储介质的故障、传输媒体的故障、一些人为因素等原因而丢失。 - 属性值不存在。
在某些情况下,缺失值并不意味着数据有错误。对一些对象来说某些属性值是不存在的,如一个未婚者的配偶姓名,一个儿童的固定收入。 - 获取这些信息的代价太大。
如统计某市所有学生每个月的生活费或者所有家庭实际收入等等。
2. 缺失值产生的影响
- 数据挖掘建模中将丢失大量的有用信息;
- 数据挖掘建模中所表现的不确定性更加显著,模型中蕴含的规律难以把握;
- 包含空值的数据会使建模过程陷入混乱,导致不可靠的输出;
3. 缺失值的类型
在对缺失数据进行处理前,了解数据缺失的机制和形式是十分必要的。将数据集中不含缺失值的变量称为完全变量,数据集中含有缺失值的变量称为不完全变量。从缺失的分布来将缺失可以分为完全随机缺失,随机缺失和完全非随机缺失。
完全随机缺失(missing completely at random,MCAR):指的是数据的缺失是完全随机的,不依赖于任何不完全变量或完全变量,不影响样本的无偏性。如家庭地址缺失;
随机缺失(missing at random,MAR):指的是数据的缺失不是完全随机的,即该类数据的缺失依赖于其他完全变量。例如财务数据缺失情况与企业的大小有关;
非随机缺失(missing not at random,MNAR):指的是数据的缺失与不完全变量自身的取值有关。如高收入人群的不原意提供家庭收入。
分析缺失的类型必须与实际业务结合,不可随意笃定。
对缺失值的处理,我们要具体问题具体分析,为什么要具体问题具体分析呢?因为属性缺失有时并不意味着数据缺失,缺失本身是包含信息的,所以需要根据不同应用场景下缺失值可能包含的信息进行合理填充。下面通过一些例子来说明如何具体问题具体分析,仁者见仁智者见智,仅供参考:
在银行贷款违约预测中有几列特征是用户的房屋信息情况,发现有部分用户的这几列房屋信息全都是空的,缺失情况完全一致,一旦缺失就是全缺。对于这种缺失情况,可以在做出的假设是这些用户没有房子所以才没有填写房子信息,那么这些没有房子的用户会不会更容易违约(财务状况可能差)?基于这个假设,就可以新建一列代表用户有没有缺失房屋信息的特征,这个特征加进模型后发现模型预测有提高,缺失值为我们提供了信息。
如果特征缺失的比例不大,常见的做法是可以对缺失值进行填充。对于连续型变量可以用均值、中位数等填充,对离散型变量可以对缺失值单独赋值,或者使用最多的那个值填充。举个例子来说,现在有10个用户,7个来自北京、2个来自上海、1个缺失。对于这个缺失的用户,我们可以给它的值为“未知”、或者用最多的“北京”填充。
3. 缺失值处理
处理缺失值的方法可以分为三类:删除记录、数据插补和不处理。
- 删除记录
比如某些情况,缺失值可能就是纯粹的随机缺失,没有特别的规律。如果某一个特征缺失值过多,达到80%以上,那么这一列特征可以考虑直接删除。 - 数据插补
插补方法 | 方法描述 |
---|---|
均值/中位数/众数插补 | 根据属性的类型,用该属性取值得平均值/中位数/众数插补举个例子来说,现在有10个用户,7个来自北京、2个来自上海、1个缺失。对于这个缺失的用户,我们可以给它的值为“未知”、或者用最多的“北京”填充。 |
使用固定值 | 将缺失的属性值用一个常量替换。比如广州一个工厂的普通外来务工人员的基本工资属性的空缺值可以用该年广东普通外来务工人员工资标准1895元/月替换 |
最近邻插补 | 在记录中找到与缺失样本最接近的样本的该属性值插补 |
回归方法 | 对带有缺失值的变量,根据已有的数据和与其有关的其他变量(因变量)的数据建立拟合模型来预测确实值的属性值 |
插值法 | 插值法是利用已知点建立合适的插值函数f(x),未知值由对应点xi求出函数值f(xi)近似代替。比如拉格朗日插值法 |
- 不处理:
不处理缺失值,直接在包含空值的数据上进行数据挖掘的方法包括贝叶斯网络和人工神经网络等。
补齐处理只是将未知值补以我们的主观估计值,不一定完全符合客观事实,在对不完备信息进行补齐处理的同时,我们或多或少地改变了原始的信息系统。而且,对空值不正确的填充往往将新的噪声引入数据中,使挖掘任务产生错误的结果。因此,在许多情况下,我们还是希望在保持原始信息不发生变化的前提下对信息系统进行处理。
贝叶斯网络提供了一种自然的表示变量间因果信息的方法,用来发现数据间的潜在关系。在这个网络中,用节点表示变量,有向边表示变量间的依赖关系。贝叶斯网络仅适合于对领域知识具有一定了解的情况,至少对变量间的依赖关系较清楚的情况。否则直接从数据中学习贝叶斯网的结构不但复杂性较高(随着变量的增加,指数级增加),网络维护代价昂贵,而且它的估计参数较多,为系统带来了高方差,影响了它的预测精度。
人工神经网络可以有效的对付缺失值,但人工神经网络在这方面的研究还有待进一步深入展开。
参考文献
参考链接1
[参考文献2]张良均. Python数据分析与挖掘实战[M]. 机械工业出版社, 2016.