突围算法:机器学习算法应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1 数据的基本处理

3.1.1 数据预处理

在实际工作中,数据通常是不完整和不一致的,我们无法直接对脏数据进行分析或挖掘,即使不断完善模型,算法的最终结果也不能令人满意。为了提升数据质量,节省时间,我们需要对数据做一些准备性工作,如果数据本身存在缺陷,则再好的模型也不能解决实际问题。

1.数据预处理的组成

数据预处理(Data Preprocessing)工作在整个机器学习业务流程中的大致位置如图3-1所示。

图3-1

数据预处理的主要步骤有数据清洗、数据集成、数据规约和数据变换,其中数据清洗非常重要,数据集成、数据规约、数据变换在不同的应用场景中方式略有不同。

(1)数据清洗。数据清洗的主要思路是通过填充缺失值、修正噪声数据、平滑或消除异常值来解决数据不一致问题,使数据具备逻辑上的正确性。

(2)数据集成。数据集成是对不同数据源或者不同格式的数据进行整合,使整个数据符合统一的数据要求。

(3)数据规约。数据规约类似于数据精简,在尽可能保持原始数据的情况下,最大限度地减少数据量。在简化的数据集上进行数据分析可以更加高效,但产生的结果应与数据规约之前的结果类似。

(4)数据变换。数据变换是指对数据进行规范化、离散化及稀疏化处理,使数据达到可以进入模型的状态。

虽然在深度学习领域已经不再过多强调特征工程和数据处理的内容,但是对数据的基本处理,尤其是对数据合理性的处理,依然有必要完成。

2.数据质量

数据预处理的目的是提升数据质量,尽可能从数据层面降低对结果的影响。数据质量的评价维度有数据的完整性、数据的唯一性、数据的权威性、数据的合法性和数据的一致性。

(1)数据的完整性。数据内容应当是完整的。例如,应用在股票分析中的数据,每个交易日各个股票的交易信息应当是完整的。

(2)数据的唯一性。数据内容应当仅存在一份非重复的数据,尤其是从不同数据源获取数据时,数据应当是唯一的。例如,购买商品清单中存在多条重复的记录等。

(3)数据的权威性。当数据来自多个数据源时,应当能够形成相应的辅证,而非冲突,否则该数据输出的结论很难具备说服力。

(4)数据的合法性。数据应当受到一些约束或者满足常识。例如,空气温度一般不会超过100℃、公交车的行驶速度不会超过120km/h等。

(5)数据的一致性。在不同数据源中,对同一概念的表述可能并不一致,例如“平均速度:100km/h”和“平均速度:100公里/小时”、“户籍地:上海”和“户籍地:沪”的概念一致,应当统一概念。

3.1.2 数据清洗中的异常值判定和处理

数据清洗(Data Cleaning)是指通过删除、更正数据中错误的、不完整的、格式有误的或多余的数据,使数据具备逻辑上的准确性,不仅可以更正错误,还可以保障来自各个数据源的数据的一致性。从技术角度来看,数据清洗的主要任务集中在对缺失值的处理、对异常值的处理以及对噪声的处理上。

异常值一般是指在总体数据分布区域之外的值,这类值不仅不符合业务规范,而且在实际使用中还会导致数据特征发生偏离,给数据价值带来干扰。从完整的流程上来说,数据清洗首先需要对异常值进行判定,然后进行处理。

1.判定

对于异常值的判定,最简单的方法是根据人们对客观事物等已有的认知,判定实测数据是否偏离正常结果。例如,人的体温一般不会超过42°。常识是判定异常值的方法之一,除基于常识外,还可以通过数学方法判定是否为异常值,例如统计方法、3σ原则、箱型图等。

以统计方法为例,如果观测值与总体平均值的偏差超过两倍标准差,则认定为异常值。例如,某餐饮消费金额清单如表3-1所示。

表3-1

总体来说,日消费的均值在116元左右,标准差在39元左右,理论上用户的消费金额分布应该在116±2×39元,所以200元是异常值。

3σ原则也是判定异常值较好的方法,前提是数据服从正态分布或近似正态分布。当数据服从正态分布时,99%的数值应该距离均值在3个标准差之内,当数值超出这个范围时,则被认为是异常值。

箱型图可以通过可视化的方式呈现异常值,和3σ原则相比,箱型图更直观地表现了数据分布的真实面貌,且对数据没有额外要求。

箱型图以四分位数和四分位数差为基础判断异常值,它定义了上界和下界,小于下界或大于上界的值都属于异常值,上界和下界的计算见式(3-1)和式(3-2)。

其中,Q3为上四分位数(75%),表示全部观测值中有四分之三的数据取值比它小;Q1为下四分位数(25%),表示全部观测值中有四分之三的数据取值比它大;IQR即四分位数差(Q3-Q1);1.5是参数λ,此处取值1.5。

例如,针对序列(1.25, -10, 3.56, 4.81, 7.88, 6.80, 8.82, 10.92, 25, 12.12, 12.88, 13.40),采用箱型图查看异常点,效果如图3-2所示。

显然,箱型图可以通过非常直观简单的方式表明数据-10和25是序列中的异常值。除上述几种异常值判定方法外,还可以通过概率分布的模型、KNN分类模型、聚类分析等判定异常值。

图3-2

2.处理

根据业务场景的不同,对异常值的处理也不同。一般来说,对异常值有以下两种基本处理方法。

(1)删除异常值。删除异常值是最简单的处理方法,主要是为了减少异常值带来的影响,减少犯错误的概率。在删除异常值的过程中,需要注意两方面的问题:一方面,可以尝试结合使用多种统计判别法,并尽力寻找异常值出现的原因;另一方面,如果有多个异常值,应逐个删除,即删除一个异常值后,先进行判定,再删除另一个异常值,不要一次性删除所有异常值。

(2)将异常值视为缺失值,按照缺失值填充的方式对该值进行修正。3.1.3节将详细介绍填充缺失值的方法。

异常值并不是一定需要删除或对其进行某种操作的,有时是为了引起开发者或数据拥有者对该数据的关注,挖掘背后可能潜在的原因,直到发现其有一定合理性之后,才能认定其是否为要处理的异常值。

结合业务场景对异常值进行判定和处理后,可使得数据更贴合要求,倘若一概而论,很可能会导致结果偏离实际。

3.1.3 数据清洗中的缺失值填充

数据缺失是大部分业务场景都会遇到的情况,例如,某些信息暂时无法获取,数值无法实时获取,甚至数值没有被记录等。但是在数据准备阶段,应尽可能提高数据质量。当数据缺失严重时,会对分析结果产生较大的影响。

1.数据缺失类型

虽然数据缺失的原因多种多样,但是数据缺失类型总体可以分为完全随机缺失、随机缺失和非随机缺失三种。

(1)完全随机缺失。表示数据的缺失完全具备随机性,既不依赖其他相关数据,也不影响数据的无偏性。例如,在记录个人信息时,缺失了个人家庭地址。

(2)随机缺失。表示数据的缺失可能与数据所属对象有一定的依赖关系。例如,一般性收入都有税额值,但是补贴性收入则没有税额值。

(3)非随机缺失。表示数据的缺失并非随机因素导致的。但该数据对整体存在依赖性。例如,客户在填写个人信息时,刻意没有填写个人收入这一项。

不同的数据缺失类型,应该使用不同的缺失值处理方法。例如,对于随机缺失和非随机缺失,就不太适合用删除该记录的方法,而是应尽可能填充该部分的缺失值。

若不对缺失值进行补齐、填充,则可能导致系统丢失大量有效的信息,或者让系统表现出不稳定性,最终导致结论具备不确定性。

2.数据补齐

对剔除的异常值和缺失值,应采用合理的方法进行填充。常见的缺失值处理方法有替代法、预测法等,如图3-3所示。

图3-3

替代法中比较经典的是均值插补,即取所有非空对象的平均值填充该缺失值。如果该值为连续数值型,则可以用算术平均数填充;如果该值为离散型,则可以用众数填充

近似替代则以就近补齐和K近邻距离较为常用。

就近补齐是首先寻找相似对象,然后用这个相似对象的值进行填充。例如,某男性客户A在电商网站上购买了众多电子产品,某未知性别客户B在电商网站上也购买了相同或非常相似的众多电子产品,则可以将客户B的性别填充为“男性”。

K近邻距离与就近补齐类似,是通过距离计算公式(如欧氏距离)计算距离缺失数据最近的K个样本,对这K个样本的值进行加权平均或取众数等来填充缺失值。

预测法中的回归预测较为常用。首先基于完整的数据集建立回归方程,然后将已知属性值代入方程求出未知属性估计值,用此估计值填充缺失值。此类方法相对比较有效,但是当完整数据集量较少或非线性相关时会存在一定偏差。

理论上,随着数据量的增大,异常值和缺失值对整体分析结果的影响会逐渐变小。因此在“大数据”模式下,数据清洗可忽略小部分异常值和缺失值的影响,而侧重对数据结构进行合理的分析。

3.其他清洗

对异常值和缺失值进行处理是数据清洗中的关键任务,除此之外,还有格式内容清洗、逻辑错误清洗、关联性清洗等。

(1)格式内容清洗。格式内容清洗是指当时间、日期、数值、全半角等显示格式不一致、内容中有不该存在的字符、数据长度规范不合理时,对格式内容进行清洗。例如,手机号应是11位、且全是阿拉伯数字等。

(2)逻辑错误清洗。通过设定一些简单的逻辑判断对数据进行清洗。例如,身份证号上的生日是20岁,而客户填写的年龄是30岁。

(3)关联性清洗。通过多方数据确认数据的正确性。例如,客户输入的性别为“女”,但是身份证号和其他渠道的数据源均显示客户性别为“男”。

由于业务场景不同,所以有不同的数据清洗方法,归根结底是提升数据在各个业务场景下的质量。