发布时间: 2019-11-24 16:55:16
在实际业务中,不可避免的会出现数据缺失的现象,总结下来大致有如下几种情形。
Ø人为疏忽、机器故障等客观因素导致信息缺失。
Ø人为刻意隐瞒部分数据。比如在数据表中,有意将一列属性视为空值,此时缺失值就可看作是一种特殊的特征值。
Ø数据本身不存在,比如银行做用户信息收集时,对学生群体来说工资这一属性不存在,因此在数据表里显示为空值。
Ø系统实时性能要求较高。
Ø历史局限性导致数据收集不完整。
机器学习里有一句名言:数据和特征决定了机器学习的上限,而模型和算法的应用只是逼近这个上限。因此高质量的数据对建立好的数据模型有着至关重要的作用。
数据集中缺少部分数据可以降低模型过拟合机率,但也存在模型偏差过大的风险,因为没有正确地分析变量的行为和关系,从而导致错误的预测或分类。
数据缺失原因多种多样,针对不同的缺失原因,数据缺失值的处理方式也各不相同。值得注意的是,有时属性缺失并不意味着数据缺失,比如,银行收集客户信息时,学生在“工资”这一栏为空值。缺失本身是包含有价值的信息的。因此要结合具体业务场景、数据场景选择合适的数据缺失值处理方式。
缺失值处理方法众多,总结下来为三种:
Ø删除
Ø填充
Ø不处理
适用范围 | 适用于数据量大,数据缺失值少的数据集。 完全随机缺失时可直接使用删除操作。 | |
方法 | 删除 | 直接删除包含缺失值的元组或记录。 |
80%法则 (属性删除) | 80%法则 (Bijlsma et al. 2006) 认为,当某一物质的非缺失部分低于总样本量的80%时,建议删除该物质。因此,在数据集中,缺失值超过总量的20%时,理论上可删除该变量或属性。 | |
优点 | 操作简单 | |
缺点 | 直接删除会丢失部分原始数据,破坏数据的历史完整性。 数据缺失占比较多时,直接删除可能会改变原始数据的分布情况。 降低模型准确性。 | |
操作 | 利用Python中的pandas的dropna函数直接删除有缺失值的特征。 |
基于统计学原理,根据初始数据集中非缺失对象取值的分布情况来对一个缺失值进行填充。
填充方式包含人工填充、特殊值填充、平均值填充、热卡填充、KNN、预测模型、组合完整化方法等。
本节只详细介绍
n填充
nKNN
n回归
n变量映射
n其他详细信息见“更多信息”。
补齐的缺失值毕竟不是原始数据,不一定符合客观事实。对数据的填充在一定程度上改变了数据的原始分布,也不排除加入了噪音节点的可能性。
因此,对于一些无法应对缺失值的模型,可以用缺失值填充的方式补齐缺失数据。但有些模型本身可以容忍一定的数据缺失情况,此时可以选择不处理的方式,比如Xgboost模型。
上一篇: 大数据如何应用在智慧城市中?