1.3 数据质量问题与预处理

数据质量要求数据是完整的和真实的,并且具有一致性和可靠性。在数据分析过程中,高质量的数据更容易具有较高的区分度。相反,在数据分析领域,有一个著名的“垃圾进,垃圾出”结论,如果数据具有较多缺失值、异常值和无效记录,那么依此数据建立的模型在实际应用中将无法保证其结果真实和有效,数据预处理占用整个数据挖掘项目60%的工作量,目标就是保证输入模型的数据是符合业务实际情况的,基于正确的数据,才可以谈模型的选择和应用。

1.数据量较少

数据挖掘需要有一定的数据量作为支撑,随着数据量的增多,其中的规律越发明显,也更容易发现其中分析目标相关的因素,特别是在神经网络或深度学习等算法中,其前提条件就要求有大量的训练数据,否则就容易引起模型过拟合的问题。

数据分析过程中一般要将样本划分为训练集、验证集、测试集,如果数据量较少,可以只需要训练集和测试集,其中训练集的数据量一般为50%~80%。在某些数据质量较高、区分度较明显的业务场景中,数据量可以更少,一般来说,数据量是自变量数量的10~20倍为佳。

在数据的数量足够多的情况下,还要关注数据的质量,如果给定的数据虽然较多,但其中样本的覆盖范围较少,与分析目标相关维度的数据数量才是关键的,否则最终分析得到的结论可能会有较大的局限,不能完全反映数据的本质。

2.数据量过多

数据集中数量过多时,对全部数据集进行分析要耗费更多的计算资源,要求硬件配置较高,并且由于数据中各类数据的比例往往是不平衡的,例如,两家公司的产品销售的开始时间点并不一致,其销量相差悬殊,如果直接应用到模型中进行竞争分析,则可能出现较大的结果误差,这种情况可以应用数据采样技术随机提取样本子集。

在面对海量的同质化数据时,如商品交易数据,可以通过聚集技术按照时间、空间等属性进行平均值等汇总,减少数据数量,由于采用了统计汇总后的数据,结果的可视化层次更高,也更加稳定,缺点是可能存在细节丢失的情况。

另外一种情况是在小概率事件的处理中需要关心数据集的不平衡问题。例如,在车辆运行异常检测时,车辆正常运行的时间远超过出现故障的时间,所以正常的数据量占了绝大多数,异常数据量极少,或者是在广告点击事件、地震检测、入侵检测、垃圾邮件过滤等这类稀有事件的分析中,要对数据集应用采样技术,或对异常数据进行复制,提高其占比。

3.维度灾难

当数据中的自变量较多时,会出现维度灾难问题,特别是在矩阵数据中,其中冗余变量占比较高时,可用数据变成稀疏矩阵,在分类算法处理时就没办法可靠地进行类别划分,在聚类算法中则容易使聚类质量下降,为了从中获得稳定的分析结果,需要耗费大量的运算时间,分析过程低效,为了应对此问题,可以采用线性代数的相关方法将数据从高维空间影射到低维空间中,其中主成分分析(PCA)、奇异值分解(SVD)等方法比较常用。

下面通过对信用卡消费行为与是否存在欺诈进行分析,来展示PCA的主要用法。信用卡用户消费统计记录如图1.2所示,其中包括了卡类别、日均消费金额、日均次数等消费行为统计后的结果值,还包括用户的属性信息,如性别、年龄、职业等,排除目标字段,共有19个输入变量可供选择。

图1.2 信用卡用户消费统计记录

在SPSS Modeler中应用主成分分析/因子节点对数据进行降维,选择日均消费金额等9个字段作为输入,以70%训练集、30%测试集的比例进行分区,选择“专家”模式,参数为默认值,运行后的主要结果如图1.3所示。

在总方差解释表中,前4个变量的初始特征值大于1,分别为日均消费金额、日均次数、单笔消费最低、单笔消费最高,这4项累积占全部变量的84.507%,也符合主成分的80%以上的标准,说明这4项作为输入变量比较合理。

降低维度的另一种方法是通过特征子集选择的方式,将那些不相关的特征,如身份证号、姓名等剔除,只选择与目标变量紧密相关的特征。除了剔除属性,还可以使用特征加权技术,结合领域知识人为赋予某些特征更大的影响力权重。

在深度学习领域,常用特征提取和特征创建的技术将原始数据中的特征进行重构,以获得模型需要的特征,并且在重构过程中加以格式转换和数据变换。常用的技术包括傅里叶变换和小波变换,前者将时域信号转化为频域信号,后者主要处理时间序列等类型。

4.数据不完整

除了数据量要多,还要求数据的种类要多。例如,要对企业产品的销售情况进行分析或预测,除了需要有企业产品相关的市场、销售情况等信息外,还需要有客户相关资料、竞品的销售情况、市场数据、财务数据等,甚至要有交通物流、CPI等宏观数据支持,但是现实情况中,很多数据缺失,要么这些数据并没有进行记录,要么它们在竞争对手的系统中,无法获得,这种情况将直接影响数据挖掘方法的选择,此时可以通过编写程序,来抓取外部数据作为补充。

图1.3 PCA主成分分析结果示例

数据缺失也是数据不完整的一种表现,可能是空白值或空值,也可能是存在大量的无效值,例如,所有记录的某一字段值均相同,或者某一字段中超过一半的记录为空或无效,在出现数据缺失时,分析人员要查找缺失原因,是原信息录入系统缺陷,还是人为操作失误,或者字段为选填等业务原因,并按照不同的原因进行数据预处理。例如,由于系统Bug导致的,则需要修复Bug并重新计算,如果当前字段中的数值是随时间逐渐生成的,则为业务原因,需要结合实际业务进行处理。

对缺失值可以采用众数、中位数、均值、最近距离等方法对缺失值进行人为补充,或者也可以通过回归或贝叶斯定理等预测缺失值。为了提高数据的纯度,也可以删除含有缺失值的记录,但如果缺失值的记录数较多时,删除操作可能会丢失样本特征,此时可以删除对应的字段,对于缺失值超过30%的字段,可不作为模型输入变量。

5.异常数据

在数据收集阶段由于人为或系统处理等原因,会导致产生异于常规的数据。其中异常数据分为两类:一类是错误的数据;另一类为小概率事件,或称为稀有事件。在系统预处理阶段要视情况对数据进行探索,并结合行业内的业务知识对其进行识别,一旦发现错误数据,则将其剔除或修正。对于稀有事件,如信用卡欺诈行为、垃圾邮件等,这类正常数据不但不能修正和删除,反而要重点分析其特征。

通过查看散点图或箱图的方式查看离群点信息,如图1.4所示,可以看到方框中的年收入达到21亿元,已经超过绝大多数人的收入范围,极有可能为异常数据。还可基于距离或统计模型等进行检测,如应用线性回归、主成分分析等方式来区分异常数据,除此之外,还可应用深度学习(如RNN方法)来检测。

图1.4 通过散点图查看离群点

当异常数据并非在离群点时,没有显著异常,可能是由于人为输入错误或系统误差导致的,虽然这些数值是不正确的,但是由于其与真实值之间区分较少,所以较难发现这类噪声数据。可以通过抽样的方式进行人工检测,或者对比不同数据源系统中的数据,进行一致性检测。

6.重复数据

在数据分析中如果出现较多的重复数据,将对模型的结果产生误差,在数据处理过程中可以使用SQL或Excel中的去重复方法将重复数据滤除。有时候在记录中所有字段都是非重复数据,但选择其中部分字段时则容易产生重复样本,即样本子集中含有重复数据,特别是手动选取某几个字段作为模型输入时,容易忽略这一细节,所以,在将其应用到模型之前,需要进行过滤,将重复数据滤除。在SPSS中可以使用“区分”节点,对选择的自变量进行去重。利用“区分”节点去重复如图1.5所示。

图1.5 利用“区分”节点去重复

在模式中选择“每组仅包括首个记录”,其他重复的记录将滤除,用于分组的字段即为流向下一节点的变量,只有日均消费金额等4个字段中的值均为重复时,才会被滤除。

7.数据不一致

随着数据源的增多,不同数据源中不同结构类型的数据可能会产生冲突,导致数据不一致或相互矛盾,也可能是由于名称或标识不同导致的,例如,中文和英文表示同一对象,或由于变量的统计口径不同导致。在数据处理中需要对其进行筛选,结合实际业务选择正确的数据,例如,对不同数据源的数据进行优先级标记,出现不一致的情况时优先使用某一数据源的样本。

数据不一致的另一个表现是记录中某些字段不符合规范,使其与数据逻辑之间存在不一致,可以按照数据使用规范建立合法性检测的规则,以此对数据进行验证。

对数据进行评估,主要是对数据的准确性、完整性、一致性等维度找出样本存在的问题,应用SPSS中的数据审核节点,可以查看相关异常情况。图1.6是数据审核节点的审核结果。从图1.6可以看到各自变量的类型及数据分布情况,以及极值、平均值、标准差、偏度、类别数(非连续型变量)、有效的记录数。其中,偏度用于对分布的不对称性进行度量。在变量中,数据呈正态分布时是对称的,所以其偏度值为0。具有显著正偏度值的分布有很长的右尾。负偏度的分布有很长的左尾。当偏度值超过标准差的2倍时,则认为此变量不具有对称性。

图1.6 数据审核节点的审核结果

在“质量”选项卡中查看数据质量,如图1.7所示,可以看到字段的完整性和完整记录比例,以及空值、字符型空值、空白、空白值、离群值、极值的数量等。

由于数据审核节点为输出节点,无法直接进行输出,但在SPSS Modeler中可以将数据审核节点生成数据准备节点向后传递,并设计数据验证规则、基准和偏度值等指标,其将对异常数据进行标记,使得向后传递的数据保持较高的质量。

图1.7 数据审核节点中数据质量结果

多重共线性是指多个自变量之间存在线性相关,当出现共线性问题时,模型的参数会变得不稳定,其预测结果的准确性大打折扣。多重共线性的检测分为视觉观察和定量分析两种方式,前者可使用交叉散点图来透视N维样本数据可能存在的问题,后者可使用回归分析的方法对共线性进行诊断。

输入变量为年龄、工作年限、年收入,为了方便查看各维之间的关系,在SPSS中使用图形板工具,选择散点图矩阵(SPLOM)作为可视化类型,运行之后可以直观看到工作年限与年龄呈现线性相关性,如图1.8所示。

图1.8 散点图矩阵透视数据

通过可视化的方式查找变量之间的共线性问题,只是初步的诊断,为了量化分析各变量之间是否存在较强的共线性问题,现在使用线性回归分析来检验,在回归分析的属性中以年收入为目标变量,以年龄、工作年限为输入,启用专家模式,并在输出中选中“共线性诊断”复选框,如图1.9所示。

图1.9 回归分析检测共线性问题

运行回归分析之后,在模型结果的“高级”选项卡中查看共线性诊断结果,如图1.10所示,查看其条件指标发现第3维变量的条件指标达到13.489(>10)了,说明年龄与工作年限确实存在线性相关。

图1.10 回归分析诊断结果

在输入变量较多的情况下(本例中只有2个变量),发现共线性变量后,将其剔除之后重新运行回归分析检验是否存在共线性问题,如果仍然存在,则继续排除字段,直到共线性问题不再出现。