我从新冠数据里学到的四个数据科学基础知识

大数据 数据分析
现在,让我们一起来看看COVID-19的报告数据,感受一下如果不提前检查数据就开始构建模型,我们将会出现哪些错误。

[[323265]]

大数据文摘

出品来源:medium

编译:千雪、aileen

虽然现在大家很容易获取机器学习和数据科学的学习工具,但是除了学习如何使用工具以外,往工具里输入数据之前如何有效地探索数据,并找出其局限性也同样重要。

最令人惊讶的是,总有很多人经常不看数据就开始构建模型,这很明显是一个错误行为。想构建一个有效的模型,就必须了解如何收集数据,以及数据之间在哪些地方存在差距。无论你是要处理Excel表格里的几百行数据还是TB级别的图像分类数据集,这都同样重要。

因为数据是从现实世界中收集而来的,而现实世界充满了怪诞奇葩的事,所以每一个现实世界的数据集也都充满了不确定性。目前在COVID-19流行期间,人们日常关注的疫情数据就是如此:每天收集整理并修正来自全世界的数据,这并不是一件容易的事。因此,你现在看到的报告数字,就显示出了你在其他现实世界的数据集中也能看到的差别和问题。

现在,让我们一起来看看COVID-19的报告数据,感受一下如果不提前检查数据就开始构建模型,我们将会出现哪些错误。

第1课:不同的数据收集方式会创造出并不真实的数据趋势

COVID-19的国际报告标准是要求每个国家或地区报告医院的每天死亡人数,这样就可以比较出该疾病是如何影响不同的国家的。

我们来看看英国报道的每日数字:

英国因COVID-19导致的每天死亡人数:每个周日/周一死亡人数都会大幅下降!

请注意,该报告的死亡人数遵循着完美的每周周期:死亡人数在每个星期之初(即周日和周一)发生显著下降。这是一个非常有趣的发现,对模型可能会产生巨大影响。让我们猜测一下,是否是因为那两天人们的物资待遇或生活方式有所不同,所以才会导致不同的结果?

然而,这个每周的周期是假的,它只是一个涉及到数据如何收集和报告的人工产物。

每个医疗机构每天向中央机构报告一次死亡总数,英国报告的总死亡人数就是用这些数字的总和减去昨天的数字。

这会导致两个明显的问题:

  • 一天的总和可能是(甚至通常是)不完整的。如果有医疗机构未能及时报告或报告不全,那么这些死亡人数就不会计入英国当天的死亡总数,而是汇总到未来一天的总数中。
  • 每个医疗机构报告的死亡人数总和与英国范围内向公众报告的死亡人数总和之间存在1天的延迟。

那么解释这个每周的周期就很简单了。周末时医院人手不够,他们没法及时报告自己的全部死亡人数。延迟报告就会导致周末时死亡人数下降,而周末之后死亡人数相应上升。由于报告滞后了一天,因此数据中是周日和周一显示死亡人数下降,而不是周六和周日。

这就是数据集的常见问题——不同的数据收集方式会制造出真实数据本身并不存在的数据趋势。再举个例子,许多免费的图像数据集是由攻读博士学位的研究生创建的。因此,如果你想从网上获取带有汽车图像的随机数据集,那么你可能会获得很多校园停车场中的小汽车图片,而不会有很多大型卡车的图片。但是在美国,皮卡车与小汽车的销量却几乎是3比1!

第2课:一定要多多探究离群值

数据集里几乎总是会存在离群值(也叫逸出值,是指数据中有一个或几个数值超出了其余数值的范围),但你绝不会希望你的数据分析里一直出现离群值,这是因为离群值可能只是简单疏忽或异常事件发生的结果。所以,探究离群值是一件很重要的事,

这样就可以确定在数据分析中是否应当包括它们,还是将它们排除出去。

这是全球实时数据统计网站worldometers.info提供的中国COVID-19新增病例报告的比率:

每日新增病例

2月12日有一个巨大的离群值,中国报告了14108例新增COVID病例,这一天的增加量是前一天新增病例的好几倍。

如果你盲目地用这些数据建立模型,那么这个离群值会把整个模型的结果弄乱。相反,如果你认为这个离群值代表真实事件,则可能会误导你以为2月12日左右发生了一些特殊情况,所以导致感染增加。

然而事实上,出现这种大幅度跃升情况的真正原因是中国于2月12日更改了报告方法。在此之前,中国仅报告由RNA病毒测试方法确认的病例。但是由于测试瓶颈,医生同时也通过胸部X光片来检查患者的肺部症状,以此筛查COVID-19病患。2月12日,中国将之前所有通过X光片确诊的病例也进行了报告,这才导致报告病例激增。也就是说,这些病例并不是全在2月12日这一天发生,只是在那天将他们全部添加到了报告总数中。

只要你做一下搜索,很容易为这个离群值找到解释。而有了这些信息,你就可以决定如何处理这个离群值。但如果你在开始建模之前没有真正仔细查看数据,就不会发现这些。

第3课:对地理数据进行归一化

大家特别容易忘记的一个基本技巧是,用人口或其他具有代表性的因素对数据进行归一化后,按地理区域收集的数据总是更有意义。毕竟,一个拥有500人的村庄,与一座800万人口的城市相比,300例病例代表的发生概率要大得多。

例如,下面这张地图使用了政府提供的统计数据,截至2020年4月8日为止,以伦敦每个区的COVID病例数为阴影:

伦敦各个区的COVID病例数分布图,颜色更深=病例更多

然而问题在于,不同的行政区有不同的人口数量。当我们在地图上仅仅使用病例数进行着色时,最终不可避免地还是要重新绘制人口图。

在这个地图上,位于城市最南端的克罗伊登(Croydon)和位于市中心的南华克(Southwark)具有相同的颜色。但是克罗伊登的人口比南华克多20%,而且面积更大。如果仅仅因为这两个地区的病例数相同,就说这两个地区受到同样的影响,这是没有道理的,因为克罗伊登的感染率相对更低。

那么解决方案就是通过人口等其他因素对地图进行归一化。只需要简单地将每个区的病例数除以该区的总人口数,就可以得出发病率。使用发病率来绘制,我们将获得一个更容易理解的地图,从而评估受影响最严重的区域:

伦敦各个区按2018年人口标准化的COVID病例数分布图,颜色更深=病例更多

如果按人口划分,我们会发现克罗伊登(Croydon)的发病率只是中等水平,而泰晤士河边的南沃克(Southwark)是受灾最严重的地区之一。

在美国这样人口分布非常不均的国家查看国家或地区级数据时,这种影响甚至更大。在美国,几乎所有人都居住在东海岸、西海岸或德克萨斯州附近。相比之下,其他大部分地区都人口稀少。如果我们对数据不进行归一化就绘制美国地图,最终可能只是按照人口密闭度画了地图。

第4课:对一些出乎意料的结果保持怀疑并多次检查

无论你多么努力地去理解数据然后建立正确的模型,总会有无数种方式导致模型意外出错。因此,如果你将数据输入模型后,得出了一个出乎意料的特殊结果,那么你应该考量一下,是否要对数据有所怀疑,并且仔细检查是否遗漏了数据。

IHME创建的模型是报告美国COVID-19疫情的模型之一,该模型预测了COVID-19的流行高峰期和对医疗保健系统的总需求。他们预计在美国将造成约6万人死亡:

IHME预测的美国COVID死亡人数

他们最近还增加了对英国的预测,尽管只是初步预测,但预测的死亡人数甚至更高,达到66,000:

IHME预测的英国COVID死亡人数(旧)

这是一个非同寻常的预测。该模型表示,人口约为3.3亿的美国,将比人口约为6600万(美国的1/5)的英国死亡人数更少。由于差异如此之大,在我们搞清楚原因之前,应当对此有所怀疑。

这种怀疑与该模型创建团队的能力或工作质量无关,毕竟非常确定性地去预测一个罕见事件,这本就是一件难事。模型可以帮助我们了解不同的变量是如何驱动结果的,但它们也仅仅只是模型。所以我们不能盲目地相信模型,每当我们看到比较极端的预测结果时,都应当去尝试了解到底发生了什么。

新模型发布后的头几天,英国报告的实际数字都低于该模型的最低预测范围。于是几天后,IHME就用更大的置信区间更新了这张图,这代表该预测具有更多的不确定性:

IHME预测的英国COVID死亡人数(新)

即使有了新的置信度区间,该模型仍然预测出了比其他团队类似模型预测的更高的数字。伦敦帝国理工学院的Neil Ferguson教授在媒体上引用了这个模型,他认为这个模型在英国的预测是有缺陷的,因为IHME错误地模拟了医院利用率,而他的模型则预测出了更低的数字。因此,现在我们就能看到这样的案例,两个单独的模型给出了两个完全不同的预测范围。

当然这并不是什么坏事。探究别人的模型,本就是检验自己的假设和模型中是否存在未考虑因素的好方法。真正糟糕的情况是我们盲目地相信任何特定的模型,因为没有一个模型可以完美地处理所有的极端情况。

同样,我们也要对自己的模型保持质疑——如果你觉得结果令人匪夷所思,那么就假设你的模型犯了一个错误,去探究,去查看,直到你搞清楚为什么会得到这样的结果。总而言之,不要盲目相信自己的模型!

当作者发表这骗文章几小时后,IHME更新了他们的英国模型并将其对英国死亡人数的预测从66,314大幅度降低至37,494(降低了近50%)。然而这个数字仍然比其他模型的预测值还要高一些,不过已经接近多了。因此,这个故事的寓意是正确的——对意外的结果要始终保持怀疑~

相关报道:

https://medium.com/@ageitgey/four-basic-data-science-lessons-illustrated-by-covid-19-data-7d94134a5b0e

【本文是51CTO专栏机构大数据文摘的原创译文,微信公众号“大数据文摘( id: BigDataDigest)”】

     大数据文摘二维码

戳这里,看该作者更多好文

 

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2023-07-06 07:09:03

云原生工具架构

2020-04-29 13:40:32

数据集数据科学冠状病毒

2017-12-19 08:38:34

驱动边缘计算

2022-06-02 08:00:00

数据科学机器学习工具

2024-02-20 18:23:25

PyCharm插件代码

2021-12-13 09:11:41

数据中心IT网络

2020-07-27 10:25:28

医疗行业数据分析大数据

2020-10-22 08:28:04

大数据架构技术

2018-11-19 06:00:32

数据科学家数据科学

2021-12-03 14:37:38

数据备份存储备份

2016-08-22 15:15:14

数据实践

2017-06-28 09:58:11

2015-08-26 14:15:12

数据挖掘

2020-08-17 15:21:22

数据项目架构

2011-05-12 10:18:41

数据库基础知识

2023-09-22 14:57:21

2016-08-29 23:00:29

大数据数据分析

2022-05-13 10:50:09

数据模型谷歌

2023-11-13 10:00:09

数据中心服务器

2011-02-25 09:37:35

点赞
收藏

51CTO技术栈公众号