数据预处理是数据化运营过程中的重要环节,它直接决定了后期所有数据工作的质量和价值输出。
数据缺失分类
- 行记录的缺失,又称数据记录丢失
- 数据列值的缺失,即由于各种原因导致的数据记录中某些列的值空缺
不同的数据存储和环境中对于缺失值的表示结果也不同,例如,数据库中是Null,Python返回对象是None,Pandas或Numpy中是NaN。
在极少数情况下,部分缺失值也会使用空字符串来代替,但空字符串绝对不同于缺失值。从对象的实体来看,空字符串是有实体的,实体为字符串类型;而缺失值其实是没有实体的,即没有数据类型。
丢失的数据记录通常无法找回,对于数据列类型缺失值的处理有4种思路。
1、丢弃
直接删除带有缺失值的行记录(整行删除)或者列字段(整列删除),减少缺失数据记录对总体数据的影响。
丢弃意味着会消减数据特征,以下任何一种场景都不宜采用该方法:
- 数据集总体中存在大量的数据记录不完整情况且比例较大,如超过10%,删除这些带有缺失值的记录意味着会损失过多有用信息。
- 带有缺失值的数据记录大量存在着明显的数据分布规律或特征,如带有缺失值的数据记录的目标标签(label),如果删除这些数据记录将使对应分类的数据样本丢失大量特征信息,导致模型过拟合或分类不准确。
2、补全
通过一定的方法将缺失的数据补上,从而形成完整的数据记录,对于后续的数据处理、分析和建模至关重要。
常用的补全方法如下:
- 统计法:对于数值型的数据,使用均值、加权均值、中位数等方法补足;对于分类型数据,使用类别众数最多的值补足。
- 模型法:基于已有的其他字段,将缺失字段作为目标变量进行预测,从而得到最为可能的补全值。如果带有缺失值的列是数值变量,采用回归模型补全;如果是分类变量,则采用分类模型补全。
- 专家补全:对于少量且具有重要意义的数据记录,专家补足是非常重要的一种途径。
- 其他方法:例如随机法、特殊值法、多重填补等。
3、真值转换法
适用于数据缺失是一种规律,不应该轻易对缺失值随意处理。
真值转换法的根本观点:承认缺失值的存在,并且把数据缺失也作为数据分布规律的一部分,将变量的实际值和缺失值都作为输入维度参与后续数据处理和模型计算中。但是变量的实际值可以作为变量值参与模型计算,而缺失值通常无法参与运算,因此需要对缺失值进行真值转换。
使用示例:注册时,用户性别字段有男、女、未知三个选择,这时,很多数据库集都无法对用户的性别进行补足,但又舍不得将其丢弃掉,那么我们将选择将其中的值,包括男、女、未知从一个变量的多个值分布状态转换为多个变量的真值分布状态。
- 转换前:性别(值域:男、女、未知)。
- 转换后:性别_男(值域1或0)、性别_女(值域1或0)、性别_未知(值域1或0)。
4、不处理
考虑后续的数据的处理方法,对于具有缺失值的数据记录不做任何处理。
该思路主要看后期的数据分析和建模应用,很多模型对于缺失值有容忍度或灵活的处理方法,因此在数据预处理阶段可以不做处理,如KNN、决策树、随机森林、神经网络和朴素贝叶斯、DBSCAN等。
这些模型对于缺失值的处理思路是:
- 忽略,缺失值不参与距离计算,例如KNN
- 将缺失值作为分布的一种状态,并参与到建模过程,例如各种决策树及其变体
- 不基于距离做计算,因此基于值的距离做计算本身的影响就消除了,例如DBSCAN
在数据处理的过程中,有时候需要进行降维处理,这时假如我们通过一定方法确定带有缺失值(无论缺少字段的值缺失数量有多少)的字段对于模型的影响非常小,那么我们根本就不需要对缺失值进行处理。因此,后期建模时的字段或特征的重要性判断也是决定是否处理字段缺失值的重要参考因素之一。
数据缺失处理方法选择思路
先通过一定方法找到缺失值,接着分析缺失值在整体样本中的分布占比,以及缺失值是否具有显著的无规律分布特征,然后考虑后续要使用的模型中是否能满足缺失值的自动处理,最后决定采用哪种缺失值处理方法。