数据分析中的数据质量识别,本文主要内容关键词为:数据论文,质量论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
中图分类号:F224.0 文献标识码:A
引言
数据仓库专家Ralph Kimball说过:人们花了20多年的时间将数据放入数据库,如今是该将它们拿出来的时候了。可是如今在国内还是有很多数据在收集之后,被束之高阁,一直无人问津;有些人即使用软件对大数据集做了一些分析,但对分析过程中的各种风险考虑不足。统计分析的每一步都可能犯错误。而在分析一个数据最先可能犯的错误就是没有意识到数据中与生俱来的问题。数据是一切统计分析的出发点,如果数据不是现实世界的真实反映,那结论也没有意义。如果人们在事先没有对数据本身的质量进行认真的核查就直接利用软件进行各种计算的话,所产生的结论则必然受到数据质量的影响,有很多风险,甚至可能产生毫无意义的垃圾。由于数据质量关系着数据分析结果的可靠性,因此拿到数据后,首要的是检查数据质量。只有在对数据的问题进行各种适当处理后,才能够再做进一步的分析。
一、数据质量总述
一般认为,高质量的数据要求数据真实、完整、一致[1]。所谓真实是指数据反映真实情况,如在某公司的人力资源数据表中有一条记录“ID:30;年龄:29;收入:3000”,而对应的现实情况却是该公司第30号员工,29岁,收入5000,这种问题是很难通过数据检查来发现的。所以一般情况下只能默认数据真实,当然也可通过变量的有效取值范围来发现与现实情况严重不吻合的可疑数据(如后面所述的通过变量有效值范围发现可疑值);数据完整是指记录完整、变量完整、值完整;记录完整是指数据中包含了研究所要求的全部个体,如一家零售业对其高端客户进行细分研究,则要求包括所有高端个体,不能有遗漏。在实际案例中,一一核对每个高端个体是否包含在数据中是不现实的,所以一般也只能默认记录完整;变量完整是指数据当中包含了研究主题相关的所有重要变量。这个问题主要在设计阶段来控制,而不是拿到数据后再考察;值完整是指对每个个体记录了其全部信息,由于这个问题在抽样调查和普查数据中和数据库系统数据中均比较严重,所以是数据质量检查的一个主要方面(如后述的缺失值识别);数据一致是指数据之间不矛盾,如一个不抽烟的人,他每天吸烟的支数应该为0。虽然这种错误看似低级,但实际数据中却很常见,因而也是数据质量检查的一个方面(如后所述的通过逻辑关系检查可疑异常值)。另外,还要检查数据的其他问题,比如由于种种原因而导致的数据记录重复。
从更实用的角度来看,数据质量分两个方面:一是数据结构对研究主题的代表性;二是在选定数据结构下数值的真实性和完整性。数据结构是指二维数据表中行和列的组织:一行表示一条记录,一个观测,一个研究对象,所有的行组成样本;一列表示一个变量,一个指标,一种信息,一个问题(在数据库中也常称为字段)。所有的列构成了问卷或信息集。数据结构的质量是指样本对研究对象的代表性和问卷对研究主题的代表性:获取数据的个体集合能够代表所研究对象(如研究主题是2006年第2季度客户行为,则选取2006年1~3月的数据是不合适的);获得的信息应反映研究主题的各个重要方面(如研究主题是不同人口学特征的客户行为差异,丢弃客户的人口学特征数据则是不合适的)。数据结构方面的数据质量主要是在设计阶段对抽样计划和问卷设计进行控制。在数据结构确定之后,收集或获取数据的过程也会出现质量问题,如数据是否真实?是否存在大量空缺或者异常值。在一个研究项目中(尤其是在商业企业基于CRM或ERP的研究项目小),往往基于系统现有数据,而很少重新收集相关数据。因而数据结构引起的数据质量问题经常是在设计阶段和结果评估阶段考察。而数值真实性完整性问题则是在数据分析阶段要考虑的,不但复杂而且繁琐。鉴于此,本文着重讨论后者。
在实际应用中主要从以下几个方面来考察数据质量:无效单元格,即无效取值;无效变量;无效记录。无效单元格是指对应个体在相应变量上的取值不是一个有效信息。它可能是由于拒答或不可获得等原因导致的缺失值(如某个体的“企业登记注册类型”是空白值),也可能是由于错填等原因引起的错误值或可疑异常值(如某个体的“注册日期”为“2020年3月4日”);无效变量是指包含信息很少甚至不包含信息的变量,如所有个体在该变量上取值均相同,或者相当比例(如超过50%)的个体在该变量上为无效值,这种变量包含信息过少而不能参与分析,因而称为无效变量;无效记录是指包含信息过少甚至不包含信息的记录(即个体),如该个体的所有变量取值均为无效值,或者重要变量上为无效值,或者较大比例的变量为无效值,此种记录往往很难参与分析,因而称为无效记录。无效记录的另一种情况是冗余记录,如某个体的信息在数据中重复出现,则只有一条是有效的,其余均为无效记录。下面对此做更详细的讨论。
二、无效单元格的识别
无效单元格的识别包括缺失值的识别和错误异常值的识别。
(一)缺失值的识别
缺失值的识别要简单一些。一般认为“空值”、“空格值”为缺失值。有些情况下,一些特殊值也为缺失值,在一些系统中,可能会直接将缺失数据用某个值代替写入数据库,如一个案例中有这样一个变量“是否农村工业”有“0、1、9”三个取值,按照一般习惯,“0”代表非农村工业,“1”代表农村工业,而“9”是系统预设的缺失值。在缺失值中,备受关注的是“0”值。在一些变量上,“0”值是有意义的值,代表“没有”;而在另一些变量上,“0”值可能是没有意义的,只是代表“不知道”。例如在一个调查企业生产经营情况的案例中,变量“本月产值”:“0”值是有意义的,代表本月无产值;而变量“年内平均人数”:在一个当年有产值的企业中,劳动力人数不可能是0,所以在这个变量中的“0”值可能是无实际意义的,实际是指“不知道”,是缺失值;还有一种变量,其“0”值可能是有意义的,也可能是无意义的:如在个人所得税税收数据中,“适应税率”这个变量,“0”在有的行表示“零税率”即不用交税,而在有的行(由于填表人员不认真填写),“0”表示“应交税但税率未知”;又如在学生成绩中“0值”可能表示“参加考试得到0分”也可能表示“缺考”。在数据分析中要注意区分这三种变量中的“0”值。对第二种变量,将其“0”值视为缺失值,对第三种变量则要利用条件方式将一部分“0”值转换为缺失值。
(二)根据有效值范围识别错误、可疑异常值
缺失值仅从一个方面反映了数据完整性。单元格中的值即使不缺失,也不见得有意义,因为它可能并不代表真实情况,即在真实性方面存在问题。数据真实性的检查是一项困难工作。但是假数据中的一些明显错误值或者可疑异常值却是可以发现的。
对于分类型变量,可以通过条形图或数据汇总来发现该分类变量有多少个类别取值,然后人为判断哪些取值是非法取值,从而发现错误数据。如“内外资类别”变量(假设业务知识告诉分析者只有“内资”、“外资”、“合资”三个类别)的条形图显示有五家企业为“独资”,则这五家企业在“内外资类别”这个变量上是一个错误数据。在数据仓库中,对每个分类变量,往往有一张系统表专门定义其可以有哪些代码,各代码的物理名称等,笔者将这张表叫做该分类变量的字典表。所以在数据仓库为基础的数据分析中,可采用字典表作为标准,数据表中超出字典表范围的代码,即为错误数据。如在税务数据中有一个分类变量“纳税人状态代码”,对应的也有一张“纳税人状态代码”字典表,即可以“纳税人状态代码”字典表为依据,若某企业的“纳税人状态代码”为“32”,而字典表中无“32”代码,则可以认为该企业的“纳税人状态”信息是错误信息。当然这首先要求字典表是可靠的。完整意味着包含全部有效代码和有效名称,不包含任何无效代码和无效名称。任何有效代码和有效名称均只出现一次,代码和名称一一对应,而且符合真实情况。另外,也有一些代码是国家统一的,如“国标行业代码”,此时还可以全国统一的国标代码表作为字典表从而发现错误数据。对于此类错误值,一般将其转换为缺失值来处理。
对于日期型变量,可以通过界定有效日期范围来发现异常值。有效日期范围的界定可以根据“数据库或数据仓库”所收集数据的时间范围来确定,或者根据“研究时间段”来界定。如在一个从1995年才开始收集数据的系统中,不可能包含1995年1月1日之前,当前日之后的客户行为数据。对于其它连续型变量,也可以通过界定有效值范围从而发现异常值,例如“薪金收入”不能为负数。
(三)根据变量间关系识别错误、可疑异常值
以上介绍的是通过变量自身的分布来发现错误值。除此之外,还可以通过变量之间的关系来发现可疑单元格。
首先,可以通过变量之间的确定性的逻辑关系来判断可疑值。如在地税纳税人登记管理数据表中纳税人的“批准时间”晚于其“申请时间”,如果违反了这一关系,则要么“批准时间”有误,要么“申请时间”有误,要么两个变量均有误。这可以就一条记录变量之间的关系来判断(如上例),也可以利用记录间关系来判断,如在企业各月产值数据中,一个企业一个月是一条记录,此时记录1(某企业2006年3月)的“本月累计产值”不小于记录2(该企业2006年2月)的“本月累计产值”。这种关系可以是大小比较,如“本月累计产值”要不小于“本月产值”;也可以是逻辑判断,如若“本月现价产值”不为零,则“本月不变价产值”也不应该为零等等;当然也可能是更复杂的关系,如“本月产值”占“本月累计产值”的比重与“同月产值”占“同月累计产值”的比重应该基本相似。
其次,可以通过数据间不确定的,但有较大可能的相关关系来判断可疑值[2]。此时要对这种相关性有一个合理假定,在不同假定下对可疑值的判断结果大不相同。下面以“企业产值”数据说明:在一个调查企业生产经营情况的案例中;收集了企业的各种产值数据(如本月/同月销售产值观价,本月/同月新产品产值等)和企业的各种属性数据(如行业代码、登记注册类型代码等)。其中,“本月新产品产值”和“本月销售产值现价”具有一定相关性,因而可以根据这种相关性来判断企业在这两个变量的取值是否存在可疑。但在不同假定下可疑值的判断结果是不一样的。(1)假定这两个变量呈线性相关,以“本月销售产值现价”为自变量,以“本月新产品产值”为结果变量,作线性回归,以Cook's距离诊断异常值,可以发现“1590、736、851”号企业是严重强影响点,Cook's距离分别为54.30、33.10、0.89,其余企业均小于0.01,因而在线性相关的假定下可认为这三个企业在这两个变量上异常。(2)假定它们呈对数观性相关,以“本月销售产值现价”的对数值为自变量,以“本月新产品产值”的对数值为结果变量,作线性回归,“1590、736、851”号个体的Cook's距离均小于0.15,这三个个体在这个假定下并不突出。而其它个体的Cook's距离均小于0.3。(3)假定非参数相关(在Kendall和Spearman的意义上),即“本月新产品产值”的秩与“本月销售产值现价”的秩接近,则可以比较它们,计算差值,绝对值较大的则被视为可疑值(较大的秩差值见表1)。如表1中“662、36、61、187等”号企业的两个名次相差比较大,有理由怀疑这些企业在这两个变量取值上的真实准确性。图1的三个散点图分别为这两个变量的原始数据、其对数、其秩的散点图;上述关于“异常点”的说明可以从该图直观地看出。图1还表明:对数据未进行某种变换或者影响点分析而做任何回归都是有风险的,因为不在这里进行回归分析;而仅仅想通过回归模型来核对数据。一般来说,若根据变量之间相关关系判断可疑异常值,要以实际应用部门的业务经验为指导,从众多的假定中选择一个或多个,在此假定下进行可疑异常值的判断。
表1 本月新产品产值与本月销售产值现价非参数相关假定下异常值判断表
图1 三个散点图
三、无效记录的识别
无效记录包括冗余记录、完全缺失记录、重要变量无效记录、可信度低的记录。
(一)冗余记录的识别
冗余记录的情况:一种是有些记录所代表的个体不是研究范围内的个体,此类问题一般可在数据抽取过程完成,在此不作介绍;另一类问题是指同一研究对象或者说同一事件在数据中记录超过一次,识别这种冗余数据首先要确定何为冗余?是ID标识变量相同?还是所有非ID变量取值相同?采用ID标识变量相同标准,则表2所示的两条记录是非冗余记录;而在非ID变量取值相同标准下,则要删除其中一条。第一种标准可以发现一份问卷重复录入时,ID标识录入正确但其它变量可能由于录入错误导致不一致的情况;第二种标准可以发现一份问卷录入后被复制,然后更改了ID变量的情况。最保守的方法是分别以两种标准发现可疑冗余记录,必要时进行人工排查。
表2 冗余记录示例表
实际数据则可能更复杂一些,如表3所示手机用户13600000001对移动增值业务01的订购退订情况。该增值业务是包月业务,在本月申请开通或取消,下月生效,如果有多次开通和取消申请,则以当月最后一次申请为最终记录。在运营数据库中,客户每作一次申请就会有一条记录产生。由于误操作或者改变主意等原因,一个用户可能在一个月内对该项业务有多次相同或相反的申请,因而在数据库中形成多条无用记录。表3前三条数据即表示用户13600000001对移动增值业务01在2006年3月订购、退订再订购,在这样的业务背景下,表3中只有最后两条是有效的。
表3 冗余记录示例表
ID手机号 申请时间
申请业务代码申请业务类别
113600000001 2006-03-01-10:02:1101 订购
213600000001 2006-03-01-10:01:2001 退订
313600000001 2006-03-10-08:02:3301 订购
413600000001 2006-04-05-09:18:2401 退订
(二)完全缺失记录的识别
所有变量取值均为缺失值、错误值或可疑异常值的记录,不包含任何信息,也是完全无效记录,要予以删除。这种情况看似荒谬,但实际数据中却不乏这种数据的出现。如在上述的“企业产值”案例中,约2000家企业中有57家企业的所有产值变量均为0值或缺失值,这些记录混杂在数据中,肯定会给分析结果带来不良影响。
(三)重要变量缺失记录的识别
在一些研究主题中,重要变量缺失的记录就不能参与到分析中,此时这些记录也是无效数据。如在税务疑点纳税人规则总结的主题研究中,如果一个纳税人在“是否疑点纳税人”变量上取值未知的话,则该数据为无效记录。
(四)可信度低记录的识别
在一条记录中,缺失变量过多或者可疑异常变量过多,如比例超过50%,则表明该记录的数据质量差,如果这些质量差的记录参与到分析中反倒因其数据质量差而导致严重误导的结果。去掉这些记录虽然会损失一部分信息,但由于提高了数据质量而改善结果。在实际应用中,要在损失信息与提高质量之间作平衡。
四、无效变量的识别
无效变量包括同值变量,缺失异常率高的变量,类别过多的分类变量。
(一)同值变量的识别
在待分析变量中,如果所有记录在某变量上取值都相同,则该变量不包含任何信息,是完全无效变量,保留它只会消耗系统资源,降低系统的分析能力与效率,应予删除。
(二)缺失异常率高的变量的识别
如果一个变量的缺失异常比例较大,则视其对研究主题的重要性决定保留或删除[3]。例如在地税系统稽查选案分析中“发票购买额度”和“销售成本费用”两个变量无效率均超过了30%,但却需要区分对待,因为“发票购买额度”与研究目标“应纳税额”关系非常密切,一定要保留;而“销售成本费用”却与研究目标“应纳税额”关系较弱,由于无效数据较多,所以可以考虑删除该变量。当然,在实际分析中这类变量往往会保留在数据中,只是在分析涉及该变量和不涉及该变量时,参与分析的样本量不一致,在质量识别阶段,要识别这一点,以便于在结果解释时考虑到数据量和数据缺失给结果带来的影响。
(三)类别过多的分类变量的识别
在数据中,有些变量是标识变量,如姓名,编号等,该变量的意义在于标识数据来源,不参与数据分析。若一个分类变量取值过多,则各种类别的记录数会很少,极端情况下一个类别只有一个个体时,该分类变量就变成了像“姓名”一样的标识变量,无法参与分析,该分类变量也是一个无效变量了,要予以删除。当然各类别的记录数一般不是均匀分布的,可能只有几类的记录数较少,此时可以考虑把这些小类合并为“其它”一类,使该分类变量在不丢失记录的基础上可参与分析,但这样做基本默认了组成“其它”的各类别是同质的。更好的一种做法是考虑类别间的相似性,然后把小类记录合并到相似的大类;另外一种分类变量则是某个维度上的一个较低的概念层次。如“地理位置”这个维度可以有很多层次:洲、国家、省(市)、地(市)、县、街道(乡村);若在街道这个层次可能每类包含个体很少,参与分析意义不大;若把它转换为较高的一个层次,则可能会使每类有足够多的记录,从而可以参与分析。又如“行业”这个维度,现行的国标行业五位代码事实上包含了四个层次:第一个字母表示的是行业门类,前三位表示行业大类,前四位表示中类,五位表示小类;若数据量过少,可以将小类转换成更大的类别从而参与分析。
五、结束语
好的数据是好的结果的必要条件。面对数据,认识数据中存在的问题并进行处理是首要的工作。文中提到的各种问题,可以在数据挖掘的数据抽取阶段进行处理,也可以在数据理解阶段进行处理;可以在数据库中利用各种函数来实现,也可以利用数据分析工具所包含的数据处理和数据准备功能来实现。由于各种问题有交叉性,也经常需要反复检查一个条件是否满足。本文对变量或观测所说的“删除”,实际上只是在分析过程中的不参与,而不是对作为原始资料的数据库中的原始数据的删除。而对数据进行核查可用各种计算机软件来实行。