今天聊聊保证数据质量为什么这么难?
衡量数据质量的标准
关于数据质量的标准有很多,我比较喜欢《DataMan-美团旅行数据质量监管平台实践》文章里的标准:
- 完整性:主要包括实体缺失、属性缺失、记录缺失和字段值缺失四个方面;
- 准确性:一个数据值与设定为准确的值之间的一致程度,或与可接受程度之间的差异;
- 合理性:主要包括格式、类型、值域和业务规则的合理有效;
- 一致性:系统之间的数据差异和相互矛盾的一致性,业务指标统一定义,数据逻辑加工结果一致性;
- 及时性:数据仓库ETL、应用展现的及时和快速性,Jobs运行耗时、运行质量、依赖运行及时性。
通过上述的标准,可以去衡量数据的质量是否可靠。
数据质量的重要性
就像住房需要保证房子本身质量一样,要使用数据去完成机器学习模型或者指导业务发展,就得保证数据质量。错误的数据会导致错误的决策,错误的数据会输出错误的数据模型。机器学习大牛吴恩达就在去年的一个讲座里提到,“调优数据比调优模型更重要”。
为什么保证数据质量那么难呢?
既然有了一个可以衡量数据质量的标准,那么为什么让数据符合这些标准依然很难呢?
数据系统的复杂性
首先是数据系统本身的复杂性导致的,就以常用的调度系统 Airflow 举例,一个 DAG 任务可能有几十上百个 task,每个 task 又有着复杂的依赖关系,如果是不同的人负责的,还会牵扯到跨 DAG 依赖。这前提还是整个公司的数据团队都使用了一个调度系统。不同的调度系统、不同的数据处理流程导致很难有一套工具可以及时监控到自己使用的数据的上下游是否出错。
难以验证 SQL 语言的业务逻辑
其二是 SQL 本身的特性。众所周知,数据的生态圈里第一语言是 SQL。SQL 本身包含开发人员对业务的理解程度,我们可以轻易的验证这个 SQL 能否在数据库里正常运行,但是很难验证这个 SQL 对数据的处理是否满足数据质量的标准。
也许会说,为什么不采用软件工程里的单元测试?就像我们团队之前做的那样《使用 Airflow 帮助提升数据质量》,使用 Airflow 去完成基础的数据质量检查,比如检查数据是否存在、数据的量级是否正常、数据类型是否准确等等,但是这个只能保证数据“看起来”没有问题,数据处理逻辑是否正确我们就无法知道了。
大数据下无法避免的噪音
其三是即使有一个数据质量检查系统,可以对不好的数据进行及时报警。但是报警系统本身会随着数据量的增大,导致大量的噪声。也许一天之中,数据质量检查系统会向你抛出数百个数据质量问题,你这时要如何处理?如果每天都有几百个类似的告警,可能到最后,大家都会下意识忽视数据质量告警,直到用户投诉、公司产生了实际的损失。
A few data checks are easy to make a lot of data checks are hard to manage.
性价比的考虑
对于数据质量的保证,很多大公司都做出了很大的努力,比如有Uber公司的《Monitoring Data Quality at Scale with Statistical Modeling》和美团公司的《DataMan-美团旅行数据质量监管平台实践》。这里面的工作量不亚于建设一个大数据平台,对于公司而言,是否具有性价比就值得考虑了。
结尾
目前依然没有看到一个具有高性价比的、类似于 Hadoop 生态圈的、实现数据质量检查的解决方案,如果一个公司想保证其拥有的数据准确且可靠,就必须投入不少的人力和时间,否则的话,就只能假设公司所拥有的数据都是百分百准确且可靠的。至于什么时候才会发现数据不准,就只能等待用户投诉或者是财务产生损失了。
参考链接
- Monitoring Data Quality at Scale with Statistical Modeling,https://eng.uber.com/monitoring-data-quality-at-scale/
- DataMan-美团旅行数据质量监管平台实践,https://tech.meituan.com/2018/03/21/mtdp-dataman.html