Python数据处理:如何又快又好
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 什么是数据质量

数据有很多,访问并收集这些数据的方式也不少,但并非所有的数据都一样有用。要想整理数据,其中一个关键的地方就是要确保数据质量,因为只有通过分析高质量的数据,才能够得出高水平的观点[2]。因此,如果想要用数据来更好地认识你所关注的领域,那么首先要保证这些数据能够反映该领域的真实情况。大家在后面(尤其是第3章与第6章)会看到,改善数据质量并没有简单的工序可以直接套用,它不像你在用电子表格录入数据时那样,能够把每份数据都明确地放在某一行某一列之中。

为什么会这样呢?因为尽管使用了机器学习与人工智能等术语,但计算工具唯一能做的就是遵照给定的指令来使用它所拿到的数据。即便是最复杂、最高深、最抽象的数据,在本质上也都是一种人为的产物,因为它们毕竟是根据人所做出的决定而得出的,这些数据反映的是哪个指标以及这个指标是如何测量的,这都要由人来决定。当今最先进的计算机技术可以做出“预测”与“抉择”,这相当于是在执行大规模的模式匹配(large-scale pattern matching),但即便如此,该技术所使用的模式也是通过“训练”学到的,而做这种训练所使用的数据正是由人来选择的。计算机本身既没有原创的观点,也不会做出创造性的飞跃,因此,人类感觉比较直观的某些任务,它们其实并不擅长(例如,解释某个论证过程的“关键点”或者描述某个故事的情节)。但是,计算机又很擅长执行重复的计算,而且执行速度很快,它们不会厌烦、疲倦,也不会分心。换句话说,计算机能够很好地增强人类所具有的判断力与智力,但它们只能起到强化的作用,而不能完全代替人类去判断和思考。

这意味着,收集、获取并分析数据的过程需要由人来参与,这些人必须确保数据的质量才能让我们从中得到有意义的输出结果。我们将在第3章详细讲解数据质量,但是笔者在这里需要先介绍衡量数据质量的两个维度(或者说,坐标轴)。这两个维度都很重要,其中一个是数据本身的完整程度,另一个是数据的适合程度,也就是这套数据适不适合用来解答你所关注的某个问题。

1.2.1 数据的完整程度

我们这里采用数据的值与它所具备的一些特点来衡量数据的完整程度。如果某个数据集里面含有某个时间段内所采集的多个值,那么这些值是定期采集的还是随意采集的?这些值表示的是每次记录下的具体读数还是多个读数的平均值?有没有一个数据字典(data dictionary)能够告诉我们这些数据是如何收集并记录下来的,或告诉我们应该如何解读(例如,这些数据采用的是什么样的计量单位)?总之,完整的数据应该是完备而具体的,并且带有良好的注释(当然除此之外可能还会具备其他一些特征)。由于这样的数据更有可能帮助我们通过分析得出有效的结论,因此我们认为只有这种数据才是比较完整的数据。然而在大多数情况下,你会发现自己拿到的数据集并没有同时具备这几个特征,因此,你必须要意识到该数据集的不足之处并想办法对其进行改进。这通常意味着你需要寻找其他一些数据来补充这套数据、给这套数据增加相关的信息,或者扩展这套数据,以弥补其不足。为此,你必须跳出数据,寻求专家帮助,也就是说,你要寻找设计、收集和处理过这套数据的人,或者对你想要通过这套数据来解决的那个问题很熟悉的人。

1.2.2 数据的适合程度

某个数据集可能很完整,但这并不意味着它是一个高质量的数据集,因为这些数据未必符合你的需要。比如,你想知道哪一个Citi Bike(纽约市的一种共享单车系统)站点在最近24h内的租车量与还车量最大。这个API能够提供实时的Citi Bike信息(http://gbfs.citibikenyc.com/gbfs/gbfs.json),这是一套相当完整的数据,但这套数据并不能很好地回答你所要研究的问题(也就是某一天最繁忙的Citi Bike站是哪一个)。这个问题采用Citi Bike的“trip history”数据(行程记录,参见https://s3.amazonaws.com/tripdata/index.html)来分析应该会好得多。

数据的适合程度当然不可能总是这么简单地判断出来,我们通常必须认真地执行大量工作,然后才能知道这套数据到底适不适合解答我们的问题,或者适不适合用在我们的项目中。这些工作是必须花时间去做的,如果在判断数据的完整程度或适合程度时偷懒,就会影响数据整理的总体效果,使得整理出来的结论变得水平较差或是较为离题。目前许多计算系统所表现出的缺陷都跟数据的适合程度有关。例如,有的系统会用某一个指标(比如收入)来反映另外一个与之相关(但却有本质区别)的指标(比如受教育程度),这样会得出歪曲的结论,这种结论无法反映事实,而且有时会造成严重的后果。当然了,在某些情况下,间接测量是免不了的。例如,医院在处理急诊时,可能需要先根据病人的可见症状做初步医疗诊断,然后再等待更为权威的检查结果。这样的做法对于个别的事例来说是可以接受的,但这种间接测量法所测量的指标跟你真正关注的那个指标之间毕竟有相当大的差距。如果涉及的数据量或者需要使用分析结论的这个系统规模比较大,那么这种偏差带来的影响会相当大。采用这种方法来整理并分析数据会得出相当扭曲的结论,这种结论严重偏离了我们本来想要反映的事实。第3章会详细介绍预防此类错误的各种方式。

拆解COMPAS

有个著名的例子可以说明在大规模计算系统中,以不恰当的方式使用间接数据会造成何种危害,这个例子是ProPublica[3](这是一个非营利的新闻调查机构)的一些记者几年前发现的。在“Machine Bias”系列报道(https://www.propublica.org/article/machine-bias-risk-assessments-in-criminal-sentencing)之中,记者研究了一个名为Correctional Offender Management Profiling for Alternative Sanctions(COMPAS)的算法,该算法用来预测被告在获得假释之后是否会重新犯罪,记者想知道该算法对黑人和白人所做的预测有何差异。他们发现,总的来说,在犯罪记录相似的情况下,该算法对黑人所给出的风险分数要高于白人,这在很大程度上是因为该算法在预测重新犯罪的风险(或者说,在给重新犯罪的风险“建模”)时所使用的数据是间接数据,也就是说,它是根据被捕率来推断犯罪率的。但问题在于,美国黑人有时并不是因为真的涉嫌犯罪而被捕。根据这样的数据来评估重新犯罪的风险,所得出的结论自然也是有偏差的[4]

这种因为使用了不当数据而造成巨大伤害的例子还有很多。因此,数据不仅要完整,而且必须恰当,这两者对数据整理工作来说都是必不可少的。使用不恰当的数据不仅会得出错误的结论,而且有可能导致有人因此受到伤害。