数据质量的基本要素
首先,如何评估数据的质量,或者说怎么样的数据才是符合要求的数据?可以从4个方面去考虑,这4个方面共同构成了数据质量的4个基本要素。
完整性
数据的记录和信息是否完整,是否存在缺失的情况。
数据的缺失主要有记录的缺失和记录中某个字段信息的缺失,两者都会造成统计结果的不准确,所以完整性是数据质量最基础的保障,而对完整性的评估相对比较容易。
一致性
数据的记录是否符合规范,是否与前后及其他数据集合保持统一。
数据的一致性主要包括数据记录的规范和数据逻辑的一致性。数据记录的规范主要是数据编码和格式的问题,比如网站的用户ID是15位的数字、商品ID是10位数字,商品包括20个类目、IP地址一定是用”。”分隔的4个0-255的数字组成,及一些定义的数据约束,比如完整性的非空约束、唯一值约束等;数据逻辑性主要是指标统计和计算的一致性,比如PV>=UV,新用户比例在0-1之间等。数据的一致性审核是数据质量审核中比较重要也是比较复杂的一块。
准确性
数据中记录的信息和数据是否准确,是否存在异常或者错误的信息。
导致一致性问题的原因可能是数据记录的规则不一,但不一定存在错误;而准确性关注的是数据记录中存在的错误,比如字符型数据的乱码现象也应该归到准确性的考核范畴,另外就是异常的数值,异常大或者异常小的数值,不符合有效性要求的数值,如访问量Visits一定是整数、年龄一般在1-100之间、转化率一定是介于0到1的值等。对数据准确性的审核有时会遇到困难,因为对于没有明显异常的错误值我们很难发现。
及时性
数据从产生到可以查看的时间间隔,也叫数据的延时时长。
虽然说分析型数据的实时性要求并不是太高,但并不意味了就没有要求,分析师可以接受当天的数据要第二天才能查看,但如果数据要延时两三天才能出来,或者每周的数据分析报告要两周后才能出来,那么分析的结论可能已经失去时效性,分析师的工作只是徒劳;同时,某些实时分析和决策需要用到小时或者分钟级的数据,这些需求对数据的时效性要求极高。所以及时性也是数据质量的组成要素之一。
Data Auditing
基于数据质量的4个要素,可以对数据进行审核,以评估数据是否满足完整性、一致性、准确性和及时性这4方面的要求,其中数据的及时性主要跟数据的同步和处理过程的效率相关,更多的是通过监控ETL任务的方式来保证数据的及时性,所以这里的数据审核主要指的是评估数据的完整性、一致性和准确性。
完整性
我们从Data Profiling得到的数据统计信息里面看看哪些可以用来审核数据的完整性。首先是记录的完整性,一般使用统计的记录数和唯一值个数。比如网站每天的日志记录数是相对恒定的,大概在1000万上下波动,如果某天的日志记录数下降到了只有100万,那很有可能记录缺失了;或者网站的访问记录应该在一天的24小时均有分布,如果某个整点完全没有用户访问记录,那么很有可能网站在当时出了问题或者那个时刻的日志记录传输出现了问题;再如统计访客的地域分布时,一般会包括全国的32个省份直辖市,如果统计的省份唯一值个数少于32,那么很有可能数据也存在缺失。
完整性的另一方面,记录中某个字段的数据缺失,可以使用统计信息中的空值(NULL)的个数进行审核。如果某个字段的信息理论上必然存在,比如访问的页面地址、购买的商品ID等,那么这些字段的空值个数的统计就应该是0,这些字段我们可以使用非空(NOT NULL)约束来保证数据的完整性;对于某些允许空的字段,比如用户的cookie信息不一定存在(用户禁用cookie),但空值的占比基本恒定,比如cookie为空的用户比例通常在2%-3%,我们同样可以使用统计的空值个数来计算空值占比,如果空值的占比明显增大,很有可能这个字段的记录出现了问题,信息出现缺失。
一致性
如果数据记录格式有标准的编码规则,那么对数据记录的一致性检验比较简单,只要验证所有的记录是否满足这个编码规则就可以,最简单的就是使用字段的长度、唯一值个数这些统计量。比如对用户ID的编码是15位数字,那么字段的最长和最短字符数都应该是15;或者商品ID是P开始后面跟10位数字,可以用同样的方法检验;如果字段必须保证唯一,那么字段的唯一值个数跟记录数应该是一致的,比如用户的注册邮箱;再如地域的省份直辖市一定是统一编码的,记录的一定是“上海”而不是“上海市”、“浙江”而不是“浙江省”,可以把这些唯一值映射到有效的32个省市的列表,如果无法映射,那么字段通不过一致性检验。
一致性中逻辑规则的验证相对比较复杂,很多时候指标的统计逻辑的一致性需要底层数据质量的保证,同时也要有非常规范和标准的统计逻辑的定义,所有指标的计算规则必须保证一致。我们经常犯的错误就是汇总数据和细分数据加起来的结果对不上,导致这个问题很有可能的原因就是数据在细分的时候把那些无法明确归到某个细分项的数据给排除了,比如在细分访问来源的时候,如果我们无法将某些非直接进入的来源明确地归到外部链接、搜索引擎、广告等这些既定的来源分类,但也不应该直接过滤掉这些数据,而应该给一个“未知来源”的分类,以保证根据来源细分之后的数据加起来还是可以与总体的数据保持一致。如果需要审核这些数据逻辑的一致性,我们可以建立一些“有效性规则”,比如A>=B,如果C=B/A,那么C的值应该在[0,1]的范围内等,数据无法满足这些规则就无法通过一致性检验。
准确性
数据的准确性可能存在于个别记录,也可能存在于整个数据集。如果整个数据集的某个字段的数据存在错误,比如常见的数量级的记录错误,这种错误很容易发现,利用Data Profiling的平均数和中位数也可以发现这类问题。当数据集中存在个别的异常值时,可以使用最大值和最小值的统计量去审核,或者使用箱线图也可以让异常记录一目了然。
还有几个准确性的审核问题,字符乱码的问题或者字符被截断的问题,可以使用分布来发现这类问题,一般的数据记录基本符合正态分布或者类正态分布,那么那些占比异常小的数据项很可能存在问题,比如某个字符记录占总体的占比只有0.1%,而其他的占比都在3%以上,那么很有可能这个字符记录有异常,一些ETL工具的数据质量审核会标识出这类占比异常小的记录值。对于数值范围既定的数据,也可以有效性的限制,超过数据有效的值域定义数据记录就是错误的。
如果数据并没有显著异常,但仍然可能记录的值是错误的,只是这些值与正常的值比较接近而已,这类准确性检验最困难,一般只能与其他来源或者统计结果进行比对来发现问题,如果使用超过一套数据收集系统或者网站分析工具,那么通过不同数据来源的数据比对可以发现一些数据记录的准确性问题。
上面已经从Data Profiling的统计信息中,通过Data Auditing发现了数据质量上存在的一些问题,那么接下来就要针对这些问题对数据进行清洗和修正,也就是下一篇文章中要介绍的内容——Data Correcting,数据修正。