直播信号

原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
原文:https://towardsdatascience.com/predicting-the-outcome-of-nba-games-with-machine-learning-a810bb768f20?source=collection_archive---------1-----------------------
在决定大数据分析课程的最终项目时,我和我的合作伙伴 Jack Rosener、Jackson Joffe 希望将对体育的兴趣与整个学期学到的原则结合起来。经过几天的讨论,我们选定了一个旨在预测 NBA 比赛结果的项目。在实现我们的目标时,我们发现通过以下问题将项目提炼为以下步骤很有帮助:
收集相关数据–我们从哪里收集几个赛季的相关球队和球员统计数据?清理和处理数据——我们如何有效地组合我们收集的数据,使其既可读又可用?特征工程——我们可以将哪些额外的指标添加到我们的数据集,以帮助任何用户或 ML 模型分别更好地理解和预测数据的结果和趋势?数据分析 —我们能否确定数据中的任何共线性或其他关系,从而更好地为我们的预测提供信息?预测–哪些模型和特性对我们开发准确的预测最有用?我们关注团队还是个人的统计数据?
在我们进入工作流程的本质之前,让我们花点时间回顾和了解在这个特定主题上所做的其他工作。首先,2013 年来自威斯康星大学麦迪逊分校的雷纳托·托雷斯着手完成与我们类似的目标,并使用不同的机器学习模型预测 NBA 数据的具体赛季结果。他使用了我们项目中的多种技术,主要是要素约简,以消除可用数据中的多重共线性,还探索了不同的模型,以探索那些具有最高精度的模型。像我们的项目一样,他选择的功能包括得分,但不像我们的项目特别关注主场和客场的输赢百分比。(我们将在后面探讨我们的特征分析。)
之前已经有很多关于这方面的精彩工作,可以在这里阅读:
程,葛【张,】振宇&凯班贝,摩西&纳赛尔,金布威。(2016).基于最大熵原理预测 NBA 季后赛结果。
琼斯,埃里。(2016)预测 NBA 比赛结果。北达科他州立大学。
法亚德,亚历山大。建立我的第一个机器学习模型| NBA 预测算法。走向数据科学。
NBA 的完整历史。五三八。
通过我们的研究,我们发现公布的最佳模型的预测准确率为 74.1%(针对季后赛结果),其他大多数模型的准确率上限在 66-72%之间。大多数已发表的研究也集中在预测季后赛得分上——这可能会导致有偏见的数据:季后赛球队在整个常规赛的一些数据上更一致,因此季后赛比赛预期结果可能会经历更少的变化。至关重要的是,请注意 NBA 整个赛季的失望率平均为 32.1%。在季后赛中,冷门率——由常规赛胜率较低的球队定义——下降到 22% (这实际上意味着大多数 NBA 季后赛预测模型表现不佳)。因为我们的项目旨在预测任何 NBA 比赛的结果,并且是季后赛不可知的,所以我们希望开发一个可以达到并有望超过 67.9%准确率的模型,并在这样做时预测一些冷门。
请随意点击这里的或者在 GitHub 上查看我们的文件。
我们从 Synergy Sports 的可用信息中搜集数据,该网站有自 2008-2009 赛季以来每场比赛的极其详细的球队和球员数据。由于速度限制(因为我们必须查询 12 个赛季的每场比赛的结果),刮花了几天时间,最初被编译成 JSON 格式,最后保存为 csv 文件。
**作者注:**我们获得了宾夕法尼亚大学资助的 Synergy Sports 的数据。不幸的是,我们无权向公众公开我们的数据。然而,我们已经编辑了一个备选数据集的列表,通过它我们可以复制和改进我们的数据:
【https://www.basketball-reference.com/leagues】
https://www.kaggle.com/datasets/nathanlauga/nba-games
https://www.kaggle.com/datasets/drgilermo/nba-players-stats
我们现在把每个 NBA 赛季的球员和球队数据都保存为单独的 csv 文件。我们的下一步是读入所有这些数据,并将其组合成两个大的数据帧:一个包含过去 12 个赛季的球员统计数据,另一个包含球队统计数据。创建后,我们将清理数据帧,以删除无效的统计数据(负分钟)和对我们没什么用的列(例如,收取/承诺的费用)。
然后,我们将这些新的数据帧保存到以下 csv 文件中,这样我们(和您)就可以在重启笔记本运行时,跳过采集和清理数据的费力而冗长的步骤:
这是有趣的事情开始的地方。我们的主要目标是让所有可用的数据都可以理解:整支球队每场比赛的篮板对我们没有太大帮助,除非我们可以在更高层次的分析中使用这些数据,引导我们达到最终目标——预测输赢。为此,我们试图创建五个不同的特征,用于了解我们的团队在每个赛季如何进步和退步:
Elo 评级
这也许是现有的比较 NBA 球队实力和多个赛季表现的最佳方法。Elo 评级的计算方法很简单:所有球队都以 1500 分的中值开始,并根据每场比赛的最终得分以及比赛地点来加分或减分,分数差异、冷门和位置是权重。本质上,这是一个更复杂的输赢记录。大多数 NBA 预测模型并不考虑 Elo 评分,而是将一个简单的输赢记录与其他几个统计数据结合起来。我们希望使用 Elo 来恰当地衡量质量上的成功(和失败),同时也认识到并非所有的团队都生来平等。
确切的公式如下:
如果ᵄ;_ᵅ;是一支球队当前的 Elo 等级,那么它在打完下一场比赛后的 Elo 等级定义如下:
我们计算每支球队和每场比赛的 ELO,以及我们拥有的每个赛季的数据。
在这里, S_team 是一个状态变量:如果团队赢了就 1,如果团队输了就 0。E_team 表示球队的期望获胜概率,表示为:
k 是一个移动常数,取决于胜率和 Elo 评分的差异:
同样重要的是要注意,Elo 评级会随着赛季的变化而变化(因为所有的球队都不是生来平等的,优秀的球队往往会保持优秀,或者至少会逐渐衰落——很少会出现球队掉队或掉队的情况)。如果 R 代表一个赛季中一支球队的最终 Elo,那么它在下一个赛季开始时的 Elo 评级大约为:
实际上,我们可以随着时间的推移查看这一指标,随机选择三支球队查看,并立即看到我们可以获得关于球队在整个赛季中的实力的关键见解:
在这里,我们实际上可以看到,Elo 收视率与球队在特定赛季的表现相当吻合:金州勇士队和克利夫兰队在 NBA 总决赛中出现和对决的年份很明显是他们 Elo 收视率的高峰。我们还可以看到当时被大多数篮球分析师广泛证实的事实:西部联盟比东部联盟更艰难——正如勇士队对骑士队的高质量胜利对 Elo 的影响所展示的那样。我们也可以看到这些球队在他们的冠军赛季后迅速下滑了多少,因为他们都遭受了名册损失和伤病。(图片由作者提供)
2.最近的团队表现(平均。最近 10 场比赛的统计数据)
这些都是不言而喻的,我们只是简单地看一下每支球队过去 10 场比赛的平均数据。为此,我们编写了一个简单的函数来计算给定球队的统计数据和 n 场比赛的滑动平均值:
在将这些数据保存到一个新的 dataframe 中之后,我们试图将每场比赛(包含主队和客场队的统计数据)按球队划分到自己的行中,这使我们能够更容易地分组和汇总球队统计数据,并简化了现有的功能。最后,我们添加了一个 win 状态变量列来包含我们项目中最关键的度量:赢和输。
3.最近的球员表现(平均。最近 10 场比赛的统计数据)
我们使用与上一节类似的方法创建我们的球员最近表现数据框架,这次是用个人球员而不是团队。这创造了一个每个球员在过去 10 场比赛中表现的数据框架。
4.球员赛季表现
我们还试图包括整个赛季的平均球员统计数据:与球队不同,球员自己会受伤或在轮换中摔倒,这对我们来说可能更重要的是了解球员在个人比赛中的表现如何与他们的平均水平保持一致。我们将在稍后的模型中使用它,看看它是否能在团队层面上实现准确的预测。
5.球员效率评分(PER)
至关重要的是,正如我们通过 Elo 评级对球队所做的那样,我们希望能够使用一种结合了看似不相关的统计数据的指标来相对化球员的表现。我们的希望是,我们可以使用 Hollinger 的球员效率评级来比较和预测球队球员的综合 PER 得分。在 NBA,球员很容易经历疯狂膨胀或缩小的统计数据(如每分钟得分),仅仅是凭借他们获得的上场时间,与替补球员或首发球员的比赛,比赛次数,甚至是异常表现。我们不想仅仅因为玩家的偏差能力而仅仅依赖他们的平均水平。PER 通过用上场时间的倒数对某些游戏中的统计数据进行加权来解决这个问题,它创建了一个相对于上场时间来定义玩家表现的指标。
因此,对于每个玩家,我们根据以下公式为给定游戏中的 PER 添加了一列:
PER = (FGM x 85.910 +抢断 x 53.897+3 PTM x 51.757+FTM x 46.845+盖帽 x 39.190 +进攻 _Reb x 39.190 +助攻 x 34.677 +防守 _Reb x 14.707 —犯规 x 17.174—FT _ Miss x 20.091—FG _ Miss x 39.190—至 x 53.897) x
我们的数据分析集中在使用 Elo 评级作为我们的测试指标。从本质上讲,我们能确信 Elo 与其他统计数据相关并正确汇总吗?此外,我们使用球队数据(Elo 评分)或平均球员数据(PER 评分)来预测比赛结果是否更合适?
首先,让我们探索一下 NBA 每个赛季 Elo 收视率的密度。这告诉我们整个联盟的均等水平:如果我们可以看到 Elo 评分接近正态分布,这将表明联盟的球队相对匹配。否则,我们会看到巨大的差距和“超级团队”的发展。
十二个赛季的联赛 Elo 密度。(图片由作者提供)
从联盟的角度来理解 Elo 评分,我们努力去看看 Elo 评分是如何与单个球队在其他数据上的表现相对照的。
首先,我们根据最近几场比赛的平均得分绘制随机球队的 Elo 分布图:
(图片由作者提供)
我们实际上可以从中看出,一支球队的平均得分与其 Elo 评级之间存在某种相关性——在一段时间内的比赛中,平均得分越高,Elo 评级似乎就越高。然而,我们还可以看到,Elo 也可能在类似的得分数字之间表现出较高的方差。因此,为了更好地了解 Elo 评分与得分的关系,我们检查了平均得分与整个联盟的赛季平均得分的对比情况——从那里我们可以确定得分是否提高了 ELO,前提是高分是相对于联盟的其他得分。为了做到这一点,让我们来看看同一支球队在同一赛季的表现,并绘制出该队相对于对手的得分分布图。
(图片由作者提供)
这证实了我们的怀疑,因为我们可以看到,当平均分数的分布大于其对手的平均分数,或者更集中在相同或更高的水平时,Elo 在这些赛季中更高。当分组接近一个相等或更小的值时,给定团队的那些赛季的 Elo 评级更低。因此,平均得分是一个单独的预测游戏结果的可靠决定因素,但当 相对于 时更好。这向我们证明了 Elo 比积分更能决定我们的胜率,因为它是一个相对的统计数据。
抛开团队统计数据,我们试图了解 Elo 对球员表现的追踪是否比团队表现更好。为了做到这一点,我们采用了一种类似的方法,用相同随机团队的平均得分来绘制 Elo 评级,这次用的是 PER。
(图片由作者提供)
从绘制的数据中,我们可以看到,与对手相比,总 PER 并没有显示出与 Elo 评级所确定的团队实力有任何关联。相反,得分转化得更好——这在某种程度上是有意义的,因为球员的效率不一定与得分最多相关联——与对手的得分是赢得比赛的决定性因素,因此会影响 Elo。
我们可以通过绘制相同赛季中奥兰多魔术队相对于其对手的平均和中值 PER 评级来进一步了解这一点,并发现球队平均或中值 PER 和球队实力之间几乎没有关系。
从这些和上面绘制的分布图中,我们看到平均 PER——虽然与整个赛季的 Elo 评分略有关联——通常很少向我们显示在与对手进行跟踪时,个人球员效率如何影响团队实力。(图片由作者提供)
PER 收视率中值显示,在整个赛季中,与 Elo 收视率的相关性甚至更小。在这里,我们可以观察到,在获胜赛季(2011-12),奥兰多魔术队在大多数比赛中的 PER 中位数都低于其对手,但他们却拥有近年来最高的 Elo 收视率和最佳战绩。(图片由作者提供)
从我们对相对化球队与聚合球员统计数据的所有分析中,我们清楚地看到,当预测 NBA 比赛结果时,我们的 Elo 评级及其决定因素将是训练我们模型的更好特征。
这里,我们的第一步是将数据分为要素和列。从我们的数据集中读取,一旦分割,我们就使用 sklearn 以 80:20 的比例将我们的数据随机分割成训练集和测试集。
我们旨在用来预测 NBA 比赛结果的第一个模型是逻辑回归模型。与线性回归模型不同,线性回归模型预测 0 和 1 之间(有时在 0 和 1 之外)的结果,逻辑回归模型旨在将预测分组为二元结果。因为我们预测的是赢和输,这种分类非常适合我们。
首先,我们使用一个简单的非参数化 LR 模型,使用 sklearn 将我们的团队统计数据和 Elo 评级作为参数:
在进行了一些超参数调优之后,我们发现使用 max_iter=131 和 verbose=2 将我们的初始测试精度略微提高到了 66.95%。对于一个非参数化的模型来说绝对不坏,非常接近我们期望的预测精度。然而,我们试图看看我们是否可以更好地调整我们的超参数,以提高我们的整体准确性。本质上,我们将在我们的数据上尝试可能的超参数的许多组合,以给出我们的 LR 模型的绝对最佳权重。
我们通过交叉验证实现了这一点:因为我们对可能要使用的参数只有一个模糊的概念,所以我们最好的方法是缩小搜索范围,并对每个超参数的大范围值进行评估。
使用 RandomizedSearchCV,我们在 2 * 4 * 5 * 11 * 3 * 3 * 5 * 3 =59400个可能的设置中进行搜索——因此最有效的方法是随机抽取值。
使用随机样本的最佳参数值运行我们的模型实际上将我们模型的准确性降低到了 66.27%,这向我们表明,虽然随机采样帮助我们缩小了分布内的超参数调整范围,但我们必须使用 GridSearchCV 显式检查所有组合。
在这种情况下,实现 GridSearch 只是略微提高了 LR 模型的准确性。
我们希望实现的第二个模型是一个 RandomForestClassifier ,它可以有效地用于回归和分类。在这种情况下,我们将会看到分类器是否能够构建一个合适的决策树来从给定的团队统计数据中确定胜利。
很快,我们得到 RandomForestClassifier 达到了 66.95%的初始准确率,这也是非常好的。像 LR 模型一样,我们试图调整超参数以给出更准确的结果——首先使用 RandomizedSearchCV。
与 LR 模型不同,我们发现随机化搜索改善了我们的超参数调整,使我们获得了 67.15%的更好的准确性。
以与上面类似的方式运行 GridSearchCV,我们还试图明确测试 2 * 1 * 6 * 2 * 3 * 3 * 5 = 1080 个设置组合,而不是随机抽样设置分布。GridSearch 也给了我们一个相对于基础 RandomForestClassifier 的改进,准确率达到了 67.11%。
总的来说,当对团队统计数据和 Elo 评级运行 LinearRegression 和 RandomForestClassifier 时,我们实现了**66.95%–67.15%**的胜利预测准确率。对于篮球比赛来说,正如我们之前所确定的,实际结果与预测结果相差很大,这是一个重要的结果。
然后我们采取了不同的方法来预测比赛的结果,看看我们是否能取得更好的表现。使用我们收集的个人玩家统计数据的更大数据集,我们将训练一个模型来预测玩家在给定游戏中会得到多少分。我们将根据我们试图预测的比赛之前球员的平均赛季统计数据以及他们在过去 10 场比赛中的平均表现来预测这一点。我们已经在上面的特征工程部分创建了这些数据。我们也将在预测中使用 Elo 等级,因为对手的等级越高,玩家得到的分数就越少。一旦我们有了这个模型,我们就可以通过合计每个球员的预测得分来预测一个球队在一场比赛中会得多少分。有了这些信息,我们就能预测哪一队得分更多,从而赢得比赛。
在运行模型之前,我们需要稍微清理一下数据。对于该数据集中的一些比赛,我们有一个队的球员的统计数据,但没有另一个队的统计数据,通常只包括另一个队在赛季中的第一场比赛。因此,我们将从数据集中删除所有这些游戏。
与上述游戏不同,我们不能将数据随机分为训练集和测试集。我们希望使用单个球员的统计数据来预测一支球队的最终得分,因此我们必须让所有球员一起参加同一场比赛。为了做到这一点,我们将把我们的训练集和测试集按游戏分开,这样玩同一个游戏的玩家就可以呆在一起。大约 80%的游戏将在训练集中进行,20%将在测试集中进行:
对于玩家得分,我们将使用线性回归模型,而不是使用逻辑回归模型,因为我们希望预测一系列可能的值(得分),而不是简单地预测输赢。我们对所有球员的 RMSE(均方根误差)是 5.56,或者相当于每个球员在他们的平均水平上完成或错过了大约 2-3 场比赛。
在测试集上,我们将每支球队每场比赛的预测得分分组,并与他们的实际得分数字进行比较。根据预测得分计算获胜游戏的数量与获胜者的数量,我们得到的比率为 1483/2528,或准确率为 58.66% 。很明显,正如我们之前在观察球队与对手的 PER 分布时所认识到的,球员的总体表现变化太大,无法准确预测比赛的结果,尤其是与球队的表现相比,球队的表现在比赛中往往更加一致。
作为狂热的 NBA 球迷,我们认为创建一个模型来预测 NBA 比赛的结果将是一个有趣的项目,并教会了我们许多关于构建职业体育比赛结果的分类器的知识。我们能够在这个项目中利用我们在大数据分析课上学到的许多概念,包括刮擦、数据清理、特征分析、构建模型和超参数调整,我们要感谢 Ives 教授在整个学期的教学中所做的出色工作。
我们的随机森林回归模型,通过 RandomSearchCV 优化参数,给我们最高的测试精度为 67.15%。略高于 Logistic 回归模型,也远高于基于单个玩家统计的线性回归模型。使用 GridSearchCV 和 RandomizedSearchCV 优化参数既耗时又计算量大,而且对测试精度的影响很小。如果我们有更多的时间,我们可能会花更少的时间优化参数,花更多的时间选择模型。
最好的 NBA 比赛预测模型仅在大约 70%的时间内准确预测获胜者,因此我们的逻辑回归模型和随机森林分类器都非常接近当前存在的预测上限。如果我们有更多的时间,我们将探索其他模型,看看我们能得到多高的测试准确度。这些候选方法包括 SGD 分类器、线性判别分析、卷积网络或朴素贝叶斯分类器。
希望你喜欢阅读我们的作品,就像我们喜欢制作它一样——并且从中学到一些东西。
原文:https://towardsdatascience.com/predicting-the-probability-of-scoring-a-basket-in-the-nba-using-gradient-boosted-trees-c157390fb17?source=collection_archive---------14-----------------------
在我关于 NBA 机器学习的第一篇博客中,我写了职业体育如何产生大量数据,打开了一条广阔的可能性之路。我们可以超越观众的感知,更深入地了解篮球运动的内部运作。
有了尽可能多的可用数据,数据科学家可以在他们创建的模型和用于创建模型的数据方面发挥创造力。这就引出了这篇博文。首先,让我们提出一个奇怪的问题——并使用机器学习来看看我们是否能接近理性的答案:
看看这个博客的配套视频:【https://youtu.be/Lxfsvw7rHgU
由 Alexander Schimmeck 在 Unsplash 上拍摄
我们想使用的信息会给我们一个强烈的暗示,詹姆斯是否会得分。撰写本文时,勒布朗詹姆斯职业生涯投篮命中率 50.4%。粗略地说,这意味着如果我们回顾他的整个职业生涯,可以追溯到 2003 年,每次他试图投篮,他得分的几率就像扔硬币一样。如果我们手上有 100 万美元,那就不好了。我们需要让天平向我们这边倾斜。
NBA 中的天才有各种各样的类型,其中一个例子就是看到不同的球员有不同的打球风格和投篮偏好。这方面的一些例子包括:
右手对左手射击射击远程对中距离在压力下表现良好(例如在势均力敌的比赛的最后几秒)
信不信由你,这些信息,甚至更多,都是从 NBA 的统计数据中获取的。我们可以利用这些数据,看看如何找到下注的正确篮子。说到这里,我要提到的是,此后在这个博客中引用的所有数据都来自 https://www.basketball-reference.com/。
为了不使事情变得过于复杂,我们将只坚持两个标准来构建我们的模型:射击尝试的位置和游戏的**阶段。**我们的模型将使用勒布朗·詹姆斯职业生涯投篮数据中的这些特征:
尝试击球的 XY 坐标(即球场上的位置)运动员到篮筐的距离射击发生时该季度的剩余时间不管是否在半场结束前尝试投篮不管镜头是否在第四节
最后两个特性是为了给游戏的舞台增加更多的背景。特别是在势均力敌的比赛中,那些最后一分钟或最后一秒钟的投篮会极大地影响比赛的结果,我们希望抓住这一点。这意味着我们假设游戏时间结束时得分的篮子更有价值,玩家会更有动力得分。
我们将尝试使用梯度增强树来回答这个问题。这是一种用于监督机器学习的决策树。
决策树是一个广泛使用的算法家族,从输入特征中学习“数学流程图”。梯度提升树是一种变体,其中决策树被连续构建,并且每棵树都试图纠正前一棵树的错误。一棵树可能看起来像这样:
可用于确定得分可能性的众多决策树之一。用 GraphViz 可视化。
上图中,我们可以看到一棵树,它的值是从输入要素中获取的。它向我们展示了每个值如何让我们更接近树的决策。“样本”字段告诉我们有多少样本(或篮子尝试)属于这一类别。“值”字段(以及颜色阴影的暗度)告诉我们这棵树的更重要的指标。使用的总树数将等于下面描述的 n_estimators 参数。
在这里了解更多关于梯度增强的信息:梯度增强解释【演示】(arogozhnikov.github.io
我们将花时间在我们的树中调整两个超参数:
n_estimators :要执行的升压阶段数(换句话说,按顺序排列的树的数量;我们从一棵树到下一棵树“推进”或学习)learning _ rate:每棵树从上一棵树学习的强度
在这个实验中,我们希望该算法能够学习球场上的“最佳投篮点”,以及标记最佳投篮时间的窗口。它可能看起来像“在比赛还剩 3 分 26 秒时,短距离投篮将有 73%的机会得分。”
我喜欢决策树的一点是,它们在概念和分析上更容易理解。我们在寻找投篮命中率最高的机会。这将在树的某个节点,并且存在我们的特征集的某种组合,它将导航我们到那里。
在这篇博客中,我们将花更多的时间讨论方法和结果,而不是代码设置。如果你对源代码感兴趣,我有一个 GitHub 库链接在这个博客的末尾。
勒布朗·詹姆斯在 2021-22 赛季的投篮次数比任何现役球员都多。这对我们来说是一个好消息,因为我们可以使用他所有得分的篮筐和他所有错过的篮筐来训练一个模型,以了解他在哪里和什么时候表现最好。我们使用的特征对于每次尝试都是已知的,包括尝试是否成功。为了训练以下模型,我采用了标准的训练-测试-分割,其中 75%的数据用于训练,25%用于测试。重要的是,在分割数据之前,先对数据进行洗牌,以避免我们的模型偏向于只从詹姆斯职业生涯的前 3/4 学习。
接下来,为了最大化成功的可能性,我进行了一个简短的实验来观察学习率和 n 估计量的影响。这有助于选择最佳模型。
我使用 0.01 到 0.1 之间的学习率,步长为 0.01。准确度迅速上升,然后逐渐下降,一直保持在 2%的范围内。最高准确率为 64.619%,学习率为 0.02。
调整 learning_rate (lr)超级参数
接下来,我调整了 n_estimators 参数。准确率稍高,达到 64.733%。这是使用 learning_rate=0.02 找到的。
调整 n_estimators 超参数
随着我们的模型准备好行动,我们可以向它输入测试数据,以检查勒布朗在给定他的球场位置和比赛时间的情况下投篮的概率。我应该注意到,大约 64%的预测准确率是勒布朗所有投篮(即用于训练模型的投篮)的平均预测率。这意味着有特定的投篮场景,在这些场景中,模型可以更准确地预测一个篮筐是否得分。我们可以利用这些场景赢得现金奖励。
有成千上万的样本可供选择,我发现最有见地的方法是看他投篮的上百分位数。换句话说,我们可以规划出勒布朗至少有 70%的可能性投篮得分的投篮场景:
勒布朗·詹姆斯的 70%投篮命中率(坐标轴是 X-Y 球场坐标)
没什么好惊讶的。勒布朗身高 6 英尺 9 英寸,体重 250 磅。在他的职业生涯中,他很少直接冲向篮筐,从干净利落的上篮到高空扣篮。他最可靠的投篮应该就在篮筐下面。蓝色斑点由 609 个独特的镜头组成。有趣的是,这些镜头只发生在比赛时间还剩 1 分 30 秒到 5 分 07 秒的时候。
因此,我们现在有了一个答案:尽管勒布朗·詹姆斯的投篮命中率为 50.4%,但如果我们为勒布朗·詹姆斯的投篮投入 100 万美元,在比赛还剩 1 分 30 秒至 5 分 07 秒的时候,我们有 70%的机会在篮筐下成功。
其他玩家呢?
我们可以将这个算法应用于联盟中的任何球员。最理想的是那些更有得分经验的人。让我们简单看看另外两位高产射手:凯文·杜兰特和斯蒂芬·库里。
凯文·杜兰特 70%的投篮命中率
凯文·杜兰特和詹姆斯有着相似的身材,因此在篮筐下轻松得分。然而,众所周知,他也是“T2”【easy money sniper】的远射手。如果你对凯文·杜兰特下同样的赌注,你会有更多的位置可供选择,你会希望他的投篮发生在比赛还剩 2.8 秒到 5 分 33 秒之间。说说离合器吧!
斯蒂芬·库里 70%的投篮命中率(第四节橙色部分)
如果你碰巧跳过这篇博客中的文字,只看这些情节,你仍然会看到斯蒂芬·库里在投篮方面独树一帜。上面标绘的是库里的 613 次投篮。令我惊讶的是,斯蒂芬·库里的职业生涯投篮命中率比勒布朗·詹姆斯还要低,只有 47.6%。那么为什么我们可以从几乎任何地方选择斯蒂芬库里的镜头呢?
因为斯蒂芬·库里可以从任何地方投篮。
他的投篮不像詹姆斯那样集中。他简直是全能的,几乎可以在球场的任何地方落地。如果你想把赌注下在库里身上,请确保比赛还剩 0.8 秒到 11 分 53 秒。这实际上是整个游戏中的任何时间!我还用橙色标记了可选的第四季度照片。鉴于他在第四节的表现仍然覆盖了整个球场,库里已经成为这项运动有史以来最可靠的射手之一。
每一个伟大的机器学习模型都有其局限性。如果我们在这里谈论职业篮球比赛,我们应该承认,在我们的模型中有许多量化和非量化的变量没有考虑到,这些变量可能会影响比赛的结果或投篮的结果。一些例子包括:
有争议的射门:在一场比赛中,一名球员可以尝试在完全无人防守的情况下射门,或者有多达 5 名防守队员防守。显然,更多的防守者意味着更强硬的投篮和更低的得分概率。受伤历史:手或脚受伤的球员可能不愿意从一侧或另一侧投篮,即使这是他们占优势的一侧。他们也可能选择避免激烈的接触,这很可能发生在篮下(有些仍然盛行,但是)。常规赛与季后赛:虽然这个博客中描述的模型考虑了常规赛和季后赛中的投篮,但数据本身没有明确的区别。众所周知,一些球员在 NBA 季后赛中提升了他们的比赛水平,或者总体上打了更多的时间,这可能会影响他们在比赛中的表现,无论是好是坏。
为了了解球员在压力下投篮时的心态,还需要进一步的研究。我们可以额外考虑球员的生理状况,比如他们能跳多高,他们手腕和肩膀的角度,或者他们对球网的可见度。然而,这一数据更为稀缺。
在这个实验的概念验证阶段,我向我的推特粉丝分享了一个视频,显示勒布朗·詹姆斯实际上有高达 98%的可能性投篮。纯粹从数字的角度来看,它是 可能为概率高。一个场景可能是这样的:
众所周知,沙奎尔·奥尼尔在他 19 年的联盟生涯中几乎从来没有投过三分球。在总共 22 次尝试中,他只有一次得分。相反,他 22 次出手都得了分,而且他的三分球命中率接近 100%。纵观奥尼尔的所有尝试,他尝试了超过 19000 次投篮,其中大部分是两分投篮,平均得分率为 58.3%。如果他的短程两分篮成功率为 58.3%,而他的远程三分尝试成功率为 100%,你会期望我们的模型将远程三分球视为有效的保证投篮。这是模型偏差,,因为我们高估了进行三分尝试的真实可能性,这被广泛认为是更困难的投篮。
另一种情况,正如我的视频中的情况,是过度适应训练数据的结果。这突出了调整超参数的重要性,以选择能够在专业运动环境中执行的适当模型。NBA 的竞争性质可能会导致像这样的高概率永远不会见天日。
为了重述这篇博客,我们报道了 NBA 球员如何有不同的得分可能性的时空分析。使用梯度增强树,我创建了一个模型,该模型将考虑球员在球场上的位置以及本季度的剩余时间,以预测相应组合产生得分投篮尝试的可能性。在分析中,我们发现像勒布朗·詹姆斯这样的球员经常在接近篮筐的地方投篮,像斯蒂芬·库里这样的球员甚至比我们想象的更好,几乎在任何时间,任何地方都能可靠地投篮。
希望你在博客里学到了新的东西,学到了有用的东西。如果您对查看源代码感兴趣,可以在这里找到我的 GitHub repo:
ChristopheBrown/nba-ml:所有 nba 机器学习演示的主存储库(github.com)
原文:https://towardsdatascience.com/predicting-ticket-selling-artists-using-spotify-audio-features-and-pollstar-data-2e231dec4713?source=collection_archive---------27-----------------------
作者图片
我们为什么关心?
作为一名人才购买者和音乐会推广者,预测门票销售对我来说是一项日常任务。票房记录、流媒体数量、社交媒体关注者数量是音乐行业用来决定艺术家和节目是否值得投资的常用指标。问题是:如果一个艺术家没有票房历史,没有活跃的社交媒体账户,或者没有流媒体历史,那该怎么办?还有其他我们可以考虑的指标吗?我们能通过一个艺术家的音频特征而不是流媒体数量来预测他的销售潜力吗?
项目
这个项目的目标是通过使用 Spotify 音频功能来预测一个艺术家是否有潜力成为顶级售票艺术家。这个项目包括四个部分:(Spotify 数据的数据分析(2)卖票艺人和非卖票艺人的特征比较(3)音乐流派分析(4)机器学习模型。
数据来源
这个项目中使用的数据集来自两个来源:Spotify 和 Pollstar 。Pollstar 是音乐会行业的贸易出版物。我从 Pollstar 获得的数据集包括 834 位艺术家的每周票房记录,包括平均票房总收入、平均售出门票、平均票价等。从 2017 年-2020 年初。
Pollstar 数据集
从 Kaggle 获得的两个 Spotify 数据集包含(1)1921 年至 2020 年间发布的 16 万多首歌曲的音频特征和(2)每位艺术家的音乐流派。
Spotify 数据的数据分析
了解音乐的趋势可以帮助投资者评估并引导他们更好地投资音乐会行业。因此,我决定首先只对 Spotify 数据集进行数据分析,以探索每个音频特征之间的关系。有关每个音频特性的定义,请在此处查看。
音频特征相关矩阵
相关图显示,年份与流行度、能量与响度以及能量与声音高度相关。
我对每个音频特性如何随时间变化很感兴趣,所以我创建了一些折线图来检查特定时代是否有任何趋势。
从图表上看,似乎一首歌越新,受欢迎程度越高;然而,请注意,Spotify 计算其受欢迎程度的方式不仅基于总流媒体数量,还基于歌曲最近的播放次数。一些歌曲可能有较高的流计数,但最近没有播放太多。在这种情况下,受欢迎程度可能会下降。所以,我不会把新歌比老歌流行的结论简单化。
从 1935 年到 1950 年,可跳舞性显著下降,1950 年后逐渐上升。
艺术家制作越来越少的原声和器乐曲目。
现在的音乐比以前更响亮,更有活力。
1950 年后的歌曲比 1950 年前的歌曲口语词少得多;然而,2000 年后,歌曲中的口语单词开始增加。赛道的活跃度会有波动,但总的来说,活跃度会随着时间的推移越来越低。
积极的音乐氛围在 1940 年后显著下降,在 1950 年左右开始上升,但在 2000 年后又开始下降。20 世纪 60 年代后,歌曲的时长显著增加,但在 2010 年后开始减少。
1950 年后,曲目的节奏越来越快。2000 年后露骨歌词明显增多。非常有趣的是,在 2000 年后的很短时间内,显式轨迹增加了,这是最近才发生的。我很好奇显性和其他音频特征之间的关系。我发现,虽然显性歌曲只占总曲目的 9%,但这些歌曲的平均受欢迎程度比非显性歌曲高 55%。此外,明确的轨道比非明确的歌曲有更高的可舞性和能量。
在探索了年份和音频特征之间的关系后,可以看到图表中显示的一些转折点出现在同一时间段。我想知道这些转折点是否与社会环境/背景有关。以下是我对此的想法:
战前音乐 vs 战后音乐
一些音频特征在 1940-1950 年间发生了显著的变化,例如可跳舞性、速度、响度和能量的下降。这种变化是由那段时间的战争或其他社会事件引起的吗?
说唱音乐的兴起
该表按流派降序显示了不同年份的显性歌曲数量,2000 年以后的显性歌曲多为 hip hop 和 rap 音乐。露骨歌词的增加与嘻哈音乐的兴起有关吗?
流媒体时代
一首歌时长的缩短很可能与流媒体时代有关。流媒体服务对艺术家创作音乐和获得报酬的方式产生了巨大影响。这种影响使得艺术家创作出能在短时间内吸引听众注意力的作品。我已经开始怀疑抖音是否会让音乐变得更短。
顶级卖票艺人与其他艺人的特征对比
预处理
在从 Spotify 数据中获得一些对音乐趋势的见解后,我想探讨一下顶级售票艺术家和其他艺术家之间每个音频功能的差异。经过一些数据清理后,我在艺术家栏上合并了 Spotify 数据集和 Pollstar 数据集。最初包含在 Pollstar 数据集中的艺术家将被分配到下面提到的 top_artist 列中为“是”,其余的艺术家将为“否”。
特色工程
我添加了以下用于探索性数据分析的列。
top_artists: YES 表示某个艺术家在 Pollstar 数据集中;否则,没有。active_years:一个艺术家已经发行了多少年的歌曲。发行数量:一位艺术家在 Spotify 上有多少首歌曲。duration_minutes:以毫秒为单位的音轨时长转换为以分钟为单位的时长([’ duration _ ms ']* 1.66666666667 e-5)。
如前所述,我的目标是通过艺术家的音频特征来预测他们的售票潜力,所以我根据每个艺术家聚合了数据集,以获得每个特征的平均数和标准差。
以下是顶级卖票艺人和其他艺人的特征对比:
顶级卖票艺人的曲目,人气更高,能量更大,声学更弱。
顶级卖票艺术家的曲目速度稍快,声音更大,乐器演奏更少。
顶级卖票艺人的曲目稍长,也不那么正面。
平均而言,顶级卖票艺人在市场上活跃的时间更长。顶级卖票艺人在市场上活跃了 14 年,相比之下其他艺人只有 6 年。顶级卖座艺人平均发行 34 首歌曲,相比之下,其他艺人平均发行 7 首。
根据这个图表,平均而言,顶级卖票艺人在 Spotify 上的受欢迎程度更高。然而,无论艺术家是否销售,发布露骨内容的艺术家比在 Spotify 上发布非露骨内容的艺术家更受欢迎。
音乐流派分析
总的来说,这些年涌现出越来越多的音乐流派,但我更感兴趣的是顶级卖票艺人演奏的顶级音乐流派。请注意,我并没有用 Spotify 的“流行度”来定义哪些流派更受欢迎;相反,我用每个流派的曲目数量来定义不同年份流行的音乐流派。Spotify 上的流行度功能定义了每首歌曲的流行度,但在某些情况下,高流行度歌曲的风格可能不会得到广泛认可。这就是为什么我宁愿用制作了多少首歌曲来定义每个流派的受欢迎程度,而不是用 Spotify 功能来定义受欢迎程度。
访问此处查看交互式仪表盘!
上面的互动图显示了顶尖艺术家的音乐流派在不同的年代演奏。你还可以看到音乐流派的流行程度是如何随着时间的推移而变化的。摇滚乐在 70 年代和 80 年代统治着这个行业。然而,90 年代以后,随着流行音乐和嘻哈音乐开始主导市场,摇滚乐越来越少了。韩国流行音乐和拉丁音乐最近也开始获得认可。
我在用于机器学习的数据集中没有包括音乐流派。在这个数据集中有大约 1000 种不同的音乐流派,所以要对这些流派进行重新分类需要大量的时间和工作。这甚至可能是一个单独的项目,所以我期待着在未来从事这项工作,并看到将流派添加到我的机器学习数据集中的不同结果。
机器学习模型
我用于训练模型的这个数据集是一个不平衡数据集。该数据集包括我们从 Pollstar 数据集了解到的 834 位顶级售票艺术家,以及其他 18851 位非售票艺术家。
数据插补
标准差列中有一些空值。标准差栏中的空值仅仅意味着一些艺术家在 Spotify 上只有一个音轨,因此无法计算每个音频特征的标准差。因此,我用 0 替换了空值。我还虚拟了目标变量(1: top_artist,0: non top_artist)。
型号
在这个项目中使用了两个模型:(1)随机森林分类器(2)逻辑回归。
随机森林分类器
Auc_roc 评分是评价模型性能的指标之一。然而,由于这是一个不平衡的数据集,auc_roc 分数单独可能无法很好地衡量性能。在这种情况下,我会考虑精确度和召回率。精确度和召回率分别解释了正确预测的比例和正确预测目标类的程度。我在进行随机森林分类器时运行了几次 GridSearch,并将其缩小到三个结果。这三种模型之间的得分差异不大,但假阳性率和假阴性率存在差异。
从左至右:型号 1、型号 2、型号 3
型号 1:
交叉验证得分(auc_roc): 0.92训练分数(auc-roc): 0.98测试得分(auc-roc): 0.91假阳性率:0.07假阴性率:0.33
型号 2:
交叉验证得分(auc_roc): 0.92训练分数(auc-roc): 0.99测试分数(auc-roc): 0.90假阳性率:0.04假阴性率:0.45
模型 3:
交叉验证得分(auc_roc): 0.91训练分数(auc-roc): 0.99测试分数(auc-roc): 0.90假阳性率:0.03假阴性率:0.55
特征重要性
这三个模型的特征重要性也是相似的。发行数量、平均受欢迎程度、活跃年限是进行预测时的三大指标。这三个特征的得分也远远高于其他特征。
逻辑回归
逻辑回归的性能不如随机森林分类器,所以我们不考虑这个模型。
我建议选择精度最高的模型作为我们的最终模型。在这种情况下,它将是来自随机森林分类器的模型 3。由于预测一个非卖票艺人成为顶级卖票艺人的成本高于预测一个卖票艺人成为非卖票艺人的成本,我们应该真正关注我们的模型能够多精确地检测到卖票艺人。例如,你会期望为顶级卖票艺术家的演唱会或巡演在场地、设备、员工、招待等方面花更多的钱;然而,如果模型作出了错误的预测,很可能会失去你投资的钱,因为门票销售不会像你预期的那么好。
结论
音乐对社会环境和语境很敏感。虽然我们有先进的技术来帮助我们预测艺术家的表现,但评估你的艺术家是否符合当前的社会环境或背景与模型分数一样重要,甚至更重要。
发行数量、平均受欢迎程度、活跃年份是我们模型中最重要的特征。基于我们的探索性数据分析,这三个特征也显示了卖票艺人与其他艺人的显著差异。然而,在我的探索性分析中,显式是一个非常明显的特征,显式歌词自 2000 年以来一直在显著增加,并继续增长,但它没有显示在特征重要性图中。一个可能的解释是,露骨的内容在两组艺术家中都更受欢迎,所以这个特征不足以预测艺术家的票房表现。然而,由于这是我们探索性数据分析中的一个明显特征,我也会考虑这个特征。
在这个项目中,第一类错误(假阳性)的成本高于第二类错误(假阴性),选择准确率最高的模型将有助于我们避免第一类错误。
音乐流派可以作为投资者了解市场当前趋势的一个指标。根据我们的分析,摇滚乐不像以前那样受欢迎了。相反,流行音乐和嘻哈音乐最近开始主导音乐产业。投资嘻哈歌手可能比投资摇滚歌手风险更低。
音乐行业是一个微妙的行业,与我们的日常生活和社会息息相关。在我看来,选择投资对象比我们想象的要复杂得多。这个项目对我自己的音乐商业之旅是一个很好的开始,也希望对任何对这个行业感兴趣的人有所帮助。
来源
Yamac Eren Ay , Spotify 数据集 1921–2020,160k+曲目,(2020),Kaggle。演唱会脉动2017–2020,Pollstar。
原文:https://towardsdatascience.com/predicting-volcanic-eruption-with-tsfresh-lightgbm-8fa119774458?source=collection_archive---------9-----------------------
肖恩·阿佩尔在 Unsplash 上的照片
火山爆发可能夺去数万人的生命,摧毁数百万美元的基础设施,并造成大量的不便。如果科学家可以像预测天气一样预测火山爆发会怎么样?这就是由 INGV 国家地理和火山研究所组织的 INGV 火山爆发预测 Kaggle 竞赛的目的。
我与 tsfresh 和 lightGBM 一起为这场比赛创建了一个简单的解决方案,它在比赛的公共排行榜上排名第 18 位。在这篇文章中,我想详细描述我的解决方案。我还清理并记录了我的竞赛代码,作为 Kaggle 上的公共内核。您可以通过下面的链接查看本文的完整代码。
https://www.kaggle.com/ekhtiar/18th-place-predicting-eruption-full-tutorial
如果您正从多元时间序列数据开始,我希望阅读这篇文章能对您的以下两个主题有所帮助:
自动生成多元时间序列数据的特征。为时间序列预测设计鲁棒的机器学习模型。
时序数据的特征生成可能非常耗时。然而,我们想要为时间序列数据生成的许多技术/特征是众所周知的和标准化的。使用 tsfresh,您可以毫不费力地自动计算大量这些已知的时间序列特征。它甚至有内置的方法来评估生成的要素的要素重要性。整个项目是开源的,你可以在 GitHub 上查看回购。
https://github.com/blue-yonder/tsfresh
使用 tsfresh 相当简单。API 非常干净,你只需要从他们详尽的可用特性列表中描述你想要的特性,然后让 tsfresh 提取它们。然而,在探索的开始,不知道你想要的那种特性是非常普遍的。所以 tsfresh 也提供了预构建的特征提取设置。我将在下面描述其中的一些:
comprehensive fc parameters:用于处理所有可用的时间序列特性。当您不知道需要哪些功能时,这很有用。
MinimalFCParameters :包含一组非常小且基本的时序特征(最小值、最大值、标准差等)。对于在启动管道之前设置快速测试非常有用。
efficient FCS parameters:包含所有计算时间不高的特性。如果您有一个非常大的数据集,并且没有办法处理一组完整的要素,这将非常有用。
以下代码片段说明了如何使用这些设置之一来提取数据帧上的时间序列要素。
一旦处理了足够的数据,就可以应用不同的技术来理解特性的重要性。一旦知道了想要的要素,就可以“手写”想要从数据集中提取的设置。还有一个方便的技巧,使用 from_columns 函数从列名到设置。下面是如何工作的代码片段。
在这次比赛的情况下,我首先用 ComprehensiveFCParameters 处理了训练数据集。然后,我删除了高度相关和准常数的列,并生成定制设置来处理测试集。下一节将给出更多的细节。注意,lightGBM 不会接受由 tsfresh 生成的列名,因为它们通常带有减号(-)。你必须写一个小函数来匹配两者之间的名字。
这项比赛提供了十分钟的地震传感器读数和每一段的爆发时间。在训练数据集中,我们有 4231 个片段,在测试数据集中,我们有 4520 个片段。我们需要预测每段测试数据的爆发时间。对于每个片段,我们有 60,000 个数据点(10 分钟);所以我们有高质量和高频率的数据。
由于一些特征计算量很大,对于每个片段,我将数据点分成 6 批(每批 10,000 个数据点)。我也可以对数据点的总数进行下采样,这样更符合常规,但我想采用非常规方法。
图:数据处理流程(图片作者提供)
目前,我们的数据集有 2854 个要素。首先,我处理了训练数据集的所有可能特征(ComprehensiveFCParameters)。这产生了近 8000 个特征。然后,我删除了高度相关的列和准常数特征。这使我们的特征下降到 2854。我还应用了一个递归的特性排除法来选择前 501 个特性(500 似乎是一个太好的数字了)。这些列在此笔记本中是硬编码的。完整的数据集也作为公共数据集上传到 Kaggle 上,您可以通过以下链接查看:
https://www.kaggle.com/ekhtiar/ingv-parquet
为了预测火山爆发的时间,我使用了基于树的学习算法和 lightGBM (LGBM)框架。它是 Kaggle 上许多人的首选框架,也是我的起点。起初,我使用了一个使用顶级特性的普通 lightGBM 模型;它产生了不错的结果。从这里开始,改善我的结果的最常见的方法可能是用算法创建更多的模型,并对结果进行平均。然而,在现实生产模型中,多种模型的混合很难管理。因此,我决定做一些稍微不同的事情,而不是混合多个模型。
为了改进我的结果,我创建了两层 lightGBM 模型。我称之为一般化-特殊化分层。首先,单个模型用于对整个数据集进行初始预测。然后在第二层,我训练了多个模型。这些模型更加专业化,因为它们是用特定喷发时间范围内的数据训练的。为了处理第一个模型的更大程度的误差,我在第二个模型的范围之间创建了重叠。最后一点琐碎的细节,在拟合之前,我还使用了最小-最大缩放来缩放我们的数据,以获得最佳性能。
为了预测测试数据,首先使用来自第一层的模型进行初始预测。基于这种预测,我们使用第二层的特定模型来进行更准确的预测。因为我们在喷发时间范围上有重叠,所以可以用两个模型评估一个测试段。最后,对于测试数据集中的每个片段,我们有六个输出或预测。然后我们取这些输出的中间值来得到我们最终预测的喷发时间。我试着在下面的图表中想象这个过程(尽我所能)。
图:按模型层的预测流程(图片由作者提供)
LightGBM 有非常多的超参数需要调整。像所有基于树的算法一样,lightGBM 也因过度拟合而闻名。过度拟合的一个主要原因是模型的复杂性。我通过控制叶子的数量( num_leaves )和最大深度( max_depth )参数来防止 lightGBM 构建过于复杂的模型。我还使用了大量的估计器(n _ 估计器)和正则化(λ_ L1和*λ_ L2)*来减少过拟合。还控制了总迭代次数( num_iterations ),并且还引入了早期停止( early_stopping_round) 以防止过拟合。最后,我还试图通过使用额外的树、特征分数和 bagging_fraction 来引入大量的随机性。下面是第二层模型的超参数配置。
您还会注意到,第一层要简单得多(叶子的数量和深度更多)。实验表明,保持第一个模型没有第二个模型复杂会产生好的结果。这也使得第一个模型可以一般化,第二个模型可以专门化。
本次竞赛使用平均得分(MAE ),该解决方案的个人得分为 4200311。这在排行榜上排在第 18 位,我很高兴我的简单解决方案最终排在了这么高的位置。下面的条形图显示了不同范围的喷发时间值的平均得分。左边的条形图来自第一个模型,右边的来自第二个模型。
由于第二种模式可以关注更小的时间范围,他们往往做得更好。此外,该模型的总体得分有所提高。对于这两个极端(爆发的时间很快或很晚),我创建了一个额外的模型。由于最低和最高之间的范围非常大,即使是专门的模型也更倾向于该范围的中间。这些针对两种极端情况的额外模型有助于更好地预测极端情况。
图:层间 MAE 比较(图片由作者提供)
这是一场有趣的 Kaggle 比赛,非常感谢组织者组织了这场比赛。像任何其他比赛一样,在参加这个比赛时,我从其他卡格勒的作品中学到了很多。
我希望我有时间对特性的重要性做更系统的研究和可视化。我还认为在第一层使用多个分类器而不是单个模型可能是更好的方法。哦,好吧,我会把这段经历带在身边,以便将来做得更好。
原文:https://towardsdatascience.com/predicting-win-probability-910af3b48f75?source=collection_archive---------13-----------------------
您是否曾经不得不确定在销售渠道中赢得机会的概率?营销团队创造销售线索,销售团队跟进销售线索,在此过程中,每个机会都会经历一个生命周期,从 RFP 阶段一直到最终成交。随着机会从一个阶段过渡到下一个阶段,联系人会分配一个将销售线索转化为销售的概率,从而赢得机会。
但是这个概率有多准呢?给定一个足够大的包含多个预测变量的数据集,我们可以使用机器学习来确定赢得机会的概率吗?我们在一家领先的资产管理公司建立了一个概念验证,展示让机器说话的好处:)
利用九个不同的数据源提取了机会级别的 14 个属性。这些因素包括关系持续时间、预期的机会持续时间、CRM 活动数量、机会数量、机会类型(新的、交叉销售等)。)、自上次联系以来的持续时间、进行的演示次数、演示者姓名、参加的产品网络研讨会次数、管理的资产以及资产价值的增长。
这些被转换成单个数据框,每个记录代表一个机会,如下所示
作者图片
然后,机会数据框架被分为开放和关闭的机会。对于已结束的业务机会,最终状态是已知的——成功、失败或无效,而对于开放的业务机会,状态是预测的。状态标签转换为 0 或 1,1 表示赢得机会,0 表示失去机会(包括“非活动”状态)。
关闭的机会以 75:25 的比例分成培训和测试,同时使用 Caret 包中的 createDataPartition 函数维护状态标签的比例。
作者图片
我使用 R 中的 Caret、ARM 和 XGBoost 包在训练数据上建立监督机器学习模型,并将机会分类为赢或输。
**朴素贝叶斯:**一种基于贝叶斯定理的分类算法,在给定每个预测变量取某个值的情况下,确定赢得或失去机会的概率。
**逻辑回归:**具有二元结果的广义线性模型,使用 sigmoid 函数将其转换为概率。每个预测变量的“权重”由模型确定,以减少实际值和预测值之间的误差。
贝叶斯 GLM: 逻辑回归模型的扩展,但它根据贝叶斯方法假设预测变量的先验分布。
**增强逻辑回归:**几个逻辑回归模型的集合,然后用于根据单个预测进行预测。
**随机森林:**决策树的集合,用作慢学习器,通过使用在每个节点提供最佳分割的特征将训练数据分成各自的状态,对每个机会进行分类。
**极端梯度推进:**以连续的方式构建决策树的集合,其中每个模型的残差适合后续的模型。
极限梯度提升(带 DART): 极限梯度提升算法的扩展,但是为了避免过度拟合的问题,在每个阶段都要丢弃树。
然后,每个 ML 模型被部署在测试数据集上
使用 3 个度量来测量性能:ROC、灵敏度和特异性。ROC 是接收器操作特性,即曲线下的面积,分类器的整体精度。敏感度是真正的肯定率,即被正确预测为成功的机会数量占总成功的比例。特异性是真实的负比率,即被正确预测为失去的机会数占失去的机会总数的比例。
作者图片
随机森林模型在测试数据集上提供了最高的灵敏度。这用于预测赢得公开机会的概率,结果以下列方式展示。
作者图片
该算法还用于使用 Caret 包中的 varImp 函数来确定每个输入特征的重要性。结果表明,我们假设对模型有贡献的某些特征实际上没有帮助,这就需要讨论数据是否有错,或者我们是否必须修改我们对该特征的假设。
能够预测管道中机会的成功率将使我们能够实施“早期预警系统”,并提供一个与潜在客户互动的框架。例如,CRM 活动可以基于成功概率以及机会数量来划分优先级。此模型的输出也可以成为后续细分模型的输入,该模型将客户划分为战略客户或其他客户。
我们在研究这些模型时面临的主要挑战是缺乏清晰的数据。我们发现在不同的电子表格文件中维护数据的方式有几处不一致,必须手动将它们映射到中央存储库中的 kID。我们还发现,ML 模型需要比构建模型时更多的数据。随着我们从遗留系统过渡,并同时清理数据,我们相信这种概念验证将会出现。
如果您有任何意见或反馈,或其他预测销售渠道中机会成功率的方法,请使用下面的评论部分。
斯蒂芬·道森在 Unsplash 上拍摄的照片
以下是 Caret 软件包上的一个链接,您会发现它很有用:
https://cran . r-project . org/web/packages/caret/vignettes/caret . html
原文:https://towardsdatascience.com/predicting-wine-prices-with-tuned-gradient-boosted-trees-9ab5ebd0b85e?source=collection_archive---------40-----------------------
许多流行的机器学习库使用超参数的概念。这些可以被认为是机器学习模型的配置设置或控制。虽然在拟合模型的过程中学习或求解了许多参数(比如回归系数),但有些输入需要数据科学家预先指定值。这些是超参数,然后用于建立和训练模型。
梯度推进决策树的一个例子是决策树的深度。较高的值可能会产生更复杂的树,可以提取某些关系,而较小的树可能能够更好地进行概括,并避免过度拟合我们的结果,这可能会导致预测未知数据时出现问题。这只是超参数的一个例子,许多模型都有许多这样的输入,它们都必须由数据科学家定义,或者使用代码库提供的默认值。
这可能看起来很困难— 我们如何知道哪种超参数组合会产生最准确的模型呢? 手动调优(寻找最佳组合)可能需要很长时间,并且覆盖很小的样本空间。这里将介绍的一种方法是使用 Optuna 来自动完成一些工作。可以指定超参数的范围,而不是手动测试组合,Optuna 进行了一项研究,以确定给定时间限制下的最佳组合。
为了演示 Optuna 和 hyperparameter 调优,我们将使用一个包含来自 Kaggle 的葡萄酒评级和价格的数据集。给定一瓶红酒的一些输入特征——比如地区、点数和品种——使用超参数调优,我们能在多大程度上预测葡萄酒的价格?
数据集概述点击查看全尺寸版本
在我们的数据中加载几行代码,并进行训练/测试分割:
为了知道我们的超参数优化是否有帮助,我们将训练几个基线模型。第一种是采用简单的平均价格。使用这种方法的结果是 79%的平均绝对百分比误差——不是很好,希望一些机器学习模型可以改善我们的预测!
第二个基线是用默认参数训练我们的模型(使用 Catboost 库)。下面是几行代码。这击败了我们的基线简单均值预测,但我们能通过进一步优化做得更好吗?
为了使用优化的超参数创建我们的模型,我们创建了 Optuna 所谓的研究——这允许我们定义具有超参数范围的试验,并优化最佳组合。
您将在下面的代码中看到,我们用一个试验对象定义了一个目标函数,它根据我们定义的范围建议超参数。然后,我们创建研究并进行优化,让 Optuna 完成它的工作。
Optuna 将最佳结果存储在我们的学习对象中。运行以下程序可以让我们访问最佳试用和查看培训结果。
将训练结果与我们初始运行的默认参数进行快速比较,显示出良好的迹象。您将看到优化的模型具有更好的训练拟合度(在这种情况下,分数是百分比误差,因此越低=越好)。
一个很好的例子是平行坐标图。这使我们能够观察试验并分析潜在趋势的超参数。如果我们发现有趣的优化,我们可能希望在审查结果后运行新的研究,允许我们搜索额外的超参数空间。
平行坐标图点击查看全尺寸版本
您可以在左侧看到成本指标(越低=越好)。沿着黑线(最佳试验),您会注意到深度越高效果越好,学习率在测试值的中间,并且有更多的估计值。鉴于这些发现,我们可以重新运行一项研究,缩小这些值的范围,并潜在地扩大其他值的范围——例如深度可能增加到我们的上限以上,或者添加额外的超参数进行调整。
最后一步是比较测试结果。第一步是观察我们的简单平均预测基线在测试集上的表现。
下一步是查看我们默认超参数模型的测试结果:
比简单地用平均值作为预测要好很多。我们的超参数优化解决方案能在测试集上做得更好吗?
我们能够通过超参数优化改进我们的模型!我们只在一个小空间里搜索了几次,但是改进了我们的成本度量,得到了更好的分数(误差降低了 1%)。
所有的例子和文件都可以在 Github 上找到。
原发布于https://data stud . dev。
原文:https://towardsdatascience.com/prediction-2021-the-year-ai-became-normal-1968d4053803?source=collection_archive---------37-----------------------
许多年后,2020 年将被视为人工智能的分水岭。在新冠肺炎肆虐世界的前所未有的一年,关于人工智能的有用性已经出现了一个明确的答案——企业需要找到一种创造性地,广泛地,大胆地应用人工智能的方法,以在短期内变得更强大,并在长期内生存。
人工智能已经出现了一个清晰的增长模式:2018-19 年,实验阶段变得成熟;2020 年,采用以一种严肃的方式开始,突然,新冠肺炎给了商业领袖一个推动自动化和人工智能的机会和动力。2021 年,英国和其他许多国家第二波新冠肺炎的余波将最终变得清晰,首先是许多传统的非数字业务的迅速衰落。随着高管们的关注,以下是我预计将在 2021 年出现的相关趋势:
2020 年,企业跳出实验模式,在后 COVID 时代,立足于现实,加速采用。2021 年,他们将采用人工智能计划在传统指标方面的商业成果,如收入、客户流失、客户忠诚度等。虽然企业有责任理解人工智能的影响,但我们这些数据科学家有责任建立“翻译表”来实现同样的目标。
数据科学家根据准确度、精确度和召回率、F1 分数、AUC 或类似的“科学”指标来评估他们项目的“成功”,这与企业衡量项目有效性的方式非常不同。为了弥合这一差距,数据科学家必须坐下来,最好是先验地,与企业一起制定一个通用框架,以了解和衡量他们工作的影响。
例如,在我的雇主、世界顶级电信公司之一的 Airtel,我们使用以下简单的表格来与产品组和业务部门分享成果:
图 1:将数据科学成果转化为清晰理解的业务影响,改善沟通并建立信任。图片来源:作者
一旦这些“翻译表”建立起来,所有的数据科学家、产品专家和相关企业就可以很容易地专注于同一个目标并衡量影响。
我们看到了一个有趣的视频,波士顿动力公司的机器人随着西部、好莱坞、印度等音乐起舞。曲调。除了这个广受欢迎的视频的社交媒体狂热之外,工作场所人工智能还有一个长期趋势正在出现,并将尽快推动自动化和增强需求。后 COVID 世界将更加虚拟化,基于位置、身体或人际接触的工作者和在家工作的知识工作者的工作场所都将被破坏。它也将越来越少接触,特别是在 B2C 环境中,如零售、酒店、运输、食品和饮料服务等,导致下一个预测…
图 2:波士顿动力公司的机器人在年终舞蹈表演中
在第二波疫情在全球传播的过程中,2020 年 12 月发布的一则鲜为人知的公告没有引起大多数人的注意:亚马逊计划推出监控工厂工人和机器的工具。该系统名为 AWS Panorama,使用计算机视觉分析设施内的闭路电视摄像机镜头,自动检测安全和合规问题,如工人未穿戴 PPE,或车辆在未经授权的区域行驶。虽然这听起来微不足道,但考虑到一个大型工业仓库(250,000 平方英尺。25,000 平方英尺 mt .)可以拥有 500-600 台以 60 fps(每秒帧数)运行的闭路电视摄像机,每天生成约 4300 万至 5200 万张图像,每月约 15 亿张。
图 3:在边缘运行的视觉算法能够实时确定“热点”。视频:S20.ai 和 Youtube
过去几年发明的新一代技术使这成为可能;联邦学习平台如 S20。专注于工业计算机视觉的 AI 或专注于医学研究数据和图像的 Owkin,使得以隐私保护方式处理和理解这些数据成为可能。
这得益于硬件能力的快速增长。 NVIDIA 的 Jetson 系列 GPU 及其 EGX AI 平台为物联网应用的计算机视觉和边缘计算开辟了巨大的机遇。与此同时,NVIDIA A100 GPU通过多实例功能,可以在单个 GPU 上并行运行多达七个任务,显著提高了云中繁重计算机视觉工作负载的处理能力。苹果最新的 M1 芯片也显示出 3.9 倍的视频处理速度和 7.1 倍的图像处理速度。
然而,随着人工智能技术渗透到我们生活的各个领域,它对大流行后世界的经济未来产生了重大影响。
2021 年,遭受重创的经济体将开始重建,世界上最早从 COVID 中复苏的地区,如印度和中国,将是增长最快的。2021 年将是“K 经济”的开始,其大致定义是,数字化和推动更快人工智能增长的经济体和公司之间的表现差异越来越大。最坚韧的公司将把人工智能推向新的前沿,用于远程协作、按需制造,并转向数字体验、推荐等方面的智能实验。在边缘。
图 4:由人工智能驱动的“K 经济”的增长将在后 COVID 世界加速
鉴于人工智能工具在过去两年中已经显著民主化,一流的算法在斯坦福、谷歌或中国开发出来后很快就可以使用,落后者仍然有可能一次性的机会积极实现他们的顶级人工智能 10、20 或 50 个用例,可能是用无代码的 AutoML 工具。
随着人工智能模型开始影响我们生活的许多方面,…
随着人工智能渗透到我们的生活中,系统必须公平、负责任并可靠地重现结果。考虑一个基于“替代”信用数据对无银行账户客户进行信用评分的人工智能系统。这种评分模型依赖于对零工经济工资支票、小额贷款的使用和偿还、社交档案、智能手机的使用(通话、数据)、电子商务网站上的购物等的访问。虽然创造这些产品的崇高目的是让数百万人获得正规信贷,但贷款人和用户都必须信任该系统,产品才会有效。
随着电子商务、银行、娱乐和其他日常系统与人工智能结合,企业将必须确保公众可以确信正在使用的人工智能技术是透明、安全的,并且其结论不会有偏见或受到操纵。2021 年,提供可信度和“公平”衡量标准的技术将开始融入人工智能生命周期,帮助我们构建、测试、运行、监控和认证人工智能应用,以获得信任,而不仅仅是性能
这不仅限于人工智能算法…
随着数据量的增加,2021 年可能会展示人工数据的好的、坏的和丑陋的使用,这些数据被注入模型中以造成伤害。例如,在一个稀疏的数据环境中,某个月升级手机通话计划的人数,“合成数据”允许科学家创建扩展的数据集来训练人工智能。虚假数据是为了完全相反的目的而创建的:它意味着扰乱人工智能训练,以创建受污染的模型和结果。
图 5:伪造的数据和内容,“深度伪造”将在 2021 年成为人工智能的“黑暗面”。照片由h·海尔莱恩在 Unsplash 上拍摄
正如 2020 年美国大选所展示的那样,传播错误信息和虚假内容的人工智能机器人更难被检测到。事实上,这次对 Deepfake AI 文本内容操纵选举结果的担忧如此之高,以至于 GPT-3 AI 的创造者 OpenAI 已经承诺限制其仅用于道德用途的可用性,密切监控其应用编程接口(API)。
人工智能在未来几年的发展将与任何其他最近的技术发展非常不同。人工智能不同于过去开发的任何其他强大的技术——它无处不在的高质量算法在几周内就可以到达全球,包括 GPU 在内的廉价计算能力以及 AutoML 等无代码技术都是可用的。为了应对这种威胁,我预计 2021 年的人工智能专业人员将寻找一种共识的方法来识别和揭示人工智能应用程序中的敌对威胁。对抗式人工智能威胁度量标准,一个开放的、可扩展的行业框架,用于对最常见的用于破坏 ML 系统的对抗策略进行分类,可能会被 ML 和 DevOps 工程师采用。
2021 年将是人工智能的分水岭,该技术将在 2018-19 年脱离实验周期,在 2020 年被采用,并开始成为所有类型的企业、流程、产品和服务的日常活动的一部分。像 COVID 这样的百年一遇的“黑天鹅”事件将推动“K 经济”的增长,迫使企业迅速开始采用人工智能,否则就会面临灭亡的风险。
后 COVID 世界将是无接触和数字化的,服务是自动化和远程驱动的。因此,工作场所人工智能和人机协作将加速发展,将计算机视觉技术置于最前沿。
随着人工智能渗透到我们生活的每个领域,消费者对技术的理解将开始改变。然而,要被公众广泛接受,这些制度必须是公平和负责任的。否则,预计会看到人工智能的采用受到严重抵制——推迟,但仍不会最终阻止人工智能驱动的世界。
结语:我写的是关于数据科学、机器学习、产品管理和职业成功的故事。你可以跟着我把这些放进你的培养基里。
上一篇: 用“印度级”技术为世界供电
下一个故事: 印度贫困地址的经济影响:一年 100-140 亿美元
原文:https://towardsdatascience.com/predictions-and-hopes-for-graph-ml-in-2021-6af2121c3e3d?source=collection_archive---------3-----------------------
图片:Shutterstock
威尔汉密尔顿 ,麦吉尔大学助理教授兼米拉大学 CIFAR 主席,著有graph sage。
“2020 年,图形 ML 领域面临着消息传递范式的基本限制。
这些限制包括所谓的“瓶颈”问题[1],过度平滑的问题[2],以及代表能力方面的理论限制[3,4]。展望未来,我预计在 2021 年我们将寻找图形 ML 的下一个大范式。我不确定下一代 Graph ML 算法到底会是什么样子,但我相信,要取得进展,就需要打破 2020 年及之前主导该领域的消息传递模式。
我也希望 2021 年 Graph ML 也将进入更有影响力和更具挑战性的应用领域。最近太多的研究集中在简单的、同质的节点分类任务上。我还希望看到在需要更复杂的算法推理的任务方面的方法进步,比如涉及知识图、强化学习和组合优化的任务。"
指针图网络结合了经典计算机科学中的结构归纳偏差。图片来源:P. Velič ković。
佩塔尔·韦利奇科维奇 **,**deep mind 高级研究员,著有 图关注网络 。
“2020 年已经明确且不可逆转地将图形表示学习转变为 ML 领域的一等公民。”
今年取得的巨大进步不胜枚举,但我个人最感兴趣的是神经算法推理。传统上,神经网络在插值领域非常强大,但众所周知,它是可怕的外推器——因此也是不充分的推理器;因为推理的主要特征之一是能够在非分布情况下发挥作用。推理任务很可能是 GNNs 进一步发展的理想选择,不仅因为它们与这种任务非常匹配[5],还因为许多现实世界的图形任务表现出同质性,这意味着最有效和可扩展的方法通常是 GNNs 的更简单形式[6,7]。
基于以前的神经执行器的历史成功,如神经图灵机[8]和可微分神经计算机[9],并通过现在无处不在的图形机器学习工具箱得到加强,2020 年发表的几部作品探索了神经执行器的理论限制[5,10,11],基于 GNNs[12-15]导出了新的和更强的推理架构,并实现了对神经推理任务的完美的强泛化[16]。虽然这种架构可以自然地转化为 2021 年组合优化的胜利[17],但我个人最兴奋的是预先训练的算法执行者如何允许我们将经典算法应用于过于原始或不适合该算法的输入。作为一个例子,我们的 XLVIN 代理[18]正是使用这些概念来允许 GNN 在强化学习管道中执行值迭代式算法,即使底层 MDP 的细节是未知的。我相信到 2021 年,GNN 应用于强化学习的时机将会成熟。"
GNNs 允许学习一个状态转移图(右),它解释了一个复杂的多粒子系统(左)。图片来源:T. Kipf。
托马斯·基普夫 ,谷歌大脑研究科学家,《图卷积网络https://tkipf.github.io/graph-convolutional-networks/的作者。
自从最近广泛采用基于 GNN 的模型以来,Graph ML 社区中一个特别值得注意的趋势是计算结构与数据结构的分离。
在最近的 ICML 研讨会上,我将这种趋势称为关系结构发现的 T2。通常,我们设计图形神经网络以在数据集提供的固定(或临时演变)结构上传递消息,即数据集的节点和边被视为我们模型的计算结构或消息传递结构的黄金标准。
在 2020 年,我们已经看到人们对能够适应计算结构的模型越来越感兴趣,即它们使用哪些组件作为节点,以及它们在哪些节点对上执行消息传递,同时超越简单的基于注意力的模型。2020 年有影响力的例子包括摊销因果发现[19–20],它利用神经关系推理从时间序列数据中推断(并推理)因果图,具有可学习指针[21,15]和关系机制[22–23]的 GNNs,具有自适应计算图的基于学习网格的物理模拟器[24],以及学习推断执行计算的抽象节点的模型[25–26]。这一发展具有广泛的影响,因为它允许我们在其他领域(如文本或视频处理)有效地利用 GNN 架构提供的对称性(如节点置换等方差)和归纳偏差(如成对交互作用函数的建模)。
展望未来,我预计我们将看到在给定一些数据和任务而不依赖于显式监督的情况下,如何学习最佳计算图结构(在节点和关系方面)的许多发展。对这种习得结构的检验可能有助于更好地解释和诠释习得模型为解决任务而执行的计算,并可能允许我们进一步类比因果推理。"
Haggai Maron ,Nvidia 研究科学家,著有 可证明表现力的高维图形神经网络 。
“图形神经网络的表达能力是 2020 年 Graph ML 的中心主题之一。
有许多优秀的论文讨论了各种 GNN 架构的表达能力[27],并显示了当 GNN 的深度和宽度受到限制时 gnn 的基本表达能力限制[28],描述了使用 gnn 可以检测和计数什么类型的结构[29],显示了使用固定数量的 gnn 对于许多图形任务没有意义,并建议了一种迭代 GNN,该迭代学会自适应地终止消息传递过程[14]。
在 2021 年,我很高兴看到图形生成模型的原则性方法的进步,GNNs 的图形匹配和 GNNs 的表达能力之间的联系,学习图像和音频等结构化数据的图形,以及在 GNN 社区和处理场景图形的计算机视觉社区之间建立更强的联系。"
马蒂亚斯 ,多特博士生, PyTorch 的开发者几何开图基准 。**
“2020 年 Graph ML 研究中最热门的话题之一是解决 GNNs 的可伸缩性问题。
一些方法依赖于通过从传播中分离预测来简化底层计算。我们已经看到许多论文简单地将不可训练的传播方案与图不可知的模块相结合,作为预处理[30,7]或后处理[6]步骤。这导致了极好的运行时间,并且,值得注意的是,在同形图上,性能基本相当。随着对越来越大的数据集的访问,我渴望看到如何从这里向前发展,以及如何以可扩展的方式利用可训练和表达的传播。"
动态图表。
伊曼纽·罗西 , ML 推特研究员,伦敦帝国理工学院博士生,著有 时态图网络 。
“许多有趣的图形 ML 应用程序本质上是动态的,其中图形拓扑和属性都随着时间而发展。
在社交网络、金融交易网络或用户-物品交互网络中就是这种情况。直到最近,绝大多数关于图 ML 的研究都集中在静态图上。试图处理动态图的少数作品主要考虑的是离散时间动态图,一系列有规律间隔的图快照。在 2020 年,我们看到了一组新兴的作品[31–34 ],它们是关于更一般类别的连续时间动态图,可以被认为是一个异步的定时事件流。此外,动态图模型的首次有趣的成功应用也开始出现:我们看到了虚假账户检测[35],欺诈检测[36],以及控制流行病的传播[37]。
我认为我们只是触及了这个令人兴奋的方向的表面,许多有趣的问题仍然没有答案。重要的开放性问题包括可扩展性、对动态模型更好的理论理解,以及在单一框架中结合信息的空间和时间扩散。我们还需要更可靠和更具挑战性的基准,以确保能够更好地评估和跟踪进展。最后,我希望看到更多动态图神经架构的成功应用,尤其是在行业中。"
Graphcore 是一家为图形开发新硬件的半导体公司。图片来源:Graphcore
Mark Saroufim, ML 工程师graph core。**
“我想不出我合作过的任何一个客户没有在生产中部署过图形神经网络,也不打算这样做。
这种趋势的一部分是,在诸如 NLP、蛋白质设计或分子性质预测的应用中,自然图形结构传统上被忽略了,取而代之的是,数据被视为适合于现有的和完善的 ML 模型(如 Transformers)的序列。然而,我们知道,变形金刚只不过是 GNNs,注意力被用作邻居聚集函数。在计算领域,某些算法获胜并不是因为它们非常适合解决某个问题,而是因为它们在现有硬件上运行良好,这种现象被称为硬件彩票【38】——在 GPU 上运行的变形金刚就是这种情况。
在 Graphcore,我们建立了一个新的 MIMD 架构,它有 1472 个内核,可以并行运行总共 8832 个程序,我们称之为智能处理单元(IPU)。这种架构非常适合加速 GNNs。我们的 Poplar 软件堆栈利用稀疏性将计算图的不同节点分配给不同的内核。对于可以放入 IPU 900 MB 片上存储器的模型,我们的架构提供了比 GPU 更大的吞吐量提升;否则,只需几行代码,就可以将模型分布到数千个 IPU 上。
我很高兴看到我们的客户利用我们的架构建立了一个大型研究机构,包括 SLAM 的束调整、使用本地更新训练深度网络或加速粒子物理中各种问题的 T2。我希望在 2021 年看到更多的研究人员利用我们先进的 ML 硬件。"
MagicLeap 的 SuperGlue 使用 GNN 来解决特征匹配的经典计算机视觉问题。图片来源:P.-E .萨林等人。
谢尔盖·伊万诺夫研究科学家克里捷奥主编 图形机器学习简讯 。
“对于 Graph ML 研究来说,这是令人震惊的一年。所有主要的 ML 会议都有大约 10-20%的论文致力于这个领域,在这个范围内,每个人都可以找到自己感兴趣的图形主题。
Google Graph Mining 团队在 NeurIPS 上表现突出。看着 312 页的演示文稿,人们可以说谷歌在生产中利用图表方面比其他任何人都先进。他们使用 Graph ML 解决的应用包括用时空 GNNs 对新冠肺炎建模、欺诈检测、隐私保护等等。此外,DeepMind 在谷歌地图的全球范围内推出了用于旅行时间预测的 GNNs。他们的方法的一个有趣的细节是 RL 模型的集成,以选择相似的采样子图为 GNNs 的训练参数。这种方法和高级超参数调整将实时到达时间估计的精度提高了 50%。
GNNs 的另一个值得注意的应用是 Magic Leap,它专注于 3D 计算机生成图形。他们的 SuperGlue 架构[39]将 GNNs 应用于图像中的特征匹配,这是 3D 重建、地点识别、定位和映射的一个重要主题。这种端到端的特征表示与最佳传输优化相结合,在实时室内和室外姿态估计上取得了胜利。这些结果只是触及了 2020 年所取得成就的表面。
明年,我相信我们会看到 Graph ML 开发在工业环境中的进一步应用。这将包括生产管道和框架、新的开源图形数据集,以及为电子商务、工程设计和制药行业大规模部署 GNNs。"
用图形表示的粒子射流。人们正在探索 gnn 来探测粒子物理中的事件。图片来源:LHC
凯尔·克兰默 ,NYU 大学物理学教授,希格斯玻色子的发现者之一。
“令人惊讶的是,在过去的两年中,Graph ML 在物理领域变得非常流行。
粒子物理中深度学习的早期工作经常迫使数据进入图像表示以与 CNN 一起工作,这是不自然的,因为我们的数据本身不是网格状的,图像表示非常稀疏。图表是我们数据的更自然的表示[40,41]。大型强子对撞机的研究人员正在努力将 Graph ML 集成到每秒处理数十亿次碰撞的实时数据处理系统中。通过部署推理服务器将 Graph ML 与实时数据采集系统【42】集成,并努力在 FPGAs 和其他特殊硬件上实现这些算法【43】,努力实现这一点。
2020 年图表 ML 的另一个亮点是证明了它的归纳偏差可以与符号方法配对。例如,我们使用 GNN 来学习如何预测各种动态系统,然后我们对沿着边缘发送的消息进行符号回归[44]。我们不仅能够恢复这些动力系统的基本真理力定律,还能够在我们没有基本真理的情况下提取方程。令人惊讶的是,提取的符号方程可以重新引入 GNN,取代原来的学习组件,我们甚至获得了更好的分布数据的推广。"
GNNs 可以利用人口图进行疾病分类。图片来源:S. Parisot。
****Anees Kazi ,TUM 博士生,医学影像中图形 ML 多篇论文作者。
“在医疗领域,Graph ML 改变了分析多模态数据的方式,这种方式非常类似于专家在临床常规中从所有可用维度查看患者病情的方式。
最近,与医学成像和医疗保健应用中的 Graph ML 相关的研究出现了巨大的增长[45],包括大脑分割[46],使用针对疾病预测的 MRI/fMRI 数据进行的大脑结构分析[47],以及药物效果分析[48]。
在 Graph ML 的主题中,有几个在 2020 年的医学领域中脱颖而出。首先,潜在图学习 [22,49,50],因为根据经验为给定数据定义一个图在当时是获得最佳结果的瓶颈,现在已经通过自动学习潜在图结构的方法得到解决。其次,数据插补【51】,由于缺失数据是医学领域许多数据集中的一个长期存在的问题,基于图形的方法有助于根据来自图形邻域的关系进行数据插补。第三,Graph ML 模型的可解释性[52],因为对于临床和技术专家来说,专注于推理 Graph ML 模型的结果以将其可靠地合并到 CADx 系统中是很重要的。2020 年医疗领域的另一个重要亮点当然是冠状病毒疫情,Graph ML 方法用于检测新冠肺炎[53]。**
在 2021 年,Graph ML 可用于进一步提高 ML 模型的可解释性,以更好地做出决策。其次,已经观察到图 ML 方法仍然对图结构敏感,因此对图扰动和敌对攻击的鲁棒性是一个重要的课题。最后,将自我监督学习与 Graph ML 的集成应用于医学领域将会非常有趣。"
使用几何 ML 架构 MaSIF 设计的肿瘤学靶标的不同蛋白质结合剂。图片来源:巴勃罗·盖恩萨。
****Bruno Correia,EPFL 助理教授,蛋白质设计与免疫工程实验室负责人,MaSIF开发者之一。
“2020 年,蛋白质结构预测这一生物信息学的关键问题取得了令人振奋的进展。然而,最终显示在这些分子表面的化学和几何图案对于蛋白质功能是至关重要的。
基于表面的分子表示已经使用了几十年,但它们对机器学习方法提出了挑战。几何深度学习领域的方法给蛋白质建模领域带来了令人印象深刻的能力,因为它们能够处理不规则数据,特别适合蛋白质表示。在 MaSIF [1]中,我们在基于网格的分子表面表示上使用几何深度学习来学习模式,这些模式允许我们预测蛋白质与其他分子(蛋白质和代谢物)的相互作用,并将对接计算速度提高几个数量级。反过来,这可以促进更大规模的蛋白质相互作用网络的预测。
在 MaSIF 框架[2]的进一步发展中,我们设法动态生成我们的表面和化学特征,避免了所有的预计算阶段。我预计这种进展将对蛋白质和小分子设计产生变革性影响,从长远来看,可能有助于生物药物的更快发展。"
GNNs 在 Decagon 中用于预测多种药物的副作用。图片鸣谢:M. Zitnik。
马林卡·齐特尼克 ,哈佛大学医学院生物医学信息学助理教授,著有 迪卡侬 。
“看到 Graph ML 在 2020 年进入生命科学领域令人兴奋。
我们已经看到,图形神经网络不仅在精心设计的基准数据集上优于早期方法,而且可以开辟开发新药的途径,以帮助人们从根本上理解自然。亮点包括单细胞生物学的进展[56],蛋白质和结构生物学[54,57],以及药物发现[58]和重新定位[59]。
几个世纪以来,科学方法——科学家用来系统和逻辑地解释自然世界的基本科学实践——基本上保持不变。我希望在 2021 年,我们将在使用 Graph ML 来改变这一点上取得实质性进展。为了做到这一点,我认为我们需要设计能够优化和操纵网络系统并预测其行为的方法,例如基因组学——自然对人的实验——如何在疾病背景下影响人类特征。这种方法需要处理干扰和干预数据(不仅仅是摄取我们世界的观测数据)。此外,我希望我们将开发更多的方法来学习可操作的表示,这些表示很容易在科学中适用于可操作的假设。这种方法可以在高风险环境(例如,化学测试、粒子物理、人类临床试验)中进行决策,我们需要精确、可靠的预测,并对其进行有意义的解释。"
[1] U. Alon 和 E. Yahav,论图神经网络的瓶颈及其实际意义 (2020) arXiv:2006.05205 .
[2] Q. Li,Z. Han,X.-M. Wu,半监督学习的图卷积网络的深入见解 (2019) Proc .AAAI。
[3] K. Xu 等 图神经网络到底有多强大? (2019) Proc。ICLR。
[4] C. Morris 等人 Weisfeiler 和 Leman go neural:高阶图神经网络 (2019) Proc。AAAI。
[5]徐国光等神经网络能推理什么?(2019) arXiv:1905.13211。**
[6] Q. Huang 等 结合标签传播和简单模型优于图神经网络 (2020) arXiv:2010.13993 .
[7] F .弗拉斯卡等 SIGN:可扩展初始图神经网络 (2020) arXiv:2004.11198 .**
[8] A. Graves,G. Wayne 和 I. Danihelka,神经图灵机 (2014) arXiv:1410.5401。
[9] A. Graves 等 使用具有动态外部存储器的神经网络的混合计算 (2016)。自然 538:471–476。
[10]耶胡达、加贝尔和舒斯特。不是机器能学会什么,而是我们不能教什么 (2020) arXiv:2002.09398。
[11] K .徐等 神经网络如何外推:从前馈到图神经网络 (2020) arXiv:2009.11848 .**
[12]p . veli kovi等, 图算法的神经执行 (2019) arXiv:1910.10593。**
[13] O. Richter 和 R. Wattenhofer,无概率笼的标准化注意 (2020) arXiv:2005.09561。
[14] H. Tang 等,利用迭代齐次图神经网络求解尺度不变图相关问题 (2020) arXiv:2010.13547 .
[15]p . veli kovi等人 指针图网络 (2020) Proc。神经炎。**
[16] Y. Yan 等 神经执行引擎:学习执行子程序 (2020) Proc。ICLR。
[17] C. K .乔希等 学习 TSP 需要反思概括 (2020) arXiv:2006.07054 .**
[18] A. Deac 等 XLVIN:已执行潜值迭代网 (2020) arXiv:2010.13146。
[19]s . lwe等,摊余因果发现:学习从时间序列数据推断因果图 (2020) arXiv:2006.10833。**
[20] Y. Li 等,从视频中发现物理系统中的因果关系 (2020) Proc。神经炎。
[21] D. Bieber 等,用指令指针注意图神经网络学习执行程序 (2020) Proc。神经炎。
[22] A .卡兹等,图卷积网络的可微图模(DGM)(2020)arXiv:2002.04999**
[23] D. D .约翰逊、h .拉罗歇尔和 d .塔洛。、用有限状态自动机层学习图结构 (2020)。arXiv:2007.04929。**
[24] T .普法夫等,用图网络学习基于网格的仿真 (2020) arXiv:2010.03409 .**
[25] T. Kipf 等,结构化世界模型的对比学习 (2020) Proc .ICLR
[26] F. Locatello 等,带槽注意的对象中心学习 (2020) Proc .神经炎。
[27] W. Azizian 和 M. Lelarge,表征不变和等变图神经网络的表达能力 (2020) arXiv:2006.15646。
[28] A. Loukas,神经网络无法学习的图形:深度与宽度 (2020) Proc。ICLR。
[29] Z .陈等,图神经网络能统计子结构吗? (2020) Proc。神经炎。**
[30] A. Bojchevski 等,用近似 PageRank 的标度图神经网络 (2020) Proc .KDD。
[31] E. Rossi 等,动态图上深度学习的时态图网络 (2020) arXiv:2006.10637 .
[32] S. Kumar,X. Zhang,J. Leskovec,预测时态交互网络中的动态嵌入轨迹 (2019) Proc .KDD。
[33] R. Trivedi 等, DyRep:动态图上的学习表示 (2019) Proc .ICLR。
[34] D .徐等,时态图上的归纳表征学习 (2019) Proc .ICLR。**
[35] M. Noorshams,s .维尔马和 A. Hofleitner,关系:在脸书加强社会媒体完整性的时间互动嵌入 (2020) arXiv:2002.07917。
[36] X .王等,:用于实时时态图嵌入的异步传播注意网络 (2020) arXiv:2011.11545 .**
[37] E. A. Meirom 等,如何阻止流行病:用强化学习和图神经网络控制图动力学 (2020) arXiv:2010.05313 .
[38] S .胡克,硬件彩票 (2020),arXiv:2009.06489。
[39] P. E. Sarlin 等,强力胶:用图形神经网络学习特征匹配 (2020)。继续。CVPR。
[40] S. Ruhk 等,用距离加权图网络学习不规则粒子探测器几何图形的表示 (2019) arXiv:1902.07987。
[41] J .什洛米,p .巴塔格利亚,J.-R .弗利芒特,粒子物理中的图形神经网络 (2020) arXiv:2007.13681 .
[42] J .克鲁帕等人。、 GPU 协处理器作为高能物理中深度学习推理的服务 (2020) arXiv:2007.10359。
[43] A. Heintz 等,基于 FPGAs 的图形神经网络加速带电粒子跟踪 (2020) arXiv:2012.01563。
[44] M. Cranmer 等,从具有归纳偏差的深度学习中发现符号模型 (2020) arXiv:2006.11287。迈尔斯·克兰默与凯尔·克兰默无关,尽管两人都是这篇论文的合著者。另请参见论文的视频演示。
[45] Q .蔡等,多模态数据驱动的智慧医疗系统综述:方法与应用(2020)IEEE Access**7:133583–133599**
[46] K. Gopinath,C. Desrosiers 和 H. Lombaert,用于对齐不变的大脑表面分割的图形域适应(2020)arXiv:2004.00074
[47] J. Liu 等,利用多模态数据和图卷积网络识别早期轻度认知障碍 (2020) BMC 生物信息学21(6):1–12
[48] H. E. Manoochehri 和 M. Nourani,使用半二分图模型和深度学习进行药物-靶标相互作用预测 (2020)。 BMC 生物信息学**21(4):1–16
[49] Y. Huang 和 A. C. Chung,用于不确定性感知疾病预测的边变分图卷积网络 (2020) Proc .米凯
[50] L. Cosmo 等, 用于疾病预测的潜图学习 (2020) Proc。米凯
[51] G. Vivar 等, 利用多图几何矩阵补全对不完整医学数据集中的同时插补和疾病分类 (2020) arXiv :2005.06935。
[52] X. Li 和 J. Duncan, BrainGNN:用于 fMRI 分析的可解释脑图神经网络(2020)bior XIV:2020 . 05 . 16 . 100057
[53] X .于等, ResGNet-C:一种用于检测的图卷积神经网络 (2020)神经计算。**
[54] P .盖恩萨等,利用几何深度学习从蛋白质分子表面破译相互作用指纹 (2020)《自然方法》17(2):184–192。**
[55] F .斯维里松等,蛋白质表面的快速端到端学习(2020)bior XIV:2020 . 12 . 28 . 424589。**
[56] A. Klimovskaia 等,用于分析单细胞数据中复杂层次的庞加莱图 (2020)《自然通讯》11。
[57] J. Jumper 等,利用深度学习的高精度蛋白质结构预测(2020)a . k . a .alpha fold 2.0(论文尚未提供)。
[58] J. M. Stokes 等,抗生素发现的深度学习方法 (2020)《细胞》180(4):688–702。
[59] D. Morselli Gysi 等,为新冠肺炎确定药物再利用机会的网络医学框架 (2020) arXiv:2004.07229。
我感谢 Bruno Correia、Kyle Cranmer、Matthias Fey、Will Hamilton、Sergey Ivanov、Anees Kazi、Thomas Kipf、Haggai Maron、伊曼纽·罗西、Mark Saroufim、Petar Velič ković和 Marinka Zitnik 令人鼓舞的评论和预测。这是我第一次尝试“科学新闻”的新形式,我很欣赏改进的建议。不用说,所有的荣誉都属于前面提到的那些人,而任何批评都是我的责任。本帖的 中文翻译 由 志强钟 提供。我也和萨姆·查林顿在 TWIML 播客 中讨论了这些预测。
对图形 ML 和几何深度学习感兴趣?查看我的 博客 关于走向数据科学, 订阅我的 帖子,获取 中等会员 ,或者关注我的 推特 。
原文:https://towardsdatascience.com/predictive-analytics-model-predictions-and-their-interpretability-challenges-acbb8ff44b3f?source=collection_archive---------20-----------------------
弗兰基·查马基在 Unsplash 上拍摄的照片
人类通过推理来证明他们的决定。这样的推理有助于辨别决策,并对其充满信心。有时,这种推理逻辑可能不是直截了当的,但可以加入轶事引证、先入为主的直觉、假设的假设和公理化的思维。然而,只要这种判断足够令人信服,足以引起信心,这种决定通常是可以接受的。虽然原因可能并不简单,但任何因果关系的解释程度、与类似事件的任何关联、或潜在因素/环境之间的关系的确立,将导致对此类决定的更高程度的信任。本质上,这就像相信直觉相信判断。例如,患者相信基于医生对疾病的预测、对诊断的解释、基于经验的推理以及引用可比较的示例病例的治疗计划。
当预测模型预测结果或做出决定时,类似的推理也是可以预期的。然而,有一些关键的区别。虽然几个因果的、环境的、公理的和相关的因素可以证实人类的推理,但是唯一可以认可预测结果的因素是实例观察、特征特性和用于训练预测模型的算法。这些限制对预测模型的可解释性或可解释性提出了挑战。
在进入讨论的实质之前,有必要理解可解释性在模型预测的上下文中意味着什么。对于模型的可解释性,业界没有一致的定义。然而,可解释性可以通过以下几个方面来描述:
算法清晰性:这涉及到对算法内部如何工作的全面理解,应用了哪些数学直觉,执行了哪些计算来处理和优化输入,处理后的输入如何映射到预测的输出,以及算法如何工作来确保预测的准确性。模型可解构性:这意味着将模型分解成粒度模型单元或结构的能力,这些单元或结构解释了模型预测的部分原因。例如,在贷款批准的决策树中,一个决策节点检查申请人的信用评分是否大于阈值。另一个例子是神经网络中的隐藏节点,它为特定的输入变量分配权重。模型综合能力:这意味着在人类可接受的时间框架内,使用模型参数和输入数据手动完成每个计算,以获得模型预测输出的能力。遍历分层线性模型中的每一步来解释对预测结果的固定效应和随机效应是模型综合的一个例子。事后可解释性:这是对上述所有内容的补充,以进一步加强预测推理。虽然事后可解释性并不严格依赖于模型算法的内部工作,但它通过提供额外的支持信息来补充。特设可能采用其他效用模型来支持推理。对于输入图像,使用 k-最近邻模型呈现相似的图像来证明深度学习图像分类模型预测特定类别的原因是事后可解释性的一个示例。类似地,post hoc 可以使用模型可视化和其他基于实例的图示来进一步解释预测。
从上面可以推断,计算的复杂性和模型的体系结构极大地影响了模型的可解释性。虽然计算复杂性影响算法的清晰性和模型的可综合性,但模型架构的复杂性影响模型的可解构性。根据可解释性的程度,预测模型可以分为黑盒或白盒模型。
预测分析主要解决两大类预测问题——分类和回归。在分类中,预测模型将基于输入变量预测不同的类别标签作为输出。在回归的情况下,预测模型将根据输入变量预测定量输出,如产品的价格。预测模型被归类为黑盒或白盒的首要原因是与模型行为的可解释性和模型结果的可解释性有关。
给定一组输入数据,黑盒预测模型预测输出。虽然输入和输出变量之间的关系可以从训练数据集中观察到,但黑盒模型要么缺乏模型结果的可解释性,要么没有提供一种直接的方式来推理模型为什么以及如何预测特定的输出。缺乏可解释性有两个主要原因。第一个原因是底层算法是高度复杂的,具有复杂的数学计算。因此,即使是经验丰富的从业者也很难理解数学工作的模型,并将其转化为支持模型预测的推理。第二个原因是,虽然模型的内部计算很容易理解,但模型的设置和架构在训练时会变得复杂,因为输入数据要经过多次运算和复杂的转换。因此,虽然可以解释算法的基本表面工作,但很难根据输入数据在处理过程中经历的所有计算和转换来推理预测。具有利用多维向量空间中的复杂超平面的算法、利用复杂概率网络的算法以及利用子模型集合的算法的大多数模型通常属于黑盒模型的类别。然而,模型的准确性随着模型复杂性的增加而增加。因此,黑盒模型通常会产生更准确的预测,但代价是模型的可解释性。
与黑盒模型类似,白盒模型在给定一组输入的情况下预测输出。但是,白盒模型可以解释训练数据集中输入和输出变量之间的关系,并且可以轻松地在预测输出和给定输入数据之间建立类似的关系。利用基于规则的算法、决策树、决策表、模式匹配和从训练实例中学习的算法的预测模型通常属于白盒解决方案的类别。这种算法通过推理模型如何和为什么预测特定输出,通过其内部工作和可解释性提供了清晰度。然而,白盒解决方案可能无法提供黑盒解决方案为复杂问题场景提供的准确性。尽管如此,在某些情况下,可以提高白盒模型的架构复杂性来增加模型的准确性,但代价是模型失去了模型的可解释性。在这种情况下,白盒模型可能会变成更多的黑盒模型坦佩雷联今晚比赛预测。实际上,在黑盒和白盒模型之间进行选择的一个关键驱动因素是准确性和可解释性之间的权衡。
模型类型的功能分类也有助于理解不同模型类型的可解释性是如何变化的。预测模型的功能类型可以大致分类如下:
这些模型利用使用训练数据在多维向量空间中拟合超平面的算法。拟合的超平面在高维向量空间中分离输出变量的类别。给定输入数据,模型通过应用所需的转换来处理输入。多维空间中的变换输入向量可以帮助模型确定输入向量位于超平面的哪一侧,并选择输入向量最可能属于的输出类。这种模型属于黑盒解决方案的范畴,因为它们实现了复杂的数学计算,很难解释模型预测的原因。人工神经网络(ANN)、卷积神经网络(CNN)、递归神经网络(RNN)、支持向量机(SVM)、核方法等。是基于超平面的模型的例子。
集合模型使用多个子模型,在大多数情况下是弱子模型,以基于子模型做出的预测的投票或平均来提高准确性。他们使用 boosting 或 bagging 技术来训练每个子模型。子模型独立地或者基于来自前一个子模型的结果从训练数据中学习。这样,集成导致了复杂的决策层次结构,该层次结构很难解释给定输入数据的预测输出。因此,这种集合模型属于黑箱解决方案的范畴。随机森林(RF)、极端梯度提升(XGBoost)、自适应提升(AdaBoost)、贝叶斯自适应采样(BAS)等。是集成算法的例子。
底层算法在概率网络模型中构建特征和输出节点的复杂非循环有向图。每个节点维护连接到它的先前节点的所有组合条件概率的知识。实际上,模型会选择输出结点值作为预测,对于该预测,基于模型遍历的所有先前结点评估的条件概率最大。虽然此类模型采用的概率理论很容易理解,但在现实世界中,这些模型会构建一个复杂的节点图,其中包含内部计算的不同特征节点。因此,遍历模型并解释它为什么以及如何预测特定的输出变得非常困难。因此,这种模型属于黑箱解决方案的范畴。马尔可夫网络和贝叶斯网络就是这种模型的例子。
在规则驱动、基于模式或类似决策树的模型的情况下,在开发预测模型之前,输出结合输入的前提是众所周知和充分理解的。这种预测模型甚至是在理解了这种前提之后才开发出来的,因为虽然这种规则和模式的排列和组合是有限的,但是它们很难管理。一旦模型从训练数据集学习,模型就承担起这种繁重的工作。因为模型基于特定模式或规则集或通过遍历决策树来进行预测,所以很容易根据模型在考虑每个输入变量时必须做出的中间决策来解释预测。因此,这种模型通常属于白盒解决方案的范畴。然而,如果规则集变得过于层次化,或者决策树变得过于深入和嵌套,则可解释性可能会受到影响,因为由此产生的错综复杂的决策层次结构可能太难解释。在这种情况下,模型变成了一个黑盒解决方案。
线性模型建立了输入和输出变量之间的线性关系。这种关系的强度以作为模型参数的线性系数的形式来估计。参数的量化估计有助于确定每个输入要素相对于输出变量的重要性,并有助于解释模型基于给定输入数据预测输出的原因和方式。因此,线性模型通常属于白盒解决方案的范畴。然而,如果线性模型具有高维输入空间,或者如果在模型开发时附加了几个计算工程变量或虚拟变量,则线性模型可能会失去其可解释性。线性回归和逻辑回归就是这种线性模型的例子。
在基于实例的模型的情况下,该算法基于给定输入数据和来自训练数据的过去实例之间的局部近似进行预测,该训练数据基于指定的目标函数表现出相似的特征,然后采用策略来确定局部的领域以选择实例。一旦选择了在功能上与给定输入相似的本地实例,该算法就基于投票或平均来挑选预测。因为预测是基于使用相似实例的局部近似,所以该模型表现出高度的可解释性。实际上,本地选择的相似实例的特征可以解释模型的预测行为。因此,基于实例的模型通常属于白盒解决方案的范畴。k 近邻(kNN)、自组织映射(SOM)等。是基于实例的模型的例子。
确定哪种模型解决方案最合适取决于几个因素,包括底层算法主题和技术细节领域之外的因素。例如,当模型预测被认为是准确的,但被理解为超出人类的识别能力时,黑盒解决方案将是正确的。在这种情况下,模型执行复杂的操作来建立人类无法理解的输入和输出变量之间的关系。例如,在互联车辆用例中预测关键道路交叉口的交通量。在这种情况下,模型可能需要使用来自路边传感器的数据、关于附近事故或道路维修的数据、交通高峰时间等。,准确预测交通量。人工神经网络(ANN)或支持向量回归(SVR)或极端梯度推进(XGBoost)等复杂算法的使用是有保证的,因为:
该解决方案旨在预测交通量,以防止任何道路事故。没有预设的模式来建立规则,以规定不同输入的什么组合将确定交通量的估计。排列和组合的数量会激增到超出人类理解的程度。模型预测可以很容易地与人类可以预测的相关联,因此模型结果可以被验证。
同样,在有些情况下,必须采用白盒解决方案。例如,推理和因果关系优先的情况,因为潜在的问题域要求对预测进行这样的推理,或者遵从性法规强制执行这样的推理要求。例如,美国《平等信贷机会法》认为,拒绝向理由模糊或不合理的申请人提供银行贷款是非法的。因此,金融机构可能必须采用白盒模型进行分类,同时提供一种简单的方式来解释预测决策背后令人满意的原因。类似地,在医疗保健和医学领域,决策需要合理的推理和因果关系归属,采用白盒解决方案进行医学预测可能变得至关重要。在所有这些情况下,预测的纯粹准确性不再重要,但可解释性变得至关重要。因此,所选择的模型应该基于这两种考虑之间的折衷。在其他一些场景中,模型的简单性可能会促使选择更直接的白盒解决方案。
然而,有些情况下可以利用黑盒和白盒模型的组合来开发预测分析解决方案。在这种情况下,黑盒模型被用来进行初步预测,但事后白盒模型补充了预测的可解释性。例如,用于图像分类的 CNN 模型的可解释性将是困难的,因为 CNN 采用了复杂的卷积运算、图像过滤和变换,这些运算和变换缺乏通过人类解释的可识别性。然而,可以使用 CNN 为每个训练图像提取的复杂特征来开发单独的、更简单的白盒模型,例如决策树或聚类模型。然后,这种白盒模型可以匹配来自训练数据的相似图像,以实现事后推理和可解释性。
当预测模型预测一个结果或做出一个决定时,人类可以理解的推理是被期待的。能够证实预测结果的可解释性的唯一要素是实例观察、特征特性和用于训练预测模型的算法。这些限制对预测模型的可解释性提出了挑战。虽然模型可解释性没有标准的定义,但是底层算法的清晰性、模型的可解构性、模型的可综合性和事后可解释性是整个模型可解释性的特征。
根据可解释性的程度,预测模型可以分为黑盒或白盒模型。黑盒模型缺乏模型结果的可解释性,或者缺乏一种简单的方法来解释为什么以及如何预测特定的输出。相比之下,白盒模型能够解释训练数据集中输入和输出变量之间的关系,并易于在预测输出和给定输入数据之间建立类似的关系。具有利用多维向量空间中的复杂超平面的算法的模型、利用复杂概率网络的算法以及利用子模型集合的算法通常属于黑盒模型的类别。利用基于规则的算法、决策树、决策表、模式匹配和从训练实例中学习的算法的模型通常属于白盒解决方案的类别。
确定哪种模型解决方案最合适取决于几个因素,包括底层算法主题和技术细节领域之外的因素。黑盒解决方案将是正确的,模型预测预计是准确的,但被理解为超出了人类的识别能力。推理和因果关系优先的用例,因为潜在的问题域要求对预测进行这样的推理,或者合规性法规使用白盒模型强制执行这样的推理要求保证。一些用例利用黑盒和白盒模型的组合来开发预测分析解决方案。在这种情况下,通常采用黑盒模型进行更精确的初步预测,而白盒模型补充了预测的事后可解释性。
由于模型的准确性会随着模型复杂性的增加而增加,因此黑盒模型通常会产生更准确的预测,但会牺牲模型的可解释性。实际上,在黑盒和白盒模型之间进行选择的一个关键驱动因素是准确性和可解释性之间的权衡。因此,在决定选择模型算法来开发预测分析解决方案之前,数据科学家和机器学习专家必须首先了解问题域、其目标以及底层的合规性和推理要求。在平衡模型准确性的同时,模型的可解释性对于满足所有这些强制性要求变得至关重要。
原文:https://towardsdatascience.com/predictive-capacity-of-ai-models-989d19675e86?source=collection_archive---------24-----------------------
由 Unsplash 上的 drmakete 实验室拍摄的照片
基于神经网络的预测机器学习模型在判断大型数据集时非常强大。但是理解它们是众所周知的困难。
使用标记的数据集来训练神经网络。它们的表现如何是用一个标记的测试集来验证的。这是模型准确性、混淆矩阵、roc 等的地方。派上用场了。
让我们假设我们已经训练了一个 88%准确的模型。这意味着在验证模型的过程中,88%的预测被发现是正确的,12 %的预测被发现是错误的。
(图片由作者提供)
将这个模型应用到新数据中,我们知道 88%的情况下预测是正确的,但在哪些情况下预测是完全正确的。因此,模型精度本身并不是评估单个预测的一个很好的指标。我们需要估计一下有多大信心预测是正确的。
如果模型旨在基于预测自动做出决策,则没有预测置信度估计的预测模型是无用的。
因此,人工智能模型也应该为每个预测估计一个置信度。我们有多确定这个预测是正确的?
让我们假设我们有一个能够计算预测置信度的算法。然后,我们可以根据标记的测试数据验证训练好的模型,并根据预测置信度分析预测结果(正确或错误)。一个实际的例子是根据测试集计算每 5%置信区间的正确和错误预测的数量。
下图显示了一个示例,其中 88%的模型精度现在分布在置信区间上。我们有两类人:正确的预测和错误的预测。考虑这个例子 1。
示例 1:88%准确度的模型的预测置信度的实际分布。(图片由作者提供)
如果我们想在自动化过程中使用预测,我们希望能够设置一些置信度阈值,高于该阈值我们接受预测,低于该阈值我们拒绝预测。被拒绝的预测将需要额外的验证,要么通过其他模型,要么通过人类。
具有高置信度的预测为真或假阳性,而具有低置信度的预测为真或假阴性。
一个理想的模型应该显示正确和错误预测的两个群体之间没有重叠。在下面给出的例子中,同样具有 88%的模型精度,阈值可以设置在 35%-60%置信度范围内的任何地方。考虑这个例 2 。
示例 2:88%准确度的模型的预测置信度的理想分布。(图片由作者提供)
作为另一个极端,我们有一个模型,同样具有 88%的准确性,但我们根本无法定义阈值,因为两个群体最大程度地重叠,如下所示。(这相当于没有对预测置信度的估计!)考虑这个例 3 。
示例 3:准确度为 88%的模型的预测置信度的最坏情况分布。(图片由作者提供)
这三个模型的准确率都是 88%。但是模型的预测能力却大相径庭!
阈值是一个重要的参数,取决于你愿意接受多少假阳性。这真的取决于商业案例。
与通过阅读医生的笔迹来预测药物剂量的商业案例相比,预测图像显示的是猫还是狗的商业案例可能会接受更多的假阳性结果,这需要准确的高置信度预测。
例如,假设我们有一个可以处理 2%误报的业务案例。那么我们的信心阈值是多少,预测的正确率是多少?我们将会看到我们的三个示例模型有着非常不同的结果。
我们定义了与业务案例相关的三个预测群体:
误报:高于阈值的高置信度预测*,被认为是正确预测,但实际上是错误预测。*真阳性:高于阈值的高置信度预测被接受为正确预测,并且确实如此。否定:低于置信阈值的任何预测。这些无论实际上是错是对都会被拒绝。
我们现在通过沿着置信分布图中的 x 轴从 100%向下移动到 0%来计算阈值。我们向下滑动它,直到所有误报的总和是总数的 2%。(这对应于阈值右侧红色曲线下的区域。)
每个模型都有不同的阈值解决方案。在我们的示例中,如果我们允许 2%的假阳性,则示例 1 的阈值约为 75%,示例 2 的阈值约为 35%,示例 3 的阈值无解,因为对于所有预测置信度,假阳性的数量为 12%。
记住,三个模型的准确率都是 88%!
让我们直观地比较一下准确性和预测能力。
示例 1:比较模型准确性和预测能力。(图片由作者提供)
对于示例 1,我们发现 70%的预测具有高于阈值的置信度,并且可以被认为是正确的。我们知道,这不会给系统带来超过 2%的误差。只有 30%的案例需要人工验证。
人类也会犯错误,因此引入系统的总误差分数将大于 2%。
我们可以使用这样的技术来估计模型的预测能力,作为业务指标的函数,因此我们可以计算模型的投资回报。
在这个例子中,以前 100%的工作是人工劳动,现在我们已经减少到 30%。
在理想情况下,作为预测置信度函数的正确和不正确预测的总体不重叠,预测能力实际上接近准确度。
示例 2:比较模型准确性和预测能力。(图片由作者提供)
在这种特殊的情况下,如果我们接受 0%的误报,我们就会得到准确的结果。因此,模型精度是模型能够达到的预测能力的上限。
当人工智能被部署时,你希望它及时变得更好。这就是人类反馈数据如此重要的地方:人类纠正错误的预测,提供新标记的数据,这些数据可用于模型的未来训练。该模型已经在高置信度数据上表现良好,因此我们不需要太多的人对这些数据的反馈。
随机挑选一小部分高可信度预测,并人为降低它们的可信度,这样它们就会被人类挑选出来,而不是被自动处理。再加上低置信度的预测,这些预测总是会被人发现,这就确保了我们能得到整个群体的反馈。
持续学习的模型有效地在置信空间中分离正确和不正确预测的群体。这允许您降低阈值并增加可以自动处理的预测的比例。最大值等于模型精度!
随着数据的增加,模型的准确性可能会提高,但事实并非如此。例如,如果你在数据的标注上有 5%的误差,你将永远不会获得优于 95%的准确度。
尽管模型准确性对于评估机器学习模型的质量和性能很重要,但对于现实世界的预测人工智能来说,你需要掌握一个预测有多自信。
您可以使用可接受的误差分数(误报)等业务指标来计算模型的预测能力。
如果不理解预测的可信度,你的模型可能是没有价值的,即使它的准确性非常高!
注意:以上分析成功应用于多个神经网络模型读取医生笔迹。你可以在之前的阅读中找到更多关于手写项目 早期版本的信息。
原文:https://towardsdatascience.com/predictive-maintenance-5minutes-demo-of-an-end-to-end-machine-learning-project-60941f1c9793?source=collection_archive---------37-----------------------
卢卡·斯拉普尼卡在 Unsplash 上拍摄的照片
剩余使用寿命(RUL)是指系统一般工作一段时间后能继续正常运行的剩余寿命时间。借助 RUL,工程师可以安排维护时间、优化运行效率并避免计划外停机。因此,预测 RUL 是预测性维护计划的首要任务。
作者图片
这张照片显示了机器随着时间的推移而退化的情况。如果 A 是当前条件,而 B 是机器将失效的最小可接受条件,剩余使用寿命计算为这两点之间的时间。如果提前估计到 RUL,就可以对其进行维护或更换,以避免计划外停机和经济损失。由于 RUL 的预测对运营和决策具有重要意义,因此对其进行准确的估计至关重要。
今天,我们的任务是通过机器学习模型开发一个用于剩余使用寿命预测的实时智能应用程序。我们使用 NASA 提供的涡扇发动机退化仿真数据集作为训练集和测试集,开发了一个智能预测硬件剩余寿命的应用程序,并完成实时预测。最终的预测结果是 time_ in_ cycle ,这意味着在可接受的条件下,发动机未来可以旋转多少次。
可以直接按照以下步骤操作。后面我们还会附上培训所需的代码。本文主要展示了如何快速完成一个端到端的机器学习应用,省略了数据探索的过程。
首先,请检查 docker(运行演示的唯一依赖组件)是否安装在您的计算机上。
这里我们选择 bash 命令来运行它
整个初始化过程包括安装 OpenMLDB 和相关的运行环境。关于初始化脚本,请参考 init。上海
使用 OpenMLDB 进行时间序列特征计算需要历史数据,所以我们将历史数据导入 OpenMLDB 进行实时推理。历史数据可用于特征推断。
进口代码请参考 import.py 。使用’ t est here_ Fd004。TXT `作为历史数据,有多个发动机循环的检测数据。
模型训练需要训练数据。以下是用于生成的代码。
训练特征生成脚本代码在 train.p y 中训练数据是,有多个发动机循环的检测数据
最后,我们可以生成模型。
基于上一步生成的训练特征矩阵,我们使用’随机森林回归器进行训练。得到的训练模型,结合 OpenMLDB 中的历史数据,构建实时推理服务,整个推理服务代码引用 predict_ server.py.
上面的 ins 部分显示了使用 OpenMLDB 计算的特性。这里我们使用的特征被简化了。您可以阅读 fe.sql 文件了解具体特性;
下面的预测 RUL 显示了预测结果 time_ in_ cycle ,这意味着发动机可以继续旋转 321 次。
在一个数据库的帮助下,你可以完成机器学习的端到端应用。是不是很神奇!
如果你想了解更多,你可以点击: OpenMLDB
作者图片
原文:https://towardsdatascience.com/predictive-maintenance-machine-learning-vs-rule-based-algorithms-cb48414df448?source=collection_archive---------21-----------------------
虽然各种文章中都讨论了基本的预测性维护概念,但在选择预测错误的最佳方法时,实际上很少有发现。在本文中,我们先简要介绍预测性维护,然后重点介绍如何选择最适合您的预测性算法:是使用机器学习模型更好,还是应该首先使用基于规则的算法?
预测性维护——ML vs 基于规则(图片由Isis frana在 Unsplash 上拍摄)
让我们从理解我们从哪里来开始,它是关于什么的,我们需要一些背景:预测性维护基本上和它一样古老,并且在它的基础上没有什么新的东西。过去,如果机械师维修机器时发现某个部件有异常的视觉或听觉行为,机器可能会在损坏前停机并更换部件。这已经是预测性维护。今天的新事物是,机器和算法可以基于智能算法、更多数据和自动警报来执行这项任务。
(由 NBChttps://media.giphy.com/media/l1ZzUHEoKOnqa2v7Rv/giphy.gif拍摄)
预测性维护很难实现,但潜在的好处远远超过了努力。尽管在许多情况下实际部署比预期花费更多时间和精力的原因有很多(团队专业知识、数据可用性和处理、理解相关性和算法、授权给利益相关方等等),但最终的解决方案将产生:
主要由于减少了停机时间,节省了大量成本避免因连接部件导致的相关机械故障降低备件存储成本维护团队可以专注于长期改进,而不是紧急维修额外的好处:将会产生一个宝贵的数据宝藏,可用于所有类型的其他优化任务。
因此,如果您还在犹豫预测性维护对您的组织来说是否是一个好的下一步,那么您不应该浪费更多的时间,最好现在就开始。
众所周知,你将把大部分时间花在数据采集、清理和准备上。这是最具挑战性的任务之一,尤其是在传感器数据方面,预计会有大量数据需要适当的大数据环境来相应处理。但在开始所有这些工作之前,您应该考虑如何进行预测,以适应基于规则的方法或机器学习模型的特征工程。
预测性维护—选择正确的方法(图片由作者提供)
当然,我们首先需要知道这两种选择之间的区别,以便能够为您的组织选择最佳方法。让我们从基于规则的预测性维护开始。
基于规则的模型非常依赖于你的工程团队的知识和经验。让我在下面解释一下原因:与客户服务反馈一起,质量管理、产品负责人和其他与产品密切相关的团队可以提供关于机器故障原因或哪些特定零件可能会损坏的见解。基于规则的“IF-X-THEN-Y”模型是根据您团队的实践经验和理论知识实施的,以确定某个测量变量是否失控(例如,谢瓦尔特规则、六适马等)。
用于预测性维护的典型传感器数据(图片由作者提供)
一个实际的例子是,生产中的机器的振动传感器长时间高于阈值,并且特定轴承的温度稳定增加。这将触发通知或发送警报,以便问题可以提前解决,工程师需要知道在哪里查看。
实现一个预测性的机器学习模型你的团队的领域知识仍然是不可避免的,特别是当涉及到特征工程时,但是没有必要定义与我们在基于规则的预测模型中看到的相反的特定规则。
要符合机器学习模型,输入和输出都是必需的。在这种情况下,所谓的输入是我们的独立变量,特征或者随便你怎么称呼它。例如,在预测性维护中,这通常是温度或振动传感器的实际数量。当然这真的取决于你去计算新的独立变量。这个过程被称为特征工程,它本身就是一个主题。
标准的机器学习过程(图片由作者提供)
一旦你有了你的独立变量,你需要添加你想要的结果,之前称之为输出。预测性维护中的因变量通常是零件故障的警报或警告。然后,在创建的训练集的帮助下训练机器学习模型,以预测即将出现的错误。
请注意,有大量不同的机器学习模型,我们将在未来的文章中探索它们,因为现在的主要焦点是基于区分规则与机器学习模型。
有这样的情况,组织试图提出最先进的机器学习模型,而不事先做好基础工作。因此,问问你自己,你是否有足够的经验、技术知识和数据基础设施来实现一种胜过基于规则的系统的机器学习算法。
如果答案是否定的,并且您正准备开始处理整个数据问题,还不确定数据环境,并且希望收集初步经验,我强烈建议您首先从基于规则的模型开始,然后随着时间的推移,它可以发展为高级机器学习算法。
与此相关的文章:
动手:预测客户流失
应用机器学习提高初创公司估值
动手:客户细分
数据误导&统计
什么是 landingdata.de ?
原文:https://towardsdatascience.com/prefect-how-to-write-and-schedule-your-first-etl-pipeline-with-python-54005a34f10b?source=collection_archive---------2-----------------------
照片由 海伦娜从 洛佩斯 删节
Prefect 是一个基于 Python 的工作流管理系统,它基于一个简单的前提*——您的代码可能会工作,但有时会不工作* ( 来源)。当一切都按预期运行时,没有人会考虑工作流系统。但是当事情变糟时,提督会保证你的代码成功失败。
作为一个工作流管理系统,Prefect 可以轻松地将日志记录、重试、动态映射、缓存、失败通知等添加到您的数据管道中。当你不需要它时,它是看不见的——当一切都按预期运行时,当你需要它时,它是看得见的。类似保险的东西。
虽然 Prefect 不是 Python 用户唯一可用的工作流管理系统,但它无疑是最熟练的一个。诸如 Apache Airflow 这样的替代方案通常工作得很好,但是在处理大型项目时会带来很多令人头疼的问题。你可以在这里阅读 Prefect 和 Airflow 的详细对比。
本文涵盖了库的基础知识,比如任务、流、参数、失败和时间表,还解释了如何在本地和云中设置环境。我们将使用土星云作为那部分,因为它使配置毫不费力。它是一个由数据科学家制作的云平台,因此大部分繁重的工作都是为您完成的。
土星云可以毫不费力地处理完美的工作流程。它也是从仪表板到分布式机器学习、深度学习和 GPU 培训的前沿解决方案。
今天,您将学习如何:
在本地安装提督用 Python 写一个简单的 ETL 管道使用提督来声明任务、流程、参数、时间表和处理故障在土星云中跑完全程
我们将在虚拟环境中安装完美的库。基于 Python 3.8,以下命令将通过 Anaconda 创建并激活名为的环境:
您必须输入几次来指示 Anaconda 继续,但是每个安装都是如此。就库而言,我们将需要 Pandas 进行数据操作,请求下载数据,当然还有perfect进行工作流管理:
我们现在已经具备了开始编写 Python 代码所需的一切。让我们接下来做那件事。
今天我们将使用 Prefect 来完成一个相对简单的任务——运行 ETL 管道。这个管道将从一个伪 API 下载数据,对其进行转换,并将其保存为 CSV 格式。JSON 占位符网站将作为我们的虚拟 API。其中,它包含了十个用户的虚假数据:
图片 1——伪造的用户数据(来源:【https://jsonplaceholder.typicode.com/users ))(图片作者)
让我们从创建一个 Python 文件开始——我已经将我的文件命名为。此外,确保有一个文件夹,用于保存提取和转换的数据。我称之为,它位于 Python 脚本所在的位置。
任何 ETL 管道都需要实现三个功能——提取、转换和加载数据。在我们的例子中,这些函数的作用如下:
—向参数发出获取请求。测试以查看是否返回了一些数据—在这种情况下,它作为字典返回。否则,将引发异常。 —转换数据,以便只保留特定的属性:ID、姓名、用户名、电子邮件、地址、电话号码和公司。以熊猫数据帧的形式返回转换后的数据。 —在将之前转换的保存为 CSV 文件。我们还将在文件名后附加一个时间戳,这样文件就不会被覆盖。
在函数声明之后,当执行 Python 脚本时,这三个函数都会被调用。以下是完整的代码片段:
现在,您可以通过从终端执行以下命令来运行该脚本:
如果一切运行正常,您应该看不到任何输出。但是,您应该在文件夹中看到 CSV 文件(我已经运行了该文件两次):
图 2 —运行两次 ETL 管道后,数据文件夹中的 CSV 文件列表(图片由作者提供)
正如您所看到的,ETL 管道运行并完成,没有任何错误。但是,如果您想按计划运行管道,该怎么办呢?这就是提督的用武之地。
在这一部分中,您将学习perfect任务、流程、参数、时间表等更多的基础知识。
让我们从最简单的开始——任务。这基本上是你工作流程中的一个步骤。接下来,创建一个名为的新 Python 文件。从复制一切,你就可以开始了。
要将 Python 函数转换成完美的任务,首先需要进行必要的导入— ,并修饰任何感兴趣的函数。这里有一个例子:
这就是你要做的!下面是我们 ETL 管道的更新版本:
让我们运行它,看看会发生什么:
图 3 —用提督将功能转换为任务(图片由作者提供)
看起来好像有什么不对劲。那是因为提督任务离不开*提督流程。*接下来就来实现吧。
将中的所有内容复制到一个新文件——。在声明之前,您需要从库中导入。
为了声明一个流,我们将编写另一个 Python 函数— 。它不会接受任何参数,也不会用任何东西修饰。在函数内部,我们将使用 Python 的上下文管理器来创建一个流。该流应该包含之前在代码块中的三行代码。
在上面提到的块中,我们现在必须用相应的函数运行流程。
以下是该文件的完整代码:
让我们运行它,看看会发生什么:
图片 4——第一次运行提督流(图片由作者提供)
这下好了!不仅执行了 ETL 管道,而且我们还获得了每个任务开始和结束的详细信息。我已经运行了这个文件两次,所以两个新的 CSV 文件应该会保存到文件夹中。让我们验证一下事实是否如此:
图片 5 —提督流生成的 CSV 文件(图片由作者提供)
这就是你如何用 Prefect 运行一个简单的 ETL 管道。与纯 Python 实现相比,它还没有太多好处,但我们会很快改变这一点。
硬编码参数值从来都不是一个好主意。这就是完美参数的用武之地。首先,将所有内容从复制到一个新文件。你需要从包中导入类。
您可以在流上下文管理器中使用这个类。以下是你会发现有用的论点:
—参数的名称,稍后将在运行流程时使用。 —布尔值,指定该参数是否是流程执行所必需的。-指定参数的默认值。
我们将为 API URL 声明一个参数— 。
为了给参数赋值,您需要指定字典作为函数的参数。参数名和值应该写成键值对。
以下是该文件的完整代码:
让我们运行该文件,看看会发生什么:
图片 6 —运行包含参数的完美流程(图片由作者提供)
我已经运行了这个文件两次,所以两个新的 CSV 文件应该出现在文件夹中。让我们验证一下这是不是真的:
图 7 —包含参数的提督流生成的 CSV 文件(图片由作者提供)
这就是你要的——一个地方的参数值规范。它使得以后进行更改和管理更复杂的工作流变得容易。
接下来,我们将探索 Prefect 的一个特别有用的特性——时间表。
今天我们将探讨两种任务调度方式——间隔调度和 Cron 调度。第二个可能听起来很熟悉,因为 Cron 是一种众所周知的在 Unix 上调度任务的方法。
我们将从间隔调度器开始。首先,复制从到的所有内容。你必须从导入。
然后,我们将在函数声明之前创建一个导入类的实例,并指示它每十秒钟运行一次。这可以通过设置参数的值来实现。
要将调度程序连接到工作流,您必须在使用上下文管理器初始化类时指定参数的值。
整个脚本文件应该如下所示:
让我们运行该文件,看看会发生什么:
图片 8 —使用间隔时间表(图片由作者提供)
如您所见,整个 ETL 管道运行了两次。提督将向终端报告下一次执行的时间。
现在,让我们探索一下 Cron 调度器。复制从到的所有内容。这次你将导入而不是。
在类初始化时,您将为参数指定一个 cron 模式。五星符号将确保工作流程每分钟都在运行。这是 Cron 可能的最低间隔。
文件的其余部分保持不变。代码如下:
让我们运行该文件:
图片 9 —使用 Cron 计划(图片由作者提供)
正如您所看到的,ETL 管道每一分钟运行两次,这是由 Cron 模式指定的。在这一部分的最后,我们将探索如何处理失败——并解释为什么你应该总是为它做准备。
迟早,你的工作流程中会发生意外的错误。Prefect 提供了一种极其简单的方式来重试任务的执行。首先,将所有内容从复制到一个新文件。
功能可能因不同的网络原因而失败。例如,也许 API 现在不可用,但几秒钟后就会可用。这些事情发生在生产环境中,不应该使您的应用程序完全崩溃。
为了避免不必要的崩溃,我们可以扩展一下我们的装饰器。它可以接受不同的参数,今天我们将使用和。两者都是不言自明的,我就不赘述了。
唯一的问题是——我们的工作流程不会像现在这样失败。但是如果我们将一个不存在的 URL 作为参数值放在中,它就会。代码如下:
让我们运行该文件:
图片 10——与提督一起预防故障(图片由作者提供)
任务失败,但工作流没有崩溃。当然,它会在十次重试后崩溃,但您可以随时更改参数规范。
这也是我和地方长官一起工作的原因。接下来,让我们将代码迁移到云中,并探索其中的变化。
让我们马上把手弄脏。首先,注册一个免费版的提督云账号。注册过程非常简单,无需进一步解释。注册后,创建一个项目。我给我的取名为。
在进入土星云之前,你必须在 Prefect 中创建一个 API 键来连接两者。你会在设置下找到 API 键选项。如您所见,我已经将我的命名为:
图片 11 —提督云 API 密钥创建(图片由作者提供)
你现在已经有了所有需要的东西,所以去土星云创建一个免费账户。在仪表板上,您将看到项目创建的多个选项。选择提督选项,如下图所示:
图片 12——在土星云中创建一个完美的项目(图片由作者提供)
Saturn Cloud 现在将自动为您完成所有繁重的工作,几分钟后,您将能够通过单击按钮打开 JupyterLab 实例:
图 13——土星云中打开的木星实验室(图片由作者提供)
你可以使用两个笔记本——第二个展示了在土星云中使用 Prefect 的快速演示。它看起来是这样的:
图片 14——土星云中的完美云笔记本(图片由作者提供)
要让笔记本工作,您只需更改两件事情。首先,将项目名称更改为您在 Prefect Cloud 中的项目名称。其次,用几分钟前生成的 API 密匙替换。如果您做的一切都正确,您应该会看到以下消息:
图片 15——土星云中登录成功的消息(图片由作者提供)
要进行测试,请运行笔记本中的每个单元格。然后转到完美云仪表板,打开你的项目。它不会像几分钟前那样空无一人:
图片 16 —成功的提督任务调度(图片由作者提供)
这就是你要做的一切!请随意复制/粘贴我们的 ETL 管道,并验证它是否工作。这就是 Saturn Cloud 的亮点——您可以从本地机器上复制/粘贴代码,只需做最小的更改,因为所有繁琐的工作都是自动配置的。
让我们在下一部分总结一下。
现在你有了它 Prefect 的基础解释,包括本地和云。我希望您能够看到工作流管理系统对于生产应用程序的价值,即使您在阅读本文之前对这个主题一无所知。
有关更高级的指南,即配置日志记录和空闲通知,请参考官方文档。提供的例子足以让你开始。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
https://medium.com/@radecicdario/membership
在媒体上关注我,了解更多类似的故事注册我的简讯在 LinkedIn 上连接
原文:https://towardsdatascience.com/prepare-behavioral-questions-for-data-science-interviews-96e97f13be15?source=collection_archive---------5-----------------------
Clem Onojeghuo 在 Unsplash 拍摄的照片
我在之前关于数据科学面试准备的文章中已经列出了机器学习、统计学、概率论中需要练习的技术问题。我还讨论了可用于在数据科学面试之前和期间准备案例研究问题的策略。本文是数据科学面试准备系列的第五篇文章,将重点讨论行为问题。我将首先讨论如何准备行为回合,然后列出一些常见问题供您练习技巧。
我最喜欢面试过程中的行为环节,因为与其他技术环节相比,它相当放松。在我知道任何回答行为问题的策略之前,我总是觉得我在和某人聊天,谈论我在这一轮中的有趣经历。虽然在面试中拥有一个不那么紧张的心态是件好事,但是过度放松的心态可能不会帮你给面试官留下好印象。结果我说了太多细节,失去了证明我拥有面试官想要的东西的机会。请记住,即使你大部分时间都在和面试官聊天,你仍然会通过这一轮的谈话得到评估。如果你能借此机会向面试官展示,根据你的经验和个性,你是这个职位的最佳人选,那就最好了。没有坚实的例子和既定的结构,你就无法有效地表达自己,我将在本文中讨论这一点。
你回答行为问题的内容是基础。在面试过程中,为了保持对话流畅,你很少有时间去想一个完美的例子来回答这个问题。因此,在准备面试时,我们应该从收集所有“有用”的经验开始,并根据它们可以用来回答什么类型的问题进行分类。这样,你就知道你总会有话题可谈,并且有合适的例子来支持你的论点。在这一节中,我将讨论收集可靠示例的过程。
列出你的清单
你应该用什么例子来回答行为问题?想想你过去有过的工作和学习经历,分门别类。
当我准备行为问题时,我用下表来头脑风暴我的经历。虽然提问的方式有上百万种,但我们可以将其归纳为以下八类。你遇到过哪些挑战?你如何安排工作的优先次序?有哪些你想分享的成就?有哪些展现你领导能力的例子?你们什么时候有过矛盾,怎么处理的?你犯过哪些错误?你如何适应一个新的环境,你如何融入?
类别清单
对于每个类别,搜索你的记忆,准备至少一个例子来分享。如果你有一个以上的每个类别的例子,太好了!把它们都写下来,在不同的方面进行强调。例如,对于显示你的成就的同一类别,你可能会发现一个例子强调你的自学技能,另一个例子显示你是一个团队成员。都是面试官可能会寻找的优秀品质。将它们全部收集起来,并学习如何在面试中根据问题的背景来优先考虑要分享的内容。
区分例子的优先顺序
如果你有几个你征服过的挑战,你应该选择哪一个来回答一个特定的问题?我建议您遵循这些原则来排列示例的优先级:
优先考虑影响较大的例子:影响是关键。它展示了你的工作成果,证明你有资格申请。当你说我为我的项目建立了一个新的模型,人们可能会想知道为什么,直到你提到这个模型增加了 x%的客户保持率。优先考虑相关的例子:这里的相关性有几个方面。首先,基于问题的语境是没有疑问的,问题怎么问,答案可能不一样。因此,积极倾听在面试中非常重要。虽然你可能已经准备了一个很好的演讲,但如果与问题无关,你应该随时调整你的答案。此外,如果你申请工作岗位,与工作相关的例子与学校项目更相关。优先考虑最近的例子:讨论最近发生的例子比讨论很久以前发生的事情更好。例如,你可以讨论你在最近职位上的经历。如果你有工作经验,当被问到领导技能时,你仍然使用学校的例子,面试官可能会怀疑你是否能够在工作中实践你的技能。这将发出一个不好的信号。
研究公司核心价值观和职位描述
基于你所谈论的经历,面试官希望从你身上找到一些关键特征。一般来说,这些特征是:
优秀的沟通者自信与谦逊积极进取遵守规则和协议的能力独立自主与他人合作愉快问题求解程序对角色和公司的承诺领导素质公司的正面代表
你使用的例子应该向面试官展示你拥有他们所寻找的关键特征。此外,每个公司都有自己的核心价值观,这些价值观会优先考虑某些品质。你应该很容易在网上找到核心价值观,或者从工作描述中总结出来。在准备例子的时候,记住所有的核心价值观,试着在你的答案中融入它们并区分它们的优先次序。
充分利用每个例子
在回答一个关于解决冲突的问题时,除了展示你解决问题的技巧,你还可以展示你优秀的沟通技巧和领导主动性。因此,我建议也为你所有的代表性例子制作下表:
首先总结一下这个例子的量化影响。然后,尝试分析该示例,并勾选标记该示例有助于演示的类别。你可以用一句话总结一下你在这个例子中完成的任务,展示你在这个类别中的素质。
如果你以前有工作经验,你可以很容易地找到大量的例子,当你全职工作,兼职,或在实习期间。对于新毕业生来说,学术经验也可以被视为工作经验,只要有合适的例子。你可以谈论你从事的一个个人研究项目;你如何与顾问合作,顾问就像是工作中的监督者;你是如何和其他研究生一起工作的,他们就像工作中的同事一样。如果你曾经做过助教,即使这份工作本身可能与你现在申请的职位无关,你仍然可以谈论一些展示你沟通和领导能力的经历清水鼓动预测分析。
要诚实
不要编造任何例子! **不要冒充自己不是的人。**找到工作不是故事的结束,而是一个开始的篇章。你不想给你未来的同事或老板留下错误的印象,在未来的每一天你都必须表现得像另一个人。与其编造例子,不如试着思考你的经历,挖掘细节。当我寻找我的第一份全职工作时,我很难向一些面试官证明我的工作能力。我非常强调我在创业公司的实习经历,尤其是我和我的主管以及来自不同团队的同事一起工作的时候。这段经历给了我很多例子来证明我的沟通和领导能力,并向面试官展示我能在快节奏的工作环境中表现出色。这也是为什么我们需要深入并充分利用我们上面讨论的所有例子。
你的答案应该总是有条理的。否则,你会很容易发现自己长时间无目的地说话,或者喃喃自语不必要的细节。你没有赶上朋友,你需要深入你经历的每一个细节。你也没有写一部惊悚片,你需要你的读者努力思考,并试图给他们惊喜。面试时,你的回答应该直接、简洁、清晰。
遵循星型结构
星星代表状况、要求、结果。这是一个可靠的方法来组织你的答案。
作者绘图
你可以通过简单描述你所处的情况或者你需要完成的任务来开始你的回答。然后谈论你必须完成的任务。之后,列出你完成任务所采取的行动。最后,总结你行动的结果。比如发生了什么?事件是如何结束的?你完成了什么?你学到了什么?请注意:
你可以用结果来描述情况。例如,你可以以“我想分享我建立一个将客户流失率降低 x%的模型的时间”开始你的回答。你选择的任务应该是具体的,而不是笼统的或者假设的。重点描述你的任务和行动,即使是一个团队项目。如果你需要提及他人的任务,强调沟通和协作技巧。如果能量化结果,总会更让人印象深刻。
更多细节和例子,参考这篇文章和许多其他在线文章,帮助你练习这个结构。
关注影响而非过程
我再怎么强调展示你的作品的影响力也不为过。你如何做到这一点很重要,但这不是重点,因为你不是在参加知识共享会议。你应该专注于你做了什么,特别是有什么结果。量化对公司关键 KPI 的影响会给面试官留下更深刻的印象。
细节留待后续提问
一开始不要深究细节,尤其是技术细节。保持你的答案清晰,直奔主题。对示例进行高水平的介绍,首先关注影响和结果。如果面试官很好奇你是如何取得结果的,他们会问一些后续问题,那么你可以谈得更详细一些。如前所述,对你知道的和不知道的要诚实。如果你假装做过某事或知道某事的细节,面试官可能会问后续问题,发现你在撒谎。这是一个可怕的信号。
现在,您已经有了一些例子,并且知道了要使用的正确结构,请练习以下问题:
告诉我一次你被要求做你以前从未做过的事情?你学到了什么?告诉我你同时参与多个项目的时候。你是如何安排时间的?结果如何?告诉我你工作中某件重要的事情没有按计划进行的时候。你的角色是什么?结果如何?你从经历中学到了什么?告诉我你不得不与难以相处的人一起工作的时候。你如何处理与那个人的互动?告诉我一个当问题出现时你的主管不在的时候。你是如何处理这种情况的?你和谁商量了?
还有很多其他的问题你可以在网上找来练习。当我说练习时,我的意思不是让你写下答案并通读一遍,希望在面试中得到完全相同的问题。而是用既定的结构来练习答题。此外,在镜子前或与同伴练习,这样你会得到一些反馈。请记住,在面试过程中,你不是在演讲,而是在和别人交谈。因此,积极倾听,同时留意他人的反应非常重要。我知道虚拟面试可能更具挑战性,我这里有一篇文章可以帮助你更好地准备虚拟面试。我们的目标是进行一次精彩的对话,这样你就可以专注于回答问题,而不是提供“完美的答案”。
这就是本文的全部内容。感谢您的阅读。这是我所有博客帖子的列表。如果你感兴趣的话,可以去看看!
https://zzhu17.medium.com/my-blog-posts-gallery-ac6e01fe5cc3 https://zzhu17.medium.com/membership
原文:https://towardsdatascience.com/prepare-data-for-your-ml-models-in-the-fastest-and-easiest-way-with-amazon-sagemaker-data-wrangler-186aaa71e7d9?source=collection_archive---------29-----------------------
亚马逊 SageMaker Data Wrangler 是 2020 年 12 月宣布的一项新服务,旨在简化机器学习的数据准备和特征工程过程。您可以使用该工具的可视化界面来构建预处理和可视化管道(或称之为流程)。准备就绪后,导出您的代码流并在任何地方运行!它还集成了其他 SageMaker (SM)服务(如 SM 管道和 SM 功能商店 )
。在这篇文章中,我们将通过使用一个样本数据集构建一个数据牧马人 流来介绍这一新服务的功能。我们将在 Data Wrangler 环境中导入我们的数据,并探索其数据处理和可视化能力。最后,我们将看到我们的工作如何运作。这篇文章的目的是探索这种新的 SageMaker 产品的可能性,并展示如何以简单、快速和可重复的方式为机器学习任务准备数据。
如果你打算继续下去,有几样东西你需要拿到手。即使你没有,你仍然可以阅读这篇文章,自己决定这个工具是否适合你。
Data Wrangler 是 SageMaker Studio 的一部分,sage maker Studio 是基于云的 IDE。因此,您需要访问 SM Studio 和 Data Wrangler。如果您是第一次从您的帐户使用 SageMaker,那么免费层将涵盖您的费用,因为它包括前两个月每月 25 小时的 Data Wrangler 使用。但是,请注意,如果您不属于这一类别,将会产生一些费用。
在这两种情况下,一定要坚持到这篇文章的结尾,看看如何清理使用的资源,并确保不会留下任何运行的东西,这会在月底引起令人惊讶的账单。
您还需要使用现有的或新的 S3 铲斗。
我们将使用众所周知的葡萄酒质量数据集,你可以在这里找到并下载。本质上,这是一个回归问题,我们试图根据一些已知的特征(物理化学测试)来预测葡萄酒的质量分数(感官数据)。
以上链接中的数据由两个数据集组成,白葡萄酒和红葡萄酒各一个。
在我们深入 SageMaker 世界之前,请确保下载数据并进行以下处理。截至本文撰写之时,如果数据是 CSV 格式的,Data Wrangler 可以直接从 S3 加载数据(它也支持从 Redshift 或通过使用 Amazon Athena 加载数据,但这超出了本文的范围)。
我们拥有的数据集实际上是分号分隔的值,而不是逗号分隔的值。因此,您需要打开您选择的文本编辑器并替换“;”带“,”。
或者,如果您喜欢命令行,并且在基于 Unix 的系统上,您可以从命令行快速完成此操作:
下一步,将这些文件上传到 s3 存储桶。不管它是新的还是现有的存储桶,只要您有权限将数据上传到那里并检索它们。
首先,打开 SageMaker Studio,因为这是我们访问 Data Wrangler 图形用户界面(GUI)的方式。如果你以前没有这样做过,打开 AWS 控制台,搜索“sagemaker”并打开 Studio。如果你想了解更多关于 Studio 的信息,请看这里。
SageMaker studio 启动并运行后,点击进入 Data Wrangler 菜单后出现的“新流程”,创建新的 Data Wrangler 流程,如下所示。
一旦完成,就该导入数据了。在 import 选项卡上,单击 s3 并导航到包含数据的 s3 文件。
请注意,您将能够一次导入一个数据集,因此您需要这样做两次,因为我们的数据在两个文件中。再次点击“导入”标签,出现如上页面,再次点击从亚马逊 S3 导入。
在同一个窗口中,转到选项卡准备应该如下所示。如果没有,请再次检查您是否遵循了说明。
现在,我们将在这里构建我们的处理流程!第一步是将我们的数据集连接起来。
点击“+”图标,显示我们可以采取/添加到流程中的行动。
在我们现在的例子中,我们将选择连接。
单击连接后,您需要单击要连接的数据集。单击另一个数据集。然后点击配置获得更多选项。
在这里,我们选择新数据集的名称,以及我们是否想要添加一列来指示任何特定行来自哪个文件。
Data Wrangler 的好处之一是收集了可用的转换,您可以对数据进行开箱即用。但是如果这还不够,您还可以添加自定义转换。
我们将再次按下“+”图标,这次是新创建的葡萄酒质量框旁边的那个图标(代表新数据集)。从下拉菜单中选择“添加转换”。
在右边你会看到一个支持的转换列表。随意探索和试验你喜欢的。
为了向您展示它是如何工作的,让我们选择处理数字→保持变换&缩放器不变→选择一列(如糖残留)→点击缩放&中心→预览&添加
让我向您展示如何添加自定义计算。
点击自定义转换,选择您将使用的底层框架并键入您的代码。就这么简单。
目前你的选择是使用 Python 和 Pandas,Python 和 PySpark,或者在 PySpark SQL 上使用 SQL。
那么,让我们创建一个新的特性。我将使用 python-pandas 代码创建它:
如果你正在注意,你可能会从椅子上跳起来,对我大喊这毫无意义。请耐心听我说,一会儿我想给你看些有趣的东西。现在,这展示了如何使用定制代码来添加您自己的、独特的转换。
构建处理流程不可或缺的一部分是理解您的数据,而帮助您理解数据的最佳方式之一就是将数据可视化。Data Wrangler 也可以帮助您做到这一点。
让我们回到主准备页面,再次点击“+”图标。这次选择“添加分析”。
这将带您进入一个菜单,您可以从可用图形类型列表中进行选择。你可以随意探索,但是现在,让我们选择做一个散点图。我想看看残糖与总二氧化硫按酒型分解的关系。
选择预览以生成绘图,如果你想保留它,点击创建。
这样做又快又省事。使用这些图表,我们现在可以探索数据集,更好地理解我们的数据之间的关系,并且我们可以选择保留我们希望在未来重新创建的分析步骤,或者删除没有信息的步骤。
谈到这种分析功能,您可以做几个重要的分析,这可以极大地帮助您为即将到来的机器学习建模阶段准备数据。
首先让我们来看看泄漏检测。这个分析试图告知我们潜在的 目标泄露 。这就是目标变量的信息似乎通过另一个特征泄漏的时候。在现实生活中,这可能发生在我们使用一个可能是目标变量的子产品,但实际上在推理时不可用的特征的情况下。这正是我们之前创建“泄漏特征”的原因。来模拟这样的场景。这听起来不太可能发生,但它确实发生了,你需要做好准备并留意它。让我们看看我们如何能做它。
我们创建一个新的分析,这次选择“TargetLeakage”作为分析类型。选择适当的问题类型和目标变量(对我们来说是“质量”)。点击预览,等待几秒钟。
如您所见,它能够检测到由于特性“ leakyFeature ”(如预期的那样)而导致的信息泄漏,因此现在我们可以添加一个步骤来从我们的数据集中删除该列。
请注意,在这一步,数据科学家负责进一步调查某个特征是否确实在泄露信息。可能存在这样的情况,即某个特征非常具有预测性,并且实际上将在推断时间期间可用。机器和算法变得越来越智能,但仍然需要数据科学家来做出这样的决定。
要删除该列,像以前一样添加一个转换,并选择 Manage columns 来删除列 leakyFeature (当然,您可以一开始就不创建它,但这只是一个例子)
我想向您展示的最后一个分析功能是 快速模型 。
这是一个非常方便的特性,在引擎盖下训练一个模型(一个随机的森林)并报告性能和特性重要性。这不是用来作为预测的模型,而是作为一个指示,你可以期望模型工作的多好,也给你什么样的特性会更重要的见解。有了这些信息,你可以决定回到绘图板,考虑你的特征工程,节省你的时间,让你更快地迭代特征工程。如果你有兴趣了解更多关于快速模型是如何工作的,我鼓励你阅读更多关于文档的内容。我需要强调的一点是。快速模型将尝试自动猜测我们要解决的问题类型(分类或回归)。方法是通过查看目标变量来推断。如果它有超过 100 个不同的值,那么它假设这是一个回归问题,如果它没有那么它是分类。在我们的例子中,我们只有 10 个不同的值,所以这将被理解为一个分类问题。
下一步完全是可选的————
有人可能会说,我们可以把这个问题作为一个分类问题来处理,但我想把它变成一个回归问题。怎么会?你还记得我们之前做的自定义计算吗?让我们利用这一点。
让我们创建一个自定义计算,这次添加以下 python 代码:
这是在做什么?这给我们的目标变量增加了一些低量级的随机噪声。这不会影响任何分析的质量,但会使 data wrangler 将我们的问题视为回归
注意:如果您尝试以下两种回归和分类方法,您会发现特征重要性基本相同。
完全可选步骤结束———
要运行快速模型分析你需要添加分析,选择快速模型然后选择目标变量是什么。点击预览,等待几秒钟,看看结果。
正如你所看到的,快速建模非常快速和容易使用,可以给我们一些很好的见解,哪些功能可能在建模阶段更有用。
到目前为止,这很好,但是我听到你问我们如何通过点击来操作我们创建的流程。
是时候将我们的工作以一种更易于操作的格式导出了。
Data Wrangler 提供了几种不同的方法来导出您的流量。简而言之,这些选项如下。
用 python 代码导出:您可以将您的流导出到 python 文件中。然后,您可以获取这个 python 文件,并在您需要的任何地方以任何方式运行它。你甚至可以编辑文件,添加你定制的额外步骤或改变一些东西。导出为 Data Wrangler 作业:这将生成一个笔记本,在运行时,它将加载您的流文件并将其作为 SageMaker 处理作业执行。导出为要素存储:这与上述方法类似,但也会在要素存储中创建和接收数据。如果您正在创建希望团队中的其他成员或未来的自己能够访问的功能,并且您认为 SageMaker 功能商店是适合您这样做的服务,那么这将非常方便。Export as Pipeline:这将创建一个笔记本,它定义一个 SageMaker 管道,其中一个处理步骤是流的执行。如果您希望使用 SageMaker Pipelines 来操作您正在进行的整个 ML 项目,这将是理想的,因为 Pipelines 是 ML 领域 AWS 的 CI/CD 工具。
无论如何,让我们看看我们能做什么。
我们单击顶部的导出选项卡,我们单击我们流程的步骤,然后单击“导出步骤”。
正如您所看到的,生成的 python 文件相当长,但是不用担心,大部分都是转换的函数定义。滚动到底部,您将清楚地看到我们在流程中采取的所有步骤现在都是通过代码完成的。
综上所述,我们已经快速地做了相当多的工作,而且几乎没有编写任何代码。
我们首先将数据集组合在一起,创建并转换特征,可视化我们的数据,并了解哪些特征在建模过程中更有用,这样我们甚至不用离开我们正在使用的工具就可以重复特征工程阶段。最后,我们看到,这种互动和可视化流程可以很容易地导出为各种格式,这取决于我们的运营需求。
你现在已经准备好试验你自己的数据并创建你自己的流了。请在下面的评论中告诉我你的成功或者你在这个过程中遇到的任何挫折。
如果你一直在跟踪,那么在你关闭浏览器窗口之前,不要忘记关闭我们一直在使用的 Data Wrangler 服务器,否则你将会产生意想不到的费用。
首先确保保存您的 Data Wrangler 流,如果您想保留它,然后关闭实例,如下图所示。
现在去享受一杯茶或咖啡吧。这是你应得的!
原文:https://towardsdatascience.com/prepare-your-cv-for-a-data-science-job-7b8a4515c17b?source=collection_archive---------29-----------------------
来自的图像未绘制
我最近负责招聘流程,将一名新的数据科学家成员纳入我们的团队。我们发布了职位描述,仅仅 3 天之后,我们就收到了 70 多份申请。太神奇了!
然而,所有这些申请都必须经过筛选,因为只有一个职位空缺。我想和你分享一些我第一次面临的挑战,以及一些你可以用来充实你的简历的技巧。开始吧!
作为一个背景说明,不是所有的公司都以同样的方式工作,招聘过程将取决于招聘人员和招聘经理。
招聘团队可能会根据招聘经理描述的他们想要的东西进行第一次筛选。但是也有可能招聘经理会先做一个快速的筛选来挑选候选人。请注意,招聘经理将是你的上司。
反正两个人时间都很有限。招聘经理仍然要参加会议,开发项目,管理和指导团队。招聘人员可能还负责另一批申请。这就是为什么你的简历给人留下好印象是非常重要的。
在我第一次访问候选人库(+70 份简历)时,我意识到:
设计和简洁的简历非常重要。我没有时间阅读 5 页的课程,也没有时间阅读结构不合理的简历。使用的数据科学技能和工具必须一目了然且易于捕捉。一些简历有很多与申请工作不相关的经验,例如,要求 NLP 经验或深度学习,但在经验或关键词中一次也没有显示。应使用普通过滤器。我必须对所有候选人应用一个共同的最小阈值来过滤掉他们。我不能完整地阅读所有的简历。长简历将被直接删除,除非它们在开头有一个摘要,让我了解相关信息。
在查看了一些课程后,我可以将申请分为:
好的。不到 2 页,所有我想检查的东西都在第一页。最好只有一页。易于理解的 ML 技能与类别和经验水平。长但结构良好。简历很长,但是仍然很容易阅读,并且在第一页有一个摘要。大概是这个人总结的不太好,想把什么都加上,以防对获得工作有帮助,或者他/她有太多的经验和项目。长而不可追。我注意到多个申请者都有相同类型的 5 页加简历。它们很长,没有页边空白,没有类别或结构来理解你所读的内容。
之后,根据我快速看到的内容,我想出了一些要点,可以帮助你改进简历,并让你的技能更容易匹配。
图片来自未刷
工作经历应该是招聘经理看到的第一件事。我主要对你的相关经验感兴趣,在此之前请不要添加你的技能列表。理想情况下,你可以加上你的工作经验(包括工作年限和成就)以及该工作所需的技能和/或工具,或者在此期间开发的技能和/或工具。如果你申请的工作非常侧重于 python、分类算法和 NLP,在你的工作经历下添加关键词: 它会显示你对该工作的相关经验,更快地抓住招聘人员的眼球。如果你没有足够的工作经验,加上你在 Kaggle 等项目上的经验或者其他任何有真实数据的项目。如果你来自一所研究型大学,让技能和工具适应你申请的工作。如果职位描述要求 python 的知识,不要说你懂 Stata 和 Latex 这没什么用,只会在你的简历中占空间。不要在没有分类的情况下添加一长串技能。如果你的技能是基于编程、ML 框架、算法、软技能、版本控制工具、语言等。然后说出来,不要都加了等招聘经理找到自己感兴趣的。额外提示:如果这个职位需要 X、Y 或 Z 技能,用粗体突出你已经具备这些技能。这会更快地吸引招聘人员的目光。不要为了填满空间而添加额外的东西。确保你言简意赅,不要在工作经历中重复同样的描述。如果在你的生活中有两个工作是做 A/B 测试的,在其中一个工作中添加一个,在另一个工作中添加你分析数据或者你做的任何与 A/B 测试相关的事情。它将展示多样性,我将看到你已经知道了。然后在面试中,你将能够真正展示出你掌握了那项技能。确保职位在工作经历部分的位置与公司和工作时间一致。应用适当的边距。说到底,我们是人,我们读的是有条理的东西,而不是乱七八糟的。如果你的简历没有条理,我会认为你在你的职位上不会有条理,所以除非招聘经理与此相关,否则你不会轻易被考虑在内。不要写你是单身甚至你的出生日期。我们根据你的资历做出决定,所以避免任何可能影响决定的额外因素。发送 PDF 格式的简历,不要。docx 。你不知道我们用来打开它的平台,如果它不是 pdf,我们可能看不到它像你做的那样漂亮。
这只是一些能真正提升你简历的技巧。请确保你明白审查它的人没有多少时间,你应该在你的简历中取得成功,以便有机会获得现场面试。
祝你好运!
原文:https://towardsdatascience.com/preparing-dns-data-for-cyber-security-focused-data-science-e596eb03cdf?source=collection_archive---------34-----------------------
阿迪·戈尔茨坦在 Unsplash 上拍摄的照片。
互联网的域名系统(DNS)将域名转换为数字互联网协议(IP)地址[1]。这使得人类浏览网页变得容易得多,比起一串看似随机的数字,人类更容易记住 medium.com。但是像网络空间中几乎所有的活动一样,网络威胁已经并将继续利用 DNS 活动[2]。
正因为如此,专注于网络安全的数据科学家经常发现自己在处理 DNS 数据。通常,这由一个域列表组成,没有其他内容;发现不寻常的或恶意的域名可能具有挑战性。然而,了解域名结构和基本功能工程可以让数据科学家丰富域名数据,以便进行更深入的分析。
域名包含了相当多的信息。考虑下面这个维基百科的例子:
https://en.wikipedia.org 元素的分解。作者创建的图像。
顶级域名(TLD)和二级域名(SLD)共同构成了互联网用户通常记忆中的根域名。顶级域名可以传达额外的信息,例如国家代码顶级域名(ccTLDs)的地理位置。有些网站有子域;在上面的例子中,维基百科有不同的语言和不同的子域相关联。维基百科使用“en”来表示英语子域,而 fr.wikipedia.org 会提供法语子域[3]。其他常见的子域用途包括博客、商店和支持网站。
说到 DNS 和网络安全数据分析,一个域名列表,如 medium.com,google.com,yahoo.com 等。,可能看起来没多大价值。这就是通过TLDextract【4】的数据准备和来自特征工程的概念【5】发挥作用的地方:
特征工程是利用领域知识从原始数据中提取特征(特性、性质、属性)的过程。
— 特色工程,维基百科
首先,我们需要一些数据。 Majestic Million 根据参考子网跟踪排名前 100 万的域名,以衡量网站的重要性或相关性[6]。该网站提供基于知识共享署名的 CSV 数据导出许可。
本演练使用 GitHub 页面上提供的 Majestic Million 的前 100 个域名的样本,以及分析中使用的完整 Jupyter 笔记本 。下载笔记本和数据以便跟进。下面是原始数据的一个示例:
Majestic Million 数据样本的前五行的作者截屏。
从一个域名中提取 TLD、子域名等看起来就像在句点处拆分字符串一样简单。但是,在国家代码的情况下,一些顶级域名是由多个部分组成的(例如:co . uk);TLDextract 说明了这一点,它是一个比内置函数更好的工具,内置函数可能会将字符串拆分成句点[7]。
首先安装 TLDextract :
然后导入库:
要获取一个域,例如 medium.com,并提取“medium ”,请运行以下代码:
产生的数据帧样本为:
作者截图。
要提取 medium.com 的 TLD,如“com ”,请运行以下代码:
产生的数据帧样本为:
作者截图。
要提取子域,如 en.wikipedia.com 的“en ”,请运行以下代码:
并非所有的域都有子域,因此要查看效果,有必要通过以下代码进行排序:
按视图子域排序的结果 dataframe 示例为:
作者截图。
请注意 TLDextract 是如何将一列域转换成几列数据的。查看子域名和顶级域名可以证明对各种类型的网络安全分析有用。例如:
Spamhaus 跟踪十大最差顶级域名的滥用情况,并提供 TLD 检查功能[8]。提取 TLD 提供了一种识别数据集中常见滥用 TLD 的方法。子域名构成了劫持的机会,并且根据 ATT 协议 CK 框架是一个已知的漏洞。
虽然 TLDextract 提供了丰富的信息,但域名有更多值得提取的数据:
域名由字母数字组成。除了字母,域名中还有其他字符,如数字和句点。字母与非字母的比率可以提供对领域特征的洞察。以下 python 函数将有助于提取字母比例信息:
尝试运行一个示例域,如 medium.com:
这应该返回 0.9,因为有 10 个字符,其中 9 个是字母,一个是句点。使用以下代码将其应用于数据帧:
作者截图。
域部分将域分成多个可用的部分。例如,medium.com 有两个,用句点分隔两个部分。提取它的函数是:
使用以下代码将其应用于数据帧:
作者截图。
最后一个是域名中的简单字符数。使用以下代码将其应用于数据帧:
最终准备好的数据框架的作者截屏。
曾经只有一列域名的数据框架现在增加了六列。衍生的信息可能对未来的工作有用,例如识别滥用 TLD 的存在,甚至利用字母比率和字符数等进行异常检测。识别异常值的基本可视化示例如下图所示:
请注意,任何字母比低于. 81 的域都是异常值。
这是域名分析的简单起点,提取的特征可以为更深入、更高级的后续分析提供信息。请随意使用 GitHub 页面的上的笔记本来准备您自己的域名数据。
【1】cloud flare,什么是 DNS?DNS 如何工作 (2021),Cloudflare。
[2] MITRE | ATT&CK,应用层协议:DNS,子技术 T1071.004 (2021),MITRE。
[3]维基百科:免费的百科全书,维基百科 (2021)。
[4] J. Kurkowski,GitHub—John-Kurkowski/tldextract(2021),GitHub。
[5]维基百科,特征工程 (2021)。
[6]浩浩荡荡,浩浩荡荡的百万 (2021)。
[7] J .库尔科夫斯基, GitHub —约翰-库尔科夫斯基/tldextract (2021),GitHub。
[8]Spamhaus 项目,十大最常被滥用的顶级域名 (2021),Spamhaus。
[9]ATT 和 CK,妥协基础设施:域名 (2021)。

05月09日 英超第36轮 利物浦vs切尔西 全场录像回放
2026年05月20日
05月10日 英超第36轮 伯恩利vs阿斯顿维拉 全场录像回放
2026年05月20日
05月10日 英超第36轮 曼城vs布伦特福德 全场录像回放
2026年05月20日
05月09日 英超第36轮 桑德兰vs曼联 全场录像回放
2026年05月20日
05月09日 英超第36轮 布莱顿vs狼队 全场录像回放
2026年05月20日
05月09日 英超第36轮 富勒姆vs伯恩茅斯 全场录像回放
2026年05月20日
05月19日 英超第37轮 阿森纳vs伯恩利 全场录像回放
2026年05月20日
05月18日 英超第37轮 纽卡斯尔联vsv西汉姆联 全场录像回放
2026年05月20日
05月17日 英超第37轮 利兹联vs布莱顿 全场录像回放
2026年05月20日
05月17日 英超第37轮 狼队vs富勒姆 全场录像回放
2026年05月20日
05月17日 英超第37轮 埃弗顿vs桑德兰 全场录像回放
2026年05月20日
05月17日 英超第37轮 布伦特福德vs水晶宫 全场录像回放
2026年05月20日
05月17日 英超第37轮 曼联vs诺丁汉森林 全场录像回放
2026年05月20日
05月14日 英超第31轮补赛 曼城vs水晶宫 全场录像回放
2026年05月20日
05月12日 英超第36轮 热刺vs利兹联 全场录像回放
2026年05月20日
05月16日 德甲第34轮 门兴vs霍芬海姆 全场录像回放
2026年05月20日
05月16日 德甲第34轮 勒沃库森vs汉堡 全场录像回放
2026年05月20日
05月16日 德甲第34轮 法兰克福vs斯图加特 全场录像回放
2026年05月20日
05月17日 德甲第34轮 拜仁慕尼黑vs科隆 全场录像回放
2026年05月20日
05月10日 德甲第33轮 沃尔夫斯堡vs拜仁慕尼黑 全场录像回放
2026年05月20日
05月09日 德甲第33轮 霍芬海姆vs不莱梅 全场录像回放
2026年05月20日
05月09日 德甲第33轮 斯图加特vs勒沃库森 全场录像回放
2026年05月20日
05月09日 德甲第33轮 RB莱比锡vs圣保利 全场录像回放
2026年05月20日
05月09日 德甲第33轮 奥格斯堡vs门兴 全场录像回放
2026年05月20日
05月11日 德甲第33轮 美因茨vs柏林联合 全场录像回放
2026年05月20日
05月10日 德甲第33轮 科隆vs海登海姆 全场录像回放
2026年05月20日
05月10日 德甲第33轮 汉堡vs弗赖堡 全场录像回放
2026年05月20日
05月11日 德甲第33轮 美因茨vs柏林联合 全场录像回放
2026年05月13日
05月10日 德甲第33轮 科隆vs海登海姆 全场录像回放
2026年05月13日
05月10日 德甲第33轮 汉堡vs弗赖堡 全场录像回放
2026年05月13日
05月18日 法甲第34轮 洛里昂vs勒阿弗尔 全场录像回放
2026年05月20日
05月18日 法甲第34轮 马赛vs雷恩 全场录像回放
2026年05月20日
05月18日 法甲第34轮 巴黎FCvs巴黎圣日耳曼 全场录像回放
2026年05月20日
05月18日 法甲第34轮 尼斯vs梅斯 全场录像回放
2026年05月20日
05月18日 法甲第34轮 里尔vs欧塞尔 全场录像回放
2026年05月20日
05月18日 法甲第34轮 布雷斯特vs昂热 全场录像回放
2026年05月20日
05月14日 法甲第29轮补赛 朗斯vs巴黎圣日耳曼 全场录像回放
2026年05月20日
05月14日 法甲第29轮 布雷斯特vs斯特拉斯堡 全场录像回放
2026年05月20日
05月11日 法甲第33轮 雷恩vs巴黎FC 全场录像回放
2026年05月20日
05月11日 法甲第33轮 图卢兹vs里昂 全场录像回放
2026年05月20日
05月11日 法甲第33轮 巴黎圣日耳曼vs布雷斯特 全场录像回放
2026年05月20日
05月11日 法甲第33轮 摩纳哥vs里尔 全场录像回放
2026年05月20日
05月11日 法甲第33轮 梅斯vs洛里昂 全场录像回放
2026年05月20日
05月11日 法甲第33轮 勒阿弗尔vs马赛 全场录像回放
2026年05月20日
05月11日 法甲第33轮 欧塞尔vs尼斯 全场录像回放
2026年05月20日
05月10日 西甲第35轮 皇家社会vs皇家贝蒂斯 全场录像回放
2026年05月20日
05月09日 西甲第35轮 塞维利亚vs西班牙人 全场录像回放
2026年05月20日
05月18日 西甲第37轮 巴塞罗那vs皇家贝蒂斯 全场录像回放
2026年05月20日
05月18日 西甲第37轮 塞维利亚vs皇家马德里 全场录像回放
2026年05月20日
05月18日 西甲第37轮 皇家社会vs瓦伦西亚 全场录像回放
2026年05月20日
05月18日 西甲第37轮 奥萨苏纳vs西班牙人 全场录像回放
2026年05月20日
05月18日 西甲第37轮 巴列卡诺vs比利亚雷亚尔 全场录像回放
2026年05月20日
05月18日 西甲第37轮 皇家奥维耶多vs阿拉维斯 全场录像回放
2026年05月20日
05月18日 西甲第37轮 莱万特vs马略卡 全场录像回放
2026年05月20日
05月18日 西甲第37轮 马德里竞技vs赫罗纳 全场录像回放
2026年05月20日
05月18日 西甲第37轮 埃尔切vs赫塔费 全场录像回放
2026年05月20日
05月18日 西甲第37轮 毕尔巴鄂竞技vs塞尔塔 全场录像回放
2026年05月20日
05月15日 西甲第36轮 瓦伦西亚vs巴列卡诺 全场录像回放
2026年05月20日
05月15日 西甲第36轮 赫罗纳vs皇家社会 全场录像回放
2026年05月20日
05月15日 西甲第36轮 皇家马德里vs皇家奥维耶多 全场录像回放
2026年05月20日
05月17日 意甲第37轮 热那亚vsAC米兰 全场录像回放
2026年05月20日
05月10日 意甲第36轮 维罗纳vs科莫 全场录像回放
2026年05月20日
05月10日 意甲第36轮 莱切vs尤文图斯 全场录像回放
2026年05月20日
05月10日 意甲第36轮 拉齐奥vs国际米兰 全场录像回放
2026年05月20日
05月09日 意甲第36轮 卡利亚里vs乌迪内斯 全场录像回放
2026年05月20日
05月18日 意甲第37轮 萨索洛vs莱切 全场录像回放
2026年05月20日
05月18日 意甲第37轮 乌迪内斯vs克雷莫内塞 全场录像回放
2026年05月20日
05月18日 意甲第37轮 卡利亚里vs都灵 全场录像回放
2026年05月20日
05月18日 意甲第37轮 亚特兰大vs博洛尼亚 全场录像回放
2026年05月20日
05月17日 意甲第37轮 国际米兰vs维罗纳 全场录像回放
2026年05月20日
05月17日 意甲第37轮 罗马vs拉齐奥 全场录像回放
2026年05月20日
05月17日 意甲第37轮 比萨vs那不勒斯 全场录像回放
2026年05月20日
05月17日 意甲第37轮 尤文图斯vs佛罗伦萨 全场录像回放
2026年05月20日
05月12日 意甲第36轮 那不勒斯vs博洛尼亚 全场录像回放
2026年05月20日
05月11日 意甲第36轮 帕尔马vs罗马 全场录像回放
2026年05月20日
04月19日 NBA季后赛东部首轮G1 猛龙vs骑士 全场录像回放
2026年05月20日
05月06日 NBA季后赛西部半决赛G1 湖人vs雷霆 全场录像回放
2026年05月20日
05月05日 NBA季后赛东部半决赛G1 76人vs尼克斯 全场录像回放
2026年05月20日
05月06日 NBA季后赛东部半决赛G1 骑士vs活塞 全场录像回放
2026年05月20日
05月05日 NBA季后赛西部半决赛G1 森林狼vs马刺 全场录像回放
2026年05月20日
05月04日 NBA季后赛东部首轮G7 魔术vs活塞 全场录像回放
2026年05月20日
05月03日 NBA季后赛东部首轮G7 76人vs凯尔特人 全场录像回放
2026年05月20日
05月02日 NBA季后赛东部首轮G6 骑士vs猛龙 全场录像回放
2026年05月20日
05月02日 NBA季后赛西部首轮G6 湖人vs火箭 全场录像回放
2026年05月20日
05月02日 NBA季后赛东部首轮G6 活塞vs魔术 全场录像回放
2026年05月20日
05月01日 NBA季后赛西部首轮G6 掘金vs森林狼 全场录像回放
2026年05月20日
05月01日 NBA季后赛东部首轮G6 尼克斯vs老鹰 全场录像回放
2026年05月20日
05月01日 NBA季后赛东部首轮G6 凯尔特人vs76人 全场录像回放
2026年05月20日
04月27日 NBA季后赛东部首轮G4 骑士vs猛龙 全场录像回放
2026年05月20日
04月26日 NBA季后赛西部首轮G4 掘金vs森林狼 全场录像回放
2026年05月20日