
4.3 数据预处理
4.3.1 为什么需要数据预处理
数据挖掘中使用的数据基本上是来自生产、生活、商业中的实际数据,在现实世界中,由于各种原因,数据总是有这样或那样的问题。从4.1.6节中获取的数据可以看出,有相当多的变量含有无效的取值。实际采集到的数据往往存在缺失某些重要数据、不正确或含有噪声、不一致等问题,也就是说数据的质量的三个要素(准确性、完整性和一致性)都很差。存在不正确、不完整和不一致的数据是现实世界的大型数据库和数据仓库的共同特点。出现不正确的数据(具有不正确的属性值)可能有多种原因:收集数据的设备可能出现故障;输入错误数据;当用户不希望提交个人信息时,可能故意向强制输入字段输入不正确的值(例如,为生日选择默认值“1月1日”),这称为被掩盖的缺失数据。错误也可能在数据传输中出现,这些可能是由技术的限制导致的。不正确的数据也可能是由命名约定或所用的数据代码不一致,或输入字段(如日期)的格式不一致导致的。
影响数据质量的另两个因素是可信性和可解释性。可信性反映有多少数据是用户信赖的,而可解释性反映数据是否容易理解。假设在某一时刻数据库有一些错误,之后都被更正。然而,过去的错误已经给量化投资部门造成了问题,因此他们不再相信这些数据。有些数据还使用了许多编码方式,量化分析人员并不知道如何解释它们。即便该数据库现在是正确的、完整的、一致的、及时的,但是由于其可信性和可解释性很差,其数据质量仍然可能被认为很低。
总之,现实世界的数据质量很难让人满意,甚至是很差的,原因有很多。但并不需要多关注数据质量差的原因,只需关注如何让数据质量更好,也就是说如何对数据进行预处理,以提高数据质量,满足数据挖掘的需要。
4.3.2 数据预处理的主要任务
数据预处理的主要任务有数据清洗、数据集成、数据归约和数据变换,如图4-12所示。

图4-12 数据预处理的内容
(1)数据清洗是通过填充缺失的值、光滑噪声数据、识别或删除离群点、解决不一致性等方式来“清洗”数据的。如果用户认为数据是“脏”的,则他们可能不会相信这些数据的挖掘结果。此外,脏数据可能使挖掘过程陷入混乱,导致不可靠的输出。
(2)数据集成是指把不同来源、格式、性质的数据在逻辑上或物理上有机地集中,以更方便地进行数据挖掘工作。数据集成通过数据交换来实现,主要解决数据的分布性和异构性的问题。数据集成的程度和形式也是多种多样的,对于小项目,如果原始的数据存在于不同的表中,那么数据集成的过程往往是根据关键字段将不同的表集成到一个或几个表中;而对于大项目,则有可能需要集成到单独的数据仓库中。
(3)由数据归约可得到数据集的简化表示,虽然简化了,但能够产生同样的(或几乎同样的)分析结果。数据归约策略包括维归约和数值归约。在维归约中,使用减少变量的方案,以便得到原始数据的简化或“压缩”表示。比如,采用主成分分析技术减少变量,或通过相关性分析去掉相关性小的变量。数值归约主要指通过样本筛选减少数据量,这也是常用的数据归约方案。
(4)数据变换是将数据从一种表现形式变换为另一种表现形式的过程。假设用户决定使用诸如神经网络、最近邻分类或聚类这样的基于距离的挖掘算法进行建模或挖掘,如果待分析的数据已经规范化,即按比例映射到一个较小的区间(如[0.0,1.0]),则这些方法将得到更好的结果。问题是往往各变量的标准不同,数据的数量级差异比较大。在这种情况下,如果不对数据进行转换,显然模型反映的主要是大数量级数据的特征,所以,通常还要根据需要灵活地对数据进行转换。
虽然数据预处理主要分为上述4个方面的内容,但它们之间并不是互斥的。例如,冗余数据的删除既是一种数据清理形式,也是一种数据归约。总之,现实世界的数据一般是脏的、不完整的和不一致的。数据预处理技术可以改进数据的质量,有助于提高随后挖掘过程的准确率和效率。由于高质量的决策必然依赖于高质量的数据,因此数据预处理是知识发现过程的重要步骤。
4.3.3 数据清洗
数据清洗的主要任务是填充缺失值和去除数据中的噪声。
1. 缺失值处理
对于缺失值的处理,不同的情况下其处理方法也不同。总的说来,缺失值处理的方法可概括为删除法和插补法(或称填充法)两类。
1)删除法
删除法是对缺失值进行处理的最原始的方法,即将存在缺失值的记录删除。如果数据缺失问题可以通过简单地删除小部分样本来解决,那么这个方法是最有效的。虽然因为删除了非缺失信息,损失了部分样本,削弱了统计功效,但是当样本量很大而缺失值所占样本比例较小(<5%)时,可以考虑使用此法。
2)插补法
插补法的思想是以最可能的值来插补缺失值,比删除不完全样本丢失的信息要少。在数据挖掘中面对的通常是大型的数据库,它的属性有几十个甚至几百个,因为一个属性值的缺失而放弃大量的其他属性值,这种删除是对信息的极大浪费,所以产生了以可能值对缺失值进行插补的想法。常用的插补法有如下几种。
(1)平均值插补。根据数据的属性可将数据分为定距型和非定距型。如果缺失值是定距型的,就以该属性存在值的平均值来插补缺失的值;如果缺失值是非定距型的,就根据统计学中的众数原理,用该属性的众数(出现频率最高的值)来补齐缺失的值;如果数据符合较规范的分布规律,则还可以用中值插补。
(2)回归插补,即利用线性或非线性回归技术得到的数据来对某个变量的缺失数据进行插补。
图4-13给出了回归插补、平均值插补、中值插补等插补法的缺失值处理方式示意图,从图中可以看出,采用不同的插补法插补的数据略有不同,还需要根据数据的规律选择相应的插补方法。

图4-13 几种插补法的缺失值处理方式示意图
(3)极大似然估计(Max Likelihood,ML)。在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布就可以对未知参数进行极大似然估计。这种方法也称为忽略缺失值的极大似然估计,对于极大似然估计,实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它的一个重要前提是适用于大样本。必须有足够的有效样本才能保证极大似然估计值是渐近无偏的并服从正态分布。
需要注意的是,在某些情况下,缺失值并不意味着数据有错误。例如,在申请信用卡时,可能要求申请人提供驾驶执照号。没有驾驶执照的申请者自然不填写该字段。表格应当允许填表人使用诸如“不适用”等值。理想情况下,每个属性都应当有一个或多个关于空值条件的规则。这些规则可以说明是否允许空值,并且说明这样的空值应该如何处理或转换。如果在业务处理的稍后步骤提供值,某些字段也可能故意留下空白。因此,尽管在得到数据后,用户可以尽其所能来清理数据,但好的数据库和数据输入设计将有助于在第一现场把缺失值或错误的数量降至最低。
2. 噪声过滤
噪声即数据中存在的数据随机误差。噪声数据的存在是正常的,但会影响对变量真值的反映,所以有时也需要对这些噪声数据进行过滤。目前,常用的噪声过滤方法有回归法、均值平滑法、离群点分析法和小波去噪法。
1)回归法
回归法是用一个函数拟合数据来光滑数据的。利用线性回归可以得到两个属性(或变量)的最佳直线,使得一个属性可以用来预测另一个属性。多元线性回归是线性回归的扩充,其中涉及的属性多于两个。这里使用回归法来去除数据中的噪声,即使用回归后的函数值来代替原始的数据,从而避免噪声数据的干扰,如图4-14所示。回归法首先依赖于对数据趋势的判断,符合线性趋势的数据才可以用回归法,所以往往需要先对数据进行可视化,判断数据的趋势及规律,然后确定是否可以用回归法去噪。

图4-14 回归法去噪示意图
2)均值平滑法
均值平滑法是指对于具有序列特征的变量用邻近的若干数据的均值来替换原始数据的方法。对于具有正弦时序特征的数据,利用均值平滑法对其噪声进行过滤,如图4-15所示。从图4-15中可以看出,去噪效果还是很显著的。均值平滑法类似于股票中的移动均线,如5日均线、20日均线。

图4-15 均值平滑法去噪示意图
3)离群点分析法
离群点分析法是通过聚类等方法来检测离群点,并将其删除,从而实现去噪的方法。直观上,落在簇集合外的值被视为离群点。
4)小波去噪法
在数学上,小波去噪问题的本质是一个函数逼近问题,即如何在由小波母函数伸缩和平移展成的函数空间中,根据提出的衡量准则,寻找对原信号的最佳逼近,以完成原信号和噪声信号的区分。也就是寻找从实际信号空间到小波函数空间的最佳映射,以便得到原信号的最佳恢复。从信号学的角度看,小波去噪是一个信号滤波的问题,而且尽管在很大程度上小波去噪可以看成低通滤波,但是由于在去噪后还能成功地保留信号特征,所以在这一点上其又优于传统的低通滤波。由此可见,小波去噪实际上是特征提取和低通滤波功能的综合。图4-16为小波去噪效果示意图。

图4-16 小波去噪效果示意图
4.3.4 数据集成
数据集成就是将若干个分散的数据源中的数据,逻辑地或物理地集成到一个统一的数据集合中。数据集成的核心任务是将互相关联的分布式异构数据源集成到一起,使用户能够以更透明的方式访问这些数据源。集成是指维护数据源整体上的数据一致性,提高信息共享利用的效率;透明的方式是指用户无须关心如何实现对异构数据源数据的访问,只关心以何种方式访问何种数据。实现数据集成的系统称为数据集成系统,它为用户提供统一的数据源访问接口,执行用户对数据源的访问请求。
数据集成的数据源广义上包括各类XML文档、HTML文档、电子邮件、普通文件等结构化、半结构化信息。数据集成是信息系统集成的基础和关键。好的数据集成系统要保证用户以低代价、高效率使用异构的数据。
常用的数据集成方法有联邦数据库、中间件集成方法和数据仓库方法。这些方法都是倾向于构建数据库系统的方法。从数据挖掘的角度来讲,分析人员更倾向于直接获得某个数据挖掘项目需要的数据,而不是构建IT系统。当然数据库系统集成度越高,数据挖掘的执行也就越方便。实际上,在更多的情况下,由于时间、周期等因素的制约,数据挖掘的实施往往只利用现有可用的数据库系统,也就是说在更多的情况下,只考虑某个数据挖掘项目如何实施。从这个角度来讲,对某个数据挖掘项目,数据集成主要是指数据的融合,即数据表的集成。对于数据表的集成,主要有内接和外接两种方式,如图4-17所示。究竟如何拼接,则需要具体问题具体分析。

图4-17 数据表的集成示意图
4.3.5 数据归约
用于分析的数据集可能包含数以百计的属性,其中大部分属性可能与数据挖掘任务不相关,或者是冗余的。尽管该领域专家可以挑选出有用的属性,但这可能是一项困难而费时的任务,特别是当数据的行为不是十分清楚时更是如此。遗漏相关属性或留下不相关属性都可能影响数据挖掘的结果,会导致所用的挖掘算法无所适从。此外,不相关或冗余的属性也增加了数据量。
数据归约的目的是得到能够与原始数据集近似等效,甚至更好,但数据量较少的数据集。这样,对归约后的数据集进行挖掘将更有效,且能够产生与原数据集相同(或几乎相同)的挖掘效果。
数据归约策略较多,但从数据挖掘角度来讲,常用的策略是属性选择和样本选择。
属性选择是通过删除不相关或冗余的属性(或维)来减少数据量。属性选择的目标是找出最小属性集,使得数据类的概率分布尽可能地接近使用所有属性得到的原分布。此外,在缩小的属性集上挖掘还有其他优点:减少了出现在发现模式上的属性数目,使得模式更易于理解。究竟如何选择属性,主要看属性与挖掘目标的关联程度及属性本身的数据质量好坏,根据数据质量评估的结果,可以删除一些属性。在利用数据相关性分析、数据统计分析、数据可视化和主成分分析技术时还可以删除一些属性,最后留下更好的属性。
样本选择也就是上述介绍的数据抽样,与其所用的方法一致。在数据挖掘过程中,对样本的选择不是在收集阶段完成的,而是有一个逐渐筛选、逐级抽样的过程。
在数据收集和准备阶段,数据归约通常用最简单直观的方法,如直接抽样或直接根据数据质量分析结果删除一些属性。在数据探索阶段,随着对数据理解的深入,将会进行更细致的数据抽样,这时用的方法也会复杂些,如相关性分析和主成分分析,这两种方法将在第5章(数据的探索)中详细介绍。
4.3.6 数据变换
数据变换是指将数据从一种表现形式变换为另一种表现形式的过程。常用的数据变换方式是数据的标准化、数据的离散化和语义转换。
1. 数据的标准化
数据的标准化是将数据按比例缩放,使之落入一个小的特定区间。数据的标准化在某些用于比较和评价的指标的处理中经常会用到,如去除数据的单位限制,将其转化为无量纲的纯数值,便于将不同单位或量级的指标进行比较和加权。其中,最典型的就是0-1标准化和Z标准化。
1)0-1标准化(0-1 Normalization)
0-1标准化也称为离差标准化,是指对原始数据进行线性变换,使结果落到[0,1]区间,转换函数如下:

式中,max为样本数据的最大值,min为样本数据的最小值。这种方法有一个缺陷,即当有新数据加入时,可能导致max和min发生变化,需要重新定义max和min。
2)Z标准化(Zero-Mean Normalization)
Z标准化也称为标准差标准化,经过Z标准化处理的数据符合标准正态分布,即均值为0,标准差为1。Z标准化也是最为常用的标准化方法,其转化函数为:

式中,μ为所有样本数据的均值,σ为所有样本数据的标准差。
2. 数据的离散化
数据的离散化指把连续型数据切分为若干“段”,是数据分析中常用的手段。有些数据挖掘算法,特别是某些分类算法,要求数据是分类属性形式的。这样,常常需要将连续属性变换成分类属性,即进行离散化。此外,如果一个分类属性具有大量不同的值(类别),或者某些值出现不频繁,则对于某些数据挖掘任务,可以合并某些值从而减少类别的数目。
在数据挖掘中,离散化得到普遍采用。究其原因,有如下几点。
(1)算法需要。例如,决策树、朴素贝叶斯等算法不能直接使用连续型数据,连续型数据只有经离散处理后才能进入算法引擎。这一点在使用具体软件时可能不明显,因为大多数数据挖掘软件已经内建了离散化处理程序,所以从使用界面看,软件可以接纳任何形式的数据。但实际上,在运算决策树或朴素贝叶斯模型前,软件都要在后台对数据进行预处理。
(2)离散化可以有效地克服数据中隐藏的缺陷,使模型结果更加稳定。例如,数据中的极端值是影响模型效果的一个重要因素。极端值导致模型参数过高或过低,或导致模型被虚假现象“迷惑”,把原来不存在的关系作为重要模式来学习。而离散化,尤其是等距离散,可以有效地减弱极端值和异常值的影响。
(3)离散化有利于对非线性关系进行诊断和描述。对连续型数据进行离散处理后,自变量和目标变量之间的关系变得清晰。如果两者之间是非线性关系,则可以重新定义离散后变量每段的取值,如采取0-1的形式,由一个变量派生出多个亚变量,分别确定每段和目标变量间的联系。这样做,虽然减少了模型的自由度,但可以大大提高模型的灵活度。
数据离散化通常是将连续型变量的定义域根据需要按照一定的规则划分为几个区间,同时对每个区间用一个符号来代替。比如,在定义好坏股票时,就可以用数据离散化的方法来刻画股票的好坏。如果以当天的涨幅属性来定义股票的好坏,将股票分为5类(非常好、好、一般、差、非常差),且每类用1~5中的一个数字来表示,就可以用如表4-5所示的方式将股票的涨幅这个属性进行离散化。
表4-5 变量离散化方法

对数据进行离散化处理不免要损失一部分信息。很显然,对连续型数据进行分段后,同一段内的观察点之间的差异便消失了,所以是否进行离散化还需要根据业务、算法等因素综合考虑。
3. 语义转换
对于某些属性,其属性值是由字符型数据构成的,如果上述这个属性为“股票类别”,其构成元素是{非常好、好、一般、差、非常差},则在数据挖掘过程中非常不方便操作,且会占用更多计算机资源。所以通常用整数来表示原始的属性值,如可以用{1,2,3,4,5}来同步替换原来的属性值,从而完成这个属性的语义转换。