- 量化投资:MATLAB数据挖掘技术与实践(第2版)
- 卓金武
- 4735字
- 2025-02-27 14:07:36
4.2 数据质量分析
4.2.1 数据质量分析的必要性
没有完美的数据。事实上,大多数数据都存在属性值错误、缺失或其他类型的不一致现象。所以,在建模前通常需要对数据进行全面的质量分析。数据质量分析也是准备数据过程中的重要一环,是数据探索的前提。我们常说,“Garbage in,Garbage out”,数据质量的重要性无论如何强调都不过分。没有可信的数据,数据挖掘构建的模型将是空中楼阁。
4.2.2 数据质量分析的目的
数据挖掘的数据质量分析以评估数据的正确性和有效性为目标,而在一般的数据挖掘项目中主要关注正确性,保证数据的正确性自然是数据质量分析的首要目的。另外,数据挖掘中重点关注的是数据质量对建模效果影响的大小,对数据质量的分析和评估也以对后续挖掘的影响为原则。例如,在进行电信客户流失分析时,我们发现有国际漫游通话的客户比例极小,不到0.01%。这时,即便国际漫游通话时长的统计正确性毫无问题,也认为该变量缺少有效的信息而有数据质量问题。因为该变量提供的信息只可能对最多0.01%的客户产生影响,对未来预测模型的贡献实在微乎其微。
所以,数据质量分析的目的可以概括为如下两点:
(1)保证数据的正确性。
(2)保证数据的有效性。
4.2.3 数据质量分析的内容
数据质量分析的内容是以数据质量分析的目的为依据的。数据质量分析的目的是保证数据的正确性和有效性,所以数据质量分析的内容也主要包含这两个方面。
在数据的正确性分析方面,通常涉及如下几个方面的内容。
(1)缺失值:包括空值或编码为无意义的值(如null)。
(2)数据错误:通常是在输入数据时造成的排字错误。
(3)度量标准错误:正确输入但因为不正确的度量标准而导致的错误数据。
(4)编码不一致:通常包含非标准度量单位或不一致的值。例如,同时使用M和male表示性别。
在数据的有效性分析方面,主要关注数据统计方面的信息,如占比、方差、均值、分位数等方面的信息,以此来了解这些数据包含的信息量。
4.2.4 数据质量分析的方法
数据挖掘中数据质量分析的对象主要是宽表。宽表通常是在数据仓库基础上建立的信息列表,每条记录对应一个样品的各种信息,其中用于分析建模的字段称为变量。对于变量,按照取值类型通常分为数值变量和分类变量。对于数值变量,还可以进一步分为离散型变量和连续型变量。数据质量分析的对象就是这些不同类型的变量,变量的类型不同,分析的方法也略有不同。在这些方法中,比较常用的数据质量分析方法有值分析、统计分析、频次图与直方图分析。
1. 值分析
值分析通常是进行数据质量分析的第一步,它可以帮助分析人员在总体上分析数据的自然分布情况。比如,数据是否只有唯一值,该变量中有多少空值等。值分析是常用方法中较简单的一种,它的分析信息易统计,信息含义清晰易理解,它也是最有效的分析方法,因为它能够快速地给出明确的结论。
进行值分析时,需要对宽表中的变量进行取值情况的统计,常用的具体统计信息如表4-4所示。
表4-4 值分析常用的具体统计信息

现在对4.1节中获取的数据进行质量评估。通过对数据的初步分析,选择非零占比作为数据评估指标。对X37~X51这15个变量的非零值进行统计,并计算各变量对应的非零占比,如图4-8所示。通过图4-8,可以清晰地看到只有变量X37和X38的非零占比超过80%,其他变量相当多的数值为0,也就是说这些变量包含的数据信息量太少,此时对这些数据进行挖掘的意义不大。如果为了保证数据的有效性,取非零占比的阈值为80%,则这15个变量中只有变量X37和X38会被纳入下一轮的数据样本的变量体系中。

图4-8 变量非零占比柱状图
对数据进行值分析主要是为了了解数据的值特征及信息量。不同的值在表征数据特征方面也有所偏重,至于什么时候用哪些值对数据质量进行分析,可以根据如下这些值的分析意义来确定。
1)唯一值分析
唯一值最简单的情况就是变量只有一个取值,这样的变量对于数据挖掘建模无法提供任何有效的信息。所以,从数据有效性方面来看,其是存在问题的。如果对于变量的业务含义有一定了解,还能分析变量唯一值数比预期的是多还是少。例如,预先知道性别只有“男”“女”和“不确定”三种,若出现四五种取值,就要查看是否存在数据质量问题。
2)无效值分析
空值、空字符串都是无效信息(只有在极特殊的情况下空值、空字符串才提供信息),很多情况下取值为0也是无效信息。无效值的比例越大,建模时能够利用的信息就越少。当无效值的比例达到一定程度时,可以认为该变量对于建模是无效的。有效与无效的界限是以建模的目标为依据的。例如,在流失预测建模时,流失率大概为15%,同时希望能够预测流失倾向较高的前10%的用户。这时,如果一个变量无效值的比例接近90%,则认为该变量质量较差,提供信息较少;如果一个变量无效值的比例超过99%,则认为该变量质量极差,提供很少的信息;而如果一个变量无效值的比例超过99.9%,则认为该变量无效。对于无效值较多的变量,首先应怀疑数据处理过程是否存在错误。如果无错误,那么对于质量极差和无效的变量,在建模时应慎用甚至弃用。
3)异常值分析
在多数情况下,变量不容许出现负值、空值,而在某些业务背景中,变量为0也是异常的。异常值分析主要分析变量是否存在异常值的情况,再结合一定的业务背景知识,确认是否存在错误的数据。
2. 统计分析
统计分析是用统计量对数据进行统计学特征的分析,常用的统计量有均值、最小值、最大值、标准差、极差和一些拓展统计量。常用的拓展统计量有如下几个。
• 众数(Mode):变量中发生频率最大的值。众数不受极端数据的影响,并且求法简便。当数值或被观察者没有明显次序(常发生于非数值型资料)时,众数特别有用。例如,用户状态有正常、欠费停机、申请停机、拆机、销号这几种可能,该变量的众数是“正常”则数据是正常的。
• 分位数(Median):将数据按从小到大排序,小于某个值的数据占总数的百分比。例如,通常所说的中位数就是50%分位数,即小于中位数的所有值占总数的50%。
• 中位数:中位数可避免极端数据,代表数据总体的中等情况。如果总数是奇数,则按从小到大的顺序,取中间的数为中位数;如果总数是偶数,则按从小到大的顺序,取中间两个数的平均数为中位数。
• 偏度:正态分布的偏度为0,偏度小于0称分布具有负偏离,偏度大于0称分布具有正偏离。若知道数据分布有可能在偏度上偏离正态分布,则可用偏度来检验分布的正态性。偏度的计算公式如下:

式中,s是该变量的标准差。
从MATLAB的工作空间中可以直接查看数据的基本统计量信息,根据这些基本统计量可以大致了解数据的基本情况,如图4-9所示。均值、最大值、最小值、中位数描述的是数据的基本特征。从数据质量分析的角度来讲,极差、方差(或标准差)更有用,因为这两个统计量更关注这个变量所有数据的统计特征。比如,在某个案例中,如果发现某些数据的极差变化很大,则说明这些数据的数量级差别很大,很可能需要对数据进行归一化处理;如果发现一些变量的标准差很小,则说明数据的变化不是很大,有可能这个变量所包含的信息比较少,在数据挖掘中可以考虑是否删除这些变量。

图4-9 MATLAB中数据的基本统计信息
统计分析方法虽然简单,但最能反映数据的特征。因为不同的统计量表征的数据特征有所偏重,所以在数据挖掘的不同阶段往往用不同的统计量去认识、评估数据。无论是何阶段,只需认识这些统计量本身的特征,即可很灵活地应用。认识这些统计量本身的特征,需要关注如下几点。
(1)统计分析方法的核心就是分析数据的分布情况,即查看数据的分布情况与正态分布的接近程度。在了解了数据分布情况之后,还可以针对分布情况选取有代表性的统计量描述数据的整体情况。例如,在数据的分布为正态分布时,可以用均值来代表数据的整体情况;而数据的分布较正态分布偏斜时,众数与中位数就能够更好地代表数据的整体情况。
(2)对极值与均值的评判要借助一定的业务常识,或与变量的历史进行对比。可以查看最小值是否合乎业务逻辑,最大值是否真实、准确,均值是否合理。在一定的时间区间内,均值通常比较稳定。极值与均值的获取较为容易,目前在数据挖掘项目的实施中常常用到极值与均值。但单纯使用极值与均值具有一定的局限性,需要借助一定的业务经验。
(3)标准差反映变量数据的分散程度。如果变量数据是以正态分布的,则当最大值(或最小值)与均值的差超过3倍标准差时,这些极值很可能存在问题。因为超过3倍标准差的数值存在的概率约为0.3%,如图4-10所示,深灰、浅灰、淡灰区域分别对应1倍、2倍和3倍标准差,对应数据落在其间的概率为68.3%、95.5%和99.7%(图4-10中的数据为保留1位小数的结果,由图中数据计算的结果与这里的数据相差0.1%)。不过现实中,一方面数据量巨大,往往上万,因此,极值超过3倍标准差也是正常的;另一方面,许多变量的分布并不满足正态分布,因此,使用时需要注意。

图4-10 标准差分布概率图
3. 频次图与直方图分析
进行统计分析时对数据的分布情况用一些统计量进行了描述,这些统计量虽宏观却不直观,因此可以使用频次图与直方图来进行更深入、更直观的分析。
直方图和频次图都是用柱状图表示数据分布特征的分析方式。通过直方图和频次图可以有效地观测出数据分布的两个重要特征:集中趋势和离散趋势。直方图适用于对大量连续型数据进行整理加工,找出其统计规律,以便对其总体分布特征进行推断。频次图是为了获得离散型数据各值分布情况的统计方法,有助于理解某些特殊数值的意义,也可以支持多个维度的组合分布情况。频次图与直方图分析在提供更具细节的信息的同时,也存在人工分析的局限。同时,很多时候需要借助一些业务经验。
1)直方图的分析步骤
直方图(数值等宽)的分析步骤如下:
(1)找出数据的最大值和最小值。
(2)将数据按由小到大的顺序排列,然后进行分组,每组的数量为6~20个较为适宜。
(3)用组数去除最大值和最小值之差,求出组距的宽度。
(4)计算各组的界限值,各组的界限值可以从第一组开始依次计算,第一组的下界限值为最小值减去组距的一半,第一组的上界限值为其下界限值加上组距;第二组的下界限值为第一组的上界限值,第二组的下界限值加上组距,就是第二组的上界限值,依此类推。
(5)统计各组数据出现的频数,制作频数分布表。
(6)以组距为底长,以频数为高,作各组的矩形图。
在MATLAB中利用hist命令可以很快绘制出某个变量的直方图,图4-11为用该命令对X1(表4-2中序号为2的变量)绘制的直方图。通过直方图可以很容易地看出,该变量的数据过于集中,这对数据挖掘来说意义不大,所以就可以考虑删除该变量。再看该数据的业务特征,该变量是日期,而日期在这里只是时间标记,所以不应该作为数据变量来研究,只适合作为标识变量来考虑。所以,在实际的数据挖掘中,对该变量可以不予考虑。同理,对X2和X3都可以不予考虑。

图4-11 变量直方图
2)频次图的分析步骤
频次图与直方图的意义相似,只是频次图是对分类变量而言的。频次图的具体分析步骤如下:
(1)集中和记录数据,计算总的分类数N。
(2)将数据按由小到大的顺序排列,分为N组。
(3)统计各组数据出现的频数,制作频数分布表。
(4)作频次图。
频次图相对简单,这里不再举例说明。
4.2.5 数据质量分析的结果及应用
数据挖掘的数据质量分析的结果通常是一份数据质量分析报告,是数据预处理阶段的重要输入信息,因为如何对数据进行预处理需要根据数据的质量情况来确定。而对于新启动的项目,数据质量分析的结果能够帮助读者快速了解数据的情况。比如,利用值分析方法,可以在没有或有很少的业务背景知识的情况下,对数据的唯一值、无效值、异常值进行分析,从而发现只有一个重复数值、无效值过多或有异常取值(如出现负数)等情况的数据质量问题;利用统计分析方法,根据极值与均值的差与标准差的比值,可以找出可能存在异常的指标;对于字符型的字段(通常是维度),可以使用频次图了解维度的数值分布情况;对于数值型的字段(通常是指标),可以通过直方图了解指标的大致分布情况。