今天聊聊保证数据质量为什么这么难?
关于数据质量的标准有很多,我比较喜欢《DataMan-美团旅行数据质量监管平台实践》文章里的标准:
通过上述的标准,可以去衡量数据的质量是否可靠。
就像住房需要保证房子本身质量一样,要使用数据去完成机器学习模型或者指导业务发展,就得保证数据质量。错误的数据会导致错误的决策,错误的数据会输出错误的数据模型。机器学习大牛吴恩达就在去年的一个讲座里提到,“调优数据比调优模型更重要”。
既然有了一个可以衡量数据质量的标准,那么为什么让数据符合这些标准依然很难呢?
首先是数据系统本身的复杂性导致的,就以常用的调度系统 Airflow 举例,一个 DAG 任务可能有几十上百个 task,每个 task 又有着复杂的依赖关系,如果是不同的人负责的,还会牵扯到跨 DAG 依赖。这前提还是整个公司的数据团队都使用了一个调度系统。不同的调度系统、不同的数据处理流程导致很难有一套工具可以及时监控到自己使用的数据的上下游是否出错。
其二是 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 生态圈的、实现数据质量检查的解决方案,如果一个公司想保证其拥有的数据准确且可靠,就必须投入不少的人力和时间,否则的话,就只能假设公司所拥有的数据都是百分百准确且可靠的。至于什么时候才会发现数据不准,就只能等待用户投诉或者是财务产生损失了。