根据谷歌趋势数据,2020 年最热门的俚语
从“simp”到“wfh”,这 10 个词在过去的一年里占据了互联网
谷歌趋势可以告诉我们很多关于语言的信息——它经常被用来分析地区俗语或趋势话题。对于这个项目,我想看看我是否可以使用谷歌趋势来确定全年上升的俚语词汇。
我对“俚语”的标准如下:
- 这个词必须在 2020 年出现,这意味着它在前几年很少被搜索到
- 人们不知道这个词的定义,这意味着人们在搜索“____ 定义”、“什么是 ”和“_ 字典”等。
第一点确保我们的列表不会充满像“woke”或“karen”这样的既定单词——我们最终列表中的每个单词都是在 2020 年首次出现的。
第二点确保我们列表中的单词是新的*,因为人们以前没有听说过它们——例如,“选举”肯定是一个可能在 2020 年“出现”的单词,但很少有人会搜索选举的定义。*
正如我在上面所说的,我使用谷歌趋势来确定十大名单。这个项目的完整代码可以在这里看到。
我首先建立了一个过去一年的相关查询数据集,包括以下术语:“字典”、“定义”、“定义”和“城市字典”。我使用了 Google trends API 的 Python 包装器 pytrends 来收集这些数据。
***import** **pandas** **as** **pd**
**from** **pytrends.request** **import** TrendReq pytrend = TrendReq()
pytrend.build_payload(kw_list=['define', 'definition', 'dictionary', 'urban dictionary'], timeframe='2019-12-30 2020-12-29')related_queries = pytrend.related_queries()*
related_queries()命令为我们的关键字列表中的每个术语返回相关查询的 pandas 数据帧的字典。输出可能如下所示:
*{'define': {'top': query value
0 define synonym 100
1 define meaning 83
2 definition 63
3 synonyms 27
4 what does define mean 11
5 dictionary 8
6 define health 7
7 define management 6
8 define coronavirus 6
9 define love 6
10 define computer 5
11 define force 5
12 pandemic define 5
13 pandemic 5
14 thesaurus 5
15 define environment 4
16 define concept 4
17 define community 3
18 define values 3
19 define verb 2
20 define objective 2
21 define essential 2
22 define furlough 2
23 define simp 2
24 define racism 1,
'rising': query value
0 define coronavirus 29400
1 pandemic 3450
2 pandemic define 3350
3 define furlough 850
4 define simp 850
5 define quarantine 850
6 define asymptomatic 300
7 important synonym 180
8 however synonym 160
9 define wap 160
10 define synonym 150
11 synonyms 120
12 the song that define your life 120
13 define meaning 100
14 define asynchronous 90
15 define endorse 80
16 define racism 70
17 define endurance 70
18 define parasite 70
19 define evoke 70
20 define apprehension 70
21 define prefer 70
22 define deviant 60
23 thesaurus 60
24 define condemn 60},
...*
如您所见,该调用返回了两个字典,一个名为“rising”,另一个名为“top”。出于我们项目的目的,我们对出现在‘rising’字典中的相关查询感兴趣。
在连接每个关键词的数据框架并过滤掉重复的术语后,最终的数据集有 95 个来自 2020 年的潜在俚语词。
然后,我开始量化每个词的搜索兴趣,以确定前 10 名。这是一个相当简单的过程,因为 Google trends 允许您传递多个术语进行比较。
经过计算,我有了我的前 10 名!这是:
图片作者。
上图显示了每个单词的两个图表——2020 年和 2004 年以来的利息。第一张图显示了这个词在一年中的流行程度,第二张图证实了所有这些词在 2020 年都是“新”的。
除了…是真的吗?像流行病,无症状这样的词肯定已经存在很长时间了。为什么他们会出现在这个名单上?
是的,“流行病”无论如何都不是一个新词,但是 2020 年“流行病”的搜索量绝对让前几年的搜索量相形见绌。无症状、休假和隔离也是如此。我相信我们都知道为什么会这样。
事实上,这个列表中不到一半是真正的俚语。我不认为这是因为方法有缺陷,而是因为今年的环境使得语言趋势几乎完全由外部事件驱动。
查看 2018 年布丁的一个类似项目可以发现,当年的热门词汇是“incel”、“uwu”等。——这些词大多来自互联网,并没有受到“真实世界”的巨大影响
2020 年名单上的几个词在某种程度上与新冠肺炎·疫情有关。让我们再来看看这个列表:
图片作者。
这个列表中唯一真正的俚语是 simp,BIPOC,wfh 和 WASP mom。甚至 wfh 也受到了新冠肺炎疫情的激励,而 BIPOC 可能是对黑人的命也是命抗议和呼吁种族公正的回应而变得更受欢迎。
2020 年是非传统年,这个榜单也证实了这一点。这些词不是在小众群体中冒出来并慢慢流行起来的——这些词是随着我们日常生活的环境突然发生巨大变化,我们被迫理解和适应的。
我所能说的是,“冠状病毒”在这个名单上名列前茅是恰当的,它在许多方面都被疫情打上了标记。事实上,“冠状病毒”是一个在 2020 年之前很少有人使用的词,并且在全年的日常对话中几乎占据了主导地位。
不确定其中一些单词的意思,或者想了解我的更多数据科学项目?考虑查看我的 youtube 视频和我的频道,我在那里发布了大量数据科学内容!
人类偏差-准确性权衡
理解历史数据如何导致算法偏差以薪酬预测模型为例
做人就是要偏心?
“偏向”是一种倾向或倾向偏向或不偏向某一组。所有的人类都有一定程度的偏见,因为我们天生就有辨别不同威胁的能力。由于这种隐性偏见,我们倾向于无意识地将特征和品质归因于社会中通常被污名化的群体。这些包括基于性别、种族、国籍或地理遗产的群体。根据斯坦福大学哲学百科全书****
“对‘隐性偏见’的研究表明,人们可能会基于偏见和成见行事,而并非有意为之”
现在,如果我们知道并理解了这个事实,我们就有办法消除这种隐性偏见,即意识到并认识到它是如何影响我们的认知决策的。这将包括有意识地努力改变陈规定型观念,调整我们的视角。
图片来源: GIPHY
对准确性无止境的追求
机器学习的目标是获得最准确的预测。数据科学家有几个指标可以通过最小化已知的预测误差来量化这一既定目标。在回归问题的情况下,这些度量是均方根误差、平均绝对误差、R 平方值等。对于分类算法,度量包括 AUC、准确度、精密度、灵敏度、特异性等。使用几种方法来进一步调整,然后微调参数和超参数。
一切都归结为优化一个特定的权衡——偏差-方差权衡;确保我们对人口数据的任何部分都有准确的预测。
被忽视的权衡
在获得更高准确性的同时,一个事实被遗忘了——人类收集的数据充满了人类偏见。《卫报》很好地阐述了这一事实:
虽然可以说神经网络可以编写自己的程序,但它们是朝着人类设定的目标,使用为人类目的收集的数据来这样做的。如果数据有偏差,即使是偶然的,计算机也会放大不公正。
人类偏见可以在数据科学管道中的任何一点出现,并以 算法偏见 的形式出现。当然,收集的数据的多样性是最容易受到影响的一点。如前所述,这也与优化偏差-方差权衡有关。此外,这些数据要么是由人收集的,要么是由人设置的数据收集过程。这意味着,不知不觉中,数据收集的代理人也可能是进入管道的偏差的来源。此外,从所生成的预测中得出的见解也会受到解释结果的人的主观性的影响。算法偏见的直接影响可能是针对或针对特定人群的歧视行为。
令人惊讶的是,这并不是一个新问题。文章“我们对人工智能中的偏见做了什么”(HBR,2019)讲述了早在 1988 年,一所英国医学院根据算法做出录取决定,被发现对女性和非欧洲名字的人有偏见。有趣的是,这种算法在匹配人类决策时表现出 90–95%的准确性。
《华盛顿邮报》在 2016 年的这篇文章中强调了算法偏差的一个更近的例子。它谈到了在美国全国范围内用于保释判决的软件 COMPASS,ProPublica 组织发现该软件对非裔美国被告有偏见。
让我们看一个例子
工作场所的性别差异一直存在,并且仍然普遍存在。因此,历史员工数据必然会有不利于女性的趋势。为了理解算法偏差,让我们以上市公司高管的历史薪酬数据为例。我们制作有和没有高级职员的特征 ’ 性别 ’ 的模型来预测他们的直接报酬。此外,我们对结果进行比较,以了解包含对偏差敏感的特征会如何导致歧视性结果。**
关于数据
这些数据是使用沃顿研究数据服务从 BoardEx 获得的。它涵盖四个地理类别:美国,英国,欧盟(欧盟),所有其他国家。我们使用了两个数据集来获得与上市公司高管薪酬相关的不同特征:
**1.**薪酬数据:包括关于现在和过去的股票期权持有量、直接薪酬、从每个职位退休的时间、在公司服务的时间、关于董事会的信息(如果服务)、公司的部门类别、关于过去的董事会的信息(如果服务)。
**2.**个人资料特征:包括性别、学历、年龄、网络或关系等数据。
详细的数据字典可以在这里访问。
数据清理
由于公司拥有多个代码,数据中存在重复值,这些重复值已被删除。之后,数据中唯一 BoardIDs(公司董事会的唯一标识符)的数量为——17K 来自美国,5K 来自欧盟和英国,大约 8K 来自其他国家。最终合并数据(所有国家)包含大约 32.5 万名董事/高级管理人员的信息。
然而,对于每一位董事来说,这些数据都来自公司不同年份的年度报告。例如,如果一名董事从 2000 年至 2010 年为一家公司服务,则该董事-公司配对有 10 个条目。为了我们的分析,我们保留了董事-公司配对,其中董事 X 在公司 y 中的直接报酬总额最高。
在选择了与我们的分析最相关的变量之后,即在决定一位高级官员的报酬时最重要的变量之后,最终的数据集有 80879 行和 21 个变量。现在,我们的数据是这样的,每一行是一个独特的董事-公司配对。
数据集中变量的描述(按作者)
注: 在我们的分析中,我们将使用直接薪酬总额作为因变量(Y)。
数据快照(按作者)
探索性分析——数据真的有偏差吗?
按作者
仅从数据中女性和男性的数量来看,我们看到了巨大的差异。我们有 9908 名女性和 70971 名男性高级军官!
性别比例或男性高级官员比例的分布也证实了这一点。
按作者
让我们看一下按性别划分的 表示总直接薪酬 。如下所示,男性的平均直接报酬总额几乎是女性的两倍。
按作者
现在,让我们来看两个变量,它们可以被视为访问机会的代理。
按作者
令人惊讶的是,两性在公司度过的时间分布并没有太大差异。表明高级官员不分性别,给公司的时间相等,但得到的报酬不同。
按作者
比较按性别划分的高级官员资格数量的分布,我们看到,总体而言,女性往往拥有更多资格。这可能表明一种趋势,即要达到与男性同等的水平,女性需要更多的资格。
建模方法
按作者
我们首先尝试 Lasso 回归,看看性别变量是否会被模型拾取。我们的 因变量 或 Y 是 总直接补偿
该模型不仅选择性别作为特征,而且预测男性的总直接薪酬比女性多大约 135 个单位。套索的 R 平方为 0.38。因此,该模型只能解释直接薪酬总额中 38%的差异。
此外,为了获得更高的精度,尝试了梯度提升,其给出了 0.57 的 R 平方。因此能够在总直接薪酬中获得更高的差异。
与我们的预期相反,根据 GBM,“性别”并没有成为一个重要的变量。然而,男性的平均预计直接报酬总额几乎是女性高级官员的两倍。为了进一步研究这个问题,我们运行了一个 GBM 模型,没有将“性别”作为一个变量。尽管如此,女性高级官员的平均预计直接薪酬总额仍低于男性。
我们例子的局限性
虽然我们举了预测直接薪酬总额的例子,但重要的是要考虑到没有组织使用这种使用性别、种族、国籍等变量的算法。为了这个目的。选择这个数据集是为了说明历史数据是如何促进预测中的社会偏见的!另一点要记住的是,对于大多数公司的高级管理人员来说,提供的薪酬不仅仅是直接的。薪酬有间接成分,包括股票、期权和长期激励计划。由于这些特征的稀疏性,它们没有包括在分析中。由于数据涵盖了不同国家的组织,了解不同国家的薪酬、税收优惠和公司结构也很重要。因此这可能扭曲了结果。
记住这些警告,即使预测的准确性提高了,简单的预测性薪酬分析也可能产生带有社会偏见的结果,这一点仍然很重要。
结论
那么,我们能做些什么呢?我们如何利用机器学习做出道德的预测?
一个解决方案是使用砝码。
1.为可能受到社会偏见影响的每一类人口的隐含偏见的变量增加不同的权重。例如,在罗盘称重或归一化的情况下,可以使用非裔美国人和他们的白人同伴按人口比例的先前被捕人数。
2.给予其他独立于社会偏见的变量更多的权重,如犯罪的严重性,而不是之前的逮捕。
另一个解决方案是用实时数据监控模型结果,假设数据中的社会偏见会随着时间的推移而减少。
记住这一点,为了预测的公平性,向“可解释的 ML/AI”的转变将传播和产生更多社会公正的数据。这一方向的重要一步是欧盟的通用数据保护条例或 GDPR。数据的使用受到更多的监管,对敏感的人口特征,如性别、种族、民族血统、国籍、地理位置、宗教信仰、遗传、工会会员资格等进行特殊保护。根据第 9 条。
该法规中另一个有趣的地方是,根据第 4 条,法律甚至将消费者的在线位置数据视为个人数据;根据第 6 条,任何个人数据的使用都需要征得所有者的同意。此外,根据第 13 条,公司必须告知消费者他们的数据是如何被利用的。
我们仍然不知道人类的偏见在多大程度上影响了机器学习算法的公平性。但正如雪莉·桑德伯格所说的那样,“ 我们不能改变我们不知道的,一旦我们知道,我们就不能不改变 ”!
参考
[1] 《欧盟一般数据保护条例》(问答), 人权观察 (2018)
AlphaFold 上的宣传随着这种新的预印本不断增长
查看这项新工作,通过将 AlphaFold2 与强大的蛋白质序列匹配器 MMseqs2 集成,使 alpha fold 2 的全部功能变得更加大众化。
这个故事介绍了 ColabFold,这是一套 Google Colab 笔记本,它将一种强大而快速的序列匹配方法与 AlphaFold2 相结合,同时还公开了它的所有功能,以便在全球范围内免费访问蛋白质建模的最新技术。文本“蛋白质”不是打印错误,而是代表真实的标准氨基酸的单字母代码。图由作者根据自己的截图合成。
通过将 AlphaFold2 与 MMseqs2 套件集成用于计算多序列比对,第一个正式发布的cola bfold——正如其作者所命名的——允许用户在没有任何硬件或软件负担的情况下最大限度地利用 AlphaFold:预测单体蛋白质及其同源和异源复合物的结构,通过分子动力学模拟对它们进行精炼,并通过预测模型质量的指标对它们进行评分。
我相信你在 2020 年末读到过 AlphaFold,当时它在蛋白质结构建模方面“赢得了”CASP14“竞赛”,在 2021 年 7 月同行评审论文和人工智能模型发布时也读到过。如果不是,或者如果你想更新什么是蛋白质结构,为什么生物学家几十年来祈祷程序能够准确预测它们,以及 AlphaFold 如何工作和执行,然后检查这个故事和这个,然后回到这里。
这个新故事给你带来了最新的消息,基于刚刚出版的预印本。
目录
这个故事是基于刚刚在 bioRxiv 上发布的预印本,它正式描述了一个在 moto 下被称为 ColabFold 的工具,该工具使所有人都可以访问蛋白质折叠(我宁愿将其称为使所有人都可以访问 现代蛋白质结构建模 )。
由德国马克斯·普朗克生物物理化学研究所的米洛特·米尔迪塔、美国哈佛大学的谢尔盖·奥夫钦尼科夫和韩国首尔国立大学的马丁·斯坦内格创建的 ColabFold 是一套从早期原型演变而来的谷歌 Colab 笔记本电脑,允许用户只拥有一台计算机、互联网连接和一个免费的谷歌帐户,在谷歌提供的硬件上使用最新的尖端机器学习技术来运行蛋白质结构预测;此外,受益于一些优化,减少了运行时间,而不影响结果的质量,并利用现代工具快速生成多个蛋白质序列比对-正如我在其他故事中解释的那样,这对确保准确的结果很重要。
更准确地说,ColabFold 允许用户运行 AlphaFold2 或 RoseTTAFold(一个基于学术人工智能的程序,来自贝克实验室,蛋白质结构预测的学术领导者之一,它出现在 CASP14 之后,因此尚未正式评估,但显然与 AlphaFold2 的性能接近),并结合 MMseqs2 程序的快速多序列比对生成。用户也可以上传他们自己的比对,这对于非常复杂的蛋白质或蛋白质家族,或者来自专有数据(如宏基因组学项目)的比对来说可能很方便。
使用 MMseqs2 优化生成蛋白质序列比对改进了模型并减少了运行时间
正如近年来 CASP 论文中广泛显示的(例如参见我的同行评审 CASP13 评估),所有这些方法的性能的关键在于计算大量的多重序列比对,在理想情况下,大量的序列平滑地覆盖了整个靶蛋白。因此,比对的初始编译至关重要。更复杂的是,典型的蛋白质序列数据库包含数百万到数十亿个序列,但当然只有非常小的子集对应于相同结构家族的蛋白质,这些蛋白质是人们想要在多序列比对中显示的蛋白质。这就是 ColabFold 的 MMseqs2 组件的用武之地。
Martin Steinegger 和 Johannes Sö ding 的 MMseqs2 是一个在巨大的序列数据库中搜索敏感蛋白质序列的程序。我不会进入任何细节,但描述 MMSeqs2 的论文可能会引起数据科学家的兴趣,因为该程序的核心目标是加速序列搜索。ColabFold 通过对专用服务器的 API 调用来执行 MMseqs2 程序。作者优化了他们的序列数据库中包含的蛋白质序列的大小和可变性,以便通过反复运行该程序几次,他们可以产生大量的、信息丰富但易于处理的比对。在预印本中,作者事实上表明,MMseqs2 产生的这些多序列比对导致 AlphaFold 2 比通过其定制的多序列比对获得的预测更准确,并且运行速度快一个数量级。
超越单体“分离”蛋白质的简单建模
绝大多数蛋白质不是作为孤立的分子工作,而是作为复合物工作,或者与自身(所谓的同二聚体、同三聚体等,或一般的同寡聚体)或者与其他蛋白质(称为异二聚体、异三聚体等)一起工作。).主要的评价是发现 AlphaFold2 在 CASP14 中“胜出”,是在模拟蛋白质自身的结构方面,但也有一些迹象表明 AlphaFold2 也正确地模拟了蛋白质复合物。Minkyung Baek 和 Yoshitaka Moriwaki 在早期的 Google Colab 笔记本中对此进行了进一步的探索,然后 ColabFold 的作者最终将这种可能性集成到了已发布的笔记本中。因此,ColabFold 用户可以很容易地模拟分离的蛋白质以及它们的同源和异源复合物。对于异源复合物来说,进行比对是很棘手的,但 ColabFold 的作者已经处理了所有这些负担,为用户制作了一个非常简单的界面,只需勾选寡聚化状态并输入相关蛋白质的不同序列。
值得注意的是,AlphaFold 本身无法辨别一种蛋白质是单体的、同二聚体的、与另一种蛋白质是异二聚体的等等。这种信息有时从生物化学或生物物理实验中得知,在这种情况下,它被用作输入。如果没有这方面的提示,那么用户可能应该在不同的模式下运行预测,并严格比较结果。
普通用户和高级用户的口味
正如 GitHub 官方页面中所述,ColabFold 包括为不同类型的运行定制的各种笔记本:一个用于 RoseTTAFold,一个用于 AlphaFold2 的简单模式,仅允许运行单体蛋白质,但只需做出最少的决定,另一个用于 AlphaFold2,具有完全暴露的功能,允许完全控制寡聚化状态以及用户可以尝试的其他选项。
根据用户登录 Google Colab 时分配的确切 GPU 资源,可以对多达 1000 到 1400 个氨基酸的蛋白质进行建模,这涵盖了大量感兴趣的蛋白质。对于更大的蛋白质,或者为了更多的隐私或方便,用户也可以获得生成的代码,下载整个 AlphaFold 程序和 MMseqs2 生成的比对,并使用其自己的 GPU 在本地运行一切(甚至可以受益于笔记本中的代码)。
质量评估
这些用户友好的界面不仅为用户提供了蛋白质结构的模型,还提供了对它们质量的估计。这样的估计是必不可少的,我认为和预测本身一样重要,所以它们应该是准确的。这是因为最终用户应该知道模型的哪些区域是可靠的,即可能与真实结构相似,以及哪些区域可能无法很好地预测。当我在 CASP13 ( 这篇学术论文)期间担任学术评估员时,我强调了产生三种质量评估的重要性:一种是测量整体折叠的整体质量,另一种是单独测量每个氨基酸的质量,另一种是测量蛋白质中任何一对氨基酸之间的相对距离和方向的质量。ColabFold 笔记本提供了所有三个指标,如下例所示。
结果的完全在线可视化-示例运行
所有可调变量都输入到一个非常丰富的 GUI 的字段中,在此之上,用户当然可以手动修改代码。但是舒适的界面并不局限于输入。笔记本电脑具有丰富的图形输出,用户可以在运行过程中进行检查,并在最后检查所有的质量评估图,甚至是浏览器中的 3D 模型。
请看我对一种蛋白质进行的实际运行的结果,我知道这种蛋白质是同型二聚体,但我对它的结构知之甚少。在 ColabFold 笔记本中第一次点击安装所需的软件,然后设置蛋白质的序列并告诉笔记本我知道我的蛋白质是同型二聚体之后,我首先运行笔记本的 MMseqs2 模块以获得多序列比对,笔记本将在下一步将其输入 AlphaFold。MMseqs2 返回的校准由该总结图表征,其中我们希望顶部有更多的绿-青-蓝色调,并且理想情况下有更平坦的黑色轮廓,尽管这看起来不太坏:
对测试蛋白质运行 MMSeqs2 的结果,我知道它是同型二聚体。该图描述了 MMseqs2 可以检索的多重序列比对。理想情况下,我们会期望顶部有更多的绿-青-蓝色调,以及更平、更平滑的黑线。但这看起来还不算太糟。作者截图。
一旦比对完成(理想情况下,人们应该下载并探索其序列是否足够好,但这很难,因为 MMseqs2 返回大量的命中结果),我就进入笔记本的下一个模块,在那里我启动 AlphaFold2。在笔记本运行时,我可以监控 5 个预测模型的生产过程:
随着 AlphaFold 的运行,笔记本显示了产生的模型的静态图像,按链(每条链是一个蛋白质分子,见左边绿色和青色各一个)或预测 LDDT(一种预测蛋白质每个氨基酸模型质量的指标)进行颜色编码。随后,用户可以在 3D 中检查所有的最终模型。作者截图。
在 AlphaFold 运行结束时,我可以在那里检查每个 3D 模型,这要感谢一个 3Dmol 插件。请注意,5 个模型中的每一个都有一个平均预测 LDDT 分数,用于对模型进行排序。在这种情况下,所有 5 个模型在整个序列中都相当好(由高 pLDDT 值表示),并且它们彼此都非常相似,具有相当高的平均 pLDDT。然而,PAE 图确实揭示了形成二聚体的两条蛋白质链的相对位置的一些不确定性(在预测的比对误差图中白色到红色的阴影):
结果是 3D 模型和完整的质量评估指标:对于每个模型,用户得到预测的结构(左上角,在这种情况下用链着色)加上预测的 LDDT 对沿着蛋白质序列的位置的图(右上角,这里两次,因为这被建模为同型二聚体)和预测的比对误差的图(底部,其中同型二聚体的每个蛋白质链相对于自身和相对于另一个链作图)。作者截图。
通过分子模拟对模型进行改进
由 AlphaFold 或任何其他建模方法产生的模型可能存在各种问题,例如原子之间的冲突、未实现的相互作用等。当模型被预测为高质量时,通过分子动力学模拟进一步改进它们是有意义的。简而言之,在这种模拟中,蛋白质模型是在全原子水平上描述的,有时甚至有模拟的水分子在周围,并允许在给定的温度和压力下在现实物理中波动。目的是消除任何不切实际的冲突,优化几何结构,并满足相互作用和包装,特别是氨基酸侧链。
有几个程序允许运行分子动力学模拟。用户可以下载所有模型,并在本地计算机上用自己的方法和管道运行这些模拟。但是 ColabFold 允许用户在笔记本上运行模拟,只要模型的平衡版本在适当的位置。
结束语
Google Colab 中 MMseqs2 与 AlphaFold2 的结合提供了对蛋白质结构预测技术的免费访问,而不需要任何专门的、昂贵的硬件,也不需要安装任何软件。正如我在这里所讨论的,这将会彻底改变生物学,最好的是全世界的研究人员都可以免费使用它。
链接到文献、代码和笔记本
预印本位于 bior XIV:https://www . bior XIV . org/content/10.1101/2021 . 08 . 15 . 456425 v1 . full . pdf
ColabFold GitHub,包含所有发布版和原型笔记本的链接:https://github.com/sokrypton/ColabFold
Github 中的 MMSE QS 2:https://github.com/soedinglab/MMseqs2
MMseqs2 论文:https://www.nature.com/articles/nbt.3988
我以前在 AlphaFold2 上的故事:
喜欢这篇文章,想给我提示?【https://www.paypal.me/LAbriata】-谢谢!
我是一个自然、科学、技术、编程和 DIY 爱好者。生物技术专家和化学家,在潮湿的实验室和计算机里。我写我广泛兴趣范围内的一切。查看我的 列表 了解更多故事。 成为媒介会员 访问我和其他作家的所有故事, 订阅通过邮件获取我的新故事 (平台原创附属链接)。
假设检验者指南
一篇简短的介绍为什么我们可以拒绝假说,但不能接受它们的入门书,有例子和图像。
图片由作者提供。
假设检验是经典统计推断的基础。这是一个在不确定性下做出决定的框架,目标是防止你做出愚蠢的决定——前提是有数据证明他们的愚蠢。如果没有这样的数据… _(ツ)_/
假设检验的目标是防止你做出愚蠢的决定——前提是有数据可以验证他们的愚蠢。
这里的问题是,你只能用假设检验来否定一个愚蠢的选择,但你不能用它来接受一个好的选择。为什么?请继续阅读,寻找答案!
建立假设
一切都始于做出一个决定。考虑一下这个:您有一个大型数据处理管道,您认为它太慢了。因此,您重写代码以使用更有效的数据结构,并最终得到一个新的、有希望更快的管道版本。要做的决定是:你应该用新管道替换旧管道吗?
您希望您的决策是由数据驱动的,所以您收集了一些数据。您运行每个管道 50 次,并记录运行时间。旧管道平均需要 41 分钟才能完成,差异为 25。对于新管道,相应的数字是 38 和 29。
旧管道运行时间:均值= 41,方差= 38
新管道运行时间:均值= 38,方差= 29
现在,新管道的平均运行时间短了三分钟是因为它确实更高效,还是这些平均值只是偶然不同?找出答案的一个方法是多次重新记录两个管道的运行时间……但是这将花费更多的时间,不值得。进入假设检验!
在这一点上,你可以制定你的假设。通常,它应该与你实际想要证明的相反,你很快就会明白为什么。在我们的例子中,假设两条管道的平均运行时间实际上是相同的,甚至旧管道更快。这被称为无效假设,我们将试图拒绝这种假设。然后,还有另一个假设,包含了所有不包含在零中的东西,这里是:新管道更快。
通常,零假设被定义为与我们实际想要证明的相反。
零假设通常表示为 H₀,另一个假设表示为 H₁.所以,我们有这个:
H₀:旧运行时≤新运行时
H₁:旧运行时>新 _ 运行时
很好。现在,它们为什么是这个顺序?为什么不在零假设下假设新管道更快?这是因为零假设应该反映我们的默认行为,即:没有任何数据或测试我们会做什么。
在没有任何数据证明新管道更快的情况下,你不会冒着浪费时间和资源的风险在整个公司实施它,是吗?你的默认动作是不要将切换到新的管道*,除非*数据让我们相信它确实更快,我们应该拒绝零假设。
零假设反映了我们的默认行为:在没有任何数据或测试的情况下我们会做什么。
我们说过,我们只能拒绝一个假设,而不能接受它。我们有我们的零假设,即新管道实际上是而不是更快,这反映了我们没有切换到新管道的默认行为。接下来,我们将基于数据尝试拒绝它。如果我们能做到这一点,我们去新的管道。如果不行,我们就用旧的。
现在你可以明白为什么假设检验可以防止我们做出愚蠢的决定了。另一个假设可能是一个愚蠢的决定。如果不能更快,切换到新管道将是对时间和资源的愚蠢浪费。假设检验阻止我们这样做,除非数据证明新的管道更快,切换实际上并不愚蠢。
另一个假设反映了一个潜在的愚蠢决定。假设检验阻止我们去做,除非数据证明不是这样。
如果新的管道确实更快,但数据并不能很好地证明这一点,而我们错误地继续使用旧系统,那该怎么办?嗯……这就是我们在这里冒的风险。稍后详细介绍。
数据让你的零假设看起来很蠢吗?
好的,那么我们如何决定是否拒绝零假设呢?我们这样做是基于一种叫做测试统计的东西。它是根据某个公式计算出来的一个数字,具体到我们正在进行的测试。一般来说,一个数字要被认为是一个检验统计量,必须满足两个条件:
- 它必须可以从我们收集的数据中计算出来。
- 如果零假设为真,我们需要知道它的分布。
第一部分很简单,我们有两条管道的运行时间,我们可以编造这些数字来得到我们的测试统计数据。第二部分可能需要一些阐述。它说的是,假设零假设是真的,那么假设新管道不是更快,我们知道我们的测试统计有一个特定的分布。我们是怎么知道的?因为已经被证明了。数学上。这就是一些统计学家的谋生之道。
在我们的例子中,我们比较两组的平均值(旧管道和新管道的运行时间)。已经证明,如果真正的平均值相等,并且我们通过偶然性和随机性观察到差异,那么下面的检验统计量具有 t 分布。
t 统计公式,截屏来自维基百科。
顶部带破折号的 X s 表示两组的平均值, s 表示方差, n 表示测量次数,假设两组测量次数相同。回想一下,我们已经测量了每个管道 50 个运行时,所以 n=50 。这里没有魔术,一些基本的计算,我们得到我们的测试统计: t=2.887。
现在,我们知道这个检验统计量在零假设下的分布是一个具有 (2n)-2* 自由度的 t 分布——这是学术界的统计学家已经证明的。让我们把这个分布和我们得到的数字进行比较。
98 df 的 t 分布与观察到的测试统计值。图片由作者提供。
我们在这里看到了什么?蓝色密度表示假设空值为真,测试统计值取特定值的概率。不出所料,如果平均值相同,它们之间最有可能的差异是零,而相差五几乎是不可能的。
根据我们的数据计算的 t 统计量等于 2.887。这是什么意思?如果空值为真,那么得到这个值是非常不可能的。所以这两个中的一个刚刚发生了:要么得到 2.887 的极小概率自己实现了,要么零假设是假的。
如果新管道不比旧管道快,那么我们得到的 t-统计量将是极不可能的。所以,最有可能的是,零假设是错误的。
考虑到我们得到的这个 2.887,零假设开始看起来很愚蠢。得到 2.887 并且空值仍然为真的几率极小。你可能会问,有多小。量化答案的数字称为 **p 值。**假设零假设为真,p 值是获得 2.887 或更大数值的概率。换句话说,p 值就是蓝色物质与红色虚线右侧的比例。
p 值是位于红色虚线右侧的蓝色物质的比例。如果零假设为真,这是我们得到 t-统计的概率(或者更极端的概率)。
在这种情况下,p 值等于 0.00479,或 0.479%,表明零假设很可能是错误的。因此,我们拒绝它:我们宣布新的管道更快,我们高兴地切换到它!
我们能有多确定?
我们在这里所冒的风险是,空值实际上是真的,并且发生概率大约为 0.5%(即 200 次中有 1 次)的极不可能的事件已经发生。如果是这种情况,我们已经错误地拒绝了一个好的零假设或切换到一个新的更快的管道,这被称为假阳性或类型 1 错误。
这是我们必须接受的事实——犯这种错误的可能性只有 0.5%。如果我们一丝不苟,我们会在计算任何东西之前选择一个显著性水平。显著性水平是我们可以容忍的犯第一类错误的概率。特定值将取决于业务环境,例如,犯错误的成本。但是一般来说,我们可以说,错误拒绝零的概率不大于 1%。由于我们的 p 值小于这个值,我们可以安全地拒绝空值。
如果 p 值小于我们的显著性水平(可接受的风险水平),我们拒绝零假设。
但是想象一下,切换到新的管道需要关闭公司的所有系统一段时间。这是一笔巨大的成本,只有新管道确实更快,我们才能接受。在这种情况下,你的重要性水平可以是,比方说,0.1%,这意味着你只接受 1/1000 的机会切换到一个没有更快的管道。在这种情况下,p 值大于显著性水平,所以不要切换!数据中没有足够的信息让你证明新管道更快。
为什么不能接受 null?
所以,我们可以拒绝或不拒绝空值,这取决于我们的风险承受能力。如果我们拒绝零,我们说它是假的。如果我们不这样做,我们会说数据中没有足够的信息来拒绝它。但是为什么我们谈论拒绝,我们不能我们接受null 并且说新管道不是更快吗?
想想这个故事。在冰岛的时候,我非常想在野外遇见一只驯鹿。尽管我去过一些高地徒步旅行,但我还没有发现一个。这是否证明冰岛没有驯鹿?
如果我的无效假设是没有,我可以通过发现一只驯鹿来否定它。但是我怎么能接受呢?我可以说:发现驯鹿的几率很小。如果我待久一点,我最终会看到一个。
回到我们的数据。看一下这个情节。
蓝色:如果零假设成立,t 统计量的分布。格林:如果另一个假设成立。图片由作者提供。
如果零假设为真,蓝色密度也是 t 统计量的密度。但是如果它不是真的,那么 t 统计量可以有任何其他的分布。假设它有绿色的(现实中我们不知道),想象我们已经从数据中计算出我们的 t 统计量为 0.5
在零假设下,我们得到的 t 统计量是很可能的,所以我们不会拒绝它。但是在绿色分布下,这种可能性很大!因为我们不知道绿色,我们无法知道它是否更有可能在它下面。
当 t-统计量在空值下不太可能出现时,我们拒绝将空值作为假值。但是如果它非常有可能,在其他分布下它仍然可能更有可能。因此,我们永远不能接受零——我们只能不拒绝。
去贝氏是值得的!
所有这些都是所谓的经典统计学。如果它没有引起你的共鸣,并且你觉得 p 值阈值和置信水平有些武断,那可能是你本质上是贝叶斯主义者!
感谢阅读!
如果你喜欢这篇文章,为什么不 订阅邮件更新 我的新文章呢?并且通过 成为媒介会员 ,可以支持我的写作,获得其他作者和我自己的所有故事的无限访问权限。
需要咨询?你可以问我任何事情,也可以在这里 为我预约 1:1 。
也可以试试 我的其他文章 中的一篇。不能选择?从这些中选择一个:
理想的数据科学家并不存在(招聘经理也知道这一点)
办公时间
窥探招聘经理的心思
你不能读她的想法,是吗?(Unsplash 上 Dollar Gill 的照片)
你有没有盯着招聘启事,担心自己还没有技能?
你曾经希望进入招聘经理的思维吗?
你有没有申请过多份工作却没有任何回音的经历?
我有。我有。当然,我有。
我知道你至少回答了问题中的一个,如果不是全部三个的话。在我旅程的不同点,我也有同样的问题。当我觉得我已经学到了足够的数据科学知识,并建立了一个投资组合时,我开始在网上申请工作。很快,我意识到典型的策略是可怕的。
所以我稍微改变了策略。我会将我的简历定制为更少的职位,并从我的关系网中的某个人那里请求推荐。效果更好,但当我走进面试时,我不知道招聘经理在找什么。
我笨手笨脚,因为我没有信心。这种情况持续了一段时间,直到我幸运地获得了突破。进入这个领域和行业四年后,我意识到我一直是愚蠢的。是啊,蠢是对的词。
在这篇文章中,我将清除你头脑中所有的神话和疑虑,当我们完成时,你将有一个明确的战略来攻击你的数据科学求职。相信我,一直读到最后。
以下是对招聘经理想法的一次窥探
这是几年前的一个真实故事。随着新的潜在项目的出现,需要雇佣一批数据科学家。很快,我们就开始概述工作描述,并在网上发布广告。
数据科学的负责人,也是招聘经理,接手了这件事。当我们看到最终确定的职位描述时,我们很困惑。我们是一群经验不足三年的数据科学家,但新的数据科学家必须有至少五年的经验。反正广告就是这么说的。
作为一名好奇的队员,我问他发生了什么事。他告诉我的事情让我吃惊:
“如果有人有 5 年的经验呢?你知道,有经验的人总是更好,我们可以向他们学习。如果我们只要求 3 英镑,他们绝不会申请。”
很聪明,但是有个问题。
我通知了一位正在寻找这个职位空缺机会的前同事。尽管提醒了他两次,我还是没有收到他的简历和申请。我以为他有其他的计划,就让它保持原样。
几个月后,当我见到他时,他仍然对机会敞开大门。我准备给他介绍一份他非常适合的工作,但他忽略了这一点,但他仍在寻找机会。这说不通。他为什么要这么做?
“伙计,我看了你分享的工作细节,我想他们在找一个资深的人。我还没到那一步。我仍然需要提高我的数据科学技能。我知道我不适合,所以申请没有意义。”
你知道这是什么意思吗?一方面,招聘经理为理想的候选人创造职位描述,尽管他们知道这些职位描述并不存在。另一方面,合适的候选人因为要求的技能不合理而犹豫申请。
作为数据科学的追求者,我们无法控制招聘经理做什么,但我们可以更好地解释工作要求。
这对您意味着什么:
大多数职位描述都是招聘经理的愿望清单,他们不想错过理想的候选人。句号。
他们知道理想的人几乎不存在,对于那些不完全符合他们要求的人,他们完全没有意见。
该行业的大多数专业人士都知道发生了什么,但有抱负的数据科学家却不知道这一点。 Sebastián Ramírez 需要在他 1.5 年前创建的图书馆中积累 4 年的经验。py caret 库的创建者 Moez Ali 也遇到了类似的情况。
那么这个问题的解决方法是什么呢?批量应用不会解决这个问题;这会让事情变得更糟。答案是一种叫做“60%规则”的东西,我们即将解读它。
在申请工作之前使用这个“60%规则”
我读过的关于在数据科学领域建立职业生涯的最好的书之一是 Emily Robinson 和 Jacqueline Nolis 写的。在所有有价值的信息中,有一个想法脱颖而出,与我的策略产生了共鸣。
这是 60%规则。
“如果你达到了工作要求的 60%以上,你就已经为这份工作做好了准备。别再想了,去申请吧。”
在这个行业工作了将近 4 年,我可以保证这是真的。一旦你进入这个行业,你会直觉地理解这是可行的,但是请相信我们,暂时使用这个规则。
这对您意味着什么:
每当你看到一份工作描述时,要对自己诚实。
问自己一些这样的问题:
- 如果这个职位需要 3 年的工作经验,问我是否有至少 2 年的工作经验?
- 如果他们要求你了解 R、Python 和 Scala,我至少了解其中的两种吗?
- Scikit-learn、Tensorflow 和 PyTorch。我对三分之二中的任何一个满意吗?
- 你明白了。一言以蔽之,如果他们列出了 10 项要求,我是否至少满足了其中的 6 项?
要诚实,不要想太多。
正确的应用会给你必要的自信,这对于面对接下来的面试是至关重要的。现在,你已经理解了招聘经理的心态。你也知道选择你要申请的工作。接下来你会做什么?
如何确保自己非常适合
推荐帮助你最大化机会。但说实话,这并不总是可能的。在这种情况下,你应该试着定制你的简历以适应你申请的工作。
下面是如何做到这一点:
- 你可以从工作描述中列出的技能开始,选择你擅长的技能。
- 确保在你的简历中使用这些关键词。如果招聘人员通过自动申请跟踪系统(ATS)手动扫描或运行你的简历,你肯定会非常适合。
- 求职者最常犯的错误是增加他们不熟悉的技能。不要成为他们。当测试这些技能时,他们最终会在面试中笨手笨脚。你不需要知道所有的事情,但是你应该知道你简历上的所有事情。
我知道这个建议听起来很简单,但你不会相信很少有人遵循它。暂停一秒钟,试着回忆一下你最后一次为一个工作角色定制简历的时间。你可能会用同一个简历申请多份工作——我也是。
闯入数据科学的艺术在于少申请,确保你脱颖而出。
您可操作的外卖
打入数据科学领域很难。招聘经理不切实际的期望让情况变得更糟。我们要么继续大量申请,但没有任何回应,要么干脆不申请。
我们对该行业的运作方式无能为力,但以下是我们能做的最大化机会的回顾:
- 让我们停止批量申请工作。这绝不会有任何好处。
- 请花时间阅读职位描述。
- 要明白这些职位描述仅仅是招聘经理的愿望清单。
- 不要被职位名称所欺骗,而是要深入了解所需的技能。
- 看看你是否符合最低 60%的技能要求。什么事?你有机会做这份工作,否则就去做下一份。
- 根据你申请的职位定制你的简历。使用准确的关键字。
- 面试高手。你能行的!
我使用了这个策略,并开始得到更多的回应,并最终得到了公司的邀请。我很乐观这对你有用。你没什么可失去的,但会有很多收获。
试一试?
想了解更多关于数据科学、真实体验和学习的有用见解,请考虑 加入我的电子邮件好友私人列表 。
图示的 loc 和 iloc 事件
熊猫基于索引的数据选择可视化指南
在这个高效咀嚼和处理数据的时代, 熊猫 库已经成为每个数据科学家的面包和黄油。该库具有过多的数据操作能力,其中,我们在这里的重点在于系列和数据框架对象中的基于索引的数据选择。虽然这个主题在过去已经得到了一些实际的关注,但是这里特别强调两个著名索引器存在背后的动机
图片由作者提供,使用图制作。
首先,让我们看一下下图,其中我们构造了两个名为 s_imp 和 *s_exp 的系列 对象。*后缀 _imp 和 _exp 表示隐式和显式索引。
阐释了隐式和显式索引的 series 对象 s_imp 和 s_exp。请注意,当显示 s_imp(左)时,Jupyter notebook 输出隐式默认索引[0,1,2,3],而在 s_exp(右)的情况下,Jupyter notebook 仅输出显式索引[4,5,6,7]和数据[‘a ‘,’ b ‘,’ c ‘,’ d’]作为输出。虚线椭圆所包围的隐式(默认)基于整数的索引只是为了清楚起见。图片由作者提供,使用图制作。
如上所示,默认情况下,两个 series 对象都包含一个隐式生成的基于整数的索引,从 0 开始。在 s_imp 的情况下,默认隐式索引是其唯一的索引,而在 s_exp 的情况下,它最终有两个,即从 0 开始的隐式默认基于整数的索引和从 4 开始的显式用户定义索引。起初,这似乎是好的;但是,在执行基于索引的数据选择时,这可能会导致不必要的混乱。例如,让我们考虑先前定义的系列对象 s_exp 并执行一些操作,如索引和切片,见下文
演示了使用显式索引的 series 对象 s_exp 的索引和切片操作(左),以及混淆的情况(右)。注意,由虚线椭圆包围的隐式缺省的基于整数的索引仅仅是为了清楚起见。图片由作者提供,使用图表制作。
如上图所示, s_exp 使用显式用户定义索引[4,5,6,7]进行索引,使用隐式默认索引[0,1,2,3]进行切片。尽管这些隐式-显式索引选择是在幕后进行的,但记住特定于操作的索引可能会令人困惑。因此,这就是为什么熊猫提供两个独立的索引器的特殊原因🎉 loc 和 iloc — 一个用于使用显式用户定义索引( loc ),另一个用于使用隐式默认索引( iloc )。这非常方便,因为拥有独立索引器的主要目的是帮助避免不必要的混乱,见下文
说明了使用 loc 和 iloc 索引器的索引和切片操作。仔细观察术语 iloc,“I”可能意味着隐式或基于整数。类似地,术语“loc”也可以被认为是“locator”的残词。这里我们选择“iloc”作为隐式索引器来调用。请注意,右下角单元格中的隐式默认基于整数的索引只是为了清晰起见而举例说明的。图片由作者提供,使用图表制作。
此外,仔细观察上面的切片操作,您可以观察到 loc 步进器包括最后一个步进 5,而 iloc 步进器符合标准切片规则,即不包括最后一个步进 2。这非常方便,因为显式索引也可以是 string 类型,而隐式索引默认从 0 开始基于整数。请参见下图,其中使用基于字符串的索引序列执行切片操作
说明了使用 loc 和 iloc 索引器(定位器)对具有显式定义的基于字符串的索引(标签)的序列进行切片操作。注意使用 loc 的切片操作。loc 包括标签“三”,而使用 iloc 索引器的切片操作忽略相应的基于整数的索引 2。虚线椭圆所包围的隐式默认基于整数的索引只是为了清楚起见。图片由作者提供,使用图制作。
到目前为止,上面的插图只集中在系列的物体上。但是, DataFrame 对象中的隐式-显式索引呢?还有, loc 和 iloc 索引器如何适用于数据帧?
从技术上来说,一个简单的二维数据帧对象是一组系列对象的集合,其中每个系列都被赋予一个名称标签,也就是标签,并且,比方说,出于视觉目的,它们被放置在彼此旁边。结果,我们得到了一个包含行和列的二维数据结构,其中每行有一个索引,每列有一个标签。然而,为了一致性,让我们坚持使用列索引而不是列标签。现在,当一个数据帧对象建立在一个系列对象上时,在前面的插图中展示的隐式和显式索引的存在也可以在数据帧中观察到。事实上,在显式索引的数据帧中,数据帧对象包括两对索引,即隐式-显式行索引对和隐式-显式列索引对。例如,请参见下面两个插图,它们展示了隐式索引数据帧和显式索引数据帧之间的差异。第一个图示展示了具有默认的基于整数的行和列索引的隐式索引数据帧,而第二个展示包括由隐式-显式索引对组成的显式索引数据帧,即隐式默认的基于整数的索引和显式用户定义的索引。
详细说明了隐式索引的数据帧。图片由作者提供,使用图制作。
说明了一个显式索引(带标签)的数据帧,其中显式行和列索引是字符串类型的,隐式默认行和列索引是基于整数的。请注意,虚线椭圆所包围的隐式行和列索引只是为了清晰起见而展示的。图片由作者提供,使用图表制作。
通常,当使用显式定义的基于字符串的行和列索引时,如上所示,术语索引经常与标签互换。因此,产生了类似于行- 和列-标签的术语来代替行- 和列-索引。此外,将数据帧对象的构造函数中的关键字参数 index 和 columns 重命名为 row_index 和 column_index 有助于命名的一致性。然而,让我们不要在这里进入命名约定,因为这纯粹是一个品味问题,可能是一个故事本身😉
因此,继续深入,数据帧在许多方面类似于二维结构化数组。因此,为了执行传统的类似数组的索引,上述隐式索引方案起着至关重要的作用。使用 iloc 步进器,可以执行如下所示的阵列式步进
示例说明了使用 iloc 索引器对显式索引的数据帧 df_exp 进行类似数组的索引和切片操作。同样的类似数组的索引也适用于隐式索引的数据帧 df_imp。请注意,虚线椭圆所包围的隐式行和列索引只是为了清晰起见而展示的。图片由作者提供,使用图制作。
当然,上述索引和切片操作也可以使用 loc 索引器来执行,其中它利用显式行和列索引(标签),例如 df_exp.loc[‘r1 ‘,’ c2’] ,而不是默认的基于整数的索引。此处不提供图示,因为它被省略作为读者的练习😜然而,出于好奇, pandas 确实提供了一个叫做 ix 的混合索引器,它能够同时利用隐式和显式索引。然而,自 2018 年以来,这种新的索引器已被弃用,因为它有可能导致不必要的混乱,而这正是 loc 和 iloc 首先想要避免的😄
所以,这让我们结束了 loc 和 iloc 事件。希望上面的插图已经清楚地展示了系列和数据帧对象中隐式和显式索引之间的区别,更重要的是,帮助您理解拥有两个独立的索引器,显式( loc 和隐式( iloc )背后的真正动机。谢谢你🙏
基于云的数据仓库的影响
基于云的数据仓库极大地影响了数据科学和分析。这是一件坏事吗?
迈克尔&黛安·魏德在 Unsplash 上拍照
云中的数据科学和分析是大数据的现代范式。由于存储和处理地球上不断增长的数据量的成本和要求,数据科学和分析的云存储和处理应运而生。在这种情况下,云的弹性、成本效益、安全性和物理位置是最基本的因素。由于越来越普遍地从传统的内部数据仓库转移到基于云的现代替代方案,数据科学和分析的实施方式发生了巨大变化。
随着地球上数据量的不断增长,对可扩展存储和处理的需求应运而生。维护这一架构的成本来自与运行这一重要架构相关的庞大数量、处理能力、安全性和人力资源。对于努力通过传统方式控制数据的企业来说,将这种财务责任转移给这些服务的专业提供商可能是一个有吸引力的选择。这种情况,或者类似的情况,导致了云的兴起!云的常见定义是异地软件和存储即服务(SaaS)或硬件,通常通过 TCP/IP 经由互联网访问。
Inmon 将数据仓库描述为“主要用于组织决策的面向主题的、集成的、时变的、非易失的数据集合”。简而言之,它是在企业生命周期中纵向收集的业务数据的中央存储库,对这些数据的分析可以为未来的业务决策提供信息,或者衡量以前决策的影响。
随着业务的发展,数据仓库的规模和复杂性也在不断增长。这种增长意味着有效运行数据仓库所需的系统资源会随着时间的推移而增加。对数据仓库的要求是存储、处理、记忆和输入输出能力。这些需求被分为两个更高层次的类别:软件需求、安全需求和硬件需求。
一个成功的数据仓库在软件方面需要一个存储引擎和一个规则和处理引擎。存储引擎提供了原始数据本身的接口。传统上,这是关系数据库管理系统的工作。然而,有一个微小的转变,那就是使用面向对象的数据库或者像文档 stores⁴.这样的半结构化的替代品数据仓库的规则引擎部分负责处理数据的转换。规则引擎通常为日常任务提供设计模板,当与 DataVault 2.0 等现代仓储实践相结合时,可以实现高度自动化、元数据驱动的 ETL process⁵.
数据仓库的安全需求可能很复杂,这取决于给定业务的市场细分和法律含义。不过,它们可以简化为安全模型的总体概念。安全模型需要足够复杂,以允许对所有业务分支进行适当级别的访问,而不停止日常任务所需的访问。数据仓库的这一部分通常是 complicated⁶.由于不同的软件提供访问的方式在不同的存储引擎之间不断变化,数据仓库的这一部分必须从一开始就考虑到 end⁷.从逻辑模型生成物理模型通常是设计过程中受安全模型影响最大的一点。它通常高度依赖于软件。
数据仓库的硬件需求同样高度依赖于业务;然而,所有公司的共同主题是,这一要求将改变 time⁸.的事实从长期来看,随着更多数据的添加,这种需求通常会上升,从而增加处理和存储需求。从更敏锐的角度来看,ETL 过程在运行时消耗大量的处理和存储,但是当它们空闲时,这种需求就会减少。这意味着数据仓库受益于硬件性能和容量的弹性扩展。
术语云通常用于描述运行大规模仓库规模数据中心的公司的产品。这些公司通过出售服务器群的一部分(个人 businesses⁸.)来提供存储、处理能力和安全性通过有效地整理多个企业对此基础设施的需求,他们获得了经济优势。在处理基于云的系统时,硬件需求被排除在外,因为云服务提供商处理这些决策和复杂性。除此之外,像管理安全团队和架构/运营团队这样的开销也减少了,因为企业自己可以有效地将其中的大部分分包给云提供商;他们实际上是租用硬件,由提供商负责故障转移和正常运行时间的担保。基于云的服务提供商支持越来越多的数据库和数据处理服务。当数据仓库托管在云中时,这些需求都有利弊。当数据仓库托管在 cloud⁹.时,数据进入和退出提取、转换和加载(ETL)过程的方式有很大的不同
弹性是指系统资源能够独立、无缝地扩展,而不会影响数据可用性或性能。云计算的这一特点使其成为数据仓库和分析/数据科学工作负载的主要候选对象。弹性处理和内存扩展的能力允许应用在短时间内利用增加的资源来克服短暂但密集的工作负载,而企业不必一直运行大量的硬件。磁盘空间的弹性伸缩意味着公司可以临时为非持久性暂存区域租用磁盘空间,并在 ETL 过程结束时释放它们,而无需直接购买硬件。弹性扩展不仅降低了购买该硬件的初始成本,还降低了企业为保持这些驱动器始终在线而使用的电力成本。
将存储和处理转移到异地会给业务带来新的问题。这些问题包括更改数据治理计划以允许数据存储在异地,通过互联网而不是本地服务器访问数据的延迟,以及员工对流程变更和所需培训的抵制。分析和数据科学直接或间接地受到这些利弊的影响。如上所述,在治理计划和访问方面存在直接影响。与围绕在数据处理和存储中采用云的其他问题相比,云支持最好的数据科学堆栈中的最好的。关于基于云的数据仓库在分析和数据科学方面的优势的文献将是本文献综述的主要焦点。
托管在云中的数据仓库通常可以非常快速地直接接入互联网。当加载已经在互联网上托管的数据集时,这允许非常高的吞吐量。然而,这也可能损害 LAN 到 WAN 速度较慢的企业,在通过互联网从公司的本地存储加载大型数据集并将其加载到云托管的数据仓库时会出现问题。LAN 到 WAN 的速度问题在云数据仓库的初始设置或迁移过程中最为突出。这通常被称为批量迁移或批量加载阶段。一旦数据仓库在云中运行,企业就广泛地将更少量的数据动态地推上来。这部分标准业务受局域网到广域网速度问题的影响要小得多。
Talend 认为,从根本上来说,以下是企业希望将其数据仓库和分析/数据科学堆栈迁移到云的原因。企业的总成本降低了,因为他们不需要立即购买所需的硬件,也不需要一直租用最大数量的处理能力。云计算解决方案提供的灵活性使公司能够节省这笔资金,但允许资源的弹性扩展以匹配工作负载,并要求企业仅在使用增加的电力时支付他们所需的费用。这种无缝扩展和降低总体成本的能力使企业能够利用比以同等预算购买本地硬件更高的性能水平。这种整体处理能力的提高使企业在整体经济的特定领域中具有更高的成本效益和竞争优势。构建新数据集市和登台区的便利性允许高级开发和测试实践,这又通过自动化和封装为业务提供了更快的开发迭代,最终又增加了他们在市场上的优势。将数据托管在云中可以改善对数据的访问。这使得公司更容易消费和分析他们的数据。云提供商有庞大的专门团队来处理安全问题,这意味着企业可以更容易地访问他们的数据。这也比他们试图将数据接入公共互联网并要求他们的内部安全团队更便宜。
基于云的数据仓库是数据科学和分析向云迁移的重要推动因素。将数据科学/分析堆栈与数据仓库处理管道和存储一起放在云中是一个自然的选择。目前云数据仓库领域的领导者是 Snowflake。雪花提供真实的云数据仓库体验,提供弹性计算能力和存储。除此之外,雪花还集成了数据科学和分析工具,直接托管在其数据仓库产品中。这是云数据仓库如何影响数据科学和现代分析的一个例子。
如前所述,在云中托管分析和数据仓库可以快速、直接地访问通过数据科学实践获得的报告和知识。从任何地方(包括公司自己的网络之外)访问这些调查结果的能力带来了竞争优势。除了访问总结的结果之外,云中数据仓库的托管和包含的数据集市支持对来自世界任何地方的原始底层数据进行快速和无缝的深度分析。
基于云的数据仓库对数据科学和分析产生了深远的影响。在云中托管虚拟数据仓库以及现代分析堆栈的能力是近年来数据科学最重大的范式转变之一。正如包括 Talend 和 Gartner 在内的公司所解释的那样;Smoot,Ren,Lindstedt 和 Zulkernine 等研究人员证实,以下因素是基于云的数据仓库如何影响分析和数据科学的。这些因素是易用性、弹性扩展、增强的安全性、物理位置和降低的总成本。新兴的数据科学和分析堆栈通常是为支持云硬件上的弹性扩展和部署而全新设计的,以便在物理上接近并集成云数据仓库的发展趋势及其提供的优势。
- [Zulkernine 等人,2013 年] Zulkernine,f .,Martin,p .,Zou,y .,Bauer,m .,gwadry sridhar,f .,Aboulnaga,A. (2013 年)。面向基于云的分析即服务(claaas ),用于云中的大数据分析。第 62-69 页。
- [詹等,2013]詹,张,李,孙,王,李,贾,罗,陈(2013)。高容量计算:识别和描述数据中心面向吞吐量的工作负载。
- [英蒙,1992]英蒙,W. H. (1992)。建立数据仓库。美国约翰威利父子公司。
- [Linstedt 和 olschmke,2015 年] Linstedt 博士和 olschmke 博士(2015 年)。使用 Data Vault 2.0 构建可扩展的数据仓库。摩根考夫曼出版公司,美国加利福尼亚州旧金山,第一版。
- 林斯特德和格拉齐亚诺,2011 年。超级充电您的数据仓库:无价的数据建模规则,以实现您的数据仓库。创建一个独立空间酒吧。
- [卡尔库达等人,2018 年]卡尔库达,k .,纳布利,a .,加尔古里,F.(2018 年)。云数据仓库中的隐私和可用性。美国纽约。计算机协会。
- [Moghadam 等人,2017 年] Moghadam,s .,Darmont,j .,和 Gavin,G. (2017 年)。S4:在云数据仓库中实施隐私保护的新安全方案。
- [Cheng 等人,2018] Cheng,y .,Chai,z .,Anwar,A. (2018)。表征协同定位的数据中心工作负载:阿里巴巴案例研究。
- [潘,2020] (2020)。云数据仓库与传统数据仓库概念。
新冠肺炎对美国食品配送服务的影响
使用谷歌移动和趋势数据来确定行业的结构变化
叶夫根尼·阿列克山大罗夫、洪金和瑞恩·杨
就在一年前,食品配送服务还在财政上苦苦挣扎。但是随着 2020 年的进展(大部分经济都在倒退),这些公司看到了急需的增长。
随着家庭订单的实施和全国各地不同程度的现场用餐关闭,去年春天出现了一次食品配送需求冲击。而且随着疫情的存续,对这些服务的依赖也在不断增加。
来自饥饿的杜克 MQM 学生的两个单独的订单,他们像许多在疫情的学生一样,负责任地放弃了室内用餐。请注意,六人小组将订单放在左边,三人小组放在右边。(可以理解的是,PII 被移除是为了防止食欲不振。)图片作者。
我们的使命
我们希望提供一份对食品配送服务、准备进入这一市场的新公司、投资者以及任何关心疫情对消费者行为的最终影响的人有用的分析。
我们想弄清楚对美国食品配送公司的需求是如何受到疫情的影响,以及人们在全国各地的不同行为方式所导致的结果。
大家心中的疑问(继“疫情何时会平息?”)就是后 Covid 世界的生活会是什么样子。因此,我们的最终目标是确定食品配送行业在 2020 年的发展是否是消费者行为真正转变的开始。
我们的数据
我们选择了以下品牌,这些品牌为我们提供了两种食品配送公司的良好样本:
餐馆:Door Dash,Uber Eats,Grubhub,Postmates,Seamless,Chownow
杂货:Instacart,亚马逊生鲜,Shipt,生鲜直购
在一个完美的世界里,我们应该有可访问的性能数据,如每周收入、订单或应用程序活动,但正如我们在 2020 年所了解的那样,这绝不是一个完美的世界。所以我们决定发挥创意。
趋势数据
我们收集了 Google Trends 数据来衡量每个州对某家公司的兴趣。Trends 记录了一段时间以来谷歌搜索词的流行程度。尽管并不完美,但我们相信这是一家公司受欢迎程度的恰当代表。当人们有兴趣使用服务时,他们通常会搜索公司名称。
为了确定趋势数据是否可以额外用作公司业绩的可接受代理,我们检查了它与公司调整后股价的相关性。
整个 2020 年唯一公开交易的食品配送公司是 Grubhub,其趋势和股价数据不相关。然而,我们认为 Grubhub 是一个不同寻常的案例,因为与 2019 年相比,2020 年的需求确实飙升,但运营成本的上升速度更快。近年来,随着这些其他服务进入美国市场,Grubhub 在美国的市场份额也在不断下降。我们的趋势数据显示了这两个因素的某种混合(在疫情开始时有显著增加,但与其他交付服务不同,相对较快地下降到疫情之前的水平)。
尽管如此,我们发现许多食品和零售公司的趋势数据与其调整后的股价相关。例如:星巴克和沃尔玛(相关系数分别为 0.483 和 0.514)。
比较星巴克和沃尔玛的相对兴趣和调整后股价(标准化值)的时间序列图。
因此,看起来趋势数据可能是公司业绩的一个不错的代理,但它在对应受欢迎程度和需求方面更可靠。为了进一步证明谷歌趋势数据的信号力量,向下滚动到之前的一篇博文的“使用谷歌数据作为信号”部分。
我们设置了一个脚本来提取每个州每个公司的每周趋势值,日期可追溯到 2019 年初,另一个单独的集合仅可追溯到 2020 年 2 月中旬。我们将这些值称为“相对兴趣”,因为它们给出了兴趣值(从 0 到 100 ),其中 100 是在给定的时间段和地点内公司被搜索次数最多的一周。因此,我们在给定位置为一家公司准备的每个数据表恰好有一周的最大受欢迎度为 100。因此,我们无法比较各州之间的绝对兴趣(或搜索次数)。(例如,我们不能用我们的数据来判断 Uber Eats 在纽约还是在北卡罗来纳州更受欢迎。)
使用这些数据作为表现信号的最大问题是,有时谷歌用户搜索术语只是为了了解该公司或涉及该公司的新闻。因此,兴趣的变化通常可以归因于搜索词的“新闻价值”。我们在数据中寻找无法解释的异常,以及每家公司在 2020 年的新闻事件。我们决定,我们需要针对 12 月 6 日那周 DoorDash 的 IPO 公告以及导致 6 月 29 日和 7 月 5 日那周宣布 Postmates 被优步收购的传言进行调整。我们通过用前后几周的平均值替换这些值来进行调整。
虽然相对兴趣将是我们的因变量,但我们希望我们的输入能够说明 Covid 的严重性以及由此产生的行为变化。
移动数据
为了跟踪活动的变化,我们使用了谷歌的社区移动报告,谷歌在疫情期间公开了该报告。这个数据集通过访问不同类别的地方来测量运动的变化。这些数据是从打开了设备“位置历史记录”的用户那里收集的。谷歌拥有来自世界各地的数据,但我们将使用美国的数据,其中包括国家、州和县一级的数据。
每天的数值是通过计算“与基线相比,不同地方的访问次数和停留时间的变化”得出的基线计算为 2020 年前五周(1 月 3 日至 2 月 6 日)期间一周中每个相应日期的中值,当时新冠肺炎尚未影响美国的行为
我们将重点关注以下两类移动性(从 2020 年 2 月 16 日至 2021 年 1 月 2 日):
杂货店&药房(杂货店、食品仓库、药店等场所)
零售&娱乐(餐馆、购物中心、电影院等场所)
我们还使用了 CDC 的数据集来收集关于 Covid 病例和死亡的信息。我们汇总了数据,所以我们的值是每周一次。
为了便于分析,我们还重点关注了代表该国不同样本的 11 个州(从地理和人口统计角度):
阿拉巴马州、加利福尼亚州、佛罗里达州、佐治亚州、爱荷华州、马萨诸塞州、北卡罗来纳州、纽约州、德克萨斯州、犹他州、威斯康星州
探索性数据分析
在查看流动性数据时,很明显,随着疫情带来的法规和健康风险,餐馆、商店和娱乐场所的访问量减少了。以下是对 2020 年第二季度和第三季度的看法:
似乎限制越严格或城市人口越多的州去这些地方的次数越少。我们都不熟悉蒙大拿和怀俄明,但是似乎一些更冷的州的居民在冬天冬眠。天气可能是这些地区夏季流动性异常增加的一个因素。(第四季度的地图看起来与第二季度的地图几乎相同。)
杂货店的流动性更是一个复杂的问题。这是因为杂货店被认为是必不可少的,因此在全国范围内仍然开放,即使在家订货也是如此。因此,随着餐馆关门,杂货店之旅就像度假一样,这类场所的流动性更加多样化:
一般来说,对于两种类型的移动性,最大移动性和最小移动性状态保持不变。
这是美国每周的交通状况。
如果你需要更多的证据来证明美国人庆祝 7 月 4 日。
从最初的“Covid 休克”中,你可以看到活动的急剧下降,并且在下降中的反应与病例的增加不成比例。当我们直接将 Covid 案例与迁移率数据进行比较时,“疫情疲劳”也很明显:
下面是各州流动性随时间的变化情况:
在这两种情况下,每个状态的迁移率数据遵循相似的模式。
最后,让我们看看谷歌趋势数据。以下是 2020 年各公司的相对兴趣,从 2 月的第三周开始:
三月中旬美国疫情的爆发给所有军种带来的冲击是显而易见的。我们将继续称之为“柯维德冲击”与餐馆外卖服务相比,它对 Instacart 的跨州影响要明显得多,比如 Uber Eats:
最后,当我们比较我们的趋势数据和我们的移动数据时,我们可以看到某种程度上的反向关系。(随着杂货/零售流动性降低,对送货公司的相对兴趣增加。)
将美国和纽约的流动性与趋势数据进行比较。
我们假设随着时间的推移,这种关系可能适用于所有州和公司,但我们将进一步探讨这一点。
建模
在初步探索了数据之后,我们现在将调查在 3 月和 4 月疫情形成前后兴趣水平的结构变化的存在。此外,我们将探讨流动性和利息变量之间是否存在因果关系。接下来,我们将确定流动性对利息的影响,控制 Covid 案例的数量。总之,我们提出了一个基于多元时间序列的向量自回归模型,目标是预测某公司未来的相对兴趣。这种预测对各种利益相关者都很有价值,比如投资者、雇员和记者等等。
T 检验
我们使用 2019 年初开始的移动数据版本。这将为我们提供更多的 Covid 冲击之前的数据,为了这个模型的目的,我们将它标记为 3 月和 4 月。我们观察了美国疫情发病前后的差异
DoorDash、UberEats 和 Instacart 在 Covid 冲击前后的国家相对利益有显著差异,但 Fresh Direct 没有。
在 Covid 冲击之后,一些趋势值恢复到 Covid 冲击之前的水平,但是一些趋势值仍然比以前高。为了查看两个时期之间是否有显著差异,我们决定进行 t 检验。10 个品牌中,有 8 个(DoorDash、Uber Eats、Grubhub、Postmates、Instacart、Chownow、Amazon Fresh、Shipt)表现出了统计上的显著差异,而 Seamless 和 FreshDirect 则没有。根据我们的发现,我们能够看到人们对送货服务的整体兴趣仍然高于冲击前。
在这一点上,我们希望进一步调查这种更高的兴趣是否只是由于移动性本身或人们的行为变化。
当我们深入到州一级时,我们能够看到这种趋势在相对城市化的州(纽约、马萨诸塞州、佛罗里达州)变得更强,特别是与更多农村州(公共卫生法规较少)如阿拉巴马州、爱荷华州和犹他州相比。
因果矩阵
我们都知道现在著名的成语“相关并不意味着因果关系”。想一想所有虚假相关性的荒谬例子,比如在游泳池中淹死的人数和美国核电站的发电量,或者游乐场和美国授予的计算机科学博士学位产生的总收入。因此,虽然简单和可访问的相关性不是这里要分析的理想值,但是我们想要显示相关性的东西。输入格兰杰因果关系。根据格兰杰因果关系,如果一个系列 X“格兰杰原因”一个系列 Y,那么 X 的过去值应该包含有助于预测 YT5 的信息,而不仅仅是 Y 的过去值所包含的信息。这是检验两个变量之间因果关系的最好和最容易使用的计量经济学方法之一。
在这个图中,我们可以看到一个矩阵,用 p 值表示格兰杰因果关系检验的结果。当 p 值很小时,我们拒绝空值,我们可以说 X 变量格兰杰原因是 Y 变量。请注意,这不像相关数那样是对称的。该矩阵显示了兴趣和流动性的美国水平数据。我们可以看到,零售和娱乐移动系列往往会引起各种运输公司的相对兴趣。杂货店和药店的流动性没有这样的影响。
让我们进一步看看州级的因果矩阵。我们发现纽约、爱荷华和马萨诸塞州之间有一个有趣的对比。在纽约州的结果中,我们可以看到零售和娱乐移动性如何影响食品配送公司(DoorDash、Uber Eats 和 Grubhub)的利益与杂货店和药店移动性数据之间的明显区别(我们无法拒绝零因果关系)。
在爱荷华州,我们可以看到,杂货店和药店的移动性引起了人们对杂货配送公司(Instacart、Amazon Fresh 和 Shipt)的更多兴趣。对于马萨诸塞州,我们在食品配送公司、零售和娱乐流动性方面看到了相同的一般因果趋势。在一些州,例如北卡罗来纳州,对于六个公司和两种类型的移动性数据没有区别:两者分别引起六个公司的兴趣。
滚动贝塔系数
确定了因变量和自变量之间存在因果关系后,让我们研究流动性(任一类型)对我们正在研究的食品和杂货配送公司的相对利益的影响的大小和方向。
为此,我们将利用滚动线性回归模型,将自变量、相对利益、因变量、流动性和新冠肺炎案例作为控制变量。我们对这些情况进行了控制,以获得流动性对利息的纯粹影响,而不考虑疫情的影响。我们通过时间序列上的移动窗口递归提取迁移率的β系数。这创建了β系数的新时间序列。可以对这一时间序列进行分析,以确定流动如何影响兴趣的趋势和结构变化。
在 10 家选定的食品配送公司中,就美国而言,我们发现其中 7 家全年的趋势是积极的。这些公司是 Uber Eats、Grubhub、Postmates、Instacart、FreshDirect、Amazon Fresh 和 Shipt。对于其余的,有一个不重要的或消极的趋势。在 2020 年全年呈现积极趋势的七家公司中,年末流动性对利息的影响是积极的,并且显著高于年初观察到的影响。现实世界/商业对此的解释是,从整个美国的角度来看,新冠肺炎导致了个人行为的结构性变化,也就是说,随着我们走过 2020 年,流动性对大多数主流食品配送公司的兴趣产生了更强的积极影响。
贝塔系数的正趋势示例(Instacart,美国水平)
贝塔系数的负趋势示例(Chownow,美国水平)
在查看州一级的数据时,出现了一些有趣的结果。下表总结了调查结果。
我们可以看到,在加利福尼亚州和马萨诸塞州,流动性和兴趣之间的关系出现了最积极的变化。变化最不明显的州是佛罗里达州、犹他州和威斯康星州。我们还观察到,在佐治亚州和爱荷华州,流动性和兴趣之间的历史关系有许多负面趋势。定性解释可能来自各州不同的 COVID 相关法规、各州公司的业绩和成功,以及其他一些特殊原因。例如,马萨诸塞州和加利福尼亚州拥有全国最严格的法规,而爱荷华州的措施是最弱的,这可能是这些差异的原因之一。
预报
在确定了决定流动性和利息之间关系的结构性变化的因素之后,理解未来会发生什么是很重要的。为了有一个积极和前瞻性的视角,最重要的是构建一个预测模型,让投资者、记者和其他利益相关者对未来有一个经验上合理的预期。当我们处理多个时间序列时,就功效和可解释性而言,最适合我们需求的模型是向量自回归(VAR)模型。该模型可被视为在单变量时间序列预测中使用的著名 ARMA 模型的扩展。
为了实现 VAR 模型,我们必须首先满足一些假设。最初,我们在我们选择的变量中检查格兰杰因果关系。平均而言,这些变量必须互为因果。这一假设得到了满足,我们已经在前一小节中探讨过了。我们必须进一步研究协整检验,以确定多个时间序列之间是否存在统计意义上的显著联系。
然后,我们为测试集保留最后四天的观察,这将允许我们衡量使用来自训练集的数据创建的预测的质量。向量自回归所需的另一个假设是我们的序列的平稳性,这通过扩展的 Dickey-Fuller 检验来检验。结果表明需要对数据进行微分,即所有数据都变成 X(t) = X(t) — X(t-1)。在我们拟合我们的模型之前,需要的最后一步是确定包含在 VAR 模型中的自回归部分的滞后量。通过 Akaike 信息标准,我们确定滞后量为 3。然后,我们将模型拟合到我们的变量的美国级子样本,即‘door dash’,‘Uber eats’,‘Grubhub’,‘insta cart’,‘Retail _ Recreation’,‘杂货店 _ 药房’,‘病例’和‘死亡’。Durbin-Watson 统计数据向我们保证,该模型被正确地指定,并且可以进行预测。
蓝线=预测;橙色线=实际结果
在上图中,我们显示了四家选定公司在美国层面的 2020 年最后四周的预测结果。我们可以看到,对于 DoorDash,Uber Eats,Grubhub,兴趣的大趋势预测是正确的。这些信息使得各种利益相关者能够开展增值活动。
结论
所以总的来说,零售流动性确实对食品配送的受欢迎程度有影响,杂货店流动性对杂货店配送有影响。然而,不同州的不同行为会产生不同的影响。
在这篇文章中,我们试图了解移动性如何影响人们对送货服务的兴趣(以及需求)。通过比较流动性和利息如何随时间变化,我们看到这两个指标的趋势相反,特别是在 Covid 冲击期间。接下来,我们试图评估因果关系。基于我们最初的假设,即变量是负相关的,我们想知道活动的恢复是否会导致兴趣下降。通过因果矩阵,我们发现流动性的变化实际上引起了利息的变化。然而,当运行滚动回归时,结果与我们最初的假设大相径庭。
随着 2020 年的进展,移动性对许多州(如纽约和加利福尼亚州)的兴趣的影响从负面关系变为正面关系,这意味着即使移动性恢复,对交付服务的兴趣仍保持不变或更高。根据我们的发现,我们认为公共卫生法规和关闭不是交付应用需求增长的唯一直接驱动力。相反,我们认为,自 Covid 休克事件以来,美国消费者的看法和行为发生了实际变化。这种洞察力不仅可以应用于快递公司,而且持久的行为改变可以影响电影院、餐馆、音乐会场地等。
此外,我们建立的模型还可以用来预测未来利率的变化。我们之所以相信我们的模型是有意义的,是因为使用流动性数据预测需求是新颖而强大的。
如果你喜欢这个帖子,请给我们的 Linkedin 帖子一个赞!
在 github 上查看这篇帖子 背后的完整代码。
使用的工具:Python、R、Tableau、Excel
数据来源: 谷歌趋势 , 谷歌社区移动报告 ,CDC, 雅虎财经
预测代码来源:https://www . machine learning plus . com/time-series/vector-auto regression-examples-python/
作者是杜克·富卡大学 MQM 项目的学生。
球迷对英超球队的影响
他们的粉丝群有多重要?数据不言自明。
布雷登·霍普金斯在 Unsplash 上的照片
像许多体育联盟一样,英格兰超级联赛的最后两个赛季受到了新冠肺炎疫情的影响,导致比赛闭门进行。换句话说,很多比赛都不允许球迷观看。这启发我分析数据,并试图理解球迷对主队的整体影响,因为球迷的存在通常被认为是为主队提供了主场优势。
从数百万利物浦球迷在安菲尔德球场高喊“你永远不会独行”到无数当地纽卡斯尔联队球迷感到不寒而栗,他们是最热情和最激烈的,许多人会说球迷的存在以这样或那样的方式被感受到。
之前,我对有球迷的比赛和没有球迷的比赛之间的数据和统计进行了整体分析。
然而,对于这篇文章,我想深入到具体的球队,了解球迷对他们的成功有多大的影响。为此,我们将比较 2019-2021 赛季期间有球迷和无球迷比赛的比赛结果和每支球队的统计数据。
包括团队
两个赛季的所有球队都包括在内,除了那些在 2019-2020 赛季结束时降级或晋级的球队。否则,我们就不会有联盟中这些球队的两组比赛的数据。
收集的数据都是 2019 赛季开始到 2021 年 3 月 15 日的比赛。这些比赛被分成两组:一组有球迷在场,另一组没有。关于数据收集过程的更多细节,请随意参考之前的。
勘探领域
基于主场优势和球迷如何影响球队的一些假设或普遍信念,我想探索几个领域。这包括:
- 主队的总胜率,我们可以定义为总胜率占总潜在胜率的百分比
- 裁判向主队和客队出示的犯规或黄牌的分布,他可能会感受到来自咆哮的球迷的压力
- 主队的投篮命中率。他们是否拍摄更多镜头来满足粉丝,这是否会导致更高的准确性?
比较标准:提升
为了比较两场比赛的数据平均值,我们将计算每个团队的值之间的。**
Lift 就是两个值之间变化的百分比,通常用于比较 A/B 测试前后的结果。
作者创建的图像
跨团队的结果
下面的图表和分析着眼于每支球队从有球迷的比赛到没有球迷的比赛的百分比变化或提升。换句话说,正升力表示风扇不存在时观察到的特定度量值比风扇存在时大,反之亦然。
主场胜率
作者创建的图像
从主场胜率来看,我们可以看到大多数球队的主场胜率都出现了负增长(-20%到-40%)。然而,有两支球队的胜率明显上升,超过 40%:西汉姆联队和南汉普顿队。这两支球队是 2019-2020 赛季英超联赛中最差的五个主场记录之一,输的比赢的多。
来自 soccerstats.com的表格
快进到最近的 2020-2021 赛季,这个赛季主要是在没有球迷的情况下进行的,两支球队都有前十名的最佳主场战绩,西汉姆联队排名第二。
最重要的是,西汉姆联在本赛季以第五名结束赛季,这使得他们能够击败更受欢迎的球队,如托特纳姆热刺队和阿森纳队,获得参加欧联杯的资格。
主场犯规分布
作者创建的图像
当观察主队犯规的分布或细分时,大多数球队在每个方向上都有不到 0.25%的细微提升。两个例外是利物浦和切尔西,当球迷不在场时,他们的犯规率上升了 0.25%。这两支球队都是拥有庞大球迷基础的英超强队。两年前利物浦赢得了冠军联赛,今年切尔西也赢得了冠军,给你一个视角。
这告诉我们,要么这些球队在主场没有球迷的情况下踢得更有侵略性,要么裁判在没有球迷的情况下对他们吹了更多的犯规。这可能会给他或她在球场上的决策带来偏见。
客场黄牌分布
作者创建的图像
同样,我们可以看看比赛中客场球队的黄牌分布情况。除了四支球队之外,所有球队都有明显的负提升,这表明当球迷缺席时,黄牌的分布更加平衡。然而,这并不是两支球队的情况:莱斯特城和水晶宫,他们在客场比赛时收到的黄牌数量增加了近 0.50%。
目标命中率的本垒打
作者创建的图像
最后,我们还观察了在没有球迷的情况下,主队的射门命中率。令人惊讶的是,大多数球队的投篮命中率都有积极的提高,托特纳姆热刺队的命中率提高了超过 0.25%。这也许告诉我们的是,球队可能会在尖叫的球迷大喊“投篮”的压力下或为了满足球迷的兴奋欲望而投篮。然而,这并没有转化为更好的位置拍摄。
也就是说,并不是所有的团队都经历了积极的提升。如上图所示,西汉姆联队和伯恩利队的准确率都下降了 20%以上。
最后的想法
虽然可能没有足够的比赛数据或实质性差异来对特定球队的表现得出任何强有力的结论,但分析确实为我们提供了在没有球迷的情况下比赛如何更加平衡的洞察力。排名较低的球队有更好的机会表现良好,无论是由于裁判的低偏见,还是体育场内尖叫的球迷对两支球队可能产生的任何影响的逆转。
退一步来看今年欧洲的主要足球联赛,在过去的 2020-2021 赛季发生了一些非常有趣和罕见的事情,与这里的分析类似。多年没有赢得联赛冠军的球队赢得了冠军:
- 西班牙的西甲联赛——马德里竞技队(7 年来的第一个冠军)
- 葡萄牙的西甲联赛——运动 CP(19 年来的第一个冠军)
- 意大利甲级联赛——国际米兰(11 年来首次夺冠)
- 法国法甲里尔队(10 年来首次夺冠)
- 苏格兰超级联赛——流浪者足球俱乐部(10 年来的第一个冠军)
以下是一些值得思考的问题:这一切都发生在粉丝几乎不存在的一年。
这到底是不是巧合?也许吧。
信息论在机器学习中的应用
思想和理论
一瞥什么是信息论,机器学习如何依赖于它。
来自 Pexels 的 Janko Ferlic 摄影
信息。这个术语在每一个可能的场景中都出现过。但是理所当然的是,世界是靠信息运行的。那是什么?解释它的最简单的方法是通过一个例子。假设你正在杂货店购物,你已经挑选了多件商品。你知道这些物品的价格;因此这是你的原始数据。稍后,当你在柜台结账时,收银员会扫描这些物品,并给你这些物品的总价。说得详细点,收银员会用每件商品的成本来处理商品的数量,给你一个固定的数字,你可以支付。在某种程度上,收银员处理原始数据(单个商品的价格)并给你信息(最终的账单金额)。所以,我可以把信息描述为有上下文意义的经过处理的数据。
再进一步,下面是两条消息:
a)我没去上班。我没去上班,因为我约了医生。很明显,第二条消息比第一条包含更多的信息。但是我如何定义“更多”是什么呢?我如何量化它?这就是信息论的用武之地!下一节将探索信息论领域和其中的重要概念。
信息论
自 20 世纪初以来,研究人员一直在思考量化信息,1948 年,克劳德·香农发表了一篇名为“沟通的数学理论”的非凡文章这篇论文诞生了信息论领域。从定义上来说,信息论是对信息的量化、存储和交流的研究。但远不止如此。它对统计物理、计算机科学、经济学等领域做出了重大贡献。
香农论文的主要焦点是通用通信系统,因为他发表这篇文章时正在贝尔实验室工作。它建立了相当多的重要概念,如信息熵和冗余度。目前,其核心基础应用于无损数据压缩、有损数据压缩和信道编码领域。
信息论中使用的技术本质上是概率性的,通常处理两个特定的量,即。熵和互信息。让我们更深入地研究这两个术语。
香农熵(或仅仅是熵)
熵是对随机变量的不确定性或描述变量所需信息量的度量。假设 x 是一个离散随机变量,它可以取集合中定义的任意值, χ。让我们假设这个场景中的集合是有限的。T5x的概率分布将为p(x)= Pr {χ=x}, x ∈ χ 。考虑到这一点,熵可以定义为
熵
熵的单位是比特。如果你观察这个公式,熵完全依赖于随机变量的概率,而不是依赖于 x 本身的值。公式前面有一个负号,使它永远为正或 0。如果熵为 0,则没有新的信息可以获得。我将通过一个例子演示这个公式的实现。
考虑抛硬币的场景。有两种可能的结果,正面或反面,概率相等。如果我们量化一下,x∈*{正面,反面}, p (正面)= 0.5, p (反面)= 0.5。如果我们将这些值代入公式:*
在掷硬币事件中计算熵
因此,熵是 1 比特,也就是说,抛硬币的结果可以完全用 1 比特来表示。所以,直观地表达香农熵的概念,理解为“一条消息需要多长时间才能完整地传达其价值”。我想再深入一点,讨论一下联合熵、条件熵和相对熵的概念。
联合和条件熵
之前我定义熵是针对单个随机变量的,现在我把它推广到一对随机变量。这是一个简单的聚合,因为我们可以将变量对( X , Y )定义为单个向量值随机变量。
一对具有联合分布 p ( x , y )的离散随机变量( X , Y )的联合熵 H ( X ,Y定义为
相关熵
这也可以用期望值来表示。
联合熵(期望值形式)
同样,对于条件熵, H ( Y |X)定义为:
条件熵
直观上,这是给定 X 的 Y 的熵在 X 的所有可能值上的平均值。考虑到( X ,Y)~p(X, y ),条件熵也可以用期望值来表示。
条件熵(期望值形式)
让我们尝试一个例子来更好地理解条件熵。考虑一项研究,其中受试者被问及:
I)他们是否吸烟、饮酒或两者都不做。如果他们患有任何形式的癌症,我将把这些问题的回答表示为属于联合分布的两个不同的离散变量。
数据表
在左边,你可以看到 10 名受试者回答问题的数据表。变量 Activity 有三种不同的可能性(我称之为 X)。第二列代表受试者是否患有癌症(变量 Y)。这里有两种可能性,即是或否。由于我们还没有处理连续变量,我已经将这些变量保持离散。让我们创建一个概率表,使场景更加清晰。
上例的概率表
接下来我会计算 x 的所有可能值的边际概率 p ( x )的值。
X 的边际概率
基于概率表,我们可以在条件熵公式中插入值。
条件概率在上面的例子中
相对熵
从随机变量到分布,相对熵有所不同。它是两个分布之间距离的度量。更本能的说法是:相对熵或 KL 散度,用D*(p|q表示,是当真实分布是 p 时,假设分布是 q 的低效率的度量。它可以定义为:*
相对熵
相对熵总是非负的,只有当 p = q 时才能为 0。尽管这里要注意的一点是,它不是一个真实的距离,因为它在本质上是不对称的。但是它通常被认为是分布之间的“距离”。
让我们举一个例子来巩固这个概念!设 X = {0,1} 并考虑 X 上的两个分布 p 和q**设 p (0) = 1 — r , p (1) = r 设 q (0) = 1 — s , q (1
p||q 的相对熵
我还要演示一下非对称性质,所以我也算一下D*(q| |p)。*
q||p 的相对熵
如果 r = s,D(p| |q)=D(q|p)= 0。但是我会取一些不同的值,例如, r = 1/2,s = 1/4。
**
可以看到,D(p|q)≦D*(q|p)。*
现在,既然我们已经讨论了不同类型的熵,我们可以继续讨论互信息。
交互信息
互信息是一个随机变量包含的关于另一个随机变量的信息量的度量。**或者,它可以被定义为一个变量的不确定性由于另一个变量的知识而减少。**其技术定义如下:
考虑两个随机变量 X 和 Y ,它们具有联合概率质量函数 p ( x , y )和边际概率质量函数 p ( x 和p相互信息I*(X); Y )是联合分布与乘积分布p(x)p(Y)之间的相对熵。***
交互信息
互信息也可以用熵来表示。推导过程很有趣,但我会克制自己,因为它可能会弄乱文章。
互信息 w.r.t 熵
从上面的等式中,我们看到互信息是由于 Y 的知识而导致的 X 的不确定性的减少。有一个维恩图完美地描述了这种关系。
互信息与熵的关系
让我们举个例子来更好地理解它。我可以用我在解释熵的时候用过的例子,把吸烟、饮酒和癌症联系起来。我们已经看到,H(Y| X)= 0.8184 位。为了计算互信息,我需要多一项 H ( Y )。 H ( Y ),在这种情况下,将为:
因此,交互信息的定义是:
互信息的计算
或者,我也可以用 H ( X )和 H ( X | Y )来计算互信息,结果也是一样的。我们可以看到,知道 X 对于变量 y 的不确定性来说意义如此之小。让我改变这个例子的段落,并引导您了解这一切在机器学习中是如何有意义的。假设 X 是预测变量,Y 是预测变量。它们之间的互信息可以是检查该特征对于预测的有用程度的很好的前兆。让我们讨论信息论在机器学习中的含义。
信息论在机器学习中的应用
周围有相当多的应用程序,但我将坚持使用几个流行的应用程序。
决策树
决策树(DTs)是一种用于分类和回归的非参数监督学习方法。目标是创建一个模型,通过学习从数据特征推断的简单决策规则来预测目标变量的值。这里使用的核心算法叫做 ID3,由 Ross Quinlan 开发。它采用自上而下的贪婪搜索方法,并涉及将数据划分为具有同类数据的子集。**ID3 算法通过使用熵计算样本的同质性来决定划分。**若样本同质,熵为 0,若样本均分,则熵最大。但是熵对树的构造没有直接的影响。该算法依赖于信息增益,信息增益基于数据集在属性上拆分后熵的减少。如果你凭直觉思考,你会发现这实际上是我上面提到的相互信息。在给定一个变量的值的情况下,互信息减少了另一个变量的不确定性。在 DT 中,我们计算预测变量的熵。然后,基于熵分割数据集,并从先前的熵值中减去结果变量的熵。这是信息增益,很明显,是相互信息在起作用。
交叉熵
交叉熵是一个非常类似于相对熵的概念。相对熵是指随机变量将真实分布 p 与每个样本点的近似分布 q 与 p 的差异进行比较(散度或差异)。而交叉熵直接比较真实分布 p 和近似分布 q 。现在,交叉熵是深度学习领域中大量使用的术语。**用作损失函数,衡量分类模型的性能,其输出为 0 到 1 之间的概率值。**交叉熵损失随着预测概率偏离实际标签而增加。
KL-散度
K-L 散度或相对熵也是深度学习文献中的一个主题,特别是在 VAE。变分自动编码器接受高斯分布形式的输入,而不是离散的数据点。对 VAE 的分布进行正则化以增加潜在空间内的重叠量是最佳的。 K-L 散度对此进行测量,并添加到损失函数中。
K-L 散度也用于 t-SNE。tSNE 是一种降维技术,主要用于可视化高维数据。它将数据点之间的相似性转换为联合概率,并且试图最小化低维嵌入和高维数据的联合概率之间的 Kullback-Leibler 散度。
计算目标类别分布的不平衡
熵可以用来计算目标阶级的不平衡。如果我们将预测的特征视为具有两个类别的随机变量,那么一个平衡的集合(50/50 分割)应该具有最大的熵,就像我们在掷硬币的例子中看到的那样。但是,如果分裂是偏斜的,一个类有 90%的流行率,那么获得的知识较少,因此熵较低。实施计算熵的链式法则,我们可以检查一个多类目标变量在一个量化值中是否平衡,尽管一个平均值掩盖了个体概率。
摘要
信息论是一个激动人心的领域,对多个领域都有重大贡献。作为其中之一,机器学习并没有完全利用信息论所提供的一切。我觉得在机器学习的背景下,有许多信息理论概念有待发现,作为一名数据科学家,这让我非常热情。就此,我想结束我的文章。
我希望你喜欢我的文章,如果你真的真的喜欢,这里是我的:
- 我的网站:https://preeyonujboruah.tech/
- Github 简介:https://github.com/preeyonuj
- 上一篇媒体文章:https://Medium . com/analytics-vid hya/aptos-blindness-challenge-part-1-baseline-efficient net-c 7a 256 da a6e 5?sk = d0e 445 f 99 DAA 71d 79 f 0452665 f1 a59 db
- 领英简介:【www.linkedin.com/in/pb1807
- 推特简介:https://twitter.com/preeyonuj
参考
- https://www . khanacademy . org/computing/computer-science/information theory
- https://web.stanford.edu/~montanar/RESEARCH/BOOK/partA.pdf
- https://web.mit.edu/6.933/www/Fall2001/Shannon2.pdf
- https://www . science direct . com/topics/neuroscience/information-theory
- http://staff.ustc.edu.cn/~cgong821/Wiley.interscience . elements . of . information . theory . 2006 . 7 . ebook-DDU . pdf
激活函数背后的重要性和推理
神经网络的一个重要组成部分
ML 工程师必须做出的最重要和最有影响力的选择之一是他们将为其网络的节点使用什么激活函数。这取决于网络的结构、数据集和目的。令人欣慰的是,对于哪些函数在哪些场景中有用,已经有了广泛的共识。
我们为什么需要它们?
概括地说,激活功能对于防止线性是必要的。没有它们,数据将只通过线性函数(a*x+b)通过网络的节点和层。这些线性函数的组合也是线性函数,因此无论数据经过多少层,输出总是线性函数的结果。下图解释了一个示例。
一个简单的三层网络。f 是激活函数。(图片由作者提供)
如果示例 x1 经过第 1 层的第一个节点、第 2 层的第一个节点和最后一个节点,则输出将由下式给出:
作者图片
如果所有的激活函数都是线性的,那么这就等于另一个线性函数!
作者图片
所以,我们还不如刚刚用了一层一个功能呢!为了避免这种情况,我们使用非线性激活函数。这是因为对于复杂的问题,数据无法通过线性方程很好地建模。
展示非线性函数对拟合数据模型的好处的示例。(图片由作者提供)
什么是常见的激活功能,为什么?
乙状结肠的
作者图片
这会输出一个介于 0 和 1 之间的值,这对于二进制分类问题非常有用,因为可以设置一个阈值“概率”值。高于该值,输出可归类为 1,低于该值,输出将为 0。这使得它成为网络最终输出节点的普遍选择。
不幸的是,计算指数需要大量的能量,因此会降低大型网络的速度。该函数不是以零为中心的,这使得后续层的参数优化更加困难。它还具有几乎完全平坦的大部分线,给出非常小的梯度。如果输出非常正或非常负,这使得梯度下降非常慢。这就是所谓的饱和度和消失梯度问题。在大多数情况下,下列功能远远优于乙状结肠。
双曲正切值
作者图片
这将输出一个介于-1 和 1 之间的值,并且由于其指数的原因,与 sigmoid 函数的功耗类似。它也遭受饱和,但是它是零中心的,这使得在它之后的层中的参数优化更容易。我们说,如果各种节点的平均输出为零,则该层更接近正常化。
整流线性单元
作者图片
这将输出一个介于 0 和无穷大之间的值,对于 x 的正值,梯度始终为 1。这意味着不存在会发生饱和的平坦区域,除非 x 为负,这会使梯度下降非常快。该函数的计算非常简单,正是由于这些特点,它是最受欢迎的隐藏层激活函数的选择。
一个缺点是它不是以零为中心的,因此输出没有标准化。这就产生了下一个函数,它非常类似,但更接近于平均输出为零。
泄漏 ReLU
作者图片
通过使用 alpha(通常很小,例如 0.01),为负 x 添加一个浅斜率。这使 x 值为负值的节点保持活动状态。同样,这很容易计算,并且从-无穷大到无穷大,这意味着它几乎以零为中心。这使得将来的层计算更容易处理。作为隐藏层的激活函数,Leaky ReLU 也是一个非常受欢迎的选择。
摘要
这是一个简短的介绍当你选择激活功能时的思考过程。要考虑的要点是,该函数是否为您的问题环境输出有用的值,它能多快做到这一点,它是否会遇到消失梯度问题,以及它的平均输出是否接近零。
初始化背后的重要性和原因
神经网络的一个重要组成部分
神经网络通过学习哪些参数最适合数据集来预测输出。为了学习最佳参数,ML 工程师必须初始化,然后使用训练数据优化它们。你可能会考虑一些初始化的选项,尽管错误的选择会导致网络变慢甚至无用!
布拉登·科拉姆在 Unsplash 拍摄的照片
为什么我们不能将权重初始化为零
这是一个诱人的选择,尽管它不起作用。如果你将所有的权重初始化为零,或者任何相同的数字,网络的所有节点都以相同的方式运行。下图解释了一个例子。
具有相同初始权重的简单 3 层网络。(图片由作者提供)
这里,所有的权重和偏差已经分别初始化为相同的 w 和 b。在这种情况下,我们假设任何单层中的激活函数都是相同的。无论一个示例数据点通过什么路径到达输出,它都会产生相同的输出。因此,它将产生相同的成本。在反向传播期间,同一层中的参数将经历相同的梯度下降,并在训练后达到相同的最优值。所以每层中的节点彼此之间没有任何不同!当一个新的数据点通过网络时,无论它采用什么路径,都会产生相同的输出!我们需要“打破节点的对称性”…
为什么我们不能完全随机地初始化权重
虽然这将“打破对称”,但它带来了渐变消失和爆炸的问题。每个节点输出的平均值应该为零。我们说我们希望激活函数以零为中心。这在我的文章介绍激活函数中有解释,链接如下。
考虑下面的多层网络。
作者图片
在产生输出 y 之前,数据点 X 必须经过几个节点。如果它所乘以的权重都很大(或都很小),这将导致最终层的输出非常大(或非常小)。成本的梯度将因此爆炸(或消失)。在爆炸梯度的情况下,成本将永远不会达到它的最小值,因为它将一直错过它并围绕它振荡。这是因为每个梯度下降步骤太大。
爆炸梯度问题。(图片由作者提供)
在梯度消失的情况下,成本永远不会达到最小值,因为接近它的步骤非常小。
消失梯度问题。(图片由作者提供)
什么是最常见的初始化技术,为什么
为了防止梯度变得过大或过小并减缓梯度下降,我们需要确保满足两个条件。任何图层输出的平均值为 0,并且在整个图层中方差相对恒定。解决方案是随机化权重,但是将它们乘以一个值,该值取决于正在初始化的层中的节点数量。不同的激活功能的值是不同的。
他初始化
对于具有 ReLU 或泄漏 ReLU 激活函数的节点,我们将随机数乘以前一层中节点数量的函数。公式如下所示。
作者图片
Xavier 初始化
对于具有 Tanh 激活函数的节点,我们使用 Xavier 初始化。这非常类似于初始化,但是我们用随机数乘以的值在分子中是 1 而不是 2。公式如下所示。
作者图片
摘要
这是对初始化方法的简短介绍。这两种初始化技术保持跨层的方差相同,并且如果我们使用有效的激活函数,我们可以确保每个节点的输出的平均值为零,从而保持梯度下降时间合理。
数据分析在解决问题中的重要性
我解决项目管理问题的经验
与大多数人的想法相反(我也不例外),在大型 IT 转型项目中,项目经理的角色不仅仅是管理任务。它带来了几个解决问题的机会。
有时会有管理成本的问题,有时会有进度的问题,有时会有质量的问题,很多时候是所有的问题。这些问题会因为各种原因——企业、环境、利益相关者,有时纯粹是人的心理所致。
要解决这些问题,数据分析非常重要。数据处理、业务分析和发现独特的见解是管理分析和决策制定的一个非常重要的部分。使用了多种工具和技术。但我意识到,除了工具,更重要的是你如何思考和使用数据解决问题。该工具可以像 MS Excel 一样简单,有时甚至可以是纸笔。
有一次,我参与的项目在进度上有很多延迟。人们正在度长假,因此,这个项目被推迟了。IT 团队正在努力弥补延迟。在那个关键时刻,业务部门回来说,由于摆在他们面前的优先活动,他们不能参与转型计划。这意味着会有更多的延迟 2 个月。
这是个问题。一个大问题。当项目延迟时,会产生相关的成本。谁来承担?你会把这归因于利益相关者吗?你知道,事情从来不是那样的,每件事都有一些理由。或者也许你把它归因于计划不周。你知道,那也会有一个解释的。还是你只是将其归因于环境和情况并有所缓解?
不幸的是,当影响到钱的时候,解决办法就不那么容易了,而且总是要务实。
不管计划得多么好,多么详细,多么有根据,这种情况还是很常见的。有时,如果解决困难,这些问题会被提出来,并在指导委员会的会议桌上决定下一步。在这些情况下,人们带着情绪交谈,反驳,争论,每个人都有自己的观点,等等。在这样的环境下,变得难以抉择。
在这种情况下,唯一的解救办法就是根据数据做出决定。你不能对数据提出太多异议。
我想起了纳拉亚纳·穆尔蒂的一句名言,他说——我们相信上帝,其余的必须靠数据。
同样在上面的场景中,我们努力寻找数据在哪里,以证明会有延迟。当然,许多人直截了当并且情绪激动地说会有一个延迟,但是哪里有数据显示呢?
我们做了一个练习,以获得所有资源在计划阶段的指定持续时间内的可用性。与通常在 Microsoft project planner 中维护详细计划的程序不同,在该程序中,资源计划不在 project planner 中维护。只保留了时间表。原因?有太多的可移动部分、资源和定期变更,因此实际上为这样一个大型项目维护一个基于资源的项目计划是很困难的。
所以这是个问题。此外,组织通常会犯一个错误,即许多转型计划仅与 it 相关,而 IT 通常是业务转型。商业的参与对项目的成功同样重要。但事实是,这只是以 it 为中心的计划。考虑到业务参与和可用性,我们必须对计划中的现状进行分析。
我们与业务团队合作,在 excel 电子表格中收集数据。这些数据是非结构化的,资源如此之多,可用性数据也千差万别。但至少它有一天中有多少百分比的业务资源在一周内对程序有贡献的信息。
我们遵循以下步骤:
- 确定未来 4 个月要执行的任务
- 如这里提到的和一样,从逻辑上将它分解成微小的部分
- 对于每个组,称之为流或逻辑组。什么是适当的计划,我们需要多少业务可用性。
- 每周为这些逻辑组准备业务可用性矩阵
- 比较 3 和 4,找出差距
好吧,这在纸上看起来很简单。然而,当实际尝试时,数据是非结构化的;它必须以一种决策机构中的每个人都可以看到的形式出现。
我认为这就是经验的价值所在。
我们如何表示数据?理想的解决方案是按每个流程的涉众每周的工作进行分组,并显示每个关键流程的可用性。当我们在 excel 中拥有所有这些数据时,很难得出这些组并可视化来做出决定。
在这个阶段对我有帮助的一些问题是:
- 在这种情况下,我的变量是什么?我可以用简单易懂的方式把它们都表现出来吗?
- 我是否可以用利益相关者的术语来代表他们,因为他们可以用更简单、更好的方式来可视化对他们的影响?
- 你能否用决定下一步所需的细节来代表一个逻辑组?哪些关键数据是必需的?您能在多大程度上代表这个逻辑组?
- 如果你想出了一个表述,走出来问,如果你这样表述,还有什么问题?它回答了这个,这个,还有这个问题吗?那个问题呢?我该如何填补这一空白?我还需要总结什么?
- 有时候,你无法彻底解决。能不能务实一点解决至少 80%才能得到至少更好的见解?有哪些数据可以省去?如何在不使分析过于复杂的情况下进行简化?
花几分钟时间深入思考这些问题,对获得更好的结果大有帮助。你有多少数据并不重要,重要的是你从中获得了什么样的洞察力。
让我告诉你,不是所有的人都能做到这一点,它只是来自经验。
在处理过 SQL 和各种类似的问题之后,在这种情况下,我可以在很短的时间内想到这个解决方案,对此我感到非常高兴。解决方法是在 excel 上用许多公式和分组,花了半天时间,但结果显示了问题所在。
一开始,这看起来确实像是一个问题,但当我们深入了解时,我们发现了一些不同的东西。事实证明,这个问题几乎没有预计的 10%。
我怎么强调都不为过,用数据说话,掌握分析数据的技能,准确地将数据可视化,从而获得一些见解,是多么重要。
商业故事带有情感因素,这很重要,但在许多情况下,它必须有数据支持。培养对数据分析的敏锐眼光会让你的故事更加有力。
(你可能会发现这个有用的 13 种提高效率的方法 )
数据项目中以道德为中心的重要性
构建安全公平的人工智能
作者为 IG & H 创建的框架
在我的伦理数据分析博客系列的前两篇文章中,我研究了数据驱动的决策过程中可能出现的潜在伦理问题;这些问题如何影响商业、社会和消费者,以及如何避免它们。在这最后一部分中,我将深入探讨如何消除或减少数据用例中的伦理风险。
我在上一篇文章中介绍的伦理风险快速扫描是一个在项目开始前快速评估用例伦理风险的工具。快速扫描是专门设计的,在最终解决方案和模型的许多方面尚不清楚的早期阶段非常有用。这样,伦理风险和复杂性可以在用例优先级和项目方法中考虑。
然而,一旦项目开始,团队将对数据、模型工作和实现需求有更好的理解。在这一点上,评估可以通过道德指导框架进入下一个层次,我将在下面进行描述。这提供了评估维度、更详细的检查问题和可能的解决方案。
该框架基于四个指导维度,为每个团队的道德指南针提供信息[1]。与快速浏览相比,指导框架最好在整个项目生命周期中持续使用,同时了解模型和实现的更多特征。
作者为 IG & H 创建的框架
每个维度都包含了示例检查问题和防止或减轻风险的方法的几个例子[2]。我将首先用一个用例来说明框架的应用,然后在这个用例之后提供一个包含检查问题和解决方案示例的表格。
道德指导在行动:出租车公司使用案例
我现在将在一个现实但虚拟的用例中应用这个框架。让我们以出租车服务为例,该服务以数字方式监控分配给司机的行程的许多方面(在上一篇文章中已经介绍过)。该公司希望开发一种模型,可以对司机的表现进行评分,并相应地自动调整司机的工资。请注意,虽然这个例子代表了我为不同客户所做的工作,但它不是一个实际的客户用例。
当在项目开始前应用快速扫描时,快速扫描中的八个类别中的六个表示中度到高度风险。毫不奇怪,当我们为公司建立这个自动评分和决策模型[3]时,我们遇到了一些道德挑战。我们每月使用指导框架评估项目,识别的挑战都属于(至少)框架中的一个主题。
安全
快速扫描已经警告我们,没有人在回路中的意图是一个风险因素,特别是因为模型可能会影响生活的事情。这意味着,如果模型精度随着时间的推移而下降(模型漂移),或者由于数据质量问题而产生意外输出,在驱动因素受到影响之前,可能没有人会注意到。考虑到我们的指导框架的“安全”维度,我们选择执行两个缓解措施:部署前的敏感性分析和模型输入和输出的统计监测的实施。
公平
在快速扫描中,我们指出了数据偏差的中等风险,这意味着我们可能需要额外的努力来确保我们指导框架的“公平性”。当我们分析模型测试结果时,我们发现女性驾驶员的分数偏向量表的高端,而男性驾驶员的分数偏向低端[4]。
在这一点上,我们需要了解该模型在评分时是否意外地存在性别偏见[5]。经过仔细检查,我们得出结论,该模型使用有效的客观特征进行评分。并且女性和男性驾驶员对于相同的驾驶行为得到相同的分数。所以,我们和出租车公司一起决定不需要改变。
透明度
正如我们在快速浏览中看到的,影响生活的事情是该用例的一个风险因素。生活事件包括可能影响一个人生活质量的事情。例如,在金融服务中,这可能是信贷的可负担性,或者在医疗保健中,这可能是获得某些治疗的机会。对于出租车公司来说,该模型的决定肯定会通过员工的薪水从财务上影响他们。
该模型也可能影响个人行为,在这种情况下,我们认为是中等风险。例如,司机可能会感到有压力,不得不开车穿过更危险的街区,或者接受可能构成威胁的人的搭车。
作为我们的缓解措施之一,我们必须向出租车司机清楚地解释该模型是如何工作的。我们还引入了一个流程来处理司机提出的任何问题。最后,我们还与模型所有者和人力资源一起确保模型对奖励分配和驾驶行为的影响得到监控。这样,出租车公司可以提供这种模式的潜在影响所证明的透明度。
我们还想在这里提到,应该始终有一个正式的公司代表,负责决策模型对人和业务的影响。在这种情况下,首席运营官在项目开始时被指定为负责任的模型所有者[6]。
隐私
这家出租车公司的数据集包含地理位置数据,一旦与其他公开可用的数据结合起来,就可以用来(重新)识别个人。其他敏感的个人数据元素,如“性别”和“年龄”被从模型中删除,以避免不必要的偏见,但我们确实将这些保留在我们的数据集中,以便能够测试模型的公平性。员工应该能够相信他们的隐私得到了尊重,他们的个人数据得到了安全的处理和存储。因此,我们执行数据隐私影响评估,并应用公司的所有技术和运营措施来确保其受到保护。
作者为 IG & H 创建的框架
图 2 指导框架中每个维度的样本检查问题和可选解决方案表
伦理中心主义
上面的案例表明,如果你把数据伦理放在第一位,许多潜在的问题是可以避免或减轻的。在我工作的公司,我们努力把道德和经济并列在我们所做的一切的中心。我们帮助客户像我们一样关心这个问题。在这两种看似对立的力量之间取得平衡是我日常工作中许多有趣和迷人的方面之一。
由于数据项目的伦理可能比经济学更模糊,我们创建了我们的框架作为指南。为什么?提供所需的结构和早期预警信号,帮助我们的客户遵循他们的道德指南针,并采取适当的措施。这样每个人都可以安全公平地享受数据和 AI 带来的好处。
这篇文章和框架已经与我的同事曼多·罗特曼和楼科曼合作完成,并于早前发表到我们公司的网站https://www.igh.com/post/ethical-data-analytics-iii-solving-an-ethical-use-case*。它是一个三件套系列的一部分,其中第一部* 在这里可以找到 ,第二部 在这里可以找到 。
[1]SFTP 准则是从一项对 36 份著名的人工智能原则文件进行的元研究中提炼出来的。
[2]让我们在这里提一下,数据伦理领域正在迅速发展,我们的框架也是如此。当我们遇到新的相关话题时,会添加更多的检查问题和解决方案。
[3]在即将出台的人工智能法规中,这种模型将被称为“高风险人工智能系统”,它将在未来承担额外的责任
[4]我们没有在模型本身中使用变量“性别”,但出于验证目的,我们将它保留在数据集中。通过这种方式,可以为模型收集敏感数据,但确切地说是为了防止违反这种敏感性
[5]即使模型中的不平等不是偏见的结果,你也可能有充分的理由消除不平等。我们选择不在本文中涉及这一点,但是偏见/不平等本身可能是一篇文章的好主题。
[6]首席运营官对该模式对企业和员工的影响负责,她将日常责任委托给了公司的绩效经理
目标设定在产品开发中实现负责任人工智能的重要性
你为什么要开发你现在正在做的产品?
是的,花点时间考虑一下,我就在这里!
昂斯普什河畔诺德伍德
这个你有明确的答案吗?如果不是,你认为这是一个问题吗?
产品经理将此作为他们工作的核心部分:阐明为什么产品应该存在。然而,有时我们会对新技术感到兴奋,并一头扎进它去寻找一个我们可以用闪亮的新玩具解决的问题。
缺乏对为什么一个团队在一个项目上工作的明确性会对坚持负责任的人工智能原则产生后果。
为什么要设定目标?
设定目标的练习有助于我们突出做某个项目的原因。这是确保我们能够在项目中集中负责任的人工智能原则并将其注入基础的第一步。
我们可以借用克莱顿·克里斯滕森的 《创新者的困境 》一书,该书强调了阐明我们正在构建的东西试图满足用户的什么需求的必要性。这是一个暴露用户需求和组织需求之间矛盾的机会,由于数据需求、财务动机等原因,用户需求和组织需求之间可能存在矛盾。
通过聊天机器人自动化常见问题
让我们举一个例子:你被委托创建一个聊天机器人来自动化 FAQ,以减少打给你的客户支持的来电数量。如果人们参考 FAQ,或者让你相信 FAQ,客户支持收到的许多问题都可以很容易地解决。您可能会看到第 1 级电话的数量下降,这表明这种预感是正确的,您是成功的。但是,总体目标实现了吗?
想象一下,在这种情况下,由于呼叫量下降,组织缩减了第 1 级支持人员。但是,他们注意到第 2 层+的来电数量增加了。为什么会这样?
可能是聊天机器人提供的答案让用户感到困惑,加剧了他们的问题,因为他们采取了错误的步骤,或者其他许多事情。所以现在,他们跳过所有的交互式语音应答(IVR)选项,直接与代理交谈,并粗鲁地提到他们已经尝试了聊天机器人建议的所有步骤。他们想让他们的投诉升级。
现在,当他们达到 2+级时,支持代理可能必须首先帮助他们撤销一些错误的步骤,这些步骤可能是他们根据聊天机器人的建议采取的。情况可能是,客户支持的总体支出实际上已经上升,因为您预期通过 FAQ 自动化和通过 chatbot 交付解决的更简单的查询已经在另一个地方出现,并对更昂贵的资产施加了额外的压力。这推高了客户支持运营的总成本。这当然不是本组织想要的结果。
还有一个风险是,你疏远了那些不太懂技术的用户,他们可能会对取消他们已经习惯的第 1 级客户支持感到更加困惑。这会让他们不满意,你可能会失去生意。
二阶效应和不可行性
显然,在尝试部署自动化解决方案时,会有许多二阶效应。明确您的目标将有助于突出您在技术方面进行优化时必须应对的权衡及其对业务方面的影响。
最后,这个过程可以突出项目的不可行性。在自动化常见问题解答的情况下,假设您正在将它应用到一个类似于Info sant的服务中,在该服务中,入站查询通常很复杂,并且呼叫者很紧张。赌注要高得多,并且查询的复杂性至少目前超出了自然语言理解(NLU)系统有效处理的能力。目标设定练习可以为参与项目的所有利益相关者创造一个北极星*。*
我应该如何设定目标?
实施有效的目标设定并不是一件容易的事情。深思熟虑很重要。
与你的利益相关者一起
从把合适的利益相关者带到谈判桌前开始。这包括内部和外部的利益相关者。
在内部方面,这应该包括来自业务、设计、工程、法律和营销团队的成员。在外部方面,这应该包括将受到此解决方案部署影响的实际社区的成员。
在选择外部利益相关者时,你可能会选择做一些类似于微软对负责任创新的公民评审团的想法所做的事情。给予他们发言权,并在一个紧密的反馈回路中考虑他们的建议,对于这一进程的顺利运作至关重要。
共同构建目标可以是您通过利益相关方咨询流程努力实现的另一个结果,这样您就可以创建一个北极星来满足您希望通过您的产品服务的社区的需求。利用“5 个为什么”的方法可以帮助你做到这一点。
组织调整
你在这个过程中设定的目标应该明确地与组织的使命陈述保持一致和偏离。这是至关重要的,因为它将帮助团队以深思熟虑的方式选择权衡,而不是将这样的选择留给团队中个人的特别决定。个人可能会面临低水平的项目压力,如预算和时间限制,而更大的组织使命一致性可以在危机时刻指导决策。
这些目标应该是什么样的?
有效的目标设定有很多框架,我不会在这里重复,我会谈谈一些我认为相关的想法。
目标应该是可以转化为衡量标准的东西,特别是因为团队和个人在最初的会议后将利用这些标准来标记他们在实现目标方面的进展。它们对于跟踪整个人工智能生命周期也很有用。
这些目标应该与谁将对它们负责明确地联系起来。这防止了责任分散的问题。它还有助于组织内的其他功能,如法规遵从性和审计。
如果我们没有适当的激励措施来鼓励坚持既定的目标,所有这些都是没有意义的。有正确动机的人是有力量的。它们将加速你在实践中实现负责任的人工智能的旅程。
那么,你如何看待将目标设定作为在实践中实现负责任的人工智能的练习?把你的想法留在这里,我们开始对话吧!
在这里报名领取 可诉人工智能伦理书 更新!而你可以在这里 了解更多我的作品 !
你可以通过订阅 人工智能伦理简报 从 蒙特利尔人工智能伦理研究所 了解更多这样的见解!
分层思维在数据工程中的重要性
行业笔记
如何在机器学习(ML)用例中使用真实世界的数据
看起来有点像数据湖,对吗?(Flickr 上科利·多克托罗的《纠结的电线》 (CC BY-SA 2.0))
这是给谁的?
你是数据科学家还是数据工程师,热衷于构建可持续和健壮的数据管道?那这篇文章就送给你了!我们将通过一个真实世界的例子,到本文结束时,您将理解为什么您需要一个分层的数据工程约定来避免我们过去所犯的错误🙈。我们是 QuantumBlack 我们将讨论我们的开源 Python 框架: Kedro 。
为什么我们需要一个约定?记住—数据通常是偶然存在的
经验丰富的数据科学家、分析师和工程师非常清楚,并非所有数据都是为分析而设计的。通常它是“偶然”存在的,是一些其他业务流程的随机副产品。
当这种情况发生时,数据质量差和基础设施不可靠是很常见的。
以下是一些在企业组织中常见的情况,它们说明了一个人是如何不可避免地陷入这种境地的:
- 生产线的值班经理仍然在 Excel 中维护时间表,而不是使用他们现有的花哨的企业软件,因为这是一个有效的系统,可以通过电子邮件发送,并且迁移会中断业务关键时间表。
- 一家跨国制药公司的库存系统实际上仍然是 20 世纪 80 年代的大型计算机(嘿,它可以工作!).它有一些基本的报告和预测功能,但它是专门为管理股票而设计的,而不是用于分析。
许多组织,尤其是大型组织,并不是“互联网原住民”,现在正在将机器学习追溯到他们的运营中。在这种情况下,我们必须采取灵活的迭代方法来构建 ML 用例。
人们不能指望数据结构整齐,随时可用。例如,你会看到像 Monzo 这样的数字银行非常仔细地思考他们如何从源头将 PII 的数据从分析中分离出来。这是更传统的机构在尝试进行同类分析时,必须在不同的系统之间进行分解的事情。
在现实世界中,将为某个目的设计的数据逆向工程成对分析有用的东西是构建 ML 管道的一个重要部分。
承认这种情况并使用标准化的项目模板是简化代码库和工作心理模型的有效机制。
在这个问题上,一组固执己见的最佳实践可以求助于 Cookiecutter 数据科学。他们的任务是促进数据科学的正确性和可再现性,而且,碰巧的是,他们也采用了数据工程的分层方法…
我们❤️库克数据科学
*Cookiecutter 及关联的 Cookiecutter 数据科学 *项目都是该领域的领导者,有着坚如磐石的见解。如果你还没有机会详细阅读他们的方法,看看他们的。我们等着,没事的😀 ⏳。
嗯……(hlkljkgk的健康巧克力曲奇获得 CC BY-SA 2.0 授权)
总之,他们的想法是基于以下 6 条规则:
1.数据是不可变的
2。笔记本是用来探索和交流的
3。分析是一个DAG4。从环境中建立起来。将秘密和配置置于版本控制之外
6。在更改默认文件夹结构时要谨慎
您可以从标准的 Cookiecutter 目录结构中看到,一种清晰简洁的数据工程约定形式得到了实施:
*...
├── data
│ ├── external <- Data from third party sources.
│ ├── interim <- Transformed intermediate data.
│ ├── processed <- The final data sets for modeling.
│ └── raw <- The original, immutable data dump.
│
...*
虽然这是一个很好的工作框架,但随着我们项目的规模和复杂性的增长,我们觉得我们的方法需要更多的细微差别。
凯卓:它是什么,它有什么帮助
曾几何时,QuantumBlack 交付的每个项目看起来都不一样。人们每次都是从零开始,独立地经历相同的陷阱,再现性是耗时的,并且只有最初项目团队的成员真正理解每个代码库。
进入 Kedro ,这是一个开源的 Python 框架,用于创建可复制、可维护和模块化的数据科学代码。如果你以前从未听说过 Kedro 框架,你可以在这里了解更多。
我们用疤痕组织建造了凯卓。
我们需要在我们自己的工作中实施一致性和软件工程最佳实践。Kedro 给了我们将人们从一个项目转移到另一个项目的超能力,这改变了游戏规则。
**工程师中途加入长期运行的 Kedro 项目的现场镜头(【180327-N-VN 584–3279】由美国第七舰队指挥官根据 CC BY-SA 2.0 授权)
在与 Kedro 合作一次后,你可以进入另一个项目,知道代码库是如何构建的,所有东西都在哪里,最重要的是你可以如何提供帮助。
Kedro 是一个专注于 ML 产品开发的开发和实验阶段的框架。它不是以执行“成品”为中心——那被称为“编排”,是我们视为已部署的 Kedro 项目的下游的东西。如果您对如何使用 orchestrators 感兴趣,请阅读我们的部署指南。
Cookiecutter 项目的核心观点对我们有巨大的影响,也是我们试图在 Kedro 中体现的东西。Kedro 项目结构的初始前提是扩展 Cookiecutter 目录结构。此外,它还为今天的kedro new
命令和 Kedro 启动器功能提供动力。
如前所述,我们发现我们的开发过程需要一组稍微微妙一些的“层”:
*...
├── data
│ ├── 01_raw <-- Raw immutable data
│ ├── 02_intermediate <-- Typed data
│ ├── 03_primary <-- Domain model data
│ ├── 04_feature <-- Model features
│ ├── 05_model_input <-- Often called 'master tables'
│ ├── 06_models <-- Serialised models
│ ├── 07_model_output <-- Data generated by model runs
│ ├── 08_reporting <-- Ad hoc descriptive cuts
...*
Kedro 数据层
下面复杂的图表代表了在 Kedro 出现之前这种思维的样子。在我们有标准化的工具来构建我们的管道之前,它是(现在仍然是)处理数据的剧本。
有一套定义良好的规则来确保清楚地了解每一层需要执行哪些任务。
并非所有这些都与今天的 Kedro 相关,但展示了我们更广泛的思维
今天,这已经被简化并转化为 Kedro 的工作模式。下面有一个表格描述了这些是如何工作的,但是我们很快也会带您看一个端到端的例子。
在 Kedro 项目模板中,我们生成了一个实现该约定的文件结构。这在很大程度上是为了引导用户采用这种思维方式——然而,在实践中,我们希望用户将他们的数据存储在云中或数据湖/仓库中。如果你正在寻找一个例子,这是一个开始的好地方!
使用这种方法的另一个主要好处是能够可视化 kedro-viz 中的层,我们关于这个的文档可以在这里找到。
***shuttles**:
**type**: pandas.ExcelDataSet
**filepath**: data/01_raw/shuttles.xlsx
**layer**: raw*
**layer**
键可应用于任何目录条目的第一级,并反映数据集将如何在 kedro-viz 中可视化。
关键概念——源与领域数据模型
在 Kedro 世界中,我们称域级数据为
primary
层……但稍后会详细介绍。
让我们以下面的示例问题为例,讨论源数据模型和域数据模型之间的区别。
工厂里的哪台机器下一步会出故障?
我们从两个raw
数据来源开始:
Inventory
-跟踪可用的设备Maintenance schedule
-哪个机械师工作哪个班次
这些数据源不是为分析而设计的,但是两个系统之间的一条线允许我们创建一个与手头问题相关的数据集。
这是使用 kedro-viz 建造的,它可以显示任何 kedro 管道
尽管两个原始数据集是以它们最初设计的任何形状接收的,但是**Machine shutdowns**
反映了问题正在被解决。有了这个导出的数据集,我们可以开始评估我们关于停机原因的假设。
将 Kedro 层与 Cookiecutter 数据科学进行比较
最重要的区别是我们如何将“临时”部分分成具有明确职责的不同子部分。作为参考,这里是完整的 Cookiecutter 目录结构。
*在 Kedro 中,内部和外部数据之间没有区别
将 Kedro 数据工程惯例应用到一个实际的例子中
在这一节中,我们将把它们都集中在一起。让我们以上述(在概念上,数据是不同的)中的预测性维护示例为例,并将其置于机器学习用例的现实版本中。
实践中的分层思考(《TACC 大脑》作者约安尼斯·n·阿塔纳西亚迪斯授权于 CC BY 2.0 )
在我们开始之前,需要提到两个关键点:
🧢:这是带着数据工程的帽子写的,因此数据科学的工作流程有些简化。所采用的建模方法也是指示性的,而不是一项强有力的工作。
🤷♀️:归根结底,这些都是建议,而不是规则——这篇文章旨在将我们的基本原理放在上下文中,但最终你应该自由地遵循这种思维方式,提出你自己的层次,或者完全无视它。
构建管道和整体 ML 用例所必需的数据目前分布在多个系统和业务部门,它们之间很少相互交流。
如果我们能够控制这些数据是如何到达的,它们将被很好地记录、打印和访问。实际上,很典型的情况是,到达的东西不是理想的格式💩。
🔒 01.原始层
️We 从不在这里修改数据,只在副本上工作
在本例中,raw
层填充了来自大型分布式组织的数据。存在以下数据源:
- 一份基于 Excel 的维护日志,详细记录了机器的维修时间等。
- 来自 ERP 系统如 SAP 的机器操作员列表,描述了哪些操作员在不同时间使用不同的机器。
- 来自未知的设备清单 SQL 数据库的静态剪切,提供关于范围内各种机器的其他元数据。该导出以多个部分的形式提供。
现在我们已经设置好了场景—在我们介绍数据如何在各层之间流动之前,请熟悉下面的管道。
使用左侧边栏滑出底部的标签来关注特定层。
🆕 02.中间层
实际上,
intermediate
层只需要是仍在“源”数据模型中的raw
层的类型镜像
- 一旦
intermediate
层存在,你永远不必接触raw
层,我们消除了与改变原始数据相关的风险。 - 我们允许对数据进行较小的转换,在本例中,我们将多部分设备摘录合并到一个数据集中,但没有改变数据的结构。
- 清理列名、解析日期和完全删除
null
列是这个阶段通常执行的其他“转换”。 - 我们使用现代的类型化数据格式,比如 Apache Parquet 。
- 如果您的数据已经被类型化和结构化*,那么从这一点开始**是可以的——但是要把它当作不可变的。*
- 从这里而不是从
raw
层运行管道通常会有性能提升。就计算而言,键入和解析大型 CSV 或 Excel 文件可能是非常重要的活动。 - 此时应执行概要分析、EDA 和任何数据质量评估。
⚙ 03.初级层
primary
层包含针对正在解决的问题而构建的数据集。
- 从
intermediate
层构建了两个领域级数据集,描述了设备关闭和操作员操作。 - 这两个
primary
数据集都是以这样一种方式构建的,即每行描述一个固定时间点的动作/事件,允许我们以直观的方式提出数据问题。 - 从源迁移到您的域模型的概念在这里非常关键。这是将数据设计成适合分析目的的结构的地方。
- 此外,当我们在各层之间流动时,冗余的源级数据点将被丢弃,从而简化我们的工作心理模型。
- 由此我们有了一个平台,我们可以用它来构建我们的
feature
层。
🧩 04。特征层
要素层由位于
primary
层的输入构建而成。
- 从前面的
primary
层专门构建feature
表(而不是从intermediate
层跳转)被认为是一个好的实践。然而,与 Kedro 中的所有东西一样,这是一个建议,而不是硬性规定。 - 在成熟的情况下,这些将保存在功能存储中,为用户提供一个版本化的集中位置,为低延迟服务做好准备。
- 特性通常在一致的聚合级别上进行设计(通常称为分析的’单元或表’粒度’)。在本例中,我们可以转换数据,使每一行都对应于一个独特的设备。
- T 目标变量位于该层内,被视为通用特征。
- 在本例中,创建的 3 个特征代表了一些变量,这些变量可能是设备停机的预测因素或信号:
a)上次关机和上次维护之间的天数
b)过去 6 个月的维护小时数
c)上次关机后的天数
⚡️ 05.模型输入层
我们觉得“主表”这个术语不够精确,所以选择使用这个术语
- 在这里,我们将所有的特性结合在一起,为我们的模型创建输入
- 在实践中,通常要试验多个模型,因此需要多个“模型输入”表。
- 这里的第一个例子是基于时间序列的表,而另一个表是以设备为中心的表,没有时间元素。
- 在这个例子中,我们使用一个简单的“脊柱”连接表,以便将每个输入表锚定到正确的“颗粒”/“分析单位”。
🧠 06.模型层
这是训练好的模型被序列化的地方
- 在本例中,我们有两个模型,为了安全起见,我们将其保存为 pickles 。
- 与其他层一样,“模型”层是一个概念性的盒子,有助于在构建管道时组织您团队(或您自己)的思维。
- 在现代生产环境中,经常可以看到模型注册表在流程的这一点上使用。
🎁 07.模型输出层
各种模型运行的结果在这里直播
- 在这个例子中,两种不同的建模方法以不同的格式输出推荐和评分结果,这些结果在下游被消费。
📣 08.报告层
在本例中,所执行的特征工程工作也使得向企业提供以前无法获得的维护活动的描述性直升机视图成为可能。
额外加分—在本例中,我们使用了一种高级的模块化管道模式,以便在两种模型中重用相同的数据科学管道(因此采用了镜像结构)。通过这样做,我们可以通过简单地覆盖每个管道的相关输入和输出来重用相同的代码。
TL;速度三角形定位法(dead reckoning)
在现实世界中,数据的设计往往没有考虑到分析。它有助于建立一个框架,将您的数据转换成适合分析的格式,而且,碰巧的是,我们开发了一个框架,帮助我们理解复杂性并避免常见错误。
本文给出了我们如何发展我们的思维的想法,并提供了一个关于 Kedro 的数据约定是如何制定的工作示例。
作为读者,你用什么来指导你的数据工程呢?请在评论中告诉我们!
你是软件工程师、产品经理、数据科学家还是设计师?你想成为创新产品和技术的多学科团队的一员吗?然后查看我们的 QuantumBlack Labs 页面了解更多信息。
加入 Kedro 社区,成为一名 Kedroid
大数据世界中合成数据的重要性
对于那些刚刚开始学习合成数据的人,这是一篇介绍性文章
学习合成数据的三个关键要点
布雷特·乔丹在 Unsplash 上的照片
真的是吗?我的意思是,现实是罕见的吗?好吧,如果不是现在,很快就会了。据 Gartner 称,到 2024 年,超过一半的可用数据将是合成的。这是他们在博客文章中的说法。
到 2024 年,用于人工智能和分析项目开发的 60%的数据将是合成生成的
我们应该为此担忧还是欢欣鼓舞?在我看来,我们应该庆祝这个消息!当然,有许多理由为此感到高兴,但首先想到的是数据隐私和安全。因此,在我们的公司和个人生活中,我们都关心这些问题。对公司来说,使用合成数据的一个最重要的好处是,也许人们会使用这些数据,而不是实际数据。然而,从合成数据中获得结果并不容易。现有数据越复杂,生成合成数据就越困难。开发合成数据来代替实际数据给我们带来了我学习这门学科的第一个重要收获。
1.到底什么是合成数据?
至简单来说,合成数据是由算法创建的数据。这意味着它们不是真实的。然而,它们的主要目的是像实际数据一样。例如,假设一家金融公司需要一个更好的算法来检测欺诈,他们请了一家第三方公司来解决这个问题。但是,金融公司不想完全共享他们的交易数据,因为其中包含一些可以识别客户身份的信息。金融公司需要共享他们没有那些敏感部分的数据,第三方公司需要生成合成数据来完成缺失的部分。
此外,第三方公司将综合开发缺失的部分,并生成额外的综合欺诈数据,以使用机器学习算法。这是因为实际的欺诈交易数据在数据集中可能不够大。为了实现一种新的机器学习算法来检测未来的欺诈交易,需要足够大的欺诈交易。
2.为什么合成数据很重要?
有很多理由可以证明合成数据的重要性。然而,我们将在本文中重点讨论三个原因。这三个原因列举如下。
- 对罕见事件的需求
- 生产成本低
- 分享方面的隐私
首先,如果我们考虑第一个原因,对罕见事件的需求,我们记得上一节的例子。一家金融公司需要一种新的算法来检测欺诈交易,这是一个假想的场景。因为欺诈交易可能在巨大的交易池中发生一次,并且需要了解这些交易何时以及如何发生,所以需要合成数据生成来增加测试数据集中欺诈的数量。同样,这样做的主要原因是机器学习算法需要足够的数据来学习,以便在欺诈真的发生时检测到欺诈。
其次,当我们考虑金融机构欺诈交易的成本时,它可能非常高。这里的代价不仅是金钱上的,还有名誉。因此,为了降低这种风险和成本,生成合成欺诈数据,或者让我们称之为假欺诈数据,对于事先模拟在什么条件下会发生什么是至关重要的。当然,生成这种类型的合成数据需要一个开发过程,也需要成本。然而,当我们比较这两个成本时,我的意思是一个是开发成本,另一个是来自实际欺诈交易的成本加上声誉损害的成本,那么显然赢家是显而易见的。
第三,最后但并非最不重要的一点,作为公司和个人,我们都普遍关注隐私!如果我们继续上面的例子,当谈到与另一家公司共享财务数据时,你必须考虑你正在共享的那些数据的特征。如果该数据集包含任何敏感信息,如个人信息,您必须在共享之前删除或屏蔽它们。在这一点上,合成数据的想法来拯救金融公司!屏蔽数据操作是合成数据生成器用来保护这些敏感信息的方法之一。专门为此开发的算法用与原始数据相似的合成数据替换敏感信息。
3.有什么工具可以生成合成数据吗?
在过去的几年里,合成数据提供商的数量增加了。这些公司通过他们的平台和 API 提供服务。由于需求和合成数据的重要性,越来越多的新提供商开始准备在市场上提供这种类型的服务。这里举几个关于隐含公司的例子,你可以在下面找到它们的一些名字和平台链接。
或者,也有开源工具来生成合成数据供您使用。再次举例来说,你可以在下面找到一些例子。但是,您应该知道,使用开源项目可能需要更多的技术知识来安装特定的库并从中受益。
结论
综上所述,合成数据现在无论是对公司,还是对个人都是一种需求。个人如何从中受益仍不明确,但公司已经开始使用这种技术来遵守法规并提高其业务的预测能力。这也是很好的思考一些未来的问题可能会从这篇文章中出现,如;
- 合成数据会对元宇宙产生什么影响?
- 合成数据对其他行业有什么好处?
- 公司怎么会允许个人在个人生活中使用合成数据呢?
我希望你在阅读的时候喜欢它。如果你觉得这篇文章有用,请分享。谢谢大家!
**注:**你也可以在我的媒体页面查看这篇博文和其他一些有趣的话题。此外,您也可以通过此链接在 LinkedIn 上找到我。
系统适应性对有意义的负责任的人工智能部署的重要性
照片由 Petr Ruzicka 在 Unsplash 上拍摄
到目前为止,我们已经讨论了一些关于如何部署负责任的人工智能的想法,包括“在产品开发中设定目标以实现负责任的人工智能的重要性”、“在人工智能系统中权衡道德、安全和包容性的决定”和“负责任的人工智能的系统设计思维”,这些想法向我们表明,从相邻和相关领域借鉴想法可以帮助将负责任的人工智能变为现实,而不是空想。
让我们利用这篇文章来探索系统适应性的想法,这是另一个可以帮助我们在实践中实现负责任的人工智能的原则。
活力
人类是动态的!(毫无意外!)
我们的经营环境也是如此。
所有的模型都是错的,但有些是有用的。—乔治·博克斯
必要的是,当我们有一个人工智能系统时,我们必须对它将要部署的世界做出一些简化的假设。这样的假设将高保真的真实世界转化为低分辨率的数字世界,我们在那里进行优化,我们希望它们能推广到真实世界。
但是,希望不是策略!(我的意思是技术上我们当然不希望;在发布之前,我们会进行测试、评估、验证和确认。如果你没有这样做,请这样做!)
牢记这一点,我们需要确保我们能够以审慎的方式适应这种动态。我们需要这样做的原因是,在一个动态的世界中,人工智能系统的僵化会导致伦理挑战。
我们举个例子。
考虑一下每季度更新一次的内容审核系统,因为培训和部署成本很高。这可能是因为巨大的成本、不成熟的基础设施,或者团队认为他们不需要更频繁地进行这些更新。或者任何数量的其他原因。那么什么会出错呢?
在一个数字化和互联的世界里,语言(如果我们以单峰内容调节为例)迅速呈现出新的语义。想一想政治运动可以采用一个词成为呼号,或者单词如何在网上变成仇恨言论。这可能在几周内发生。系统的季度更新可能会滞后于现实世界中发生的变化,从而限制其效力,并让仇恨言论在平台上不受限制地蔓延。
非自适应系统或缓慢自适应系统有可能偏离目标,并导致比其在实践中旨在减轻的危害更大的危害。
那么,我们能做些什么来应对这些挑战呢?
如何做到这一点的建议
鉴于我在本文顶部链接的一些文章,这可能看起来很老套,但它值得重复,因为它非常重要:将正确的利益相关者带到桌面上来!在这种情况下,它特别包括社区利益相关者,他们将是系统的主体,以及他们周围可能在管理系统中发挥作用的人。这一点之所以重要,是因为我们永远不知道一个系统将如何在现场准确使用,以及它可能如何被滥用(有意或无意)。将这些利益攸关方聚集在一起的做法将有助于阐明这些关切,并将它们置于中心位置。
内部红队的工作是破坏系统,这也有助于找到系统被滥用的方法。这是安全测试中的常见做法,也应该成为人工智能系统中更常见的事情。机器学习安全领域就是关注这一点的领域。这样的红队也可以帮助对系统进行压力测试,发现系统开始表现不稳定的新方式。这对于运输和医疗等关键任务系统尤为重要。
适应性还来自于快速替换不工作或行为不当的模型的能力。这需要一个成熟的 MLOps 基础架构才能成功。我在“采用人工智能伦理的 MLOps 思维模式”中更多地谈到了这个想法。
期待听到你的意见,谈谈你认为我们可以实现更具系统适应性的其他方式,以进行有意义的负责任的人工智能部署。
了解更多关于我的作品 这里 !
还有,看看我作为 蒙特利尔人工智能伦理研究所 的一部分发布的 人工智能伦理简报 !
提升您的 Python 代码:测试的重要性
入门
从一次性分析到生产级代码
来源( Unsplash )
为什么要测试?
数据科学中一个经常被忽视的方面是正确测试您的代码。这通常意味着确保它按预期工作,并且没有重大错误。当处理更小的、孤立的编码项目和分析时,编写测试可能不那么重要,有时可能会被完全跳过。随着项目规模和复杂性的增长,越来越多的用户开始与之互动。一切仍然会很好地工作…直到它不工作。
这就是测试的用武之地。编写测试对于维护干净可用的代码是至关重要的。这可能不是数据科学最令人兴奋或迷人的一面,但对于防止以后代码出现问题来说,这肯定是必要的。一个足够大和复杂的代码库将不可避免地包含错误和问题。将这些错误和问题保持在最低限度将在很大程度上取决于测试的全面性。在添加新功能或重构代码时,它也会有所帮助,确保您没有破坏任何您不想破坏的东西。
那么我们从哪里开始呢?对于我们这些没有传统编程背景的人来说,编写测试似乎是一项艰巨的任务。在这篇文章中,我将分解测试 Python 代码的基础知识,并希望在以后消除那些由 bug 引起的头痛。
做出断言
在代码中添加测试的最基本方式是通过assert
语句。这个内置的关键字允许你传入一个给定的条件,并检查它是True
还是False
。
assert 1 == 1
>> True
当断言为False
时,我们可以在要打印的初始条件后添加一条错误消息。当一个断言条件被评估为False
时,就会产生一个错误并显示错误消息。
assert 1 == 2, "The assertion is False"
>> AssertionError: The assertion is False
在您的代码中添加这些简单的 assert 语句对确保一切按预期运行大有帮助。为了说明这一点,让我们假设我们正试图制作一个简单的计算器应用程序。我们为加法和减法定义了两个函数,它们只是简单地将两个数相加和相减。
使用 assert 语句检查函数输出
使用assert
语句,我们现在可以验证这两个函数实际上是按照它们的设计进行加减的。
单元测试的进一步发展
Python 有一个名为 unittest 的内置库,专门用于测试你的代码。以之前的计算器应用程序为例,假设我们将这两个函数放在一个名为operations.py
的文件中。我们现在将在同一个目录中创建一个名为test_operations.py
的新文件来存放我们的测试。这里我们将导入原始的operations.py
文件和unittest
库。
使用 unittest 库进行基本测试
让我们在这里分解代码。前两行导入了operations.py
文件和unittest
库。接下来,我们创建一个名为TestOps
的类。我们可以随意命名,重要的是我们创建的类必须继承自unittest.TestCase
。这个TestCase
类为我们提供了几个有用的方法来测试我们的代码。
之后,我们在类中定义了两个方法,每个方法都以单词test
为前缀。这很重要,因为它允许 unittest 模块将这些方法中的每一个都标识为单独的测试。如果没有这个前缀,这些方法实际上会被忽略。这两种方法都包含一个变量expected
和answer
,前者是我们正在测试的函数的预期输出,后者是运行该函数返回的值。为了通过测试,答案必须与期望值相匹配。
我们还在 unittest 库中看到了可用的方法之一,assertEqual
。我们向这个方法传递两个参数,它检查这两个参数是否相等。下面是unittest
库中更多最常用的方法。
unittest 库中一些最常用的方法
在这两个方法下面,我们看到了if __name__ == “__main__”:
,这意味着只要直接运行test_operations.py
模块,if 块中的代码就会运行。最后unittest.main()
运行我们模块中的所有测试。
我们的输出从两个时期开始。其中的每一个都代表一个单独的测试,或者在我们的例子中,代表我们类中的每一个方法。这些句点只有在测试成功通过时才会出现。如果测试失败,将会出现一个F
。然后我们有一系列破折号,后面是测试运行的总结,包括测试运行了多长时间。在我们的例子中,我们在 0 秒内运行了两个测试。最后是文本OK
,表明我们的测试已经全部成功。
测试边缘案例
在编程中,边界情况测试函数或程序的边界。这可能包括向函数传递不寻常的输入,或者传递可能被认为是极端的值(例如,在一个值范围的开始或结束)。在我们的测试中添加不同的边缘案例总是一个好主意,以确保我们的程序在各种条件下都能工作。相信我,从长远来看,花时间写这些边缘案例是值得的。
对于我们的计算器应用程序,边缘情况可能包括使用负数作为输入。我们可能还想处理用户传入非数字输入的情况。让我们为这些添加一些测试,并看看test_operations.py
文件的更新版本。
向我们的测试中添加边缘案例
我们在这里修改了文件,删除了expected
和answer
变量,并将值直接传递给我们的函数。您可能还注意到,我们在这里使用了一个名为assertRaises
的新方法,当我们向函数传递一个字符串和一个整数时,它会检查一个TypeError
。这个方法允许我们确保当一组特定的输入被传递给我们的函数时,抛出正确的错误。这有利于输入验证,以确保只接受特定类型的输入。
安装()和拆卸()
setUp()
和tearDown()
方法允许我们定义在每次测试之前和之后应该立即运行的某些指令。如果我们想在测试之间共享输入,我们可以在计算器示例中使用它。我们可以将它们放在我们的setUp()
方法中,而不是在每个测试中单独定义它们。
在测试过程中使用安装和拆卸方法
我们可以从测试运行的输出中看到,setUp()
和tearDown()
方法在每个测试之前和之后都被调用了。我们还将测试输入设置为setUp()
方法中的属性。如果我们需要改变我们的测试输入,我们将不得不经历每一个单独的测试。这看起来不像是太多的工作,因为我们总共只有两个测试,但是如果我们有几十甚至几百个测试,你可以想象这将是非常耗时的。
结论
我们已经看到了为您的代码编写测试的重要性,以及一些能够有效地做到这一点的方法。在最基本的层面上,有一个测试条件是否成立的assert
语句。在代码的关键区域使用这种方法应该有助于减少将来一些意想不到的错误和问题。我们还介绍了内置的unittest
库,它为您提供了强大的方法,如assertEqual
来轻松测试您的代码。我们还看了setup()
和tearDown()
方法,它们帮助您在运行测试之前准备好环境,并在每次测试之后关闭环境。你可以用这个库做更多的事情,这只是基础!我希望这能帮助你写出更干净、可维护、无错误的代码。
感谢您的阅读!
您可以通过以下渠道与我联系:
数据科学中的激励问题
了解你为什么喜欢或讨厌数据科学家的工作
在过去的几周里,我一直在考虑是接受一个新的数据科学职位,还是彻底离开这个领域。在尝试选择最佳方案时,我发现自己并没有考虑“10 年后我想去哪里”,而是回顾了 10 年前,也就是我接触格雷格·曼昆的《经济学 10 原则》的时候。具体来说,他的第四个是最重要的。
原则#4:人们对激励的反应
在仔细思考这一原则以及它与我在数据科学领域接受新工作的决定之间的关系时,我有了以下问题:
作为一名数据科学家,以及更广泛的数据科学家角色,我有什么激励措施?
**免责声明:**就本文而言,我所说的数据科学家是指其职位为“…与利益相关者一起影响我们最有影响力的业务决策”的人我说的是 Cassie Kozyrkov 概述的角色(分析师/专家分析师/统计学家/数据科学家)。
为了回答这个问题,我为一个数据科学家绘制了一个激励框架(从我的角度;您的里程可能会有所不同)。
这一框架中概述的五种激励措施中的每一种都会在两个维度上有所不同:基于工作地点的突出度和基于个人偏好的重要性。作为这项练习的一部分,我将每项激励对我和我当前工作场所的相关性和重要性从 1(低)到 5(高)进行了排序。考虑换工作的读者可能会发现这个练习很有用。
数据科学家的激励框架
回答问题(突出:3;重要性 3)
曾经在课堂上第一个向空中开枪的数据科学家会理解这种激励(我承认,我就是这些学生中的一员)。如果你被这种激励所驱使,你会更倾向于享受即席分析或仪表板创建工作流。这种激励的问题是它通常是短暂的。一旦你回答了问题,它就消失了。所以,如果你被这种感觉所激励,并且你得到即席提问的几率很低,你现在的角色可能不太适合。
为你的论点获得认同(突出:1;重要性 4)
从他们工作的讲述故事方面得到乐趣的数据科学家最有可能被这种激励所驱使。我被获得认同的感觉所激励,然而我的工作并不经常专注于交流数据驱动的论点,目的是影响具体的决策。这里的另一个细微差别是,有时数据科学家会被这种独立于围绕论点的上下文的感觉所激励,而其他人可能需要对论点的上下文真正感兴趣或投入。
例如,如果我对提高电子邮件点击率的想法没有动力,我可能不会有足够的动力来提出一个强有力的论点来改变电子邮件的美学以提高点击率。
加薪/升职/不被解雇(突出:4;重要性 4)
这些外在动机并不是数据科学家独有的,但我认为,相对于其他类型的角色,它们对数据科学家的影响力减弱了。这有几个原因。
首先,数据科学处于萌芽阶段,因此,职业轨迹并不十分清晰。两种常见的途径是“人事经理”和“个人贡献者”(ICs)。从 IC 到人事经理,工作职能肯定会有更多的变化,但一旦你管理了一个数据科学家团队,职业阶梯上就没有明确的下一个目标了。
这与我的第二个原因有关,即外部激励因素对数据科学家的影响较小——这些团队通常(但并不总是)对公司收入的直接影响较小,因此他们往往规模较小,在领导层中的席位也较少。
建筑材料…主要是为你自己(突出:5;重要性 2)
受天生的学术好奇心驱使的数据科学家将最强烈地感受到这种激励。解决构建预测模型或大型仪表板带来的小问题可能会很有趣。想想为家常菜剁碎食材所带来的内在快乐。现在想象一下这个场景:在准备了一顿美味的饭菜后,50 次中有 49 次全部被扔进了垃圾桶,只有 50 次中有 1 次有人会享受到你的劳动成果。剁碎这些蔬菜你会有多兴奋?
由 Unsplash 上的 Max Delsid 拍摄的照片
数据科学工作远不像切菜那么简单,它可能需要找到复杂的技术、实践和哲学问题的解决方案。因此,这种激励的力量不仅仅取决于个人,还取决于他们正在解决的问题类型。
为别人做事(突出:4;重要性 4)
这种动机可以是内在的,也可以是外在的。知道自己在帮助别人,感觉真好。将他们需要的可视化整合在一起,或者构建一个销售线索评分模型来帮助销售团队赢得更多交易(并提高他们的佣金!)——送过来的时候就是感觉很好。类似于帮助你的朋友搬出他们的公寓,这可能是一个拖累,但知道你帮了忙感觉很好。同样,这不是数据科学角色独有的,事实上,我认为这种激励是任何团队固有的。然而,鉴于数据技能的缺乏以及数据在企业各个部分的无处不在,目前数据科学家比其他工作职能部门更经常地为他人提供服务。
委托代理问题
考虑到这个激励框架,我更好地理解了为什么文章会像一样突然出现。这就是为什么这么多数据科学家离开他们的工作岗位 (52K 掌声中等!).这个领域没有吸引合适的人来解决合适的问题。
这是一个经典的 委托代理问题 信息不对称加剧了这一问题。好吧,这是一个术语——让我们从不对称信息部分开始,把这句话分解开来。
不对称信息
数据科学家带着(几乎肯定是错误的)对他们工作的预期开始工作。与数据科学团队一起工作的人会对数据科学家的工作有另一种(也可能是错误的)期望。
真正糟糕的委托代理问题
有着一系列期望的数据科学家将根据他们自己的激励结构采取行动(例如上述五种激励的某种分布)。数据科学家合作的团队也将有自己的一套激励机制,这些机制可以是多种多样的(想想产品经理和销售代表的激励机制)。当双方的激励机制没有朝着相同的目标发展时,我们就会错过创造商业价值的机会,团队会感到沮丧,员工也会不开心。
如果你是一名数据科学家,这可能会帮助你更好地理解为什么你喜欢你目前的角色,或者对你目前的角色感到沮丧。如果你在工作中不开心,我建议你进行类似的练习。你可能会发现你的动机严重错位,也许是时候改变了,不管是一家新公司还是一份新的工作。
复杂性的劣势
思想和理论
为什么快速和简单的试探法做得更好
在诺贝尔奖得主哈里·马科维茨(Harry Markowitz)发展现代投资组合理论的七年后,均值-方差优化仍然是投资组合选择方法的基石,也是基金经理统计工具箱的关键组成部分。对于寻求最小化波动性和增加回报的当代投资者来说,多元回归和均值-方差优化的标准组合是当今的主流。复杂性带来了安慰,全球顶级商学院开发的大量统计策略为寻求理性和统计逻辑保证的基金经理提供了避难所。但投资者的水晶球被复杂性蒙上阴影了吗?
进入,快速和节俭的启发式。尽管有令人信服的计算,可靠的公式和常见但复杂的统计方法背后的基本原理,快速和节俭的试探法为这种计算昂贵的策略提供了一种令人耳目一新的替代方案。快速,因为它们的使用使决策能够快速做出节俭,因为决策通常是通过忽略除部分可用信息(预测)之外的所有信息做出的。通过将计算简化为简单透明的方法,启发式方法可以比复杂的方法更快地做出决策,并且使用更少的信息。
试探法并不新鲜,众所周知,我们在决策中经常依赖它们,这是我们有限理性的一个假设结果,即由于内在和环境的限制,我们做出理性决策的能力有限。在人类(和其他动物)中使用启发法通常是本能的,并作为次优策略被容忍,这是时间和准确性之间的必要权衡。然而,简单的试探法已经在体育、医学、金融和政治等领域取得了预测性的成功。在 2006 年,Scheibehenne 和 brder 发现使用认知启发式的业余选手比专家更能成功预测温布尔登的结果,同样,在 1997 年, Green 和 Mehr 发现医生使用快速和节俭的树木比复杂的替代品更能准确预测心脏病发作。
没有什么地方比吉杰伦泽、卡尼曼和特沃斯基的作品更能引起关于启发式的争论了。在这里,人类决策中的偏见被认为要么是朋友,要么是敌人,要么是一个起作用的因素,要么是一个重大的非理性影响,只有通过使用统计和逻辑才能减轻。
在我们继续之前,我将回头向精通统计学的投资者介绍一个熟悉的权衡启发法:1/NT4 法则。被称为平等启发式,它可以应用在资源分配的情况下,在 N 个选项之间平均分配资源,因此, 1/N 。我在图 1 中用比萨饼和盘子表示了这一点。表面上看,这似乎是一种不合理的方法,但在 DeMigeul 等人的研究中,这种方法与 14 种备选投资策略进行了对比。使用夏普比率,non 的表现始终优于 1/N 。事实上,当用 25 种资产的 250 年训练数据进行评估时,只有 Markowitz 的均值-方差成功。然而,这并不是说 1/N 应该是首选,只是说在某些环境和情况下,简单的启发法可以胜过复杂的策略。事实上,Markowitz 自己也依靠这个简单的启发式方法进行投资。注意,这里没有复杂的安慰。
图一。用披萨解释 1/N 法则。注意,这里没有复杂的安慰。
为什么简单的启发式策略能胜过更复杂的策略?答案不一定在于启发法本身,而在于它们被运用的环境的本质。
不确定情况下的理性
新古典经济学以理性为基础。在这种理性范式中,决策是通过考虑所有相关结果、其后果和可能性而做出的。这是商学院熟悉的逻辑世界,一个充满风险的世界,未来是确定的,优化是王道。在一个充满风险的世界里,启发式是第二好的。
在赌场之外,完美的知识和确定性的情况是罕见的。1954 年,野人在小和大世界中描述了这种情景对比。在小世界里,结果是可知和可解释的——想想轮盘赌;在大千世界中,未来是不确定的,尽管有信息的限制,还是必须做出决定。在 Incerto ,中,纳西姆·尼古拉斯·塔勒布把决策策略的应用,在我们小世界学术实验室里始乱终弃到大世界的情形称为卢迪谬误。描述不可能满足复杂预测策略的要求,并强调未知因素对此类模型造成的危险。在大千世界中,理性决策的基础是不现实的。
所以,大世界是启发法的发源地。更少的线索和更少的数据可以带来更好的结果:启发式不是次优策略。
预测:少即是多
简单的启发违反了我们的理性观念。我们已经看到,至少在一种情况下,简单的东西可以做得更好,最复杂的策略不一定是最好的。为了进一步探索这一点,并扩大我们对启发法是受欢迎的决策策略的情况的理解,我试图复制心理名人 Gigerenzer 和 Todd 在 1999 年的发现,他们的书:简单的启发法使我们聪明。但是在我开始之前,请记住启发式(al)成功的几个条件:
- 当有很多可预测的不确定性时,试探法工作得很好;
- 当有多种选择时;和
- 学习机会少的时候。
这些条件不仅导致简单方法的成功,也导致许多复杂方法的失败。在复杂的策略中,预测的不确定性意味着准确假设的可能性很小(或者说,不准确假设的可能性更大),大量的选择意味着需要估计更多的参数(这样做会产生更多的错误),最后,较少的学习机会意味着较差的概括。
让我们简单地浏览一下模型复杂性。通常,复杂性可以被认为是模型中自由参数的数量;它们是我们知道的变量,量化和估计权重,取决于它们的影响。具有大量变量的复杂模型需要更多的估计,而更多的估计会产生更多的错误机会(尤其是如果我们使用的数据有一点大噪音的话)。因此,这些模型往往会过度拟合——这是偏差-方差困境的产物。如果你不熟悉,你可以在这里阅读困扰机器学习的权衡。现在,只需知道过度拟合通常等于预测不佳,产生图 2 中那种倒置的 U 形函数。节俭模型受益于它们的高偏差和缺乏方差,产生更好的预测和剔除噪音中的信号。
图二。模型精度(在拟合和预测中)与复杂性(模型中估计的自由参数的数量)。改编自皮特和明(2002) 。
简单试探法的速度、准确性和节俭性允许创建健壮的预测策略。在本例中,我们将基于九个二元预测值来考察四种策略在拟合和预测 83 个德国城市人口时的稳健性(图 3)。
考虑的策略包括多元回归,一种典型的统计方法,以及学习更少变量和搜索更少线索的试探法:
多元回归 是计算开销最大的策略,我们会考虑我们的“复杂模型”。它通过寻找数据点和一个超平面(想想:线)之间的最小平方距离来创建一个函数。
取优 是一种快速而节俭的启发式方法。它根据重要性对线索进行排序,并选择最好的线索(最成功地区分所有其他线索的线索)——这是一种非补偿性策略。也就是一个好理由。
道斯法则 ,像回归但更快。它只分配+1 或-1,而不是找到最佳的参数权重。不节俭。
极简主义者 ,喜欢博采众长但没有最初的排名。非常快;节俭。
图 3。各种模型在拟合[1]和预测[2]德国城市人口时的稳健性,转载自 Gigerenzer 和 Todd (1999)。取优(FF)试探法在预测方面比回归法表现更好,线索更少。
结果(不)令人惊讶。回归法是最彻底的方法,它搜索所有的线索,分配权重,并以 75%的准确度创建最佳拟合。在预测中,回归法是第二差的,比最简方法高几个百分点,最简方法随机选择一个线索并坚持下去。两种试探法:取最佳法和道斯法则名列前茅,取最佳法的预测准确率约为 72%。但这有什么大惊小怪的?回归预测仍然达到了可观的 71%。
计算密集型策略是昂贵的,并且启发式算法因偏爱时间而不是准确性而声名狼藉。这些结果表明,事实并非总是如此。在某些情况下,你可以通过更少的努力做出更准确的预测。在简单策略和复杂策略一样成功的情况下,节省时间(和金钱)是有意义的!).
另一个促进使用启发式的重要环境因素是学习机会很少。在现实世界中,人们的决定会受到他们的经验的影响,他们所学到的会影响他们的行为。事实上,这在各种情况下可能意味着很多事情,并且通常被认为是一种不必要的偏见,是人类决策的易错性和局限性的典范,但现在,让我们将学习机会视为我们数据集的大小——这是我们为了建立模型和产生预测而必须处理的数据量。
为了了解学习机会如何影响模型的预测准确性,我再次尝试重现 Gigerenzer 和 Todd 的发现,使用与之前相同的模型,评估它们在各种规模的训练数据中的准确性(图 4)。
图 4。各种模型在不同规模训练集上预测德国城市人口的通用性。除了训练集超过 80%的可用数据之外,在所有情况下,快速而简单的启发式算法都比回归算法表现得更好。在训练集的补充上测试策略。转载自吉杰伦泽和托德(1999)。
同样,没有惊喜。我们在这里看到的是少即是多的效果,用更少的数据和更少的计算做出更准确的决策,而不是更多。
在训练数据超过我们可用数据的 80%之前,我们的复杂模型至少输给了一个简单的启发式算法。这是不现实的。在风险的世界里,我们知道样本空间;在这个不确定的世界里,我们知道的很少。正是在这里,启发式的简单性发挥了作用,在信息非常有限的情况下,可以快速轻松地做出准确的决策。值得注意的是,在可用数据量增加 9 倍的情况下,取最佳(我们的 A*启发式方法)只能将预测性能提高 6 个百分点。
在不确定的情况下,复杂模型的预测准确性较差,这与卡尼曼等学者的工作中理性的假定优势形成了鲜明对比,卡尼曼领导了(反)启发式辩论,声称他们的偏见和节俭是我们的非理性和有限系统的产物 1,而不是支持他们的环境成功。当然,当代计算技术的进步和对启发式的研究已经允许以前只被理解为本能和天真的策略被量化和分析。在有些情况下,复杂的策略非常成功,而在另一些情况下,忽视简单快速的启发式实现是一个代价高昂的疏忽,如果不是潜在有害的话。通过生态理性的概念可以更好地理解这些情况。
生态合理性
用更少的信息、更少的资源和更少的时间可以做出更好的决策。由于大世界是真实的世界,面对不确定性时启发式的有效性使它们成为必要的决策工具。但是,试探法的使用应该在适合成功结果的环境中进行,换句话说,在生态合理的环境中使用。
生态理性可以帮助我们决定是否最好选择复杂的统计策略,而不是快速和节俭的策略,反之亦然。在管理决策的背景下,他们的研究发现启发式策略并不次于理性策略。
不是所有的结果、选择和可能性都是已知的;给定最少的数据和大量的选择,快速和节俭的试探法的鲁棒性提供了一个生态理性的选择。我们都满意的一个例子是资源的分配,这里我们已经看到 1/N 是生态理性的,因为预测的不确定性,一个大的 N 和缺乏有意义的学习机会。
复杂策略长期以来饱受过度拟合之苦。在人员选择、资源分配、急救医学、政治和体育预测的情况下,启发式是有效的决策工具。这些都是不确定的情况,通常伪装成风险,预测比事后诸葛亮更重要,在某些情况下,启发式的透明度和可记忆性以一种计算昂贵的方法无法比拟的方式帮助人类决策。
注释、参考文献和推荐读物
我高度推荐我最喜欢的两本书,作为对风险、决策科学和统计学感兴趣的人的必读书: 纳西姆·尼古拉斯·塔勒布的《黑天鹅 (2008】和 思考,丹尼·卡尼曼的《快与慢 (2013】)。
Gerd Gigerenzer 领导了一些令人难以置信的启发式研究,但它相当沉重,所以这里有一个链接到一个 TED 演讲。你会看到他讨论了 1/N,并回顾了我写过的简单启发法。
引用我找不到链接的资源:
Gigerenzer,g .和 Todd,P.M. (1999 年)。使我们变聪明的简单启发法。牛津大学出版社。
Gigerenzer,G. (2008 年)。凡人的理性:人们如何应对不确定性。牛津大学出版社。
内部对齐问题
播客
埃文·胡宾格谈建立安全和诚实的人工智能
编者按:这一集是我们关于数据科学和机器学习新兴问题的播客系列的一部分,由 Jeremie Harris 主持。除了主持播客,Jeremie 还帮助运营一家名为sharpes minds的数据科学导师初创公司。
你怎么知道一个超级智能的 AI 正在努力做你要求它做的事情?
事实证明,答案是:不容易。不幸的是,越来越多的人工智能安全研究人员警告说,如果我们想避免糟糕的结果,这是一个我们必须尽快解决的问题——这可能包括一场物种层面的灾难。
在人工智能安全的背景下,人工智能针对我们要求之外的事情进行优化的故障模式类型被称为内部对齐故障。这与外部对齐失败截然不同,外部对齐失败是指当你要求你的人工智能做一些结果证明是危险的事情时发生的情况,它只是在 2019 年被人工智能安全研究人员视为其自身的风险类别。领导这项工作的研究人员是我本期播客的嘉宾,埃文·胡宾格。
Evan 是一名人工智能安全资深人士,他在 OpenAI 等领先的人工智能实验室进行过研究,他的经验还包括在 Google、Ripple 和 Yelp 工作过。他目前在机器智能研究所(MIRI)担任研究员,并和我一起谈论他对人工智能安全、对齐问题以及人类是否有可能在超智能人工智能出现后生存下来的看法。
以下是我在对话中最喜欢的一些观点:
- Evan 分享了他的内部对齐失败的玩具示例:他让我们想象一个解决迷宫的人工智能,它在迷宫数据集上训练,以到达给定迷宫的中心。在训练期间,中间的瓷砖被标上了绿色箭头,所以 AI 开发者不知道的是,AI 实际上最终认为它的目标是定位绿色箭头,而不是解决迷宫。因此,当人工智能被置于一个新的设置中时——绿色箭头被移动到一个完全不同的位置,与迷宫的解决方案无关,人工智能无法解决这个新问题。虽然这似乎是一个相当无害的问题,但不难想象在其他情况下,即使开发者认为人工智能正在优化的内容与它实际正在做的事情之间存在轻微的不匹配,也可能变得非常危险。
- 我们讨论了人工智能安全实际上是否需要更多的研究人员,或者更多的资金。虽然 Evan 认为它通常是这样的——而且有充分的理由认为这是任何人都可以解决的最重要的问题——但我们也讨论了一个小型、紧密聚焦、高信号、低噪音社区的价值。很明显,这是一种权衡:人工智能安全研究需要大量非常仔细的思考,如果该领域被兴趣淹没,并最终根深蒂固的学术激励导致复制危机和其他领域低质量研究的泛滥,这将变得更加困难。
- 我们从内在一致性的角度探索了许多过程——从进化到养育孩子,再到公司的形成,我发现这部分对话特别有趣。简而言之,宇宙“试图”将人类与基因繁殖的目标联系起来,但失败了(人类发明了避孕药具,并且没有把醒着的每一秒钟都用来研究如何生育),父母试图将他们的孩子与他们的价值观联系起来,但失败了(孩子制定了自己的目标,并欺骗他们的父母试图实现这些目标),社会试图将公司与生产商品的目标联系起来,这些商品为每个人的网络生活增加了更多的价值。 但失败了(公司追求自己的目标,并且很像孩子一样,发展出欺骗周围社会的激励机制,以实现利润最大化)。
- 埃文认为对齐是一个比智能更难解决的问题。因此,他对我们在建造超级智能系统之前就能找到完整的人工智能校准问题的解决方案持悲观态度。虽然他非常不确定——并强调这一点——但他认为,由于高级人工智能系统带来的风险,人类面临灭绝的可能性超过 50%。尽管如此,风险如此之高,以至于他认为尽管面临挑战,这个问题还是值得正面解决的。
你可以在 Twitter 上关注埃文,或者我在这里。
章节:
- 0:00 介绍
- 1:45 AGI 安全研究
- 8:20 人工智能的能力
- 14:40 内部对齐
- 25:12 拟人化这些人工智能系统
- 29:15 平淡
- 37:36 透过内在校准的透镜进化
- 49 时 06 分内部校准失败
- 54:32 内心校准和养育
- 1:00:35 初创公司和市场需求
- 1:03:30 对人工智能调整持乐观态度
- 1:09:20 总结
非线性回归的有趣世界
或者勒文伯格和马夸特是如何超越最小二乘法的
有时我想,我是否是唯一一个在看到一堆点后试图画出一条不知何故跟随趋势的曲线的人。我想我并不孤单。每个人都有这种直觉。当只有几个点,我画的曲线只是一条直线时,这很容易。但是,每当我添加更多的点,或者当我寻找的曲线不同于直线时,它就变得越来越难。在这种情况下,一个曲线拟合过程就能解决我所有的问题。我承认输入一堆点,找到一条与趋势“完美”匹配的曲线,这是令人兴奋的。但是这是如何工作的呢?为什么拟合直线不同于拟合形状奇怪的曲线。每个人都熟悉线性最小二乘法,但是,当我们试图匹配的表达式不是线性时,会发生什么呢?我问了自己这些问题,这让我踏上了数学文章、堆栈溢出帖子[1]和一些深奥的数学表达式(至少对我来说是这样)的旅程。),还有一个关于发现一种算法的有趣故事。这是我试图用最简单而有效的方式来解释这一切…
问题是
在某些情况下,线性回归是不够的。有时有必要将一系列数据调整为非线性表达式。在这些情况下,普通的最小二乘法对我们不起作用,我们需要求助于不同的方法。我第一次遇到这种情况是在我试图将 2D 数据拟合到一个如下所示的函数时:
等式 1。非线性函数的示例
幸运的是,我有很多方法可以自动找到 Beta 的最佳值。任何熟悉 MATLAB 的 nlinfit 或 SciPy 的 curve_fit 函数的人都知道,一旦有了模型的数学表达式,这个非线性回归过程就很简单了。所有这些库的工作方式都类似,它们使用迭代算法,试图找到使观测数据和模型响应之间的差异最小化的参数或参数组合。让我们用一些等式来表达这个。
假设我们有一个函数 f ,它依赖于一个独立变量 x 和一组参数 a 。这就是 y= f(x,a) 。这个函数正在对一个我们已经知道输出 ŷ 的过程建模。目标是找到一组参数 a ,其导致最接近 y 的可能 ŷ 。测量我们有多接近ŷ的一种方法是计算残差的平方和。残差被定义为每一点上 y 和 ŷ 之间的差值。这可以表示为:
等式 2。残留的;剩余的
在这种情况下,下标 i 是指我们正在分析的数据点。如果我们试图调整一条有 100 个数据点的曲线,那么我们需要计算每个点的残差。最后,我们将有一个 r1、r2、r3 等等,直到我们在这个特定的例子中到达 r100 。残差的平方和对应于:
等式 3。残差的平方和
找到产生最低可能值 S 的参数 a 的组合意味着参数 a 是从我们的模型计算的 y 和 ŷ 值之间的最佳可能匹配。
显示问题的图解方式
下图用红色显示了一些数据点,用紫色显示了模型响应。如果我们想测量该模型如何调整数据点,我们可以计算数据点( ŷ )和模型响应( y )之间的差异,然后对这些差异的平方和(残差)求和。这个想法可以外推到包含多个独立变量的函数( x1,x2,…xn )。
残差的图形表示(作者使用 Desmos 制作的图形)
解决方案(衍生品)
寻找一个函数的最小值的一个普通方法是计算它对一个特定变量的导数。在这种情况下,我们希望找到使函数 S 最小化的 a 的值。这可以写成:
等式 4。残差平方和关于参数 a 的导数
下标 j 意味着 a 可能有多个值,因为函数 f 取决于独立变量 x 和一个或多个参数 a1,a2,…,aM 。在这种情况下,我们需要对每个参数进行部分求导。一个函数的最小值是在它的导数等于零的地方找到的。所以,我们之前的等式会变成这样:
等式 5。导数等于零以找到最小值/最大值
注意我是如何展开 ri 的,只是为了提醒你这个残差是计算值和真实值之间的差。在这一点上,重要的是有一个导数的图形解释,以及为什么当它们等于零时,我们可以说我们找到了最小值(或最大值)。
用导数最小化函数的图解说明
一个导数可以被定义为一个函数相对于它的自变量如何变化的度量。我们能找到的最简单的例子之一是类型为 y=mx 的函数。这个函数相对于 x ( dy/dx )的导数是 m 。这意味着 x 的每一个微小变化,输出( y )都会变化 m 次。所以这个函数的导数代表在 x 变化后 y 变化了多少。从视觉上看,这可以看作是函数中特定点处切线的斜率。
下图显示了一个与我们之前提到的直线完全不同的函数。在类型为 *y=mx,*函数中, y 相对于 x 的变化比率总是相同的,而与 x 的值无关。在这种情况下,该比率根据 x 变化。您可以看到图中所示的每个点对于切线具有不同的斜率( m )。这个斜率代表在特定点上计算的函数的导数。寻找函数的最小值和最大值的一种方法是寻找斜率为零的地方。在这种情况下,24.5 的 x 将给出最小值,而 10 的 x 将给出最大值。
衍生产品的图示(作者使用 Desmos 制作的图表)
可能感觉事情开始变得复杂了,但是请耐心听我说。这并不像看起来那么难!如果你熟悉微积分和导数,你会知道推导最后一个方程的结果是:
等式 6。衍生产品的评估结果
项 df(xi,aj)/daj 对应于函数 f 相对于每个参数 a 的导数。在这一点上,值得记住的是,我们的模型可以包含多个参数 a ,我们需要找到函数 f 相对于这些参数的导数。
请注意,这个计算是针对数据中的每个点进行的。这就是为什么我们的函数 f 依赖于 xi 和 aj :我们有 x 的 i 值和 a 的 j 值。我们可以将所有这些导数汇集成一个术语,称为雅可比。多么奇怪的名字!雅可比矩阵是一个矩阵,它包含一个函数相对于它的每个参数的所有一阶偏导数。
记住下标 i 代表一个特定的数据点。如果我们的数据由 100 个点组成,那么这个雅可比矩阵将有 100 行和 3 列,因为我们有 3 个参数。
如果我们使用雅可比矩阵的概念来重写我们为 dS/da 找到的上一个等式。我们将拥有:
方程式 7。前一个方程的矩阵形式
注意我是如何用矩阵来表达这个方程的。我去掉了和,现在雅可比矩阵和残差都用矩阵表示了。请记住,所有这些方程都是针对所有数据点同时求解的,因此使用矩阵非常方便。在这一点上,我将向您展示两种方法,我们可以用这两种方法来求解这个方程,并找到更好地调整初始方程 f 的参数。
多一点数学知识
梯度下降
你可能听说过这个名字。梯度下降是一种优化算法,用于寻找函数的局部最小值。背后的想法不难理解。因为我们试图最小化的函数是可微的,所以我们知道任意点的梯度。这意味着我们知道我们需要走哪个方向才能继续走下去。在每次迭代中,我们都向函数的最小值靠近一点。梯度下降法的两个重要方面是初始猜测和每次迭代的步长。这种方法的效率高度依赖于这两点。
这和非线性回归有什么关系?嗯,我们可以用梯度下降法找到函数 S 的最小值。在这种情况下,我们朝着最小点采取的每一步都可以表示为:
等式 8。梯度下降步骤
这个 hGD 被添加到参数的初始估计中,并且这个过程被重复,直到我们找到最小值或者我们超过最大迭代次数。出现在最后一个等式中的α用于增加或减少我们正在采取的步骤的大小。正如我之前提到的,梯度下降法的性能与步长以及初始猜测有很大关系。
高斯-牛顿法
梯度下降法是广为人知并被广泛使用的方法,但是根据参数的数量,它可能相当慢。另一种方法是高斯-牛顿法,类似于梯度下降法,这是一个迭代过程,在这个过程中,我们采取多个步骤,直到我们接近正确的解决方案。在这种情况下,我们通过以下方式获得新的参数组合:
等式 9。高斯-牛顿步
其中 hGN 代表我们在高斯-牛顿法中所采取的步骤。如何才能知道每次迭代时 hGN 的值?
在高斯-牛顿法中,函数 f 使用一阶泰勒展开式进行近似,这意味着
方程式 10。泰勒展开
还记得我们说过,项 dfi(a)/daj 也被称为雅可比,所以前面的等式也可以写成:
方程式 11。用雅可比矩阵表示的泰勒展开
如果我们用这个表达式将 f(an) 替换为 f(an+1) ,我们最终得到:
方程式 12。用 f(an+1)代替 f(an)
可以重新组织为:
方程式 13。方程式 12 重新组织
并且使用以下等式来计算该步长:
方程式 14。高斯-牛顿步
下图适用于这两种方法。在这两种情况下,都需要指定参数的初始猜测以及停止标准。在这种情况下,停止标准由最大迭代次数或平方误差的最小值组成。
梯度下降和高斯-牛顿算法流程图
Levenberg-Marquardt 方法或阻尼最小二乘法
注意 hGD 和 hGN 方程非常相似,这与 Levenberg-Marquardt 方法有很大关系。这种方法在梯度下降法和高斯-牛顿法之间切换,取决于我们离解决方案有多近。Levenberg-Marquardt 方法表示为:
方程式 15。勒文伯格-马夸特步骤
在上式中, I 表示单位矩阵,λ称为阻尼因子。该参数允许高斯-牛顿或梯度下降更新之间的变化。当λ较小时,该方法采用高斯-牛顿步骤,当λ较大时,该步骤遵循梯度下降法。一般来说,λ的第一个值很大,因此第一步是在梯度下降方向[2]。这背后的逻辑是高斯-牛顿法对最后的迭代更有效,而梯度下降法在算法离理想解还很远的过程开始时是有用的。
如您所见,Levenberg-Marquardt 算法是梯度下降和高斯-牛顿算法的结合。因此,Levenberg-Marquardt 算法的效率也高度依赖于初始猜测以及阻尼因子的选择[3]。此外,阻尼因子的增减也会影响算法的性能。在每次迭代中,阻尼因子乘以或除以一个因子,该因子取决于前一次迭代的好坏。一般来说,λ增加 2 倍,减少 3 倍。
Levenberg-Marquardt 算法流程图
作为一个有趣的历史旁注,Levenberg 在 1944 年提出了这种方法,但直到 19 年后,他的方法才部分由于引用了 Marquardt 的一篇论文而声名狼藉。Levenberg 在陆军弹药厂 Frankford Arsenal 工作时发表了该算法。在某种程度上,可以说马夸特重新发现了阻尼最小二乘法,这就是为什么今天这两个名字都被用作参考。Pujol [4]完整地描述了 Levenberg 和 Marquardt 所做的工作,以及他们每个人如何分别对我们今天所知的算法做出贡献。
代码
Levenberg-Marquardt 算法可以以多种形式实现[5]。在这种情况下,我用 Python 笔记本向展示了一种使用这种算法的非常简单的方法。我还将我的结果与 Scipy 的 curve_fit 函数的结果进行了比较。这个函数有一个更健壮的算法实现,它将胜过我将向您展示的那个。然而,我认为这段代码是一个很好的起点,可以用来理解任何更复杂的东西,以及理解“引擎盖下”正在发生的事情。虽然本笔记本中显示的示例是指二维问题,但算法背后的逻辑可以应用于多种情况。
本笔记本中包含的示例被称为偏角曲线分析(DCA ),这是石油工程领域常用的方法。笔记本包含 DCA 的简要说明和一些示例。你可以在我的 GitHub 库的这里访问这个笔记本。
结论
几年前可能要花很长时间才能完成的计算现在每天都变得更容易了。然而,理解所有这些计算来自哪里总是很重要的。进行线性和非线性回归是数据分析和机器学习中许多其他事情的基础。今天,当每个人都在关注这些领域,试图找到答案或更有效的执行过程的方法时,了解基础是如何工作的就很重要了。
参考
- leven Berg–Marquardt 算法是如何以一种可理解的方式详细工作的?。堆栈溢出 post。07/15/09
- 加文,H. (2020)。非线性最小二乘曲线拟合问题的 Levenberg-Marquardt 算法土木与环境工程系。杜克大学。
- 关于如何使用 Levenberg-Marquardt 算法改进摄像机校准参数的备忘录。机器人视觉实验室。普渡大学。
- Pujol,J. (2007)非线性逆问题的解决方案和 Levenberg-Marquardt 方法。地球物理学,第 72 卷,第 4 期
- 豪尔赫·莫里。(1977).Levenberg-Marquardt 算法:实现和理论。苏格兰大学第 7 届邓迪数值分析双年展。