哪些措施对控制新冠肺炎更有效?
国际航班、隔离和面部遮盖是最有效的措施
图片来源:freepik
作者:吉塔·达斯和凯瑟琳·洛佩斯
自 2020 年 1 月以来的 8 个月里,新冠肺炎让整个世界天翻地覆;不同的国家和政府使用不同类型的措施来拉平曲线。
在我们的上一篇文章中,我们研究了确诊病例(累计)比澳大利亚多的国家,很明显,越早采取措施,它们在控制疾病传播方面的影响就越大。如下图 1 所示,截至 2020 年 8 月 28 日,有 68 个国家的确诊累积病例多于澳大利亚。
图 1: 68 个国家的确诊(累积)病例数超过澳大利亚
本研究中的数据和国家
我们在这项研究中使用了来自人道主义数据交换(HDE)的以下两个数据集。一个数据集包含全球受新冠肺炎影响的人数,另一个数据集追踪 HDE 获得的强制措施。在包括澳大利亚在内的 69 个国家中,有两个国家因缺乏测量数据而被排除在外,因此本研究中总共使用了 67 个国家的 33 项测量,测量列表如下:
'Additional health/documents requirements upon arrival', 'Amendments to funeral and burial regulations', 'Awareness campaigns', 'Border checks', 'Border closure', 'Changes in prison-related policies', 'Checkpoints within the country', 'Closure of businesses and public services', 'Curfews', 'Domestic travel restrictions', 'Economic measures', 'Emergency administrative structures activated or established', 'Full lockdown', 'General recommendations', 'Health screenings in airports and border crossings', 'Humanitarian exemptions', 'International flights suspension', 'Isolation and quarantine policies', 'Limit product imports/exports', 'Limit public gatherings', 'Lockdown of refugee/idp camps or other minorities', 'Mass population testing', 'Military deployment', 'Other public health measures enforced', 'Partial lockdown', 'Psychological assistance and medical social work', 'Requirement to wear protective gear in public', 'Schools closure', 'State of emergency declared', 'Strengthening the public health system', 'Surveillance and monitoring', 'Testing policy', 'Visa restrictions'
根据一个国家使用的每项具体措施的时间,33 项措施的比例为[0,1]。从一个国家报告第一例病例的那一天起,如果没有使用某项措施,则该措施记录为 0。一个国家越早采取一项措施,该具体措施的数值就越高(越接近 1)。
为了衡量不同国家采用的每项措施的时间效果,这些国家大致分为三类:
- A 型国家的病例数量仍在增长,尚未达到峰值。例如,阿根廷如图 2(左)所示。
- B 型国家已经达到顶峰,曲线正在下降。比如图 2(中)所示的阿富汗。
- C 类国家已经经历了第一波,并达到了第二波的顶峰,第二波可能低于或高于第一波,如图 2(右)所示的澳大利亚。
图 2:说明 3 种峰值模式的国家示例
为了评估与每日病例减少相关的措施的有效性,我们使用了一个衍生变量“减少百分比”,该变量是通过基于每日曲线的 30 天滚动平均值找出峰值和谷值的差异来计算的。选择 30 天滚动范围是为了避免过多的本地最大值和本地最小值。对于 A 类国家,减少百分比为 0,因为它们在第一条曲线中尚未达到峰值。对于类型 B,减少百分比是根据从峰值到最近一天的减少来计算的,因为他们还没有开始第二条曲线。例如,对于阿富汗,计算为 90%。对于正在经历第二波的 C 类国家,下降百分比是指在第二波之前从第一个高峰到第一个低谷的下降。鉴于措施可以停止和重新实施,很难确定撤销和重新实施措施的确切日期。因此,我们仅使用与第一波相关的缩减值。澳大利亚有 95%的减排百分比,尽管它正处于平抑第二波的过程中。
衡量强制措施有效性的重要特征
我们使用三种回归算法,以线性回归为基线来衡量特征的重要性。该矩阵由本研究中列出的所有国家和 33 项措施组成,其中一个目标变量是上述减排百分比。使用的 3 种算法是:
- 套索:
**Linear Regression** is the simplest and most widely used statistical technique for predictive modelling where we have a number of input variables and one target variable. In Lasso both
variable selection and regularisation (L1-type) are used to achieve better prediction accuracy.
- XGBoost(有和没有超参数调整):
**XGBoost** is a decision-tree-based ensemble machine learning algorithm that is known for its speed and performance. By tuning the hyper-parameters of the model, we can achieve better prediction accuracy.
- LightGBM(使用默认参数):
**LightGBM** is relatively new in the market that uses similar implementation to XGBoost but with a little different tree structure. It is faster in training time.
带有超参数调整的 XGBoost 和带有缺省参数的 LightGBM)产生了非常相似的结果。数据集被分成训练(80%)和测试数据(20%),大于训练误差的测试误差表示过拟合。最小绝对误差(MAE)用于评估训练集和测试集中的模型性能。结果如下表 1 所示。
表 1: 3 三种模型的 MAE 与线性回归基线的比较
在 33 个度量中,我们根据 XGBoost 和 LightGBM 的平均值,用正 F 值来衡量特性的重要性。下面的图 3 显示了从高到低排列的特征重要性。
图 3:具有高特性重要性的排名靠前的特性
有哪些措施比其他措施更有效?
基于我们袋装模型的结果,很明显:
第一。国际航班暂停
图片来源:freepik
被列为控制感染传播的最有效措施。这与许多流行病学家的观点一致,即尽早停止国际航班,尤其是来自震中的航班,对于控制新冠肺炎至关重要。许多国家成功地有效使用了这一措施。
第二。R 要求在公共场合佩戴护具& 加强公共卫生体系
图片来源:freepik
排名第二。一个良好的公共卫生保健系统可以帮助发现和支持受感染病人的康复;在公共场合戴口罩能有效防止疾病传播。这在大多数控制了新冠肺炎病毒传播的亚洲国家是显而易见的。
三号。隔离和检疫政策&宣传活动
图片来源:freepik
在有效性方面名列第三。这证明,隔离和接触者追踪对于在社区中遏制疾病极其重要,许多国家已经在曲线抑制的结果中看到了证据。
有趣的是,诸如全面封锁、边境关闭、学校关闭&测试政策等措施并不像上面讨论的措施那样高效。用来自 67 个国家的 33 种不同衡量标准的数据总结我们的研究,我们发现:
“国际航班、戴口罩和隔离是最有效的措施”
欢迎随时访问GitHub repo,欢迎您的反馈和意见。
疫情预测使用哪些模型?
比较预测流感和新冠肺炎病例的数据驱动方法和基于模型的方法
来源: frankundfrei ,via pixabay (CC0)
在新冠肺炎时代,准确预测流行病的长期和短期演变的需要已经变得很明显。我们建议将传统的****方法,如易感染病恢复模型(SIR)与新兴的** 数据驱动模型进行比较,包括用于时间序列预测的递归神经网络(RNN)。我们在更稳健的流感数据上比较了这些方法,然后检验了它们在新冠肺炎数据上的应用。**
我们的研究结果表明:( I)通常使用的基于模型的方法(即,基于模型的方法)和基于数据驱动的方法(即,不提供对流感数据的准确的长期预测,需要不断更新才能更加准确。(二)我们将数据驱动** Seq2Seq RNN 模型确定为短期和长期预测最有前途的数据驱动方法。由于流行病遵循相似的模式,我们建议根据流感数据训练的 Seq2Seq 可以用作新冠肺炎的模型。这种模型只需要“少量”的再训练(几个样本)来提供预测。**
右来源: frankundfrei ,via pixabay (CC0)
代码文件可从https://github.com/shlizee/Seq2SeqEpidemics获得
流感数据
疾控中心有监测系统跟踪流感的季节性传播。一个这样的网络是美国门诊流感样疾病监测网络(ILINet)。每周,ILINET 中的门诊医疗保健提供者按年龄组报告患有流感样疾病(ILI)的患者人数。** ILINet 提供国家、州和地区级别的数据,以及按人口加权和未加权的 ILI 访问量百分比。我们将关注每周病例数的国家级数据。**
绘制数据图,我们可以看到流感流行遵循类似的模式。此外,我们可以看到,我们正在处理的时间序列显示每年的季节模式。为了使数据更容易处理,我们将格式更改为季节性的(即查看以第 14 周(4 月的第一周)为中心的每个年度周期)。
来自 ILINet 的流感数据。右图:2018-19 流感季节用于评估模型的病例数
> python3 fludata.py
使用基于模型的 SIR 进行预测
SIR 模型是一个常微分方程(ODEs)系统,传统上用于研究流行病的动力学。在这个模型中,人群被分为三组: S 易感, I 感染,和 R 未感染。该模型的流程图如下所示。
易感者以β速率感染,感染后以γ速率恢复。为了使用 SIR 模型进行预测,我们必须优化模型的参数以拟合数据。我们优化的参数包括:(I)初始易感人群的百分比(ii) β:感染率(iii) γ:恢复率。
首先,我们来看看基于上一季的预测。我们优化模型参数以适应前一季**,然后使用这些参数运行下一季的模型,并将结果与下一季的真实数据进行比较。**
接下来,我们看看 SIR 模型如何仅从 10 个数据点(蓝色虚线)中做出预测。**我们将通过两种方式做到这一点:(I)拟合上一个赛季,并使用这些参数作为优化的起点: **Smart SIR。(二)利用一个普遍的出发点:天真的先生。
上季流感病例的 SIR 模型预测
****>** python3 SIRfludata.py**
结果告诉我们,前一季拟合 SIR 曲线的形状似乎最接近真实数据,然而,它不能很好地预测峰值,并且曲线的初始段仍然非常不同。总的来说,我们看到 SIR 模型即使根据以前的数据进行了更新,也没有捕捉到流行病演变的重要特征,并表明 数据驱动的方法可以改善预测。
用香草 LSTM 做预测
对于时间序列数据(例如,我们在这里考虑的每日病例的流行病数据),一种常用的预测策略是递归神经网络(RNNs)。可以提供稳健预测的特定类型的 rnn 是 LSTMs(长短期记忆单元)。LSTMs 能够识别时间序列数据中的时间模式,然后用于预测。我们的实现遵循 PyTorch [3]中 LSTM 的时间序列预测教程。
我们执行几个预处理步骤。(I)我们将 LSTM 的数据标准化;( ii)创建输入-输出序列来训练我们创建元组的模型。这些元组将包含 52 周的数据作为输入,下一周的数据作为输出。每个输入序列中有 52 个数据点,有一个标签,是下一个数据点。
**> python3 LSTMfludata.py**
现在我们构建模型。我们在之前创建的输入/输出序列上训练模型,即,我们在整个训练数据上滑动 52 个数据点(一个季节)的窗口,一次一个步骤,并预测下一个点。然后我们计算预测值和地面真实值之间的 L1 损失。看起来模型收敛了(尽管注意损失(左图)相当高),我们检查了下一季度的预测(右图)。
左:失去 LSTM 预言。右图:LSTM 预测(橙色)与真实数据(黑色)的对比。
****事实证明,香草 LSTM 的表现比 SIR 更差!此外,来自 LSTM 的预测不太可靠,经过训练后往往会产生不同的结果。然而,在某些情况下,结果和先生一样准确,值得注意的是,在许多试验中,LSTM 倾向于在季末抓住新案件的上升。
Seq2Seq 模型
Seq2Seq 型号使用 RNN 编码器和解码器将一个序列转换为另一个序列。尽管这通常用于语言处理,但它也适用于时间序列预测,参见[4]。该模型的实现改编自时间序列预测 Seq2Seq [5]和[1,2]。
**> python3 Seq2Seqfludata.py**
左:Seq2Seq 预测丢失。右图:Seq2Seq 解码器预测(红色虚线)和目标 flu 真实数据(绿色)的比较。
我们设置了 Se2Seq 来执行与“上赛季 fit SIR”和“LSTM”中类似的预测。我们将编码器的输入设置为前一季(“编码系列”52 周—黑色),并训练解码器的输出来预测当前季的 52 周(“目标系列”52 周—绿色)。我们在之前的所有赛季中训练模型,并将最后一个赛季留给测试。Seq2Seq 的预测用红色标记。
实际数据(黑色)预测中所有方法的比较。Seq2Seq(红色)提供了被检查模型中的最佳预测。
正如上面的对比图所示,Seq2Seq 预测在预测疫情峰值、峰值周和曲线的整体形状方面明显优于 SIR 和 LSTM,似乎接近真实数据曲线,几乎是真实数据曲线的平滑版本。
Seq2Seq 在新冠肺炎疫情预测中的应用
由于在流感数据上使用 Seq2Seq 的结果很有希望,我们很想看看 Seq2Seq 模型如何预测新冠肺炎。本应用程序使用的数据来自 Kaggle[6]上的新冠肺炎全球预测挑战。这些数据包括国家、州、县一级的确诊病例和死亡病例,以及每个地区的人口。我们将关注美国的数据,并通过实验解决两个主要问题:
- 使用 Seq2Seq 预测每个州最近 45 天的流行病数据(病例数),对其他州进行训练。这将决定新冠肺炎数据驱动预测的准确性。
- 我们询问针对流感培训的 Seq2Seq 是否可以用作新冠肺炎的一种‘基于模型’的方法。通过这种设置,我们探索了在类似于新冠肺炎的流行病上训练 Seq2Seq 是否是用于精确预测的基于混合数据模型的方法。
1。使用 Seq2Seq 按状态预测最近 45 天的疫情
对于此应用程序,我们训练一个 Seq2Seq 神经网络,使用流行病的开始作为输入来预测流行病的最后 45 天。我们预测 3 个示例状态(并在其他 47 个状态上训练)。每日预测以红色显示,并与绿色目标进行比较。
**> python3 Seq2SeqCovid19_45days.py**
Seq2Seq 预测(红色,与洋红色的最佳对比:7 天移动平均线)新冠肺炎过去 45 天的预测,适用于 3 个州:阿拉巴马州、纽约州和得克萨斯州。
我们能够很好地把握整体趋势!我们没有捕捉到数据中的峰值,很多时候是由于数据输入系统的日期造成的。值得注意的是,我们并不期望预测这些。为了进一步测试预测的准确性,我们查看每天更新的移动平均线(比较预测-红色和品红色-7 天移动平均线目标)[7]。正如可以看到的,我们得到了所有三个检查状态令人印象深刻的准确性。
2.流感数据是否给了我们一个更好的 Seq2Seq 模型用于新冠肺炎?
**对于这个应用程序,我们首先在流感上训练 Seq2Seq,然后重新训练它来预测**新冠肺炎(我们将这样的模型标记为 FC-Seq2Seq) 。特别是,我们针对流感在所有州进行训练,然后根据新冠肺炎的数据只在 3 个州进行重新训练。通过遵循这样的协议,我们的目标是获得基于模型的新冠肺炎方法,该方法通过少量的重新训练提供准确的预测。
> python3 FCSeq2Seq.py
丢失重新训练的 FC-Seq2Seq。
我们观察到 FC-Seq2Seq 的丢失是所有检测模型中最小的。这表明,在我们检查的所有设置中,该设置获得了最高的精度,并且它使用最少的数据进行训练(即,只有 3 个状态的数据)。通过检查下图中 47 个状态中的其他状态(红色)的预测,并与 7 天移动平均新冠肺炎数据(品红色)进行比较,预测的准确性是显而易见的。引用的代码可用于生成剩余 44 个状态的预测。
新冠肺炎案例的 FC-Seq2Seq 预测(红色,与洋红色的最佳对比:7 天移动平均值)。
因此,我们建议,这种做法将有助于重新训练 Seq2Seq 流感模型对早期 COVID 爆发进行预测。
结论
我们对流行病预测方法的分析表明,Seq2Seq RNN 是一种可靠的流行病预测方法。在流感数据预测方面,Seq2Seq 优于 SIR 和 LSTM,并为新冠肺炎展示了有希望的结果。此外,对流感进行训练的 Seq2Seq 模型能够对新冠肺炎数据进行准确预测,几乎不需要重新训练。我们建议使用 Seq2Seq 模型,并与中的进行比较,预测新冠肺炎目前的病例数和死亡数。接下来,我们计划研究 Seq2Seq 以阐明和预测缓解策略的效果[8]。
参考
[1]苏,k .,& Shlizerman,E. (2019)。序列对序列递归神经网络可解释性的降维方法。arXiv 预印本 arXiv:1905.12176
[2]苏,k,刘,x .,,施利兹曼,E. (2020).预测和聚类:基于无监督骨架的动作识别。IEEE/CVF 计算机视觉和模式识别会议论文集(第 9631-9640 页)。
[3]https://stack abuse . com/time-series-prediction-using-lstm-with-py torch-in-python/
[4]https://blog . keras . io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras . html
[6]https://www . ka ggle . com/c/covid 19-global-forecasting-week-5/data?select=test.csv
[7]https://machine learning mastery . com/moving-average-smoothing-for-time-series-forecasting-python/
[8]https://wallet hub . com/edu/冠状病毒限制最少的州/73818/
你是六大数据人物角色中的哪一个?
引入协作方法,开始信任您公司的数据
在你成长的过程中,你玩过这个名字游戏吗?现代数据组织有一些类似的东西,它被称为“坏数据指责游戏”然而,与名称游戏不同,坏数据指责游戏是在 数据停机 罢工时进行的,再多的押韵和舞蹈也无法挽救局面。
数据宕机指的是数据不完整、错误、丢失或不准确的一段时间,而且十有八九,您都不知道是什么原因造成的。你只知道现在是凌晨 3 点,你的首席执行官很生气,你的仪表板出错了,你需要马上解决它。
在与 200 多个数据团队交谈后,我们已经确定了参与不良数据指责游戏的主要数据角色。也许你能认出一两个?
在本文中,我们将介绍这些角色,聚焦他们的希望、梦想和恐惧,并分享我们在贵公司攻克数据可靠性的方法。
首席数据官
这是欧菲莉亚,你的首席数据官(CDO)。虽然 Ophelia 可能不在你公司的数据管道或观察仪表板上工作,但她的影响与她的团队提供的数据的一致性、准确性、相关性、可解释性和可靠性密切相关。
欧菲莉亚每天醒来都会问自己两件事。首先,不同的部门是否得到了他们需要的有效数据?第二,我们是否有效地管理了这些数据的风险?
清晰的鸟瞰图显示她的数据生态系统正在正常运行,她会睡得更安稳。在一天结束时,如果坏数据出现在首席执行官面前,向公众或任何其他数据消费者公开,她就有危险了。
商业智能分析师
Betty 是商业智能主管或数据分析师,她希望有一个强大而有洞察力的仪表板,可以与营销、销售和运营部门的利益相关者共享,以回答他们关于业务职能执行情况的各种问题。当医生级别的事情出错时,贝蒂是第一个被呼叫的人。
为了确保可靠的数据,她需要回答以下问题:
- 我们是否将数据转化为对业务有意义的指标和见解?
- 我们是否有信心数据是可靠的,并且意味着我们认为它意味着什么?
- 其他人是否容易获得和理解这些见解?
空值和重复条目是 Betty 的主要敌人,她热衷于任何可以防止数据停机损害其内心安宁的事情。业务利益相关者要求她调查报告中的一个有趣的值,这让她感到疲惫不堪——追踪上游数据并验证它是否正确是一个漫长的过程!
数据科学家
数据科学家 Sam 在大学时学的是林业,但为了还清学生贷款,他决定跳槽到工业界。介于一行 Python 代码和数据可视化之间,他爱上了数据科学。剩下的就是历史了。
为了做好自己的工作,Sam 需要知道 1)数据来自哪里,2)数据是否可靠,因为如果不可靠,他的团队的 A/B 测试将无法工作,所有下游消费者(分析师、经理、高管和客户)都将受到影响。
Sam 的团队花费大约 80%的时间擦洗、清理和理解数据的上下文,因此他们需要可以让他们的生活更轻松的工具和解决方案。
数据治理领导
Gerald 自豪地拥有一只七个月大的小狗,是公司的第一位数据治理专家。他开始在法律团队工作,然后,当 GDPR 和 CCPA 进入时,他最终专注于数据合规性。这是一个新颖的角色,但随着组织的发展,它变得越来越重要。
谈到数据可靠性,Gerald 关心的是 1)整个公司数据和指标的统一定义,以及 2)了解谁有权访问和查看哪些数据。
对 Gerald 来说,不良数据可能意味着昂贵的罚款、客户信任的丧失和诉讼。尽管他的角色至关重要,但他有时开玩笑说这就像会计:“如果出了问题,你只是前台和中心!”
数据工程师
谈到数据可靠性,数据工程师艾默生是关键。
Emerson 最初是一家小型电子商务初创公司的全栈开发人员,但随着公司的发展,他们的数据需求也在增长。在她意识到这一点之前,她不仅负责构建他们的数据产品,还负责整合团队做出业务决策所依赖的数据源。现在,她是雪花专家、PowerBI 专家和通用数据工具专家。
艾默生和她的团队将公司的数据生态系统凝聚在一起。他们实施监控公司数据可靠性的技术,如果出现问题,分析团队会在凌晨 3 点呼叫她来解决问题。像贝蒂一样,她因此失去了无数个小时的睡眠。
为了在工作中取得成功,艾默生必须解决许多问题,包括:
- 设计可扩展的数据平台解决方案
- 确保数据接收的可靠性
- 让其他团队也能使用这个平台
- 当数据停机发生时,能够快速修复
- 最重要的是,让整个数据组织的生活可持续
数据产品经理
这是彼得。他是数据产品经理。Peter 最初是一名后端开发人员,但几年前跳到了产品管理部门。和杰拉尔德一样,他也是该公司首次聘用的这一职位,这既令人兴奋又富有挑战性。
他了解所有最新的数据工程和数据分析解决方案,并经常被要求决定他的组织需要投资哪些产品才能取得成功。在交付可访问、可扩展的数据产品时,他直接了解自动化和自助工具是如何发挥作用的。
所有其他数据利益相关者,从分析师到社交媒体经理,都依赖他来构建一个平台,该平台可以吸收、统一来自各种来源的数据,并使整个企业的消费者都可以访问这些数据。哦,我们提到过这些数据必须符合 GDPR、CCPA 和其他行业法规吗?这是一个具有挑战性的角色,很难让每个人都满意——看起来他的平台总是与 BI 实际上想要的相差很远。
谁对数据可靠性负责?
那么,在您的数据组织中,谁拥有数据生态系统的可靠性?
你可以想象,答案并不简单。从公司的 CDO 到数据工程师,确保数据可靠性最终是每个人的责任。尽管几乎每个公司的每个组织的每个部门都依赖于数据,但不是每个数据团队都有相同的结构,不同的行业有不同的要求。(例如,金融机构通常会雇佣整个数据治理专家团队,但在小型初创公司中,这种情况并不多见。对于那些这样做的创业公司,我们赞扬你们!)
下面,我们将使用 RACI (负责、问责、咨询和知情)矩阵准则,概述我们在整个数据组织中映射数据责任的方法,从可访问性到可靠性:
图表由蒙特卡洛提供。
在接收和转换万亿字节数据的公司(如网飞或优步),我们发现数据工程师和数据产品经理通常会处理数据可靠性问题的监控和警报责任。
除了这些庞然大物,责任往往落在数据工程师和产品经理身上。他们必须平衡组织对数据的需求和能够可靠提供的数据。值得注意的是,这里做出的任何错误选择的主要责任通常由 BI 分析师承担,他们的仪表板可能最终包含错误的信息或打破沉默的变化。在非常早期的数据组织中,这些角色通常组合成一个万能的数据人员或产品经理。
不管你的团队情况如何,你并不孤单。
幸运的是,有一个更好的方式来开始信任你的数据: 数据可观察性 。无论谁最终负责确保组织中数据的可靠性,这都是大多数创新型公司正在采用的方法。
事实上,有了正确的数据可靠性策略,糟糕的数据指责游戏将成为过去,完整的端到端可观察性指日可待。
有兴趣了解更多?伸出手去 巴尔摩西将知更鸟 ,其余的 蒙特卡洛团队 。
哪一个是你的波动率——常数、局部还是随机?
利用赫斯顿模型分析欧元对美元的走势
金融学中有三种主要的波动率模型:常数波动率、局部波动率和随机波动率模型。
在 1987 年股市崩盘之前,建立在几何布朗运动(GBM)基础上的 Black-Scholes (B-S)模型是占主导地位的模型,该模型具有常数波动率和漂移。在这个模型中,股票价格是随机性的唯一来源,可以用收益分布为对数正态的标的股票进行套期保值。在 B-S 模型中,股票价格 S 由以下随机微分方程(SDE)描述,其中 W 是标准布朗运动:
其中μ(回报率、漂移或无风险率)和σ(波动率)为常数。
上述随机微分方程(SDE)具有以下解析解(根据 it0 的解释):
1987 年股灾之后,“skew”这个词过去指的是幸福或好事发生时,现在的意思完全不同了:“skew”表示非常小和非常大的回报比正态分布所暗示的更经常实现。因此,交易者开始为波动性较高的特别低的执行期权定价(查看 1987 年前后隐含的 vol 曲线)。不同期权的供给和需求也在波动曲线的形成中发挥了重要作用。
局部波动率(LV)模型实际上是 B-S 模型的简单扩展,它解决了将偏度纳入定价模型的需要,因此意味着非正态分布。在 LV 模型中,基础资产的波动率(称为“瞬时波动率”)被建模为时间 t 和基础资产的时间 t 值的确定性函数:
这是一个非常直观的公式,只要想到波动性可以被视为资产本身。例如,VIX 指数是一个实时市场指数,代表市场对 S & P 500 指数期权价格输入的 30 天前瞻性波动的预期,可以通过衍生品交易。看看 VIX 指数的不稳定性:
VIX 标准普尔 500 指数的走势及其波动性
隐含波动率曲面可以转化为 LV 曲面,这就是 Dupire LV 模型的标定。Dupire (1994 年)表明,存在一个模型可以匹配市场上的期权报价,并且有一个明确的公式来说明如何根据观察到的期权价格构建这个模型,假设它们可以在连续的执行和到期日之间进行插值。(当时,杜皮尔实际上并不认为局部波动是实际波动演化的现实模型。)
由于资产价格由单个布朗运动驱动,每个收益都是由现金和基础资产组成的独特的自我融资复制投资组合的结果,也就是说,它的价格是唯一地定义为复制投资组合的初始值(市场完整性)的*。完整的好处是写在 S 上的衍生品可以完美对冲。虽然 BS 和 LV 模型是完整的,但随机波动率模型却不是。另一方面,虽然从理论角度来看,市场完全性非常方便,但它不一定是金融市场的现实属性,因为我们都可以处理衍生品,对吗?*
不管怎样?如果我们比较隐含波动率表面和局部波动率表面,我们可以看到拟合相当好。实际上,与 B-S 模型不同,LV 模型在拟合隐含波动率的无套利面方面非常好,有时甚至是完美的,即通过 Dupire 公式的“微笑”。
资料来源:左图:南非指数和外汇期权的隐含和局部波动表面,风险和金融管理期刊,ISSN 1911–8074。右边的图表:彭博
然而,LV 模型有一个主要的缺陷:该模型只使用今天的价格,而没有对它们在一段时间内的行为做出假设!尽管它符合今天的微笑值,但该模型在长期到期时给出了几乎不变的微笑,导致未来微笑变平(即未来没有微笑)!多么荒谬!因此导致不合理的偏斜动态,低估了波动率的波动性。这是非常不现实的,特别是对于依赖向前微笑的奇异期权,如克利凯期权和其他向前开始期权。
此外,LV 型号在提供稳定性方面并不差,它们可能需要频繁地重新校准,例如每小时一次!!
尽管如此,通过对局部波动价格进行一些调整,特别是向模型中添加一些跳跃以捕捉股票价格过程的复杂动态,这些模型可以用于对几种障碍期权进行定价。
作为 LV 模型的升级/替代,随机波动率 (SV)模型可以产生更真实的远期波动率表面,其中微笑几乎是自相似的,相比之下,LV 模型使远期波动率曲线变平并消除微笑。LV 模型假设未来的偏斜将是我们今天在本地 vol 中看到的正向偏斜,而 SV 模型假设未来的偏斜与今天的偏斜相似。这就是为什么 SV 模型很可能高估期权,而 LV 和 BS 模型往往低估期权。
在 SV 模型中,资产价格及其波动性都被假设为随机过程,并且可以随时间而变化,因此它给出了更真实的波动微笑动态。在 20 世纪 80 年代末由 Hull 和 White 提出的 SV 模型中,基础的波动性被建模为某个辅助过程的确定性函数,该过程通常被建模为扩散。
最著名和最重要的随机波动模型是赫斯顿模型。它是一个双因素模型,并假设股票价格和瞬时波动性具有不同的动态。
作为一个超级简单的例子,下面的代码显示了一个简单的应用赫斯顿模型对欧元兑美元,以寻找货币路径在 1 米,2M 和 3 米的时间。
如果您将结果与下面的彭博远期报价进行比较,您会发现我们的结果与下面给出的报价非常吻合。
此外,现在我们有了每个模拟中的货币路径,我们可以基于这些路径为我们的奇异期权定价(下图)。
在上面的例子中,赫斯顿模型参数是通过对市场观察到的欧式期权隐含波动率微笑进行校准而确定的(下图给出了表面)。好吧,我承认我实际上没有使用繁琐的公式来计算它们,而是直接从彭博获得重新校准的参数以节省时间:)
市场观察到的欧元兑美元欧洲期权隐含波动率表面(来源:彭博)
SV 模型可以产生丰富的点-体积动态,例如大的负短期正向偏斜或大的正向微笑曲率。然而,它们也有一些缺点。它们比本地 vol 模型更难校准,这就是为什么我直接从 Bloomnberg 获取它们,它们有时可能不会对短期期权表现出足够的微笑。对于只依赖于最终分布的产品,波动率表面的拟合可能很差。SV 模型中的套期保值比率也强烈依赖于参数,因此它们对参数的变化很敏感。更简单的模型甚至可以做得更好,因为它的参数可以更有效和更稳健地校准,而对冲误差可以得到“平均”。
还有其他模型可以克服这些缺点。其中之一是局部随机波动率(LSV)模型,该模型试图获得局部和随机波动率模型的积极方面:它们将波动率建模为时间 t 和基础资产 S 与附加随机过程的函数。还有路径依赖波动率(PDV)模型,它试图结合 LV 和 SV 的优势,试图适应市场微笑,同时产生各种各样的联合现货-vol 动态。
另一种方法是使用 ARCH/GARCH 模型。尽管 ARCH/GARCH 代表股票收益的离散时间模型,而 SV 模型是连续时间模型,但股票收益的离散时间模型在计量经济学文献中吸引了相当多的注意力,并提供了稳健的结果。ARCH/GARCH 可以捕捉尾部风险、波动聚类和相关性,而不需要相关性。
总而言之,可以得出结论,没有“对”的模式,只有“合适”的模式。你对 vol 型号的选择取决于你打算用它做什么。例如,如果你想给奇异期权定价,就选择 SV 模型。对于不太复杂和奇特的产品,本地 vol 模型可以表现得更好。
我应该在我的机器学习项目中使用哪个优化器?
图片来自pexels.com
为您的项目选择合适的优化器的指南。
这篇文章概括了计算机视觉、自然语言处理和机器学习中常用的优化器。此外,您将发现一个基于三个问题的指南,以帮助您为下一个机器学习项目选择正确的优化器。
TL;DR:
1)找一篇相关的研究论文,从使用相同的优化器开始。
2)查阅表 1 并将数据集的属性与不同优化器的优缺点进行比较。根据可用的资源调整你的选择。
简介
为您的机器学习项目选择一个好的优化器可能会非常困难。流行的深度学习库,如 PyTorch 或 TensorFLow 提供了不同优化器的广泛选择——每一个都有自己的优点和缺点。然而, 挑选错误的优化器会对你的机器学习模型的性能产生实质性的负面影响【1】【2】。这使得优化器成为构建、测试和部署机器学习模型过程中的关键设计选择。
图摘自[2] ( 链接)。它显示了根据优化器的不同,模型性能可能会有很大的不同。
选择优化器的问题是,由于没有免费的午餐定理,没有一个优化器可以统治所有优化器;事实上,优化器的性能高度依赖于设置。因此,出现的核心问题是:
哪个优化器最适合我项目的特点?
以下文章旨在作为回答上述问题的指南。它分为两个主要段落:在第一部分,我将向您简要介绍最常用的优化器。在第二部分,我将为您提供一个为您的项目选择最佳优化器的三步计划。
常用优化器
深度学习中几乎所有流行的优化器都是基于梯度下降的。这意味着他们重复估计给定损失函数 L 的斜率,并在相反的方向上移动参数(因此朝着假定的全局最小值向下攀升)。这种优化器最简单的例子可能是自 20 世纪 50 年代以来一直使用的随机梯度下降(或 SGD)[3]。在 2010 年代,AdaGrad 或 Adam [4][1]等自适应梯度方法的使用变得越来越流行。然而,最近的趋势表明,部分研究团体倾向于使用 SGD 而不是自适应梯度方法,例如参见[2]和[5]。此外,深度学习的当前挑战带来了新的 SGD 变体,如 LARS 或 LAMB [6][7]。例如,Google Research 在他们最近的一篇论文中使用 LARS 训练了一个强大的自我监督模型[8]。
下一节将介绍最流行的优化程序。如果您已经熟悉这些概念,请前往第 节如何选择正确的优化器 。
我们将使用下面的符号:用 w 表示参数,用 g 表示模型的梯度。此外,让 α 为每个优化器的全局学习速率,让 t 为时间步长。
随机梯度下降(SGD)【9】
随机梯度下降(SGD)的更新规则[9]。
在 SGD 中,优化器根据小批量估计最陡下降的方向,并朝这个方向前进一步。因为步长是固定的,SGD 会很快陷入平稳状态或局部极小值。
带动量的 SGD【10】:
用动量更新 SGD 规则( PyTorch ,2020 年 7 月 20 日)。
其中T21β<1。利用动量,SGD 在恒定下降的方向上加速(这就是为什么它也被称为“重球法”)。这种加速有助于模型摆脱停滞状态,使其不易陷入局部极小值。
阿达格拉德(2011,[4])
更新 AdaGrad [4]的规则。
AdaGrad 是利用自适应学习速率的首批成功方法之一(因此得名)。AdaGrad 基于梯度平方之和的倒数的平方根来缩放每个参数的学习速率。该过程放大稀疏梯度方向,这又允许在这些方向上更大的步长。结果是:AdaGrad 在具有稀疏特征的场景中可以更快地收敛。
RMSprop (2012,[11])
更新 RMSprop [11]的规则。
RMSprop 是一个未发布的优化器,在过去几年中被过度使用。这个想法类似于 AdaGrad,但是梯度的重新缩放没有那么激进:梯度平方的总和被梯度平方的移动平均值所代替。RMSprop 通常与 momentum 一起使用,可以理解为 Rprop 对小批量设置的适应。
亚当(2014,[1])
更新 Adam [1]的规则。
Adam 将 AdaGrad、RMSprop 和 momentum 方法合二为一。步长的方向由梯度的移动平均来确定,步长大小近似为全局步长大小的上限。此外,类似于 RMSprop,梯度的每个维度被重新缩放。Adam 和 RMSprop(或 AdaGrad)之间的一个关键区别是,力矩估计值 m 和 v 的偏差被校正为零。众所周知,Adam 通过很少的超参数调整实现了良好的性能。
AdamW (2017,[17])
AdamW [17]的更新规则。
Loshchilov 和 Hutter [17]确定了自适应梯度法中 L2 正则化和权重下降的不等价性,并假设这种不等价性限制了 Adams 的性能。然后,他们提出将权重衰减与学习速率分离。实验结果表明,AdamW 比 Adam 具有更好的泛化性能,并且 AdamW 的最优超参数范围更广。
LARS (2017,[6])
更新 LARS [6]的规则。
LARS 是 SGD 的一个扩展,它具有适应每层学习速率的动量。它最近引起了研究界的关注。原因是由于可用数据量的稳步增长,机器学习模型的分布式训练已经普及。结果是批量开始增长。然而,这导致训练期间的不稳定性。Yang 等人[6]认为,这些不稳定性源于某些层的梯度范数和重量范数之间的不平衡。因此,他们提出了一种优化器,可以根据“信任”参数η < 1 and the inverse norm of the gradient for that layer.
来调整每一层的学习速率。如何选择正确的优化器?
如上所述,为机器学习问题选择正确的优化器可能很难。更具体地说,没有万能的解决方案,必须根据手头的具体问题仔细选择优化器。在下一节中,我将提出在决定使用某个优化器之前应该问自己的三个问题。
在与您相似的数据集和任务上,有哪些最新的成果?使用了哪些优化器,为什么?
如果你正在使用新颖的机器学习方法,很可能会有一篇或多篇可靠的论文涉及类似的问题或处理类似的数据。该论文的作者经常进行广泛的交叉验证,并且只报告最成功的配置。尝试理解他们选择优化器的理由。
举例: 说你要训练一个生成性对抗网络(GAN)对一组图像进行超分辨率。经过一些研究,你偶然发现了这篇论文,在这篇论文中,研究人员使用 Adam 优化器解决了完全相同的问题。Wilson 等人[2]认为,训练 GANs 并不对应于解决优化问题,Adam 可能非常适合这种情况。因此,在这种情况下,Adam 是优化器的一个好选择。
您的数据集有哪些特征可以发挥某些优化器的优势?如果有,是哪些,怎么做?
表 1 显示了不同优化器及其优缺点的概述。尝试找到一个与您的数据集、培训设置和项目目标的特征相匹配的优化器。
某些优化器在具有稀疏特征的数据上表现得非常好[13],而其他优化器在将模型应用于之前未见过的数据时可能表现得更好[14]。一些优化器在大批量的情况下工作得很好[6],而另一些优化器会收敛到尖锐的极小值,但泛化能力很差[15]。
表 1:流行优化器的总结,突出了它们的优点和缺点。列状态内存表示优化器所需的字节数,这是梯度所需内存的补充。这里,n 是机器学习模型的参数数量。例如,没有动量的 SGD 将只需要存储器来存储梯度,但是具有动量的 SGD 也需要存储梯度的移动平均值。
例如: 对于你当前工作的一个项目,你必须将用户的书面反馈分为正面反馈和负面反馈。你考虑使用单词袋作为你的机器学习模型的输入特征。由于这些特征可能非常稀疏,您决定采用自适应梯度方法。但是你想用哪个呢?查阅 表 1 ,可以看到 AdaGrad 具有自适应梯度方法中最少的可调参数。看到项目的有限时间框架,您选择 AdaGrad 作为优化器。
你的项目资源是什么?
项目可用的资源对选择哪个优化器也有影响。计算限制或内存约束,以及项目的时间框架可以缩小可行选择的范围。再次查看表 1 ,您可以看到每个优化器的不同内存需求和可调参数数量。这些信息可以帮助您估计您的设置是否支持优化程序所需的资源。
例如: 您在业余时间从事一个项目,希望在家用计算机上的图像数据集上训练一个自我监督的模型(例如 SimCLR [16])。对于像 SimCLR 这样的模型,性能随着批量的增加而提高。所以,你要尽可能的节省内存,以便大批量的做训练。您选择一个没有动量的简单随机梯度下降作为您的优化器,因为与其他优化器相比,它需要最少的额外内存来存储状态。
结论
尝试所有可能的优化器来为一个项目找到最好的并不总是可能的。在这篇博文中,我概述了最流行的优化器的更新规则、优点、缺点和要求。此外,我列出了三个问题,以指导您做出明智的决定,为您的机器学习项目使用哪个优化器。
作为一个经验法则:如果你有资源找到一个好的学习进度计划,SGD with momentum 是一个可靠的选择。如果你需要快速的结果,而不需要大范围的过度调整,那么倾向于自适应梯度方法。
我希望这篇博客文章可以作为一个有帮助的方向,我可以帮助他们做出正确的优化选择。
我对反馈持开放态度,如果你有任何建议,请在评论中告诉我!
Philipp Wirth
机器学习工程师
lightly.ai
变更日志:
- 2020 年 12 月 17 日:增加了 AdamW。
[1]: Kingma,D. P. & Ba,J. (2014),“亚当:一种随机优化的方法”,引用 arxiv:1412.6980 评论:在 2015 年圣地亚哥第三届国际学习表示会议上作为会议论文发表。
[2]: Wilson,Ashia C .等,“自适应梯度方法在机器学习中的边际价值。”ArXivABS/1705.08292(2017):n . PAG。
[3]:罗宾斯,赫伯特;门罗萨顿。随机近似法。安。数学。统计学家。22 (1951 年),第 3 号,第 400-407 页。doi:10.1214/aoms/1177729586。https://projecteuclid.org/euclid.aoms/1177729586
[4]:杜池,J. CHazan,e .和 Singer,Y. (2011),“在线学习和随机优化的自适应次梯度方法。”, J .马赫。学习。第号决议第 12 号决议,2121–2159 年。
[5]:凯斯卡尔、尼蒂什·希里什和理查德·索谢尔。"通过从 Adam 切换到 SGD 来提高泛化性能."ArXivABS/1712.07628(2017):n . PAG。
[6]:尤,杨等(2017)“卷积网络的大批量训练。” arXiv:计算机视觉与模式识别 (2017): n. pag。
[7]:尤,杨等《面向深度学习的大批量优化:76 分钟训练 BERT》 arXiv:学习 (2020): n. pag。
[8]: Grill,Jean-Bastien 等人,“引导你自己的潜能:自我监督学习的新方法”abs/2006.07733 (2020): n. pag。
[9]: Bharath,b .,Borkar,V.S.《随机近似算法:概述和最近趋势》。贞花 **24,**425–452(1999)。https://doi.org/10.1007/BF02823149
[10]戴维·鲁梅尔哈特、杰弗里·欣顿和罗纳德·威廉斯。1988.通过反向传播误差学习表征。神经计算:研究基础。麻省理工学院出版社,剑桥,马萨诸塞州,美国,696–699。
[11]:t .蒂勒曼和 g .辛顿,2012 年。第 6.5 讲-rmsprop:将梯度除以其最近大小的移动平均值。 COURSERA:机器学习的神经网络, 4 (2),第 26–31 页。
[12]: C .莱迪格等人。,“使用生成式对抗网络的照片级单幅图像超分辨率”, 2017 年 IEEE 计算机视觉和模式识别大会(CVPR) ,檀香山,HI,2017,PP . 105–114,doi: 10.1109/CVPR.2017.19
[13]: 约翰·杜奇、埃拉德·哈赞和约拉姆·辛格。2011.在线学习和随机优化的自适应次梯度方法。j .马赫。学习。第 12 号决议,无效(2011 年 1 月 2 日),2121 年至 2159 年。
[14]: 莫里茨·哈特、本杰明·雷希特和约拉姆·辛格。2016.训练更快,推广更好:随机梯度下降的稳定性。《第 33 届国际机器学习会议论文集——第 48 卷》(ICML’16)。JMLR.org,1225-1234 年。
[15]: Keskar,Nitish Shirish 等,“关于深度学习的大批量训练:泛化差距和尖锐极小值。”ArXivABS/1609.04836(2017):n . PAG。
[16]:陈,丁等:“视觉表征对比学习的一个简单框架”abs/2002.05709 (2020): n. pag。
[17]: Loshchilov 和 Hutter“解耦权重衰减正则化”ArXivABS/1711.05101(2017)
哪个政党增加了更多的赤字?
提示:是共和党
减税本身不会带来回报
布什和特朗普政府都认为,“减税会为自己买单”,因为他们都在上任后不久通过了大幅减税。数据表明这种逻辑是错误的,因为美国的税率不够高,不足以在减税时产生重大的行为变化,而且典型的减税幅度也不足以产生立竿见影的效果。减税并没有刺激经济增长从而增加收入,反而只是增加了预算赤字。
围绕税收和预算赤字的讨论往往会在每个选举季重新开启,因为共和党人甚至一些民主党人担心巨额赤字和不断增长的国债。
虽然共和党人经常声称他们在财政上更负责任,但我的研究表明并非如此。与民主党总统相比,共和党执政期间每年的赤字(占 GDP 的百分比)估计会增加 0.75%至 1.2%。这一结果控制了经济条件,解释了年度赤字变化的 75%。
是什么导致了赤字?
当年度收入低于支出,政府被迫通过发行债务向投资者借钱时,就出现了赤字,就像你我从银行或信用卡借钱一样。国家债务是累积赤字的结果——当我们向国家信用卡收费的速度快于我们偿还本金的速度。
下图显示了每年赤字的年度变化,也就是说,与前一年相比,赤字增加或减少了多少。蓝色部分显示的是国防和非国防支出占 GDP 百分比的变化(乘以负一),因此支出的减少将大于零。黄色显示的是收入占 GDP 百分比的变化。当棒线总和小于零时,这意味着赤字比前一年增加了。
这张图表显示了由于收入减少或支出增加,或者两者兼而有之,赤字发生了多大的变化。例如,在克林顿执政期间,随着支出减少和收入增加,赤字持续下降。
乔治·w·布什政府经历了两次衰退,一次是任期开始时的轻微衰退,另一次是从 2007 年末到 2009 年初的大衰退。请注意,2002 年收入的减少与 2009 年一样显著。这主要不是因为人们赚的钱少了,交的税也少了——这是一项重大的减税措施,减少了收入。类似地,川普减税的影响在 2018 年显而易见,因为收入下降甚至比 2008-2009 年大衰退期间还要多。
赤字和经济周期
上图中还有另一种模式——这是一种周期性模式,赤字连续几年增加,然后连续几年减少。这是因为在经济疲软和衰退期间,赤字往往会增加,而当经济好转时,赤字往往会减少。这是因为自动稳定器,当人们和企业赚钱少的时候减少他们的纳税额,当政府伸出援手的时候增加支出的政策。
经济不景气时,政府还有其他选择。例如,布什政府和奥巴马政府都通过了一揽子刺激计划,包括减税和增加支出。这两项法律都旨在通过把钱放到人们手中来刺激经济——这是一项大多数经济学家都认为是好事的反周期政策。
然而,在经济良好的时候运行赤字,正如美国目前的状况,被称为顺周期政策,许多经济学家认为这不太理想。这似乎是共和党总统比民主党总统更典型的模式。
比较共和党和民主党的赤字政策
为了对民主党和共和党的赤字政策进行公平的比较,我们必须考虑每位总统在任时的经济状况。有可能一方运气不好,在经济衰退时期有更多的条款,这将使它看起来更挥霍无度。
有一些统计方法可以让人们估算出执政的政党对赤字变化的影响,同时考虑到对赤字也有影响的其他变量。这样的分析可以在这里找到。
第一步是了解哪些变量本身与赤字有关。下图显示了这些结果的示例。红色条显示与赤字增加相关的变量(相关性越大,影响越大),蓝色条显示与赤字减少相关的变量。
不出所料,经济增长往往会减少赤字,因为增长改善了税收征管,降低了对额外政府支出的需求。令人惊讶的是,即使在很高的水平上,民主党总统也与赤字减少有关,相关性为-32%(通常,在任何方向上 0.25 或以上的相关性被认为是社会科学中的东西)。与典型的最高边际税率上调相比,这对赤字的影响更大。
也就是说,重要的是要记住,当转向更复杂的多变量分析(估计许多变量对赤字的独立影响)时,出现在像这张相关图这样的单变量分析中的变量之间的关联经常会发生变化(或完全消失)。
经过十几次反复,我开发了一个统计模型,控制了经济条件,并估计了共和党在总统任期内的独立影响。最终模型包括直观的变量:去年的赤字,去年的人均 GDP 增长,今年的人均 GDP 增长,以及总统的政党。这个模型包含了可变经济增长和总统政党之间的相互作用。例如,它可以估计今年和去年增长不佳对赤字的影响,还可以估计共和党和民主党在经济景气或不景气时期应对赤字的差异。它还估计了两党预算赤字变化的总体差异。
总体而言,该模型解释了近四分之三的预算赤字年度变化。下图显示了模型预测的赤字变化与实际情况的对比。
这项分析有两个有趣的发现。首先,即使样本量相对较小,该模型也能够发现民主党和共和党总统之间相当大的、具有统计意义的差异,共和党每年增加 0.97% (p 值<0.01%) more to deficits on average *。*这种效应对于异常值也是稳健的,因为中值赤字变化的差异为 1.23% (p 值为 0.01%)。
其次,民主党总统往往比共和党总统有更积极的反周期政策。这种效应很大程度上受到这样一个事实的影响,即克林顿和奥巴马在经济形势好的时候都减少赤字,而奥巴马在经济形势不好的时候大幅增加赤字。它还受到特朗普等共和党人在经济强劲时增加赤字的影响。
使用这个模型,我们可以显示民主党和共和党政策的效果,控制经济条件。我们可以让它预测每个政党的赤字变化,保持所有经济条件不变,然后找出差异。下图显示了这些差异。大于零的值表明,鉴于当年的经济状况,预计共和党人将增加赤字,小于零的值表明,鉴于当年的经济状况,预计民主党人将增加赤字。这项分析展示了这样一种情景:如果民主党人和共和党人每年都控制总统职位,他们之间的情况会有什么不同。
总体而言,预计共和党人大多数时候会增加赤字。我的解释是,共和党人热衷于减税,但他们在削减开支方面并不成功。不过,在一些情况下,预计民主党会比共和党增加更多的赤字。红色的条柱显示那一年的部分时间正式出现了衰退。总体而言,红色柱线往往低于蓝色柱线,因为民主党人倾向于通过增加赤字来更积极地应对糟糕的经济状况。这种效应受到奥巴马反周期政策的严重影响,一般来说,由于经济衰退的严重性,这一年在分析中往往是一个异常值。从分析中去除那一年并不影响总体结论,即共和党总体上增加了更多的赤字(事实上,点估计增加了),它只是减少了互动效应。
结论
最终结果很简单:共和党总统比民主党总统增加了更多的赤字。
在选举季节,人们会说很多废话,而学者们根本没有足够的时间来进行一项同行评审的研究,以便及时解决政客们的说法。该分析试图使用透明的数据和方法实时解决此类问题,这些数据和方法可以被其他人验证和复制。
你应该选择哪种 PUBG 武器组合?
使用 Python,我找到了最佳的武器组合,有希望帮助你赢得令人垂涎的鸡肉晚餐。
前阵子出于好奇下载了 PUBG Mobile,想看看炒作到底是怎么回事。让我们大致了解一下这个游戏是如何运作的:你从飞机上跳伞,然后你跑进建筑物并开始寻找护具、弹药和武器,然后你要么杀死别人,要么被别人杀死,最后存活下来的队伍赢得鸡肉晚餐。这个概念听起来很简单,对吗?然后你跑进一栋大楼,发现自己正盯着五把不同的枪,它们的名字没有给出任何线索,说明它们彼此之间有什么不同。每个玩家都可以装备两把枪,但是我怎么知道该选哪两把呢?我可能没有选择正确的,因为我不断被我的对手杀死,即使我在许多情况下开始先开枪。所以我决定,为什么不借此机会温习一下我的 Python 技能(当你实际上不得不谷歌“在 Python 上运行代码的快捷键”时,你知道你真的很生疏),并希望找到一些可以给我更好的机会带回家吃鸡肉晚餐的东西呢?快速判断一下:距离我上次使用 Python 做项目已经过去将近两年了,所以关于如何以更好的方式编码的建议肯定是受欢迎的!和往常一样,我的代码存放在 GitHub 上。
网络抓取数据集
我四处搜索 PUBG 武器统计的现成数据集,但最终没有找到( Kaggle 有一个来自官方 API 的玩家统计数据集,它可以作为其他分析的有趣数据集)。然而,我确实找到了提供武器统计数据的网站,所以我继续使用 BeautifulSoup 对官方 PUBG Wiki 进行了一些网络搜集。我不会详细讨论 web 抓取过程,因为我想更多地关注数据分析部分,所以我只强调一些部分。
虽然有一个页面给出了所有武器的统计数据,但我希望能够将它们分类成各自的类型(例如,它们是突击步枪还是轻机枪),所以我最终在将 8 个数据帧合并成一个数据帧之前,从每个武器类型的相应页面中抓取。
数据清理:在这种情况下,BDMG 和 HDMG 列中的数字意味着什么?
我还清理了缺失和奇怪的数据,用其他网站的数据(参见本文末尾的致谢部分)替换它们,这些网站列出了当前数据集中不需要任何替换的其他武器的可比值。
我似乎不能对 PWR、SPD 和 TBS 列中的值执行任何算术运算
接下来,在将 dataframe 导出为 csv 文件之前,我将所有数值列转换为 float 数据类型,以便在后续的数据分析中进行算术运算。
武器特征
下面总结了每个特性的含义(信息是从 PUBG Wiki 复制粘贴的,改动很小)
- DMG(命中伤害)
在装甲和其他减轻因素之前施加的直接伤害
- SPD(子弹初速)
子弹离开枪口的速度,单位为米/秒。更高的数字意味着对远距离移动目标需要更少的引导。
- PWR(车身撞击冲击力)
一个布娃娃被拍的时候受了多大的力。更高的值意味着更强的推力。
- 弹匣(每弹匣弹药)
弹匣所能容纳的最大弹药量。
- TBS(拍摄间隔时间)
武器再次发射前必须经过的最短时间(秒)。
- 模式(点火模式)
这种武器可以选择的模式。在这个区域有单个*、*自动的武器表示它可以在单次射击模式或自动射击模式之间选择。
- BSHT(连拍)
如果适用,单次爆炸发射了多少发子弹。
- 突发延迟
在可以再次触发另一个脉冲之前必须经过的最小时间量(秒)。
- AMM(弹药型)
武器可接受的弹药类型。
- 上限(容量)
也称为批量,或占用的库存空间量。
- ATTCH(附件)
附在武器上的东西。附件的例子包括一个允许远距离狙击的瞄准镜。
- BDMG 0,BDMG 1,BDMG 2,BDMG 3(身体伤害等级 0,身体伤害等级 1,身体伤害等级 2,身体伤害等级 3)
分别在没有装备盔甲、装备 1 级防弹衣、装备 2 级防弹衣和装备 3 级防弹衣时对身体造成的伤害量。
- HDMG 0,HDMG 1,HDMG 2,HDMG 3(头部伤害等级 0,头部伤害等级 1,头部伤害等级 2,头部伤害等级 3)
分别在没有装备盔甲、装备 1 级盔甲、装备 2 级盔甲和装备 3 级盔甲时对头部造成的伤害量。
- 型
我创建了一个变量来反映它属于哪种武器。
根据描述,看起来更重要的武器特性是:身体和头部伤害(如果武器造成更高的伤害,你更有可能杀死你的对手),初始子弹速度(更快的子弹速度意味着你的子弹可能在他们击中你之前击中你的对手),射击间隔时间(你通常需要多次射击才能杀死你的对手,所以更短的射击间隔时间将增加你击败对手的机会), 每弹夹弹药(如果每弹夹能装更多子弹,就不用那么频繁浪费时间重装)。
探索性数据分析
既然所有的基本细节都解决了,是时候开始有趣的部分了。让我们试着通过绘制一个相关矩阵来找出不同特征之间的一些趋势。
有很多变量意味着我们会有一个看起来很吓人的相关矩阵
快速浏览一下相关矩阵可以发现,不同等级的身体伤害之间是完全相关的,不同等级的头部伤害之间也是如此。因此,我们可以选择其中一个级别来查看,让我们只使用 BDMG 1 和 HDMG 1。身体伤害和头部伤害也高度相关,这一点也不奇怪,但是现在,为了安全起见,我们将两个变量都保留在我们的相关矩阵中。令人惊讶的是损伤与身体和头部损伤之间的相关性很低。由于身体和头部的伤害是直接影响玩家健康的因素,我们将从关联矩阵中移除伤害。
“去杂乱”的相关矩阵有望帮助我们找到一些趋势
查看“去干扰”相关矩阵,似乎在伤害和射击之间的时间(较高伤害的枪具有较长的射击之间的时间)、伤害和速度(较高伤害的枪子弹速度较慢)、每弹匣的伤害和弹药(较高伤害的枪每弹匣可以携带较少的弹药)之间存在权衡。在这三个权衡中,前两个权衡对于赢得战斗更为关键,所以我们将把重点放在它们上面。此外,鉴于身体损伤和头部损伤高度相关,我将进一步简化事情,从这一点开始只看头部损伤。简而言之,我们将着眼于 3 个变量:头部损伤水平 1 (HDMG 1),子弹初速(SPD)和射击间隔时间(TBS)。
让我们先根据武器类型绘制一张热图。在展示实际的热图之前,我将快速总结一下不同武器类型的缩写。
- 突击:突击步枪
- 弓:弩
- DMR:指定神枪手步枪
- LMG:轻机枪
- SG:散弹枪
- SMG:冲锋枪
- SR:狙击步枪
热图描述了每种武器类型在 3 个关键变量上的表现(遗憾的是,由于尺度不同,颜色没有用)
这进一步重申了我们之前发现的趋势——伤害更高的枪往往子弹速度更慢,射击间隔时间更长(我们可以仅以猎枪为例)。正如本文开头所提到的,每个玩家可以装备两把枪,所以我想找出在这两种权衡下哪种搭配是最有利的。
显示不同武器类型组合在 3 个关键变量上表现的热图
我首先绘制了一张热图,用来比较不同的武器组合。这似乎描绘了一幅相似的画面,在伤害和速度之间以及伤害和射击之间的时间之间有一个权衡,但它不是非常清楚,所以也许相关矩阵可能会更好地描述事情。
武器组合的相关矩阵
我们可以看到,最大的权衡是伤害和射击之间的时间,其次是伤害和速度。
帕累托效率
当涉及权衡时,最佳组合是那些帕累托有效的组合。到底什么是帕累托有效?简单地说,如果你有两个目标,一个帕累托有效组合就是你不能在一个目标上取得进步而在另一个目标上不使自己变得更糟。假设你有两个目标,X 和 Y,在这两个目标之间有一个折衷。
说明帕累托效率
点 A 不是帕累托有效的,因为存在一个点(例如,A’),在这个点上,你至少在一个目标上更好,而在另一个目标上不会更差。点 A '和 A ’ '都是帕累托有效的,因为不可能在一个目标上获得更高的价值而在另一个目标上不恶化。例如,从点 A '到 A ’ ',我们得到一个较高的 X,但一个较低的 y。一个帕累托前沿只是连接所有的帕累托有效点。
在我们的例子中,我们有两个权衡,所以让我们分别来看一下。我们将从伤害和射击间隔时间之间的权衡开始。
寻找损害和射击间隔时间之间的折衷的帕累托有效组合
如上所述,帕累托有效组合是:
- 十字弓和冲锋枪
- 弩和轻机枪
- 弩和指定神枪手步枪
- 猎枪和冲锋枪
- 弩和猎枪
我们不能说这些组合中的一个比另一个好,但是如果我想要一个在伤害和射击间隔时间上相当的组合,也许选择组合 2 或组合 3 是个好主意。
伤害和速度的权衡呢?
在伤害和速度之间寻找帕累托有效组合(PS。如果有人能快速修复稍微重叠的数据标签,请告诉我)
在这种情况下,帕累托有效组合是:
- 突击步枪和轻机枪
- 突击步枪和狙击步枪
- 轻机枪和狙击步枪
- 指定神枪手步枪和狙击步枪
- 突击步枪和猎枪
- 轻机枪和猎枪
- 猎枪和狙击步枪
- 弩和猎枪
同样,我们不能断定这些组合中的一个比另一个好,但是如果我想要一个在伤害和速度上相当的组合,选择组合 5 或 6 可能是个好主意。
说到底,这真的取决于你是想优先考虑伤害和射击时间之间的权衡,还是伤害和子弹初速之间的权衡。然后,帕累托效率分析将提供一些武器组合供你选择,这取决于你是喜欢在一个目标上比另一个目标好得多的组合,还是喜欢在两个目标上表现相当的组合。我会选择后者,因为我进行这个分析的目的是找到一对优势互补的枪。
也就是说,我希望这个分析能帮助你赢得那顿鸡肉晚餐!
数据集的信用
- https://pubg.gamepedia.com
- https://www . futuregamereleasts . com/2019/01/pubg-weapon-damage-charts-body-vs-headshot-limb-utility/
- https://pubgmap.io/weapons.html
提供网络抓取参考码的信用
对帕累托边界代码的信任
- 【https://pythonhealthcare.org/tag/pareto-front/
我应该在什么时候使用哪个 Python 数据科学包?
Python 数据科学图书馆的地图
Python 是数据科学最流行的语言。不幸的是,很难知道何时使用众多数据科学库中的哪一个。☹️
了解何时使用哪个库是快速上手的关键。在本文中,我将向您介绍重要的 Python 数据科学库。😀
资料来源:pixabay.com
你将看到的每个软件包都是免费的开源软件。👍感谢所有创建、支持和维护这些项目的人们!🎉如果你有兴趣了解如何为开源项目贡献补丁,这里有一个很好的指南。如果你对支持这些项目的基金会感兴趣,我在这里写了一个概述。
我们开始吧!🚀
熊猫
Pandas 是一个帮助你理解和操作数据的工具。使用 pandas 来操作表格数据(比如电子表格)。Pandas 非常适合数据清理、描述性统计和基本的可视化。
熊猫相对来说是对大脑友好的,尽管 API 是巨大的。如果你想从 API 最重要的部分开始,可以看看我关于熊猫的书。
与 SQL 数据库不同,pandas 将所有数据存储在内存中。这有点像微软 Excel 和 SQL 数据库的混合体。Pandas 使大量数据的操作快速且可重复。
您机器上的内存容量限制了 pandas 可以处理的行数和列数。作为一个粗略的指南,如果你的数据少于几千列和几亿行,pandas 应该在大多数计算机上运行良好。
像一只真正的熊猫,熊猫是温暖和毛茸茸的。🐼
资料来源:pixabay.com
当你的数据超过熊猫的处理能力时,你可能会想使用 NumPy。
NumPy
NumPy ndarrays 就像更强大的 Python 列表。它们是构建机器学习大厦的数据结构。它们拥有你需要的多维数据。
你有每个像素三个颜色通道的视频数据和很多帧吗?没问题。😀
NumPy 没有像 pandas 那样方便的方法来处理时间序列数据和字符串。事实上,每个 NumPy ndarray 只能有一种数据类型(感谢凯文·马卡姆建议我包含这个区分符)。
对于表格数据,NumPy 也比熊猫更难处理。您不能像在 pandas 中那样在表格中轻松显示列名。
NumPy 的速度/内存效率比 pandas 高一点,因为它没有额外的开销。然而,如果您拥有真正的大数据,还有其他方法可能会更好地扩展。我有一个关于这个话题的大纲,所以让我知道你是否有兴趣在推特上听到它。👍
NumPy 还有什么用?
- n 数组的数学函数。
- ndarrays 的基本统计函数。
- 从普通分布产生随机变量。NumPy 有 27 个分布可以随机抽样。
NumPy 就像没有便利函数和列名的熊猫,但是有一些速度增益。🚀
Scikit-learn
scikit-learn 库是机器学习的瑞士军刀。如果你在做一个不涉及深度学习的预测任务,scikit-learn 就是你要用的。它可以毫无问题地处理 NumPy 数组和 pandas 数据结构。
Scikit-learn 管道和模型选择函数非常适合准备和操作数据,可以避免无意中偷看您的保留(测试集)数据。
scikit-learn API 对于预处理转换器和估算器非常一致。这使得搜索超过许多机器学习算法的最佳结果相对容易。这让你更容易理解图书馆。🧠
Scikit-learn 支持多线程,因此您可以加快搜索速度。然而,它不是为 GPU 构建的,所以它不能利用那里的加速。
Scikit-learn 还包含方便的基本 NLP 函数。
资料来源:pixabay.com
如果你想做机器学习,熟悉 scikit-learn 是必不可少的。
接下来的两个库主要用于深度神经网络。它们与 GPU、TPU 和 CPU 配合得很好。
张量流
TensorFlow 是最受欢迎的深度学习库。在工业上尤其常见。它是由谷歌开发的。
从版本 2.0 开始,Keras 高级 API 现在与 TensorFlow 紧密集成。
除了在 CPU 芯片上工作,TensorFlow 还可以使用 GPU 和 TPU。这些矩阵代数优化的芯片为深度学习提供了巨大的加速。
PyTorch
PyTorch 是第二受欢迎的深度学习库,现在是学术研究中最常见的。它是由脸书开发的,并且越来越受欢迎。你可以在这里看到我关于的文章。
PyTorch 和 TensorFlow 现在提供了非常相似的功能。它们都有数据结构,叫做张量,类似于 NumPy ndarrays。张量和可以很容易地转换成 n 数组。这两个软件包都包含一些基本的统计函数。
PyTorch 的 API 通常被认为比 TensorFlow 的 API 更加 pythonic 化。
Skorch 、 FastAI 和PyTorch lighting是减少使用 py torch 模型所需代码量的包。 PyTorch/XLA 允许您将 PyTorch 与 TPU 一起使用。
PyTorch 和 TensorFlow 都可以让你做出顶尖的深度学习模型。👍
统计模型
Statsmodels 是统计建模库。这是做推理频率统计的地方。
想要运行统计测试并获得一些 p 值吗?Statsmodels 是您的工具。🙂
来自 R 的统计学家和科学家可以使用 statsmodels formula API 平稳过渡到 Python 领域。
除了 t 检验、ANOVA 和线性回归等常见的统计测试之外,statsmodels 还有什么好处?
- 测试您的数据与已知分布的匹配程度。
- 用 ARIMA、霍尔特-温特斯和其他算法做时间序列建模。
谈到线性回归等常见公式时,Scikit-learn 与 statsmodels 有一些重叠。但是,API 是不同的。此外,scikit-learn 更侧重于预测,而 statsmodels 更侧重于推理。⚠️
Statsmodels 建立在 NumPy 和 SciPy 的基础上,与熊猫玩得很好。🙂
说到 SciPy,我们来看看什么时候用。
SciPy 🔬
" SciPy 是建立在 Python 的 NumPy 扩展上的数学算法和便利函数的集合."— 文件。
SciPy 就像 NumPy 的双胞胎。许多 NumPy 数组函数也可以通过 SciPy 调用。这两个软件包甚至共享同一个【T2 文档】网站。
SciPy 稀疏矩阵用于 scikit-learn。一个稀疏矩阵是一个被优化的矩阵,当大部分元素为零时,它比一个常规的密集矩阵使用更少的内存。
SciPy 包含通用常量和线性代数功能。scipy . stats子模块用于概率分布、描述性统计和统计测试。它有 125 个分布可以随机抽样,比 NumPy 多了将近 100 个。😲然而,除非您正在进行大量的统计,否则作为一名实践数据科学家,您可能会对 NumPy 中的发行版感到满意。
如果 statsmodels 或 NumPy 没有您需要的功能,那么就去 SciPy 中查找。👀
Dask
Dask 有一个模仿熊猫和 NumPy 的 API。当您想使用 pandas 或 NumPy,但数据量超过内存容量时,请使用 Dask。
Dask 还可以加快大数据集的计算速度。它在多个设备上执行多线程。您可以将 Dask 与Rapids结合使用,以获得 GPU 上分布式计算的性能优势。👍
PyMC3
PyMC3 是贝叶斯统计软件包。比如马尔可夫链蒙特卡罗(MCMC)模拟?PyMC3 是你的果酱。🎉
我发现 PyMC3 API 有点令人困惑,但它是一个强大的库。但是那可能是因为我不经常使用它。
其他流行的数据科学包
我不会深入研究可视化、NLP、梯度增强、时间序列或模型服务库,但我会重点介绍每个领域中一些流行的包。
可视化库📊
Python 中有大量可视化库。 Matplotlib 、 seaborn 和 Plotly 是最受欢迎的三款。在这篇文章的最后,我浏览了一些选项。
NLP 库🔠
自然语言处理(NLP)是机器学习的一个巨大而重要的领域。无论是 空间 还是 NLTK 都将拥有你需要的大部分功能。两者都很受欢迎。
梯度推进回归树库🌳
LightGBM 是最流行的渐变升压包。Scikit-learn 已经克隆了它的算法。 XGBoost 和 CatBoost 是其他类似 LightGBM 的 boosting 算法包。如果你看看 Kaggle 机器学习竞赛的排行榜,深度学习算法不是解决问题的好方法,你可能会看到获胜者使用的这些梯度提升库之一。
时间序列库📅
Pmdarima 让拟合 arima 时间序列模型不那么痛苦。它包装了 statsmodels 算法。然而,选择超参数的过程不是完全自动化的。
***Sktime 目标是做一个“时间序列机器学习的统一 Python 库”。它包装了 pmdarima、statsmodels Holt-Winters 和其他库。这是最前沿的,但很有希望。此时,它仍然需要知道它所包装的底层库的 API。**增加了 2020 年 12 月 14 日的 sktime 部分 * ****
Prophet 是另一个用时间序列数据做预测的包。“Prophet 是一种基于加法模型预测时间序列数据的程序,其中非线性趋势符合每年、每周和每天的季节性,加上假日影响。它最适用于具有强烈季节效应的时间序列和几个季节的历史数据。——文件。它是由脸书创造的。API 和文档都是用户友好的。如果你的数据符合上面的描述,那就值得一试。
模型服务图书馆🚀
说到模型服务, Flask 、 FastAPI 和 Streamlit 是三个流行的库,它们实际上对您的模型预测做了一些事情。😉Flask 是一个基本的框架,用于制作一个 API 或者服务一个已经过实战检验的网站。FastAPI 使得设置 REST 端点变得更快更容易。Streamlit 可以在单页应用程序中快速提供模型。如果你有兴趣了解更多关于 streamlit 的知识,我在这里写了一个入门指南。
资料来源:pixabay.com
包装
以下是何时使用哪个主要 Python 数据科学库的快速回顾:
- 熊猫进行表格数据的探索和操作。
- NumPy 用于普通分布的随机样本,以节省内存或加快运算速度。
- scikit-learn 用于机器学习。
- 深度学习的 TensorFlow 或 PyTorch 。
- statsmodels 用于统计建模。
- SciPy 用于在 NumPy 或 statsmodels 中找不到的统计测试或分布。
- Dask 当你想要熊猫或者 NumPy 但是拥有真正的大数据的时候。
- PyMC3 为贝叶斯统计。
我希望您喜欢这个关键的 Python 数据科学包之旅。如果你有,请在你最喜欢的社交媒体上分享,这样其他人也可以找到它。😀
现在,您有望对不同的 Python 数据科学库之间的相互关系以及它们之间的联系有一个更清晰的心理模型。
我写关于 Python 、 SQL 、 Docker 和其他技术主题的文章。如果你对这些感兴趣,请注册我的邮件列表,那里有很棒的数据科学资源,点击阅读更多内容,帮助你提高技能。👍
资料来源:pixabay.com
探索愉快!😀
哪个分支得票最多?
结合 Reddit 和 Imgur Python APIs 来确定用户参与度在子编辑之间如何变化
作者图。这些值是基于 2018 年发布到 Reddit & Imgur 的约 45,000 张图片的估计值。方法和结果详述如下。
本文将解释如何通过合并两个独立的数据集来计算上述结果;一个来自Reddit API,另一个来自Imgur API。
大多数社交媒体平台不会公开透露每条帖子的浏览量。 Reddit 也是一样的,但是有一个简单的漏洞可以让我们估计浏览量:
- 许多 Reddit 帖子都是图片
- 这些图片的一个子集被托管在不同的网站上 Imgur
- Imgur 显示视图计数
使用这两个网站的 API,我们可以估计 Reddit 帖子的浏览量。
Reddit 上的快速背景
Reddit 被分成多个社区,称为子社区。Reddit 的货币是upvots;用户给帖子的投票越多,它的排名就越高。将这些信息与我们从 Imgur 获得的浏览量进行交叉引用,可以得到每个子编辑上投票的浏览者的百分比。
如何使用 API 收集数据
下面的代码片段演示了如何使用Python Reddit API Wrapper(PRAW)和 Imgur Python API 来收集每个帖子的元数据。注意,要让第 6 行& 13 起作用,您需要通过在这里注册 Reddit API 的和在这里注册 Imgur API 的来获得凭证。
使用 Reddit & Imgur APIs 的 web 抓取初学者指南
1 年的网页抓取结果
这是我离开一个网络搜索器(整个 2018 年)收集几十个专注于分享模因的子编辑的热门帖子数据后的发现。(这些子编辑并没有得到我的认可,甚至没有被我查看过,我只是搜索了最流行的 meme 子编辑,并将其添加到我的 web scraper 代码中)。
2018 年,这些子主题上的热门帖子的网络抓取结果
有趣的是,似乎倾向于更频繁使用 Imgur 的子街道也倾向于那些不经常投票的子街道:
作者图。这些值是基于 2018 年发布到 Reddit 的约 550,000 张图片的估计值。
警告/假设
这些结果是基于一些主要假设的估计值:
- 我假设 Imgur 上的浏览量是查看该帖子的 Reddit 用户的数量…这并不是在所有情况下都是正确的。Reddit 用户可以发布一个链接,链接到几个月前添加到 Imgur 的一张图片,这意味着估计的% Reddit 用户投票率会比实际情况低。
- 我假设 Imgur 和 Reddit APIs 以相同的频率更新;如果不是这种情况,它将在估计中引入一个微小的误差。
- 我假设 Reddit 上的每个视图都被 Imgur 注册为视图;如果不是这种情况,它可能会引入一个重大的估计误差。
获取数据集和后续步骤
Imgur 上的 45,000 个 Reddit 帖子的数据集在这里:
Imgur 上托管的 Reddit 上的 meme 帖子的元数据
www.kaggle.com](https://www.kaggle.com/gmorinan/reddit-and-imgur-meme-metadata-combined)
现在我们有了一种估计迷因浏览量的方法,我们可以将这与迷因图像识别系统结合起来,找到最受欢迎的迷因模板。我将在下一篇文章中更详细地讨论这个问题。
在新冠肺炎疫情的纽约市,哪些地铁站对通勤有风险?
冠状病毒及其对纽约市居民通勤模式的影响
编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
我们与日常通勤有着独特的联系,无论是出租车、公交车、地铁,还是我们的私人汽车和自行车。在病毒爆发期间,我们不得不以不同方式改变常规。虽然疫情带来了一些挑战,但我们确实有一些方法来应对它!在这篇博客中,我们将深入探究纽约市目前正在发生的事情,并发现我们的日常通勤是否安全。
1.你在纽约的日常通勤有多安全?
超过 383,770 例冠状病毒病例和 30,244 例死亡,纽约市成为世界上冠状病毒感染最严重的城市。居住在 302 平方英里土地上的 800 多万纽约人使得公共交通在日常通勤中的作用变得非常重要。事实上,它与美国其他城市的不同之处在于其较低的个人汽车拥有率和明显较高的公共交通使用率!
图片由 Unsplash 上的 @renolaithienne 提供
纽约地铁一直是纽约人的主要交通选择。运营纽约大部分交通系统的 MTA 大都会运输署报告称,截至 2013 年,地铁客流量高达 17 亿人次!与城市公交车的 8.03 亿相比,这是一个巨大的数字。
现在来看目前的情况,由于冠状病毒,地铁使用率明显下降。但是,像医生,基本服务人员和其他人,谁仍然负担不起个人通勤和依赖地铁呢?他们面临的风险最大,但他们的选择有限。
在接下来的章节中,我们将了解如何利用数据让纽约人的日常通勤更加安全!
2.让数据说话
纽约市卫生部门每日公布邮编等级为 的 covid 病例,此处 。让我们试着在地图上画出来,看看纽约市的病例是如何随着时间的推移而增加的。
纽约市不同地区的 covid 19 例增长
以下是目前的情况:
纽约市目前的 Covid 19 病例
就阳性病例总数而言,以下是 5 个受打击最严重的地区:
五大受灾最严重的地区。
电晕(相当巧合!),有 241,940 例,似乎是目前受影响最严重的地区,其次是布朗克斯区、皇后区、布鲁克林区和东布朗克斯区。
现在,我们如何知道纽约地铁通勤者的日常运动模式?MTA 每周提供这些数据,可以在 这里 找到。这为我们提供了每个车站在 4 小时间隔内的进出总数。我们可以通过将进站和出站的人数相加得到每个车站的总人数。让我们标出一些最繁忙的车站。
纽约最繁忙的地铁站
我们还可以通过找到平均客流量来找到前 5 个最繁忙的车站。绘制一段时间内的总客流量,我们得到这样的结果:
纽约五大最繁忙的车站——客流量随时间变化
平均每天约有 66k 人出行,151-145 ST 站最繁忙,其次是 59st 站和 23st 站。
但是,在 covid 爆发后,哪些车站出现了最大的每周通勤人数增长?对于这一点,让我们将数据限制在 3 月 22 日之后,因为大约在这个时候,纽约市州长要求所有非必要的企业关闭,居民留在家中。
为了实现这一点,我们首先找到每周的总客流量。在此之后,每个车站的客流量变化可以通过简单地减去第一周和最后一周的客流量而得到。
封锁后客流量增加的车站。
结果还挺有意思的!从 3 月 23 日起,在总共 240 个站点中,有 20 个站点的每周平均流量有所增加。在这些车站,大约有 1000 多人在封锁开始后出行。
在这 20 个站点中,增长最快的 3 个站点是联合大道、贝德福德大道和长木大道
你可以用这个条形图看到这 20 个车站的客流量的增加。
锁定后客流量增加的车站的对比图
对于大多数地铁站来说,使用这些地铁的人数有所减少,这是很自然的。现在,让我们看看如何将这与冠状病毒爆发联系起来,以找出有风险的站点。
3.哪些站有风险?
结合一个地区的冠状病毒病例和地铁站的总客流量,我们可以将风险因素与每个地铁站相关联。
为了简单起见,让我们考虑在一个车站的风险与它所在的邮政编码的冠状病毒阳性病例总数和在任何给定的一天在该车站的旅客总数成比例。
对于冠状病毒病例的总数,我们考虑该站位于哪个邮政编码。虽然这不是一个很好的方法来获得一个站点的这个数字,但是我们必须使用受可用数据粒度限制的 zip。你可以在我的另一个博客中找到更多关于为什么邮政编码不好的信息。
[## 为什么您不应该使用邮政编码进行超本地和最后一英里分析
邮政编码和区域边界忽略了它们内部属性的细微差别!
towardsdatascience.com](/why-you-shouldnt-use-zip-codes-for-your-hyperlocal-last-mile-analysis-3b9f8613bcc1)
因此,我们可以说一个车站的总客流量和总阳性病例数的乘积给出了相关的风险。由于这些数字在不同的标度上,我们在乘法之前将它们归一化。
因此,我们的车站风险公式看起来像这样:
其中 NORM 是时间窗口 t 中的最小-最大标准化值
经过一些地理空间的沉重负担,我们得到了一天的站风险。我们可以在这里看到同样的形象化:
由此,我们实际上可以看到随着时间的推移,前 5 大风险站是什么。
五大风险站—随时间演变
五大风险站—比较
如果我们考虑今天,最危险的车站是 451,联合大道和 111 街的 449。
这些站点在其邻近地区有最大的病毒爆发以及最大的流量增长,自 3 月 22 日以来流量一直在增加。
结论
理解运动模式能以惊人的不同方式帮助我们。此外,对正在发生的事情的可见性给了我们探索未知的信心。在疫情,每天的通勤模式不仅可以更好地规划基本服务,还可以更好地了解周围发生的事情。所以,让我们收集一些数据,想想在这段困难时期我们能做些什么!
原载于 2020 年 6 月 29 日https://blog . locale . ai。
哪个翻译?
用数据科学研究村上春树译者的风格
阿尔瓦·普拉特在 Unsplash 上拍摄的照片
作为一个狂热的小说读者,我经常想知道译者的风格对翻译小说的影响。尤其是,我一直对村上春树的作品很好奇。他用日语写作,有三个主要的英语翻译:阿尔弗雷德·伯恩鲍姆、杰伊·鲁宾和菲利普·加布里埃尔。我读过的有多少是村上的,有多少是译者的?不同的译者对原作有不同的理解吗?鉴于日语和英语之间的语言鸿沟,这在我看来很有可能。这肯定是村上的主要译者之一杰伊·鲁宾在《纽约客》中给出的观点:
“当你读村上春树的时候,你在读我,至少百分之九十五的时候,”
村上的大部分作品只有一个译本,因此很难直接比较译者的风格。然而,一个例外是《发条鸟编年史》的第一章。主要翻译是杰伊·鲁宾,但它也作为短篇小说出现在《大象消失》中,这次由阿尔弗雷德·伯恩鲍姆翻译。这是两个译本。
首先是鲁宾:
电话铃响的时候,我正在厨房里煮着一锅意大利面,一边吹着口哨一边听着调频广播,播放罗西尼的《偷喜鹊》序曲,这一定是煮意大利面的完美音乐
然后由伯恩鲍姆:
“那个女人打电话来的时候,我正在厨房做意大利面。再过一会儿,意大利面就做好了;我在那里,伴随着调频收音机,吹着罗西尼的《La Gazza Ladra》的前奏曲。完美的意大利面烹饪音乐。”
总体感觉是一样的,但是有一些非常明显的差异,即使是在这个简短的摘录中。译者在选词、句子结构甚至时态上做出了不同的决定。
这些差异能让机器学习模型预测村上作品样本的译者吗?如果是这样的话,这种模式的特征是否可以用来洞察译者的风格?这就是我想要知道的。本文概述了项目期间的主要步骤和决策,但代码也可以在这里找到。
数据准备
与许多数据科学项目一样,最初的挑战是收集和准备数据。我有许多不同数字格式(epub、pdf、docx)的村上的书,第一步是用 python 将这些不同的文件读入标准化的文本文件。epub 格式是最具挑战性的,在反复试验之后,我发现这种方法在使用 EbookLib 和 BeautifulSoup 包时效果很好。
一旦书籍装载完毕,下一步可能就不那么典型了。对于给定的数据集,什么样的数据点通常是非常清楚的。预测房价时可能是一栋房子,预测推特情绪时可能是一条推特。对于这个项目,不太清楚使用什么。一种选择可能是将一个章节视为一个数据点。然而,对于一个只有七本书的数据集,我总共只有大约两百个章节。当对任何具有多种特征的数据集执行机器学习时,我们通常需要几千个数据点。
另一个考虑因素是样本的大小。在区分译者时,我们可能希望使用一些特征,如使用的副词数量或独特单词的范围。为了使这些类型的特征具有可比性,每个文本样本的大小应该相同。不幸的是,章节、句子和段落的长度可能会有很大差异,因此很难进行比较,而根据书籍的格式,即使是页面的长度也可能有所不同。因此,我决定将书中的文本分成长度约为 1000 个字符的文本块。实际的组块长度大小不一,因为它们在句号处被分开,以避免组块包含部分句子。然后,可以更有把握地将生成的任何计数特征归一化为 1000 个字符的文本块的等价物,从而可以使用该特征来比较文本块。
显示每本书文本量的条形图,由译者用颜色编码。请注意,《挪威的森林》的某些章节可以由两位译者翻译,而《大象消失》是一部短篇小说集,不同的故事由不同的译者翻译。
特征工程
设计合适的功能对项目至关重要。特色需要与翻译风格相关,而不是书籍的整体内容或主题。字符、位置或主题等特征在预测特定文本时非常有用。然而,它们很可能与潜在的故事有关,而不是在翻译过程中做出的任何决定。
我发现构建在高性能空间库之上的 textacy 库在生成合适的特性方面非常有用。每个文本块首先被转换成空间文档,然后可以生成文本的各种基本度量。这些是像句子的数量,独特的词的数量和单音节词的数量。这些特征似乎有助于区分译者。一个译者可能喜欢更长的句子,或者另一个译者可能使用更广泛的词汇。
用 textacy 做词性分析也很简单。因此,对于文本块中的每个单词,我们可以生成一个标签——动词、代词、形容词等等。不同词性的计数似乎也有助于区分译者。
译者会对某些常用词有偏好吗?我对每位译者进行了一次单词包分析,然后列出了最常用的单词,每种情况下都标准化为该译者使用的单词总数。不出所料,像“the”和“and”这样的词非常常见。像“他”、“她”和“曾经”这样的词也经常被使用,而且译者之间的使用频率也有所不同。我把这些作为特征添加进来,因为它们看起来很普通,与一本书的主题无关,但可能与译者的风格有关。稍后我会回到这个假设!
每个译者最常用的 10 个单词的相对频率。
也许一个特定的译者也可能对某些形容词或副词有偏好。我查看了每位译者最常用的副词和形容词,并再次选择了几个看起来足够通用的词,它们可能是译者的指示,而不是潜在的故事,例如像“好”或“小”这样的词。
使用情感分析来区分译者似乎有潜在的风险,因为文本的情感可能与故事本身相关联,任何译者都希望准确地翻译原文的整体情感。尽管如此,我还是使用 VADER 软件包生成了情绪得分,该软件包给出了积极、消极和中性情绪的分值,总计为 1。
每本书/译者组合的 VADER 情绪得分堆积条形图。
在这一点上,如果给我更多的时间,我会理想地建立起我的翻译风格的领域知识,或者更好的是,与专家讨论,试图产生一些更有针对性的功能。然而,我已经有了 90 个特性,我很好奇它们是否足以构建一个工作模型。
特征组合建模
现在我有了一些有趣的特性,我可以尝试预测给定文本块的译者。从仅使用 textacy 基本计数的简单逻辑回归模型开始,我添加了额外的特征组,每次都重新运行建模,以了解每种类型的特征对预测准确性的影响。
用随机改组对数据集进行训练/测试分割。模型超参数进行网格搜索,交叉验证的准确性用于衡量每个模型的预测成功,以及混淆矩阵和 ROC AUC 评分。
特征数量不断增加的模型的交叉验证准确性得分和 ROC AUC 值。
我惊喜地看到,即使功能有限,简单的逻辑回归模型的得分也远远高于 0.40 的基线准确度(即,比默认选择最常见的翻译器要好)。
我们可以看到,基本的文本计数和词性计数对准确性有很大的贡献。当我们看到 ROC-AUC 分数提高时,单个单词计数对预测 Philip Gabriel 翻译特别有益。一些特定副词和形容词的数量也略微提高了预测能力。另一方面,增加 VADER 情感分数并没有显著提高准确性,事实上,在测试集上产生了较低的准确性。因此,我放弃了对它们的进一步分析。
总的来说,这是一个非常积极的结果,意味着我可以继续第二个目标,从模型特征中获得译者风格的洞察力。然而,在此之前,我想尝试其他可能产生更准确预测的机器学习算法。
比较机器学习算法
有许多潜在的模型可以使用,一般来说,在没有测试的情况下,很难说哪种模型在给定的任务中表现更好。测试和比较了几种替代模型,从相对简单的算法(如 KNN 算法)到更复杂的集成方法和神经网络。
各种建模算法的交叉验证精度,每种算法都具有相同的输入特征。
从一开始,我的目标就是生成一个准确的预测模型并且能够解释预测是如何做出的。增压,SVM 和多层感知器神经网络都产生了比逻辑回归更高的预测精度。然而,它们通常不太容易解释。因此,使用逻辑回归模型继续进行进一步的分析和解释。
调查最有信心的预测
也许这个项目最具启发性的阶段是审查每个译者最有把握预测的文本块以及模型特征。由此我可以开始对译者风格的差异有所了解。
使用逻辑回归模型的每个译者的功能重要性条形图。
上图显示了逻辑回归模型中预测每个译者优于其他译者的最重要的特征。具有浅红色的正面特征和深红色的负面特征。由此我们可以说,一般来说,翻译风格有以下特点:
Birnbaum :单音节词多|句子短|动词少
鲁宾:更长的句子|更多的代词|更多地使用‘had’这个词
更少的代词|更多的动词|更多地使用“他”这个词
下图有助于总结每个译者最有把握预测的文本块的一些关键特征的值。
由黑点指示的每个翻译者的预测文本样本的分析。红色条带显示了每个翻译人员的这些功能的趋势。
我为每个译者选择了最有把握的预测(通常概率> 95%),以观察这些文本块的实际特征如何比较。在图中,我们可以看到一些关键预测值的完整分布为红色条带。灰色菱形表示给定翻译者的意思。黑点显示了每种情况下最有把握预测的块的值。有趣的是,我们可以看到单词“had”是 Jay Rubin 的强预测词,而单词“he”是 Philip Gabriel 的强预测词。
突出显示单词“had”和“he”的每个译者的最佳预测文本样本。
通过在上面的强预测样本中突出显示这些单词,我们可以看到加布里埃尔文本是以第三人称写的,而伯恩鲍姆和鲁宾都是以第一人称写的。鲁宾的文本主要是过去完成时,而其他两个主要是简单的过去时。这两种差异似乎更可能与原文有关,而不是译者的任何决定。
删除特征后重新建模
更深入地研究文本,我们发现加布里埃尔翻译的小说《海边的卡夫卡》是用第三人称写的,而村上的许多其他小说都是用第一人称写的。因此,该模型更有可能使用“他”这个词的频率来预测小说,而不是译者的风格选择。鲁宾翻译的《发条鸟编年史》(The Wind-Up Bird Chronicle)也是如此,该书包含大量过去完成时的文本,因此,模型很可能再次使用单词“had”的频率来预测小说,而不是译者的风格。
因此,在没有与单词“had”和“he”的频率相关的特征的情况下,重新运行逻辑回归模型。
使用逻辑回归模型的每个译者的功能重要性条形图。这次去掉了“有”和“他”的特征。
通过这个调整后的模型,我们可以更好地描述翻译风格:
Birnbaum :更短的句子|更少的动词|更多独特的单词
鲁宾:更长的句子|更多的代词|更少的副词
加百列:少用单词‘表示’|少用代词|多用动词
与故事本身相关的特征的这个问题部分是由于最初的随机训练/测试分裂而出现的,该分裂在测试模型时采用每本书的一些部分来训练模型,并且采用来自同一本书的其他部分。我们可以通过把完整的书放在一边作为测试集,并在剩余的书上进行训练来避免这个问题。
用新的训练/测试分割重新建模
因此,作为对建模方法的最终确认,我使用非随机训练/测试分割重新运行了逻辑回归建模(仍然删除了“had”和“he”计数特征)。
我有《挪威的森林》的几章和《发条鸟编年史》的一章,这本书被翻译了两次,一次是杰伊·鲁宾,另一次是阿尔弗雷德·伯恩鲍姆。这提供了一个很好的控制测试集,因为原始的日语文本是相同的,唯一的区别是翻译。
这个测试运行了两个版本。首先,在训练集中使用所有三个译者的剩余书籍,但是在测试集中仅使用上面概述的来自伯恩鲍姆和鲁宾的文本。
这次的基线精度是 0.50。在这种情况下,交叉验证的准确性不太相关,重点是测试集准确性得分 0.55。幸运的是,该模型仍然能够击败基线(尽管差距较小),并证实了使用可用特征预测译者是可能的。下面显示的区别特征包括 Gabriel,即使他不在测试集中,因为他包括在训练集中:
使用逻辑回归模型和新的训练/测试分割的每个翻译者的特征重要性条形图
现在我们有:
Birnbaum :更短的句子|更少的动词|更多独特的单词
鲁宾:较长的句子|较多的代词|较少的副词
加布里埃尔:少用单词‘表示’|少用代词|多用动词
由于测试集只有两个翻译人员,Birnbaum 和 Rubin,我运行了第二个版本,在训练集中也只有这两个翻译人员。由于不再有假阳性 Gabriel 预测,测试准确度在 0.67 处显著提高。
使用逻辑回归模型的每个翻译者的特征重要性的条形图,以及仅使用 2 个翻译者的新的训练/测试分割。
因为只有 2 个目标类别,所以模型中只有一个功能集,如上所示,那些预测 Rubin 而不是 Birnbaum 的:
如宾:较长的句子|较多的助词|较少的字|较少的独字
我们发现了什么?
首先,通过随机训练/测试分割,所有测试的模型都能够预测测试数据集的翻译者,其准确度远高于基线分数(即,优于默认选择最常见的翻译者)。然而,可能很难知道模型是在预测一本书还是它的译者。
这引出了一个重要的教训,在这种情况下,随机的训练/测试分割不是最好的方法。通过查看模型对每个类别的最有信心的预测以及模型中功能的重要性,很明显,一些功能可能会预测一本书,而不是它的译者。通过使用一个只包含相同原文重复翻译的测试集,我可以确定模型的预测只基于译者的选择。幸运的是,以这种方式生成的模型仍然能够做得很好,特别是当它只在测试集中由两位译者翻译的其他文本上进行训练时。
那么翻译风格的实际差异呢?从这个最终模型中,我们可以说鲁宾倾向于使用比伯恩鲍姆更长的句子,以及更多的助词和更少的独特词。要确定 Gabriel 的翻译与众不同还有点困难,但从早期的随机训练/测试分裂训练模型来看,他似乎比其他人使用更多的动词和副词,更少的代词。
这个项目仅仅触及了这种分析的可能性。当然可以生成更多定制的功能,甚至可以利用原始的日语文本来帮助开发基线信息,以便与译文进行比较。
我当然喜欢第一次看这个话题,我希望你也觉得有趣!使用的所有代码都可以在 GitHub 上获得。如果您有任何意见或建议,请随时联系我们。
艾是谁?数字足迹。
当您独特的可追踪数字活动勾勒出您的轮廓时。
“你永远不会有第二次机会给人留下第一印象。”—安德鲁·高安德
我是谁?这个问题也许是人类的基本问题之一。经过不同的哲学家、心理学家、艺术家和神经科学家的讨论,由于其不同的含义或前景,它一直是一个难以定义的概念。
我们指的是心灵、存在、灵魂、意识吗?对商业领袖来说幸运的是,也许对我们来说不幸的是,没有必要释放他们内心的精神分析之父弗洛伊德来解决它,即使现在网飞试图知道所有的“真相”。
正如我所说的,在商业世界中,有一种更简单的方式来了解我们是谁,至少在职业领域是这样的:只要注意别人如何看待我们。
如果你想了解更多,请访问oscargarciaramos.com
我这是什么意思?
几项调查证实,我们在工作中的表现通常取决于人们对我们的看法:他们如何衡量行为和行动,他们对我们的个性或动机的看法,甚至是与其他同事的比较。没有比分析我们的评价或个人品牌调查更简单的方法来了解我们是怎样的,或至少我们是如何被感知的。
认为我们可以在职业上进步而不用担心别人对我们的看法是没有意义的。在专业背景下,以巧妙和聪明的方式展示自己是进步的关键。反馈本身总是好的,然后一个人学会过滤它,并以他/她认为的方式假设它。
我给大家分享一个例子 :
上午 9 点我们从办公室的门进去。分析开始了,第一次早上握手(“嗯,这家伙很有动力”),会议室里我们的声音(“多好的合作者啊!”),以及他/她今天选择的香水(“清新敏感”)。但不仅如此,微笑,打哈欠,或一些窥探的目光,正在定义我们的个人资料。
然而,我们进入了网络世界。
这些数据会变成什么?
人工智能模型的燃料,专门用来追踪我们的 【脚印】 。我应该雇用你吗?投资你的创业公司?和你合作?或者我离你越远越好?
所有的公共信息都可以用来评估我们,决定我们的偏好和塑造我们,这要么归功于我们的人口统计位置,要么归功于我们的消费行为。什么是 主要目标 ? 生成并对比假设,这些假设允许我们确定我们在不同提议场景中的成功概率。
我们完了!不,我们还有其他选择。我们有机会选择我们想要使用的头像,我们设计的在线档案,最重要的是,了解我们的档案是如何被使用和利用来战略性地调整它。
如何理解算法
算法的偏差误差比很多人想象的更人性化。人工智能专注于识别信号和模式,就像我们一样,但我们可以说是以一种更“公式化和规定性”的方式。钥匙在哪里? 理解公式。
在改善我们的数字档案时,需要注意哪些重要的事情?
话
正如我在之前的帖子中提到的, 嘿 Siri,我能帮你吗?文本和语音分析是一个快速发展的领域,它基于自然语言处理(NLP),允许在不同的个性维度(如兴趣、智力或情绪)与我们使用的词语之间进行映射。像 IBM Watson 这样的产品允许我们进行情感分析,将个人语言风格转化为完整的个性特征。
虽然没有放之四海而皆准的公式,但有一些一致的模式:
- 积极词汇的使用,如“有趣”或“难以置信”通常与外向性有关。
- “担心”和“恐惧”通常表明人们有悲观的倾向。
- 使用像“编年史”或“记叙文”这样的复杂词汇来描述聪明和好奇的人。
- 而系统地使用诸如“我”、“我”和“尤其是我”之类的自指代词可能是自恋倾向的标志。
录像
有一些应用程序可以分析我们在互联网上发布的视频。像 Hirevue 这样的公司专注于在招聘过程中自动翻译身体语言和面部表情。如果你发布视频,确保它们能很好地代表你。
声音
声音传递情感和真诚,以及其他许多东西。 韵律 是语言学的一个分支,它正式地分析和表现口语表达的那些要素,如重音、声调和语调。甚至我们的声音也允许我们给出关于我们健康的线索。
形象
让我们停止认为面部识别是危险或有害的。我们自己,有意识或无意识地,对外表产生偏见,包括性别、年龄和种族,尽管我们不应该这样。让我们在这方面取得进展。
社交网络、帖子、喜欢和分享
数量、质量和内容。
没有一家公司会公开承认在招聘或评估候选人的过程中使用了这种技巧。不要被愚弄。
您发布的任何内容或行为都可能与您的个性、信仰、消费者行为甚至政治偏好相关联。
HiredScore 、 Humantic 、 Allyo 或 Crystal Knows 都是依靠人工智能理解员工和候选人的语音、文本和视频含义的公司的例子,这样他们就可以创建一个数字档案,并以某种方式预测他们的行为。自动的。
那么,下一步是什么?
将你的个人资料(“自己的数据”)视为你周围人的个人资料或参考群体是将军会算法、试图评估你的人和组织的关键。
找到合群和突出之间的平衡。
第一印象很重要。
在每一次新的互动中,你都在被评估。
欢迎发表评论或分享这篇文章。跟随 me 进行未来岗位。
如果你想了解更多,你可以在oscargarciaramos.com找到我
谁是数据科学家?
使用 Stackoverflow 调查了解数据科学
阿达·洛芙莱斯跟随 CRISP-DM [ 公共领域
介绍
作为一个希望在我的工作中引入更多数据科学的人,我觉得观察那些已经在这个领域中的人的特征会很有趣——看看这些特征是否与其他开发人员不同。
Stackoverflow 用户调查是获取包括数据科学家在内的各种开发人员详细信息的绝佳资源。我的分析基于 2019 年的调查结果,共有 88,883 份回复。
谁是典型的程序员?
我想看看谁是典型的程序员。它们的属性是什么?我们能以任何方式概括它们吗?更进一步,我们能不能确定一个典型的数据科学家。
首先,我查看了最常见的问题和答案。对于一个问题,最常见的回答是“是”或者“你把编程作为一种爱好吗?”。大约 80%的受访者这样回答。
[图片由作者提供]
并不是所有的问题都可以进行如此简单的分析,因为许多问题允许多重答案。例如,给了回答者一长串可供选择的编程语言,外加一个输入其他语言的框。一旦我删除了这些信息,我发现 JavaScript 成了最流行的语言(几乎有 60,000 个用户)。
[图片由作者提供]
虽然这些单个响应的统计数据很有趣,但我觉得定义典型编码者的最佳方式是查看所有响应,并找到所有答案的最常见组合。
需要注意的是,虽然大多数答案是分类值或分组值,但有四个问题允许连续的数值。为了处理这些,我为四个四分位数创建了存储桶(即每个存储桶覆盖 25%的值范围)。
很明显,这种方法将反应分成许多非常小的片段。我发现,根据这个定义,最常见的一组答案只出现了 15 次……而这 15 个人只回答了 4 个问题。
典型的编码员回应—其他未显示的回答全部“(无回应)”[图片由作者提供]
也许到目前为止我们所能说的就是开发人员是独特的个体,并不都是一样的!
使用相同的方法,但只关注数据科学家,没有明确的“赢家”出现,因为所有答案的组合只出现一次。数据科学家更是独一无二!😃
是什么让数据科学家脱颖而出?
不再只看典型的反应。接下来,我想看看我们是否能确定一些明显使数据科学家不同于其他开发人员的属性。我们能根据这些属性预测哪些开发人员是数据科学家吗?
我想把这个建模成机器学习分类。首先,我需要一个目标变量来训练我们的模型。“DevType”问题似乎是这个问题的关键,但是首先我们需要从这个多答案字段中提取不同的角色。“数据科学家或机器学习工程师”是最准确描述我们目标群体的价值观。通过这种方法,我们可以说 6,460 名受访者是数据科学家。
[图片由作者提供]
下一步是准备数据,包括:
- 删除对预测没有帮助的无关字段
- 将分类值转换为数值
- 删除缺少值的行
- 缩放特征,以便它们在我们的模型中具有相同的权重
之后,是时候训练和测试我的模型了。我选取了三种分类算法进行评估:朴素贝叶斯、Ada Boost 和梯度 Boost。当我比较这三种算法的结果时,有一些有趣的结果:
- 朴素贝叶斯通常表现不佳,除了在消除假阴性(召回)方面——不到 2%的数据科学家没有正确分类
- Ada 增强和梯度增强彼此表现相似;两者都有 93%的准确率,同时在消除假阳性(精确度)方面做得一般,在消除假阴性(召回)方面做得很差
[图片由作者提供]
总的来说,我觉得 Ada Boost 算法给出了最令人鼓舞的结果。整体的准确性很好,并且它在精确度和召回率上达到了最小最差的平衡(由 f1 分数表示),但是这个模型当然还有很大的改进空间!
数据科学具有包容性吗?
我的最后一个问题是,数据科学是否是一个包容性的领域?或者更确切地说,它是否比其他编码学科在 it 从业者中表现出更大的多样性。少数群体在数据科学中有更好的代表性吗?
我决定关注多样性的三个主要表现——种族、性和性别——并排除任何没有回答这些问题的回答。我们可以很快看到,编码总体上是由白人异性恋男性主导的…
按种族划分的开发者数量[图片由作者提供]
按性别统计的开发人员数量[图片按作者]
按性别统计的开发者人数[图片由作者提供]
与前面的问题一样,我们使用“数据科学家或机器学习专家”的角色来划分我们的数据。创建了多样性小组来记录性别、性和种族的各种组合。多样性分数也是通过计算一个人不属于优势群体的三个维度的总数来计算的。
观察多元化团队的分布,我们可以看到数据科学家团队中有 218 个团队,而其他开发人员团队中有 550 个团队。当您考虑到数据科学家群体要小得多时,平均而言,这意味着两位数据科学家来自不同多元化群体的可能性超过四倍(24 比 109)。
现在看看多样性得分,我们发现得分每增加一分,数据科学家的比例就会增加。例如,44%的数据科学家不是白人异性恋男性,而其他所有开发人员中只有 40%不是
[图片由作者提供]
结论
- 编码者实际上并不完全相同。没有一组答案经常出现。事实上,如果我们只看数据科学家,我们会发现没有一组答案会出现超过一次!
- 数据科学家和其他开发人员没有什么不同。或者至少还不足以让我们根据他们的其他回答,自信地预测哪些开发人员是数据科学家(目前还没有!)
- 数据科学比其他开发角色更加多样化。不是很多,但有一个可测量的差异。
完整的代码和分析可以在这里找到https://github.com/deacona/stackoverflow2019
感谢阅读!
摩洛哥哪些人没有银行账户?
使用监督学习的 2017 年世界银行调查的见解(第一部分)
最近,摩洛哥政府向因新冠肺炎而受到经济影响的公民每月发放津贴。大规模的操作是通过手机协调的:人们输入他们的信息和他们有资格获得的援助类型,然后他们收到一个 PIN 码,他们后来用它从 ATM 机取款。
我的祖父是这个项目的受益者,他从银行取回钱后兴奋地打电话给我。他以前从未使用过自动取款机,他惊讶于机器是如何在不需要与人互动的情况下将现金交给他的。
我很困惑:为什么我 80 岁的祖父——他对互联网、智能手机和 WhatsApp 的热情早已消退——突然对一台自动取款机感到兴奋?事实是,我从来没有想到我爷爷从来没有银行账户,借记卡,贷款,或者与银行机构有任何联系!
因此,我试图了解像我祖父一样从未购买过银行产品的数百万摩洛哥人是谁。我知道截至 2017 年,“银行”人口的官方统计数据徘徊在 56%左右(来源:银行 al Maghrib ),但我想了解无银行人口的微观经济特征:他们是谁?
幸运的是,世界银行在 2017 年进行了一项详细的全球金融包容性调查,并向公众提供了数据(而且是免费的!).该调查对约 5100 名摩洛哥人进行了抽样调查,并就他们的人口统计数据和银行产品的使用情况提出了一系列问题。下面的分析是根据这些数据得出的。我确实对这些数据及其结论的质量有所怀疑,我将在这篇博文的后半部分提出。
1.描述统计学
在摩洛哥调查的 ~5100 名抽样个人中,只有 28%的人报告在 2017 年拥有银行产品。虽然官方统计的银行人口在那一年接近 56%,但这个样本——理应代表摩洛哥人口——显示的统计数据要低得多。我将在后面的段落中进一步阐述我对这项调查的怀疑。现在,让我们接受现有的采样和数据收集方法。
库存人口的比例在很大程度上取决于样本人口的人口特征。下面我展示了一组描述这些特征的图表。
第一个显著差异是在性别层面。如下图所示,男性拥有银行产品的可能性是女性的 2.5 倍以上。事实上,只有 17%的受访女性拥有银行产品,相比之下,男性的这一比例为 45%。
接下来,当我们将调查对象按相同的年龄组分组时(图中的每个年龄组包含相同的人数),我们看到不同年龄组之间只有轻微的差异,15-25 岁的除外。这表明年龄以外的因素可能更重要。
那些在工作的人拥有银行产品的可能性是那些不在工作的人的 2.5 倍(无论是失业、退休还是在校)。
当我们观察受访者的经济状况时,我们得出结论,收入最高的 20%的人拥有银行产品的可能性是收入最低的 20%的人的 3.5 倍。同样,我觉得奇怪的是,在收入最高的五分之一人口中,只有 50%的人有银行账户,但我们暂时还是接受这个数据。
最后,最显著的差异是教育解释的差异:受过高等教育或以上教育的人拥有银行账户的可能性几乎是只受过初等教育的人的 4 倍。正如你可能已经猜到的,样本中包含了大量只受过小学教育的回答者。
当然,在现实生活中,像这样的人口统计特征并不存在于真空中。事实上,她们相互影响:收入最低的 20%的失业妇女与收入最高的 40%的失业妇女*是不同的。*下一组图表是对上述图表的扩展,旨在说明在解释摩洛哥银行产品的获取渠道时,某些特征集合是否比其他特征集合更引人注目。
下图告诉我们,摩洛哥性别之间的"银行收入差距"随着教育水平的提高而变小:从初等教育水平的约 3 倍到高等教育水平的约 1.5 倍。
有趣的是,下图显示,受教育程度高的人,即使是收入最低的五分之一人群也有银行产品,也就是说,收入最低的 20%人群中有 67%的人有银行产品。这表明,在决定获得银行产品的过程中,教育可能比收入水平更重要。
为了理解这些特征中的每一个在确定谁可能有银行账户时的相对重要性,我将在接下来的部分中探索机器学习技术。
(随想:如果你正在勤奋地阅读这篇文章,现在是休息一下,听听这首 切布卡勒德歌曲 )
2.谁有可能在摩洛哥拥有银行账户?机器学习方法
我使用一个逻辑回归模型和一个决策树模型来理解上述每个特征的相对重要性。
A.逻辑回归
逻辑回归是一种预测结果是否会发生的分类方法(例如,你会拥有一个银行产品吗?)给定一组预测因子(例如,人口统计学特征)。有关方法的更多详细信息,请阅读这篇关于数据科学的文章。
a .数据准备和选择预测值
监督学习的前提(逻辑回归只是其中的一种方法)是建立一个模型,该模型可以学习尽可能准确地预测给定的结果。
为了实现这一点,我们需要一个训练数据集(模型将使用它来学习)和一个测试数据集(模型将使用它来应用它刚刚学习的东西)。因此,我将我的数据随机分为两个样本:一个训练样本(约 5100 名受访者中的 75%)和一个测试样本(约 5100 名受访者中剩余的 25%)。
下一步是选择进入模型的一组预测值。第一部分中的描述性统计给了我一个可能建立一个好模型的预测因子的想法。经过一些调整和尝试不同的预测组合,我找到了以下预测:
预测有 _ 银行 _ 产品作为函数性别+教育 _ 水平+ 性别和教育 +就业 _ 地位+收入 _ 五分位数+年龄的交互作用
b .运行和评估模型
我使用标准的 glm() 函数为 R 中的逻辑回归构建了我的模型,并使用它在我的测试数据集中**生成一个“预测的”列。**有很多方法可以评估一个模型是否好:
(i)准确性——在我的测试数据集中,“预测的”列与“实际的”列相匹配的频率:在我的模型中为 78%。
(ii) 混淆矩阵 —这是一个显示预测结果与实际结果的细目表。对于我们来说,这是一个简单的方法来查看我们预测为真的,而事实上它是假的*,以及我们预测为假的*,而事实上它是真的。**
你可以从这个混淆矩阵中看到,15%的时候,我的模型预测一个人拥有一个银行产品,而实际上他们没有。同样,在 7%的情况下,模型预测一个人没有银行产品,而实际上他们有。剩下的时间(78%)就是上面说的准确率。
更多关于混淆矩阵的信息,请点击。
那么我们如何解释这一切呢?!好吧,以上两种方法都表明这个模型并不完美,在测试数据中有 22%的时间没有预测到。这可能是因为这些数据缺失了影响一个人是否拥有银行产品的关键特征。这些特征可以是调查中没有包括的其他人口统计数据,例如该人是住在城市还是农村,他们的工作类型,他们是否有家属,他们的收入水平等。
c .解释模型
如果我们假设上述 78%的准确率“足够好”,我们现在可以看看模型的结果,以试图了解人口统计特征在影响一个人是否会拥有银行产品方面的相对重要性。
上面的图表告诉我们的是描述性统计直观地引导我们的东西:拥有银行产品的最重要的预测因素是某人是否受过高等教育,其次是他们是否属于收入最高的 20%的人,然后是他们是否在工作。
如何更详细地解读这张图?图中的点是模型预测的概率估计值,横条是标准误差(表示每个估计值可能的最小和最大值),星号代表估计值是否**(不是由于偶然)。过去帮助我解释回归估计的一个方法是考虑两个相同的人。在这个例子中,假设我们刚刚克隆了两个人。但是,其中一个有大专学历,另一个没有;所有其他特征都是一样的。上面的模型表明,受过高等教育的人比她的克隆人有 89%的概率拥有银行产品。* 回归解释中至关重要的是,在考察单个变量的影响时,保持所有其他特征不变。*
B.决策树模型
决策树是一种受监督的学习算法,它根据一组预测值将数据分类为一个结果(真或假)。决策树连续地将数据划分成二元子集(例如,男性或女性,是否有工作,年龄:45 岁以上或 45 岁以下),直到不可能进一步划分。这里有更多关于他们的内容。
a .选择预测值
与上面类似,我选择以下预测因素,并对它们运行决策树模型(为了简单起见,我删除了连续的年龄变量以及教育和性别之间的相互作用)。
预测 has_banking_product 为性别+教育水平就业状况+收入五分位数的函数
b .运行和评估模型
我使用 R 中的 rpart() 函数构建了我的模型,并使用它在我的测试数据集中生成一个“预测的”列。让我们通过查看以下指标来评估该模型有多好:
**(一)准确率:亦作 78%。
(二)混淆矩阵:
与逻辑回归模型相比,您可以看到每个时段的比例非常相似,这表明这两个模型在预测结果方面做了相似的工作
c .解释模型
决策树模型的可视化表示是…惊喜…一棵树!
那是一棵大树!树是不容易解释的,但是我们可以试着理解它。让我们看看端点(这里用红色和绿色表示,方便地称为叶* ) —它们包含三个数字:*
- 结果是 1(有银行产品)还是 0(没有银行产品)。结果 1 是绿色的,结果 0 是红色的。
- 上述结果发生的概率。例如,在最左边的第一片叶子中,这个数字是 0.11。
- 已被分类到该叶中的样本的百分比。同样,如果你看第一片叶子,这个数字是 39%(也就是说,在 5100 个回答者中,模型预测大约 1989 个属于第一片叶子)
为了确定哪组特征对某人是否拥有银行产品影响最大,让我们看看实现结果的概率最高的叶子。在上图中,让我们看看第 16 片叶子,它的概率是 0.84:
- 在第 16 页,让我们看看**如何通过查看树的轨迹路径从树顶到达叶子**。该树首先按就业状况(右侧为劳动力中的,左侧为劳动力之外的)进行分割,然后按教育水平(右侧为第三产业,左侧为第二产业)进行分割,再次按收入水平(最富有的 20%在右侧,其余在左侧)进行分割。这告诉我们,你有 84%的机会有一个银行账户,你必须在工作,必须受过高等教育,你必须处于最富有的 20%的收入水平。**
虽然很难仔细阅读每一片叶子来理解我们是如何到达它的,但是阅读决策树的一个更简单的方法是看最初的几次分裂。通常,这些可以被解释为最重要的预测因素。在这种情况下,我们可以看到,就业状况、性别和教育程度是最强的预测因素。这也与回归模型的发现一致。
(随机想到:也许现在是听这首我很喜欢的歌的好时机)
3.结论和关于局限性的说明
这篇文章中概述的描述性和预测性方法都指出,在决定一个摩洛哥人是否会拥有一种银行产品时,某些人口统计学特征比其他特征更重要。也就是说,那些是就业状况、收入水平和教育水平(具体来说,拥有高等学位)。预测分析甚至表明性别本身可能不会产生我们最初在观察性别结果分布时所想的巨大影响。事实上,摩洛哥女性比男性更不容易获得大学学位,处于收入最高的五分之一人群中,或者在工作岗位上,这才是影响她们拥有银行产品能力的*。***
上面介绍的模型,以及它们的结论,都有局限性,它们有一个好,但不是很准确(都在 78%左右)。我们将需要包括更多的变量或微调现有的变量,以达到更高的预测能力,这反过来可以帮助我们更好地解释事情。
最后,我想加入一个关于世界银行数据的说明,这是分析的基础。具体来说,我想验证数据集确实代表了总体。下面,我比较了数据集中的比例和宏观层面公布的比例(来源:世界银行宏观数据):
- 女性在数据集中的比例( 59% )与总人口中的比例( 50% )
- 数据集中高等学位持有者的比例( 7% )与总人口的比例( 35% )
- 数据集中劳动力人口比例( 39% )与总人口比例( 48% )
如果我们认为数据集有些倾斜,没有反映摩洛哥人口的真实情况,那么结果很不幸地不能概括整个人口。这个抽样误差可以解释为什么数据集报告只有 28%的摩洛哥人拥有银行账户,而中央银行的官方统计数据显示 2017 年这一数字为 56%。我可能在我的分析中遗漏了一些东西,但是世界银行的官方报告也报告了我在这里报告的同样的数字。如果你是统计专家,并且正在阅读这篇文章,并且认为我在这里错过了一些重要的东西,请联系我:)
4.最后的想法
既然我探究了是什么让一个摩洛哥人更有可能拥有一种银行产品,我现在明白了为什么我的祖父对自动取款机给他的刺激现金如此兴奋。
接下来,我希望更仔细地研究一下这个“没有银行账户”的人群,并试图更好地理解它:我们能否使用无监督学习技术(例如,聚类)根据人口统计之外的特征对人群进行分类?敬请关注我的下一篇帖子:)
像往常一样,如果你一直读到这里:Choukran,谢谢,谢谢,谢谢。如果你是摩洛哥人,让我知道这是否值得翻译。
PS。在这里阅读第二部分。
谁是潜在客户?
现实世界中的数据科学
基于机器学习和谷歌分析的在线购买意向预测
戴维·维克斯列尔在 Unsplash 上的照片
每天在线购物网站都有大量的访问量。然而,只有一小部分访问变成了购买。
如果购物网站知道哪些客户群更有可能购买,会怎么样?
他们将能够推出对网站和客户都有利的目标促销活动。今天我们将利用机器学习的力量来探索这个问题。数据集来自奥莰·萨卡尔的研究。我们将在这个项目的研究中使用不同的方法。如果你想复制这个项目,你可以在我的 Github 中找到所有的资源。
数据概述
该数据集由网站的 12,330 次在线购物访问组成。为避免任何趋势,数据在 1 年内。18 个特征用于描述每个会话,分为数字特征和分类特征。特征**“收入”是我们二元分类问题的标签**。我们的目标是使用以下所有其他 17 个特征来预测“收入”标签,也就是看一次访问会话是否会以交易结束。
以下是这些特性的描述,请参考本文。
数字特征
分类特征
值得注意的是 Google Analytics 指标用于数字特征:跳出率衡量客户是否离开一个页面而不再访问另一个页面;退出率告诉你一个页面多久是一个会话的最后一页;页面价值显示哪个页面对网站的收入贡献更大。
方法学
这个项目的工作流程是怎样的?
项目工作流程
我们将按照上面的工作流程来寻找客户购买意向预测的最佳模型。
我们如何做决定?
在这个项目中,我们需要在型号选择和功能选择上做出很多决定。决策是基于这些指标做出的:**准确度、召回率、精确度和 F1。**让我用我们的商业案例来解释一下。
在我们的数据集中,每个在线访问会话背后都有一个客户。如果我们预测“收入”为 1,这意味着发起会话的客户更有可能进行购买。然而,我们的预测并不总是正确的。下表显示了不同的场景。
假设:1。每个订单的收入为 100 美元,每个发送的优惠券的成本为 5 美元。2.有优惠券的可能顾客会购买,而有优惠券的不可能顾客不会购买。
可能和不可能顾客的混淆矩阵
从上表可以看出,我们希望更多的“真阳性(TP)”发生,并尽可能避免“假阴性(FN)”。我们如何将此应用于机器学习模型?分类指标:
召回分数:TP/(TP+FN)
在所有可能的客户中,模型能正确识别出多少。高召回率要求高 TP 和低 FN。它可以识别很大一部分潜在客户,以减少销售损失。与此同时,更多不太可能的客户(FP)也将收到优惠券。当损失的销售成本大于息票成本时,这没有问题。
精度得分:TP/(TP+ FP)
在我们的模型预测的所有“可能”客户中,有多少是正确的,而不是误报的。高精度分数需要高 TP 和低 FP。它可以确保大部分预测的潜在客户是正确的。使用的优惠券越多,浪费的优惠券越少。然而,更多的其他潜在客户将被忽略,导致销售损失。
F1 得分:2 召回率准确率/(召回率+准确率)
一个兼顾查全率和查准率的值。
准确率得分:(TP+TN)/(TP +TN+FN+FP)
预测结果正确的百分比。这个标准只在类平衡时有效。我们不用它来处理不平衡的数据。
由于上述原因,在这个项目中,我们将使用召回分数作为我们在选择型号时的主要衡量标准。当回忆分数相近时,我们也会考虑 F1 分数。
初始模型选择
维多利亚诺·伊斯基耶多在 Unsplash 上拍摄的照片
首先,让我们清理数据:
通常只有一小部分访问以交易结束,我们怀疑数据是不平衡的。经过下面的测试,我们发现交易转化率只有 18.3%。这意味着以后我们需要对建模数据进行平衡调整。
不平衡标签
分类数据需要转换成数字以便进一步分析。
数据集非常不平衡。所有模型都倾向于符合多数类,因此为了提高模型性能,我们需要首先平衡数据。我使用了 SMOTE 超尺寸技术,结果是两个类的样本数量相同。
使用 SMOTE 平衡数据
现在,我们可以使用准确性作为平衡数据集的衡量标准。我选择了 7 个分类器作为模型候选。我将数据集分成 80%的训练和 20%的测试。然后将训练集拟合到每个模型中,无需调整。这里我们得到了一个基线精度排名。我将选择前 4 个模型作为我的基线模型:随机森林、额外树、ADAboost 和逻辑回归。我们现在优先考虑回忆的准确性,因为我们需要无偏见的模型。然后在高精度模型中选择高召回模型。
特性工程和模型调整将在稍后对 4 个模型进行。代码详情请参考我的 Github 页面。
初始模型性能
第一轮特征选择
安东尼·马蒂诺在 Unsplash 上的照片
我的目标是减少特性的数量,同时增加度量值。随着特征的减少,数据收集的成本降低,计算时间和成本也降低。使用三种特征选择技术来给出综合决策:信息值、 sklearn 的 SelectFromModel()、和相关值。
哪些特征在预测中比其他特征能给我们更多的信息?我们试试 sklearn 的 SelectFromModel()来筛选特征的重要性权重。这给了我们三个重要的特征。我们将保留它们,并继续探索其他两种特征选择方法。
'ProductRelated_Duration', 'ExitRates', 'PageValues'
功能选择前的热图
左侧的热图显示了所有功能之间的相关性。颜色越深,相关性越高。我们希望看到的是,这些特性与“收入”这个标签非常相关,但彼此之间并不相关。但是一些特征与另一个特征高度相关。这意味着只能保留其中一个相关特征。我们怎么知道该保留哪一个?信息值(IV)将帮助我们。
现在,我们将使用信息值对所有特征进行排序,并找出具有中等至强预测能力的特征。
信息价值及其预测能力
下面的函数将计算每个特征的信息值。
通过以上所有计算,现在我们得到了以下结果:
高度相关特征对的信息值
其他不相关特征的信息值
上表显示了为进一步建模而保留的 8 个特征:
管理持续时间,信息,产品相关持续时间,展示,特殊日,月,访问者类型,页面值
特征选择的决策流程图
我是如何做决定的?
左边的流程图是我的思考过程。
- IV 低于 0.1 的特征被移除。
- 对于其他的,如果一个特性被 sklearn 过滤器选中,我们就保留它。
- 然后,如果剩余部分与保留的特征高度相关,则将其移除。
- 最后一部分,如果一个特性与另一个不相关,我们保留它。如果是,则保留具有较高信息值的那个。
现在我们的功能更少了,让我们看看它们是否能帮助改进我们的模型:
具有 8 个特征的新数据框
第一轮特征选择后的模型性能
我们取得了巨大的成果!经过特征选择后,所有的查全率都有了很大的提高,其他指标看起来也不错。
第二轮特征选择
我们有 7 个分类特征。即使它们之前被转换为数值,分类特征的所有值都在一列中。如果我们让每个值都有自己的特征呢?让我们用哑这个分类特征变量吧!处理完数据后,现在我们有 29 个特征和 1 个标签。
虚拟变量后的特征
为什么我们在第一轮特征选择中不使用虚拟变量?因为把低信息价值的特征虚拟化,做太多新的特征是没有效果的。这将降低模型的性能。
现在,我们将在第一轮功能选择过程中使用相同的技术来选择新功能。详情请参考我的 Github 。
第二轮功能选择后的功能热图
Administrative_Duration,Informational_bins_page_1_plus,ProductRelated_Duration,ExitRates,Month 11,VisitorType_bins_return,PageValues_bins_above_0
现在上面的热图显示了新一轮特征选择后的 7 个特征+ 1 个标签。请注意,没有两个功能是相关的(这很好),Pagevalues_bins_above_0 功能与收入非常相关
现在让我们来看看这些新功能在模型上的表现。
第一轮特征选择后的模型性能
我们可以看到,EXTRA trees 和 AdaBoost 提高了召回分数,而其他两个模型的性能不如以前。EXTRA trees 模型的召回率比 AdaBoost 低,但 F1 高。因此,我们将暂时保留这两个模型,以便进行下一步的模型调优。
模型调整
现在我们已经缩小到两个模型:EXTRA trees 和 AdaBoost。通过调整他们的超参数,我们有可能进一步提高回忆分数。对于模型调优技术,我将首先使用 RandomizedSearchCV。它将通过我们定义的超参数列表随机运行模型。一旦我们通过 RandomizedSearch 获得了最佳性能,我们将使用 GridSearch 通过运行更窄的超参数列表来进一步改进模型。详情请查看我的 Github 。
模型调整结果
上图显示,这两个模型都通过使用随机搜索和网格搜索得到了改进。最后的回忆分数只有 0.002 的差异。然后我们看 F1 和准确度分数。 EXTRA trees 模型在这两个指标上都有更高的分数。结果就是我们的最终型号。
结论
在这个项目中,我们建立了一个二元分类机器学习模型来预测在线购物网站上客户的购买意向。经过几轮特征选择和模型选择后,我们确定我们的数据的最佳模型是 EXTRA trees,适合该模型的特征如下。
最终特征和营销建议
我们在这个项目中建立的额外树模型可以捕获 83%的潜在客户。这意味着,如果营销团队将优惠券发送给该模型预测的所有潜在客户,优惠券将覆盖市场上所有实际潜在客户的 83%。这个模型绝对可以帮助营销团队制定有效的营销策略!
感谢您花时间阅读本文。希望对你自己的项目有所启发。如果你喜欢我的文章,请为它鼓掌。随时欢迎您通过 Linkedin 与我联系!快乐学习!
是什么让科学家成为专家?
来自超过 400 万作者分析的证据。
学术研究正以前所未有的速度发表。事实上,全球研究产出每十年翻一番。随着进行研究所必需的工具变得越来越普遍,数据变得越来越透明和容易获取,以及研究本身的传播速度越来越快,这一趋势肯定会继续下去。但随之而来的是低质量/掠夺性期刊和缺乏经验的作者出版的激增。所以,有必要退一步,理解我们是如何定义研究中的“专家”的。
为了进行探索性研究,我使用了的数据,包括作者的 h 指数,一个作者所有论文的总引用次数,以及 1 亿名>作者名下的科学论文数量(不考虑作者身份的顺序)。
谁是专家?所有作者中,有多少是「专家」?
图一;表 1
图 1 展示了 h 指数> 3 的 CDF,这是一个旨在衡量作者整体影响力的指标。表 1 包含 h 指数样本的精确百分位数。请注意,绝大多数(99.6%)作者的 h 指数小于 3,在本分析中没有考虑。为了得到一个 h 指数为 *n,*一个人必须发表≥ n 篇论文,每篇论文都有≥ n 次引用。较高的 h 指数表明作者更多产,他们的作品可能质量更高。因此,我们大概可以把他们归类为专家。
查看所有领域的汇总数据,我们可以看到绝大多数作者的 h 指数在 0 到 20 之间。第 50 百分位约为 4;第 80 百分位是~ 9;一个 h 指数为 50 的作者稳稳地站在第 99.5 百分位(所有这些都是在我排除了 h 指数平均高于社会科学和经济学的作者之后)。
虽然如果要给专家下一个宽泛的定义,最好是根据他们相对于本学科其他人的 h 指数来定义专家,但 h 指数大于 20(95.8 百分位)将是一个很好的起点。
这些作者的出版物和总引用量的分布情况如何?
图 2(左);图 3(右)
图 2 和图 3 分别显示了作者的出版物和引文的百分位数。
我们在 CDF 的引文和出版物上看到类似的正偏态分布。大多数作者发表的科学论文不到 200 篇,所有论文的引用次数不到 2500 次。这有直观的意义;大多数科学家相对来说缺乏经验,而少数异常者却非常有成就。
请注意,对于图 4 到图 9,我对每个 h 指数的所有指标进行了平均。
发表作品越多的人被引用的次数也越多吗?
图 4
图 4 分散了引用的出版物数量。不出所料,这表明作者的总引用随着他们发表的更多而增加。但是,这显然不是线性比例关系;随着人们发表的论文越来越多,他们的新论文比旧论文积累了更多的引用(图 7 进一步证明了这一点)。请注意,很少有作者撰写了超过 1000 篇出版物,从而导致离群值。
平均而言,专家的出版物更有影响力吗?
这里,让我们用每篇文章的引用次数来代表影响。如果这个指标随着 h 指数上升,那么我们可以说专家的出版物更有影响力。
图 5 显示了作者的 h 指数和他们每篇论文的平均引用次数之间的关系。在我们达到大约 50 的 h 指数之前,作者的平均引用/出版物与他们的 h 指数密切相关;他们发表了 n 篇论文,引用了 n 篇论文,差不多产生了n的 h 指数
之后,这种线性关系消失,他们的论文就更有影响力了——对于 h-index ~> 50,专家的工作平均被引用率更高。
图 5
你可以想象有多种解释可以解释这种效果:初学者随着时间的推移会成为更好的研究人员,专家经常与同样熟练的研究人员合作。但是,如果许多专家的工作水平并不比不太知名的研究人员高,那该怎么办呢?在小的、专业的或新兴的研究领域,即使是最杰出的学者也可能很少有出版物和/或引文。如果我们想得出可信的结论,这突出了根据作者的研究领域对他们进行分类的重要性。
“专家”需要发表和“业余爱好者”一样多的作品才能在他们的 h 指数中获得相同的增量收益吗?
图 6 显示了出版物与 h 指数的比率和 h 指数之间的关系。你可以把它想成一个作者为了增加一个 h 指数而必须发表的论文数量。
似乎存在一个“临界点”(在 h 指数约为 25 之后),在此之后,作者能够在每篇出版物中获得大量引用。很明显,与他们职业生涯的后期相比,作者最初需要做更多的工作来实现相同的 h 指数增量,尽管事实上需要更少的引用/论文来实现较低基础上的 h 指数增加。潜在地,这个转折点可以用来指定专业知识。
图 6
这可能是因为当他们开始时,他们产生的研究质量相对较低,与经验较少的合著者一起工作,他们的工作面临更多的审查,导致平均引用工作较少(图 5 也证明了这一点)。作者在后来的引用中经历了迅速增加的规模回报,可能是因为他们自己更有生产力,与更有经验的合著者一起工作,等等。这得到了图 7 的支持,从中我们可以推断出,随着人们发表更多的作品并获得更多的研究经验,他们的论文会得到更多的引用。
图 7
给定 h 指数,我们能预测总引用次数吗?
图 8 和图 9 显示了 h 指数和总引用量之间的关系。根据定义,我们知道 h 指数为 n 的作者发表了至少 n 篇论文,每篇论文被引用至少 n 次。因此,h-index n 的作者必须有大于等于 n 的累计引用数。
尽管如此,作者很少真正遵循这种模式;一个 h 指数为 100 的作者几乎肯定不会通过发表严格意义上的 100 篇论文,并且每篇论文都有 100 次引用而获得成功。图 8 反映了这一事实:作者积累的引用超过了足以增加其 h 指数的数量,随着 h 指数的上升,这一趋势会随着时间的推移而加剧。图 7 进一步证实了这一点,图 7 显示,拥有 h-index n 的作者几乎总是拥有超过 n 篇的出版物,其中许多当然获得了少于 n 篇的引用。
图 8(左);图 9(右)
但是我们能根据作者的 h 指数估算出他们作品的总体影响吗?在他的文章“对 Hirsch 引文索引的批判:一个组合费米问题”中,Alexander Yong 提出了这样做的经验法则:总引文数= ~3.4h,其中 h 是 h 指数。我发现~5h 可能是 h 指数< 50(图 8)的一个更好的等式,而 8h2 可能是 h 指数大于 50(图 9)的一个更合适的估计值。
外卖食品
绝大多数作者几乎没有研究经验。在大约 1 亿篇论文中,只有 400 万篇的 h 指数大于 3(表明至少有 3 篇论文和 9 次总引用)。
- 定义专家在很大程度上取决于研究人员的领域,以及他们所在的 h 指数百分点。此外,使用经年龄调整的 h 指数可以揭示他们相对于其他同龄人的地位,而赫希的 h 指数告诉我们他们的绝对地位。
- 作者需要在职业生涯的早期发表更多的论文,但以较慢的速度提升他们的 h 指数。专家论文的平均影响力更大这一事实支持了这一观点。
-
- 我要感谢 Rob MacCoun 教授对我的工作给予的深思熟虑的反馈。
*I would like to thank Prof. Rob MacCoun for his thoughtful feedback on my work.
谁是英超最重要的球员?
按目标
以及图论如何证明这一点
照片— Pixabay
T 他的英超赛季已经完成了三分之二以上。利物浦几乎已经胜券在握(见我的早先的博客关于他们是如何获得如此优势的),通常的嫌疑人都卷入了每年一度的保级大战。
在我的“ On Target ”博客系列中,我一直在记录我对“ Moneyball ”梦幻英超(FPL)的追求。到目前为止,我们已经了解了如何使用交互式网页抓取器从英超联赛网站获取数据,以及如何使用面向对象编程以用户友好的方式组织这些数据。
通过自动化与网页的交互,从您的抓取中获得更好的数据
towardsdatascience.com](/elevate-your-webscraping-with-splinter-a926eee7f7d9) [## 使用面向对象编程改善您的数据争论
munging 和 OOP 令人惊讶的成功结合
towardsdatascience.com](/improve-your-data-wrangling-with-object-oriented-programming-914d3ebc83a9)
所有这一切的最终目的将是建立一个模型来预测哪些球员最有可能在即将到来的比赛中得分。然而,在讨论神经网络的具体细节之前,有必要后退一步,思考一下我们已经创建的丰富数据集。到目前为止,我们有英超联赛中每一次射门的逐行数据——我们可以深入整个 EDA 世界!
“射门”数据框的标题,显示英超联赛中每一次射门的细节
思考玩家的重要性
在 FPL,有一个概念被称为‘护身符理论’。由 FPL 社区“谁得到了帮助”(WGTA)推广,它概括地说,每支球队都将有一名个人“护身符”球员,无论出于什么原因,他都会提升球队的表现。塔里斯曼球员为球队进球(或者至少为其他球员进球),他们的球队在他们缺席的情况下通常会受到影响。
我们如何才能最好地识别这样的玩家?WGTA 通过研究玩家的幻想得分来解决这个问题。我的方法略有不同,因为我会考虑原始比赛数据,特别是射门和进球。
让我们从一些简单的事情开始——哪些球员参与了最多的射门,以及最多的进球。所谓“参与”,我们指的是射门的球员,或者是那些“协助”射门的球员,也就是说,把最后的传球给射门的球员。
游戏周 27 时的数据正确
这表明曼城的凯文·德布劳内在射门和进球方面是最有帮助的球员。我们从他相对较小的气泡尺寸中看到,这主要是由于‘助攻’——德布鲁恩倾向于不进球,而是为其他球员提供进球。
当我们观察最佳进攻组合时,我们可以看到这种影响。这考虑了球员们在赛季迄今为止相互协助的射门次数——我们看到德布鲁因在联盟十大搭档中的三个中出现在中。
游戏周 27 时的数据正确
因此,我们可以得出结论,德布鲁恩是曼城的“护身符”球员。当然,这一发现很容易实现,因为曼城作为一个团队进了很多球(在撰写本文时,他们比联盟中的任何其他球队都进得多)。我们怎么能想到那些少产球队的护身符呢?
一个简单的方法是看一个球员参与的球队射门和进球的百分比。
德·布鲁恩仍然在剧情的右上方(这是我们所期待的‘重要’球员的位置)。然而这一次,我们看到更小球队的球员更加突出;诺维奇的提姆·普基为球队贡献了超过 60%的进球,没有球员比狼队的劳尔·吉米内兹为球队贡献了更多的进球。
网后(工作)
射门和进球的比例是一个好的开始,尽管我们可以变得更加科学。让我们把每个团队想象成自己的‘社交网络’。那么我们可以把每个玩家想象成各自团队网络中的一个节点。然后,每对节点之间的“边”的权重可以由这两个球员相互协助投篮的次数来定义。
注意——我们可以使用 NetworkX 来实现这一点,这是 Python 中一个很好的网络分析包。我不会对我的具体代码做太多的描述,因为它涉及到大量的数据准备,脱离上下文很难解释清楚。然而,实际使用 NetworkX 的部分相对简单。我推荐浏览他们的教程,其中讨论了图形的创建、编辑和可视化。
让我们以凯文·德布劳内的曼城队为例。
节点大小作为玩家参与的总镜头数给出,边宽作为两个连接的玩家相互协助的镜头数给出
不出所料,我们看到德·布鲁因在网络中人脉很广。我们注意到非常“沉重”的优势,将他与塞尔吉奥·阿奎罗、拉希姆·斯特林和里亚德·马赫雷斯等球员联系在一起。回想一下,这三名球员与德布鲁因的合作非常富有成效。
我们在“投篮命中率”分析中强调的另外两个球员呢?
诺维奇城的网络与曼城的网络相比,联系要弱得多(我们会预料到这一点——本赛季到目前为止,曼城的射门次数比诺维奇多 70%)。我们也看到诺维奇更加依赖核心球员(即普基、布恩迪亚和坎特威尔)。
在某种程度上,狼队也是如此,尽管狼队的投篮次数略多于诺维奇队,他们更广泛的团队似乎联系更好,至少有五六名球员似乎相对频繁地协助对方投篮。
当然,仅仅目测一个观想并不特别严格。令人高兴的是,网络理论有几个度量标准,试图列举一个节点在网络中的“中心”程度。
我们应该确保我们使用的任何中心性指标都考虑到了边缘权重——多次协助队友的球员比只协助一次的球员对团队更重要。做到这一点的一个方法是“加权的中间值”。
在给定的网络中,介数量化了一个节点作为两个其他节点之间最短路径上的桥的次数。换句话说,为了计算凯文·德布劳内的“中间性”,我们计算了曼城网络中每对球员之间最短的可能“旅程”。然后,我们计算通过德布鲁因节点的“旅程”的份额。
如上所述,介数度量可以说明边权重。特别是,我们可以说,两个互相帮助很多的球员之间的优势比其他优势更“短”。当然,给定节点对之间的最短路径更有可能使用这些短边,因此高目标参与度的玩家将出现在更多的这些最短路径上,并且具有更高的介数水平。
*出于这些计算的目的,我们可以说两个玩家之间的边长是他们互相帮助的次数的倒数(即 1 除以 1)。然后使用 Dijkstra 算法计算每个节点对之间的“最短路径”。
所以如果我们计算联盟中每个球员的加权介数,我们会发现什么?
我们看到,到目前为止,他们队最重要的球员是维拉的杰克·格里利什。事实上,如果我们想象维拉的网络,我们会看到格里利什在中间,在其他任何一对球员之间都没有什么优势。
正如预期的那样,我们看到球员参与的球队投篮次数和他们在球队中的“中心地位”之间存在正相关。
那么谁是每支球队的“护身符”球员呢?
让我们看看那些“护身符”的介数相对较低的团队的网络。正如预期的那样,这些球队的投篮命中率相当平均,没有一个球员(或者甚至任何一个紧密的球员群体)占据主导地位。
这是我的博客系列“目标”中的最新一篇文章,在这篇文章中,我将尝试构建一个“摇钱树”梦幻英超联赛的模型。我很乐意听到关于这个博客的任何评论,或者这篇文章涉及的任何概念。欢迎在下面留言,或者通过 LinkedIn 联系我。
谁赢了:谷歌、亚马逊、脸书还是苹果?
GAFA——谷歌、亚马逊、脸书或苹果。来源:宾夕法尼亚大学。
GAFA 的能力比你想象的更相似。但是谁领先了呢?
你听说过 GAFA 这个术语吗?它指的是四大科技巨头谷歌、亚马逊、脸书和苹果,这些公司改变了媒体行业、互联网、商业模式和社会。它们通过将消费者从传统的实体企业中转移出来,甚至取代传统企业,获得了消费者支出中不断增长的份额。
一方面,谷歌和脸书引领着数字和显示市场,而亚马逊和苹果主导着在线零售。尽管表面上有所不同,但这四家公司在搜索、社交、零售和广告等方面都有相似的能力。
图表 1 —四大公认的核心竞争力,以及彼此竞争对手如何通过提供类似的服务(即使是规模小得多的服务)来威胁他们的领导地位。重叠越多,越脆弱,竞争力越强。来源:作者,戴顿。
在服务提供的文氏图(见表 1)中,我们可以看到,尽管他们从非常不同的核心能力开始,他们发展了相关的多样化,现在相互重叠。**所有的共同点是广告。**这种竞争有助于塑造电子商务对消费者的便利性,但也产生了一些负面的外部效应,如市场集中、竞争减少、算法取代工作、隐私问题、出版商成为纯粹的内容提供商、零售商被要求支付基础设施服务费用,以及政府对这些公司实力的担忧。【1】
我认为,四大处于不断的吞噬之中,试图吞噬对方,从他们的边界开始希望达到他们的核心竞争力。通过这样做,每家企业都在增加其多元化,传递一个强有力的信息,并降低其自身的风险敞口,但也在考虑最终的收购。
在这场竞赛中,谷歌由于其搜索引擎和展示广告,比其他公司略胜一筹。脸书以强劲的利润率位居第二,但它提供的是“时尚”的核心娱乐业务,更容易受到市场变化和新来者的影响。苹果和亚马逊在各自领域依然强劲,但面临越来越多的挑战。苹果应该专注于服务业,而亚马逊需要提高利润率。
GAFA 核心竞争力
当这四家公司中的每一家成立时,它们都为特定的客户群提供非常特定的产品。谷歌提供了一种新的网络搜索方式,亚马逊在网上销售书籍,脸书点燃了社交媒体运动,而苹果,所有这些公司中历史最悠久的,销售个人电脑。随着这些公司的扩张,他们看到了相关和不相关多元化的机会。
相关多元化是一种明智的战略,它着眼于公司的资产、人员和服务,创造一种与其业务密切相关的新产品或服务,同时降低当前预算的额外成本。它利用现有的足迹为以前未开发的细分市场创造新的收入流。
另一方面,不相关多元化着眼于全新的市场,以抵御收购,重新关注公司,并降低整体风险。
随着这些公司接受越来越多的多样化,它们很快就相互交叉,尤其是在广告方面。这四家公司很快意识到,为了提供廉价或免费的服务,收入必须来自其他地方——广告。直到最近,苹果是最不关心广告销售的公司,因为它提供了被认为有价值的有形产品,而脸书和谷歌提供的是无形产品(社交和搜索)。同样,亚马逊销售实体产品,尽管它大幅降低了利润率以获得市场份额。例如,脸书尝试了几种不同的方法,直到最后发现广告是最终赚钱的途径。【3】他们的解决方案都是广告,这可以补贴他们的免费服务、低利润,或者只是带来一些额外的现金。
服务产品的主要重叠部分
GAFA 的四条腿文氏图(图表 1)揭示了竞争加剧的领域,其中至少有三家公司重叠。这些是第三方商品零售和数字内容。
除了苹果(苹果出售第三方品牌的配件,但数量可以忽略不计),商品由所有人出售,其中只有亚马逊可以履行产品,而谷歌和脸书出售商品广告和点击费。但谷歌通过与梅西百货、美国柯尔百货公司、家得宝和其他可能削弱亚马逊竞争优势的公司合作,正在获得履行专业知识。【4】基于搜索的商品是谷歌的相关多元化业务,是亚马逊的核心业务,可以说与脸书无关。
在数字内容领域,谷歌、苹果和亚马逊都有自己的“商店”,用户可以在其中购买应用、音乐和视频。在这场战斗中,苹果公司获胜,其商店每笔交易的花费几乎是其他公司的三倍。
S.W.O.T .分析和建议
图表 2 - 谷歌的 SWOT 分析表明,谷歌非常强大,有可能在四家公司中处于领先地位。来源:作者,戴顿。
图表 3— 脸书的 SWOT 分析强调了庞大的客户群和在该平台上花费的时间。来源:作者,戴顿。
图表 4— 亚马逊的 SWOT 分析显示了该公司在网上零售领域的巨大份额,但利润率却很低。来源:作者,戴顿。
图表 5— 苹果的 SWOT 重申了服务市场的巨大机遇。来源:作者,戴顿。
在分析优势、劣势、机会和威胁(SWOT)时,我发现谷歌领先于对手,因为它在数字付费搜索领域遥遥领先,拥有互联网中的大部分广告管道系统,同时几乎没有面临竞争和威胁(见附表 2)。当然,它仍然保持警惕,以捍卫自己的地位,免受必应(Bing)等其他搜索引擎的攻击,但通过对在人们的浏览器上显示的业务收费,该公司处于有利地位。
由于花在网上的时间,脸书仍然非常强大——16.4 小时的美国在线时间(见附件 3)。有了这样的连接,它可以在更长的时间内保留更多的数字空间。因此,脸书能够向用户展示越来越多的广告。脸书的利润率令人印象深刻——它是唯一一家收入达到两位数(10 亿美元)的公司,但利润仍位居第三。也是他们中最年轻的,还有成长成熟的空间。
亚马逊和苹果是成熟的老牌公司,但随着创新改变了互联网,它们变得更加脆弱。亚马逊拥有强大的云基础设施服务,但其商品销售的补贴利润占据了大部分利润(见图表 4)。从财务上来说,苹果是最强大的,拥有最高的市场价值和利润,但如果它不多元化并进入服务市场,它可能已经达到一个顶峰并开始走下坡路(见图表 5)。苹果一直面临着推出更新更好的手机的压力,新版本中任何微小的计算错误都可能导致灾难性的结果。
其他竞争对手
四大并不孤单。GAFA 还面临着有望成为互联网新时代的初创企业的竞争。随着对隐私问题的日益关注,广告业正面临着诸多挑战。
颠覆性创业的一个例子叫做勇敢浏览器。勇敢的免费和开源基于 Chromium 网络浏览器,该浏览器本身阻止广告和网站追踪器。用户可以个性化他们共享的数据,以及他们希望看到广告和获得报酬的频率。他们的引理是“你的注意力是有价值的”。
改变数字媒体系统,可以完全转移利润。
结论
四大是战场上的巨人,发展相关和不相关的多元化以保持强大,能够击败竞争对手,不愿接受失败。一个明显的例子是,在 Google+失败后,谷歌试图创建一个新的社交媒体。【5】他们还面临着小公司的竞争,并因其在数据隐私、竞争和市场势力方面的可疑行为而受到政府的审查。
在 SWOT 分析中,我发现竞争最激烈的领域是数字和商品销售,其次是普通广告——这是一个圣杯,可以通过收取相对较少的费用带来额外的收入。谷歌比其他公司处于更有利的位置,引领着数字付费搜索——可以说是最有效的广告类型,它可以显示用户当时正在寻找的精确结果。
戴顿、约翰和莉奥拉·科恩菲尔德。“亚马逊、苹果、脸书、谷歌 2018。”
丽贝卡·格林菲尔德。" 2012 年:脸书终于想赚点钱的一年."大西洋,大西洋媒体公司,2013 年 10 月 30 日,https://www . the Atlantic . com/technology/archive/2012/12/2012-year-Facebook-finally-tryed-make-some-money/320493/。
【3】the guardian。“脸书到底是怎么赚钱的?”不适用,https://www . the guardian . com/technology/blog/2009/sep/16/Facebook-money
【4】托马斯·劳伦。“梅西百货与谷歌合作帮助运营其仓库”2019 年 8 月 14 日,https://www . CNBC . com/2019/08/14/macys-teams-up-with-Google-to-help-run-its-warehouses . html
【5】波特,乔恩。“谷歌用鞋带再次尝试社交网络”,2019 年 7 月 12 日https://www . the verge . com/2019/7/12/20691430/鞋带-Google-area-120-event-organizing-new-York-beta
谁学得更快——你还是我的人工智能?
向我的 AI 挑战 Nim 游戏,并控制它在玩之前的练习次数。你能比人工智能学得更快吗?人工智能到底是如何学习的?这篇文章在没有任何数学公式的情况下,从高层次上解释了 Q 学习的概念。
尼迈网络应用的用户界面(图片由作者提供)
你能在玩一个简单的“尼姆”游戏上打败我的 AI 吗?来吧,我挑战你点击这里找到答案。最好的部分是:你可以决定在和你比赛之前人工智能要进行多少练习。
之后,回到这篇文章来学习人工智能是如何变得如此聪明的…
那么,你做得怎么样?我敢肯定,一旦你掌握了它的窍门,“简单”的模式对你来说并不是一个真正的挑战。然而,要击败更高级的水平,一个人必须穿得暖和(正如我们在德语中所说的)。
但是这些级别之间有什么区别呢?我是不是把更高级的代理编程得更聪明了?我有没有告诉他们玩完美的 Nim 游戏的数学公式?(Btw,这样的策略确实存在。你可以在这里阅读。)
答案是:不会!相反,我所做的是授权代理人自己去发现如何赢得 Nim 游戏。这就是 Q-learning 的神奇之处:你形式化一个问题,把它扔给你的代理,坐下来放松,而代理做大部分工作。让我在一个概念层面上向你解释——没有任何数学公式——幕后发生了什么。(注意:我到处都在谈论 Python 实现,但是你不需要理解这些来理解 Q-learning 的思想。)
人工智能需要知道什么
为了成为一个真正的 Nim 大师,代理需要被告知游戏的基本设置和规则:
最初的板子是什么样的?
来自 nimAI web 应用程序的初始板(图片由作者提供)
这是我的 nimAI 网络应用程序的初始板。理论上,你可以从任何其他数量的行和硬币开始,我们的学习算法应该能够处理所有这些选择。在 Python 中,上面的板子可以形式化为一个列表:
initial_board = [1, 3, 5, 7]
就这么简单。
在给定的棋盘状态下,哪些操作是可用的?
考虑一下游戏快结束时的棋盘状态:
游戏快结束时的棋盘状态(图片由作者提供)
这里有三种不同的选择:从第一排拿一枚硬币,或者从第二排拿一枚硬币,或者从第二排拿两枚硬币。我们所要做的就是编写一个函数,它接受棋盘状态(例如[1,2,0,0]),并返回一些可能的动作。在 Python 中,这种表示可以是一组元组,其中每个元组由要移除的硬币的行和数量组成:
legal_actions = {(1, 1), (2, 1), (2, 2)}
一个动作如何改变当前状态?
如果我从第二排拿走一枚硬币(见上图),棋盘会是什么样子?
移动(2,1)后的棋盘状态(图片由作者提供)
你可能会说,这是显而易见的。是的,但是我们需要形式化这样一个状态转移函数。记住代理人不像你这样自作聪明!
一场比赛什么时候赢或输?
我们需要提供一个函数,告诉代理谁是赢家(“人工智能”,“人类”,“还没有人”),对于游戏的给定状态。更准确地说,我们需要考虑棋盘是否已经空了([0,0,0,0]),如果是这样,谁走了这步失败的棋。
太好了。现在,AI 知道游戏如何开始(初始状态),它可以在每个可能的棋盘状态中选择哪些动作,这些动作如何改变棋盘(状态转换函数),以及是否已经有赢家。
现在,有趣的部分开始了——真正的学习!
人工智能如何变得聪明
Q-learning 的想法其实很简单。我们懒得明确告诉代理如何掌握游戏(也许我们甚至懒得去发现)。相反,我们让人工智能和自己玩游戏很多次。我们的希望是,它将遇到许多不同的情况,并通过反复试验发现,在棋盘的特定状态下,哪一个是最佳行动。
在代理被训练之后,一个人能挑战它到一个尼姆的游戏。
“拿着这个”,人类玩家会喊。
“ Muahaha ”,AI 会回答。“这种情况我以前见过很多次了!”利用它的经验,它会挑一个 boss 棋来消灭这个可怜的人类。然后,它会继续下去,奴役人类……哦,对不起,我不想吓到你。
现在你已经对 Q-learning 有了一个直觉,让我们进入一些更详细的内容。
奖励和惩罚
Q-learning 是来自强化学习领域的一种技术(这又是机器学习的一个子领域)。强化学习受到行为心理学的启发——人类和许多其他动物通过奖励和惩罚来学习。(这是一个可怕的过度简化,但是,没人有时间做这个!)
触摸热炉子的孩子会受到自然的惩罚(疼痛),下次可能会更加小心。吸取教训。
同一个孩子后来可能会打扫厨房,并从她母亲那里得到奖励(巧克力饼干)。下周她很可能会高兴地再次打扫厨房。吸取教训。
Q-learning(以及一般的强化学习)就是基于这个原则。我们让代理尝试一些行动,如果一个行动产生了“好”的状态,我们就奖励她。如果这个行为导致一个“坏”的状态,我们惩罚她。请注意,我们显然不会用鞭子打代理人,也不会给她糖果。而是用数字来表示奖惩(越高越好)。电脑程序喜欢数字!
在 Nim 的例子中,我们用“-1”(我知道,这很残忍)来惩罚失败的棋步(即移走最后一个硬币),用“1”来奖励对手失败棋步之前的棋步。
预期回报
其他所有不会终止游戏的动作呢?我们不会直接惩罚或奖励他们。相反,我们使用 Q-learning 的核心思想:预期回报。
代理将一点一点地了解到,某些行动——尽管不会立即赢得(或输掉)游戏——将使她处于有利(或关键)的境地。这种知识会从游戏的最后阶段慢慢“传播”到更早的位置。或许,你也经历过,在一个新游戏的开始,想出一个策略真的很难,而到了最后,看哪个动作好或者不好就变得容易了。要考虑的可能性更少了。对于一个 AI 来说也是一样:首先,她的大部分动作都是完全随机的。她没有任何策略。但是接着,她学会了哪一步棋能立即赢得游戏,接下来她学会了哪一步棋能导致立即赢得游戏,然后她学会了哪一步棋能导致立即赢得游戏的棋,等等。
如果你让代理练习这个游戏很多很多次,她会知道在任何给定的棋盘状态下,任何给定的行动最终会给带来什么样的回报。但是,如果你只让她玩几次,她没有机会体验游戏的很多另类课程。这就是为什么一些人工智能在简单模式下的移动(尤其是在游戏开始时)看起来相当随机,而更高级的智能体似乎立刻就有了计划…**
一个计划?一个策略?嗯,我想我们应该小心这种想法。人工智能不会按照某个高明的计划移动,她也不会推理哪一步可能是最好的。她只是记得在过去某个特定的董事会状态下,什么是最有效的。这一点她比任何人都做得好。
我希望这篇文章给你一个关于 Q-learning 的良好直觉,并激发你深入这个话题的兴趣!
我想提及一些有趣的细节,并以问答部分的形式向您指出更严格的来源。
问与答(Question and Answer)
问:代理的知识是如何表示的?
答:在经典 Q-learning 中,你可以想象一个简单的表格,代表所有可能的状态和动作组合,并包含各自的 Q 值。在 Python 中,这样的 Q 表可以用状态-动作对作为关键字的字典来表示。例如,假设代理人在状态 s 中有两个法律行为 a1 和 a2。她可以查找Q_table[(s, a1)]
和Q_table[(s, a2)]
并简单地选择具有较高 Q 值的行为。
注意,Q-learning 还有更高级更高效的版本,比如深度 Q-learning 。这里,您可以使用神经网络来学习一个函数,该函数估计任何状态-动作对的 Q 值,而不是显式地将所有 Q 值存储在一个表中。
问:Q 值究竟是如何计算的?
答:首先,所有可能的移动的 Q 值都是 0——除非它们立即终止游戏(见上文)。代理根本不知道如何区分好的和坏的移动。然后,在训练期间,Q 值基于先前的信念和新的经验被更新。这两个因素需要权衡,用一个学习率来建模。查看这篇文章了解更多细节。
问:那么开发和探索呢?
答:在很多 AI 问题中,你会遇到一个根本性的困境:假设你的资源(时间、计算能力等)有限。),你应该探索尽可能多的替代方案,还是利用已经运行良好的方案?对于成功的 Q-learning,在探索和利用之间找到一个健康的平衡是至关重要的。这可以通过有时探索而不是具有最高可用 Q 值的动作来实现(而不是总是贪婪地挑选此刻看起来最好的动作)。