搭车还是开车:比较拼车和汽车所有权的金融模型
拼车真的能取代汽车吗?数据显示,如果你的驾驶里程不到 10,000 英里,也许可以。
随着加州 AB5 的实施和随后前期定价的下降,乘车共享市场最近经历了一些变化。Lyft 和优步一直在不断平衡其商业模式的动态性,同时应对日益增加的监管审查和对乘客安全的担忧。然而,两家公司都继续表示,拼车总有一天会完全取代汽车所有权。
来源: CB Insights
大约 6 个月前,我从肯塔基州的路易斯维尔搬到了洛杉矶。我在两个不同的办公室工作,一个在洛杉矶西部,一个在市中心。我不开车,一直依赖公共交通、自行车和拼车应用。所以,我的问题是:优步和 Lyft 是对的吗?拼车能取代汽车所有权吗,尤其是在世界上最臭名昭著的驾车城市之一?
优步/ Lyft 定价模型很难预测,因为市场算法消耗了大量的输入数据。内置了无数的变量,这些变量不断地接收实时事件,例如驾驶员位置、乘车次数请求以及一天中的时间等
在本文中,我首先考察了四种不同车型每年的汽车拥有成本,包括直接成本和间接成本。然后,我结合优步和 Lyft 过去几个月的数据,将拼车作为一个广阔的市场进行研究,建立三个回归模型,以获得拼车的大致成本结构,最终回答一个非常重要的问题:
我们是骑车还是开车?
每年拥有汽车的成本
为了进行这项分析,我从 2019 年 AAA 驾驶成本报告中提取了 4 种不同类型汽车的数据:(1)中型轿车,(2)电动轿车,(3)混合动力轿车,以及(4)中型 SUV。这些似乎是洛杉矶最实用的车,也是最常上路的车。如果你对自己的计算感兴趣,AAA 有一些基线指标可以提供。
直接费用
来源: AAA
这些车的年费用都差不多,从 5700 美元到 6800 美元不等。根据 AAA 的数据,2019 年拥有一辆中型轿车的平均成本为 8643 美元(假设每年行驶 15k 英里)。这包括保险、执照和注册、税收、折旧和融资费用。你开得越多,由于折旧、燃料成本等的增加,汽车就越贵。
我在分析中还包括了加州的汽车成本。在这里拥有一辆汽车更贵,因为生活费用过高。例如,一辆中型轿车平均每英里多 0.3 美元。
然而,一辆汽车伴随的成本不仅仅是直接成本。这就是分析变得有点棘手的地方,因为其中一些变量可能是主观的,我将讨论这一点。还有额外的“间接”成本,包括罚单、停车费和机会成本。
间接费用
- 交通罚单(146.34 美元+增加的保险费)
2018 年,超过 60 亿美元的交通罚单被开给了 4100 万人。平均每人的交通罚单成本是 146.34 美元。这还不包括你拿到机票后增加的保险费,如下所述,这是一笔可观的费用。加州的一张票可以提高 1/3 的保险费,第二张票可以翻倍。如果一名司机每年收到一张罚单,那将导致 150 美元的罚单费用+850 美元的保费增长——仅仅一张罚单,汽车成本每年就会增加 1000 美元。我假设在汽车的使用寿命期间,至少有一张罚单。
来源:纽约超速罚款
- 停车费(4100 美元)
平均来说,美国人每年在停车场的花费超过 1000 美元。纽约的消费额最高,为 2243 美元,西雅图位居第五,为 1205 美元。这甚至还没有考虑到寻找停车位的机会成本——纽约人在 2018 年花了 107 个小时寻找停车位。那就是每年 4.45 天,光是找地方停车。
来源:租车
根据 INRIX 的数据,停车是车主最大的一项支出。纽约是最贵的城市,因为纽约人往往更频繁地支付停车费,每次停车都要付更多的钱。洛杉矶位居第二,搜索和超额支付总计 2139 美元。
公寓和办公楼通常收取月费,根据位置不同,月费在 50-150 美元之间。我将计算停车和搜索时间(带缓冲区)的年总成本约为 4100 美元,即搜索时间的总成本和停车的总成本。
- 机会成本(1648 美元)
然后,有驾驶花费的总机会成本。我在乘车分享的后面打了一些这篇文章——当你不在方向盘后面时,更容易有效率。根据美国人口普查局的数据,2018 年平均通勤时间增加到 27.1 分钟。也就是每天 54.2 分钟,一周 4.51 小时,一个月 19.42 小时,一年 233.06 小时。
根据劳工统计局的数据,2019 年的平均工资为 28.29 美元。将平均工资乘以平均通勤时间得出的结果是生产力和工作时间损失 6593 美元。即使我们只有 25%的时间是在开车而不是做其他事情上,这仍然是每年 1648 美元的损失。
时间的估值是极其主观的,这里有很大的修改空间。正如上面的计算所示,有些人不重视他们的时间,而有些人比平均工资更重视他们的时间。都是相对的。
- 总间接成本= 6748 美元
因此,无论一辆车的成本是多少,加上间接成本,每年的额外成本就是 6748 美元。如果你驾驶的是香草冰淇淋的家庭轿车,那么你每年拥有汽车的成本估计为 15391 美元。
拼车市场的动态定价
很难找到 ride 股票背后的定价结构。很多定价源于位置、时间和交通。这些公司似乎也经常修改他们的定价模式,已经有多篇文章发表在拼车定价市场上频繁发生的变化。随着加州 AB5 的变化,现在这一切都不确定了。根据优步的说法:
来源:优步
根据拼车司机的细分(这可能有点简单,但出于说明目的很重要),估计每英里的成本为 0.80 美元,每分钟的成本为 0.20 美元至 0.28 美元,具体取决于优步的类型。预订费因城市而异,但我估计预订费为 2.30 美元。
来源:顺风车共享司机
为了简单起见,我们可以假设等式为:
***Assumed _ Fare =***Base _ Fare+(英里驱动 x 每英里成本)+(分钟驱动 x 每分钟成本)
***cost _ Uber =***2.30+(0.80 *英里 _ 驱动)+ (0.24 *分钟 _ 驱动)
美国拼车的成本
平均通勤时间为 27.1 分钟。根据 FHWA 的数据,美国人平均每年驾车旅行超过 13476 英里。根据美国汽车协会 2016 年的美国驾驶调查,美国人平均每天出行 2.13 次,每年共计 777.45 次。
假设乘客刚刚使用了 rideshares,预订费用的总成本将为 1788 美元,乘以每次乘坐的预订费用 2.30 美元,每年有 777 次乘坐。每英里的年费用为 0.8 美元* 13,476 英里或 10,781 美元。每年每分钟的总成本为 5899 美元,等于每年 777 次旅行,乘以平均通勤时间 27.1,成本为 0.24 美元。
这导致骑优步或其他拼车平台的总年成本为 17,625 美元。我想在基本模型之外验证这一点,所以我收集了自己的数据。
凯拉的拼车数据
我六个月前从肯塔基州搬到了洛杉矶。我把我心爱的斯巴鲁 Outback 交给了我的弟弟,并决定穿越洛杉矶——这是大多数洛杉矶人的罪过。
我在西洛杉矶工作,住得离办公室很近。我早上很早就去上班,一开始,我从家走到办公室。被人追了之后,我开始骑自行车。然而,在洛杉矶骑自行车是有风险的,没有多少回报。
来源:美国街头博客
我也开始在市中心的办公室工作,每周有三天在市中心和洛杉矶西部之间往返。我通常在下午三点左右离开西洛杉矶前往市中心,并在晚上晚些时候返回西部。所以,如果我选择在清晨乘车,我有三个不同的通勤时间,都有不同的价格压力和动力。值得注意的是,我的大部分交通都是在典型的高峰时间之外,因此下面的分析可能会因此而有所偏差。
来源:谷歌地图
从西洛杉矶到市中心大约有 12 英里的路程,我不能骑自行车。我曾经骑自行车到世博线,把自行车停在外面,但有人给我的轮胎放气,我的头在线路上被抚摸了不止一次(欢迎使用洛杉矶公共交通),所以在过去的几个月里,我一直避免使用所有的公共系统。
我几乎每天都乘坐优步或 Lyft,通常会打开这两个应用程序来比较两者之间的成本。
由于我的工作安排,我避免了高峰时段的大部分价格上涨,下图中用红色标出。如堆叠区域所示,我经常在傍晚和晚上骑车。我收到的平均价格可能会更低,因为我倾向于避免“激增定价”。
下图详细描述了我的拼车习惯。我更多的时候是与人合租,而不是独自乘车,主要是为了安全,也是为了省钱和保护环境(至少是一种尝试)。如果我需要快速到达某个地方,我会使用 UberX 或 Lyft,这是 Lyft 的非共享乘车。如果我漠不关心,我会用共享。合租通常便宜 5-7 美元。我通常后悔采取优步池,因为它可以添加多达四个额外的人,这可能是极其痛苦的。
我在优步旅行的平均时间比 Lyft 多 4.5 分钟,我的平均时间要低得多。这可能意味着我的优步司机效率更高,或者 Lyft 在长途旅行中更便宜,所以我更经常选择它。我 61%的乘车是从西区到市中心,更大比例的优步是带我去市中心以外的地方。21%的时间我使用优步去市中心,另外 40%的时间我使用 Lyft。
在过去的四个月里,我已经走了 580 英里。这使得我的估计年里程数为 1738,这是非常低的(老实说,有点悲伤)。如果我有自己的车,我想象这将增加至少 25%,因为我可以在周末自由旅行,逃离洛杉矶。
检查数据
这是我的三个主要乘车共享变量,费用,秒数和距离之间的相关图。这种分析的目的是预测拼车的费用。我将把我的数据外推至数千英里,这意味着我假设这种关系将保持不变。
为了说明外推的问题,考虑一下罗伯特·奇拉曾经说过的关于苹果公司估值的话:
“如果你对未来进行足够远的推断,为了保持这种增长,苹果将不得不向地球上的每个男人、女人、孩子、动物和岩石出售 iPhone。
模式一:用秒和距离预测车费
我在 R 中运行了一个基本的线性回归,以查看秒和距离在确定票价方面的预测能力,因为这是大多数拼车模型所基于的,包括前面提到的拼车司机模型,以及凯尔·希尔 2014 年的模型。
从回归中提取数据,然后模型变成:
这意味着每增加一英里和第二次旅行,票价将分别增加 0.204 美元和 0.003 美元。此模型的问题是距离和秒之间的相关性为 91%,从而产生多重共线性问题。有几种方法可以解决这个问题,包括创建一个工具变量来消除处理距离的时间部分。
模型 2:包括高峰时间的虚拟变量
我决定修改等式,加入一个虚拟变量来确定我们是否处于高峰时间。高峰时间(在洛杉矶)是早上 6 点到 9 点和下午 3 点到 7 点。窗外的任何时间都是非高峰时间。我有 40 次乘坐在高峰时间之外,18 次在高峰时间规格之内。
该模型现在变成了:
从回归中提取数据,这变成:
这意味着每增加一英里和第二次旅行,票价将分别增加 0.196 美元和 0.003 美元。如果你在高峰时间开车,你的价格会增加 1.015 美元。
模型 3:减少秒数,在距离和高峰时间之间产生交互项
通过在距离和高峰时间之间添加一个交互项,我假设距离对票价的影响在高峰时间和非高峰时间是不同的,这是有道理的。你可以在下午 5 点在加州行驶 1 英里,可能需要 30 美元,因为有几个用户需要这项服务,而在凌晨 4 点同样的乘车只需要 3 美元——根据供求规律,一天中的时间将影响你为拼车支付的费用。根据是否是高峰时间,费用会有所不同。这基本上是激增定价的代理。
我把秒从这个模型中去掉是因为距离和秒的相关度是 0.913,这是极高的,在模型 1 的分析中提到过。两者之间的 VIF 没有 10 那么高,但仍然相对较高。从模型中剔除秒数并没有显著降低 R 平方,我将在下面讨论。
这个模型就变成了
比较模型
(文字输出请不要嫌弃我)。
从上面的输出可以看出,尽管变量发生了变化,但模型之间的 R 平方并没有太大的变化。不幸的是,R 平方不是很高。增加更多的变量和数据将会改善这种情况。
模型 4:线性与稳健线性模型与分位数回归
我想让这个分析尽可能简洁明了,但是我也想确保我提到了这样一个事实,即我还可以使用其他几种回归方法。线性回归是最著名的方法,因此也是我在整个分析中使用的方法。稳健的线性模型简单地控制了异常值,这在我的数据集中不是一个大问题。
分位数回归模型不像线性模型那样取平均值,而是使用条件中值函数进行估计。这也可以控制异常值。深入探讨这个问题超出了本次分析的范围,尤其是因为样本量相对较小,但是我想把它作为一个警告包括进来。优步实际上在 2016 年写了一篇关于 quantreg 的文章,以解释他们与和交易的各种定价动态。
结论:如果你开车少于 10,000 英里,扔掉你的车
我在前两个模型的分析中保持秒不变,并在输出中包括了高峰时间。我把高峰时间包括在内,因为这将为日益拥堵的城市和普通人的通勤时间表提供最可靠的分析。对于美国的分析,我将间接成本设置为 3000 美元,以梳理出加州的生活成本。
我对每一个都进行了颜色编码,以显示哪一点更适合你驾驶。对于大多数车型,交叉点在 9000-12000 英里之间。如果你有一辆混合动力、电动或中型轿车,你会得到最大的回报。拼车公司只能在最高 9000 英里的价格上竞争。SUV 是最昂贵的车辆,其交叉点约为 12,000 英里。
如果你在加州拥有一辆车,那你就是在浪费钱。在大多数情况下,使用 rideshare 要便宜得多。我将间接成本设定为 6000 美元,以说明加州生活成本的提高。
有很多原因可以说明这个数据,包括我如何给汽车定价和我的个人拼车数据。然而,根据这项分析,与开车相比,拼车对于低里程用户来说是更好的选择。
珍惜时间有不同的方式,这可能会影响你对拼车和开车的评价。但是你有更多的自由驾驶汽车,不必担心其他乘客、司机或无法控制车辆。此外,这个数据没有考虑到加州 AB5 的变化,这可能会从根本上改变所有的模型,这是非常可悲的。
总的来说,驾驶体验相当主观。从数量的角度来看,有时搭车会更便宜。定性来说,这完全取决于你看重什么。
** 免责声明:这些都不是投资建议,我与任何拼车公司都没有关联
岭回归——两个概念的图解故事
回归很可能是人们学习的第一个机器学习算法。它是基本的、简单的,同时也是非常有用的工具,可以解决很多机器学习问题。本文是关于岭回归的,对 线性回归 进行了修改,使其更适合特征选择。整个故事分为四个同等重要的部分,如下所述:
- **线性回归:**说明线性回归中普通最小二乘法的基本思想。
- **特征选择:**阐述了什么是机器学习中的特征选择,以及它的重要性。
- **参数计算:**用图形表示的线性回归计算哪些参数。
- **岭回归:**最后一节,结合以上概念来解释岭回归。
为了理解这个概念,请仔细阅读所有四个部分。现在,让我们开始:
- 线性回归
假设给我们一个二维数据集,如下图所示,我们打算将一个线性模型放入其中。图表中的黑点显示了左侧表格中显示的数据点。蓝线是拟合到数据中的线性模型&红色箭头显示预测值和实际因变量值(Y)的差异。
在线性回归模型中,以 d1^2 + d2^2 + d3^2 + d4^2 + d5^2 最小化的方式将一条线拟合到数据中,即残差的平方(实际值和预测值之间的差异)最小化。在更一般的形式中,它可以表示如下:
这个量叫做残差平方和(RSS),这里 yi 代表因变量的预测值。用这种方法求线性模型的方法称为普通最小二乘法。拟合模型的形式如下:
上式中的 Bo 为截距, B1 为模型的斜率, X 和 Y 分别为自变量和因变量。
2。功能选择
在任何机器学习问题中,我们都有预测器,也称为特征或自变量,根据提供的数据,我们需要了解这些变量与响应变量(也称为因变量)的关系。简单来说,我们需要找出以下关系:
我们将 y 作为响应变量,将 p 作为预测变量(x1,x2,… xp),上面的等式代表了两者之间的实际函数关系。在机器学习中,我们需要尽可能准确地找到这种关系。对模型的研究带来了许多挑战,如数据不足或缺失、缺失预测因子、无关预测因子、预测因子之间的相关性、数据格式错误等。我们在机器学习中面临的所有挑战都可以通过不同的方法来缓解。我们将在这个主题中解决的挑战是“不相关的预测”。我将用一个例子来说明这个问题。
考虑了解降雨量与温度、湿度、地理位置和该地区人们的发色之间的关系。直觉表明,降雨的发生可能与前三个预测因素有关,但降雨与人的头发颜色之间似乎没有逻辑联系。给定数据集,如果我们试图拟合一个回归模型,该模型也会根据头发颜色数据进行自我调整,这是错误的。理想情况下,我们的模型训练方法应该消除不必要的预测,或者至少给它们较小的权重。类似地,如果预测因子之间存在相关性(如湿度与地理位置相关,沿海地区更潮湿等)。),模特也要学那个。消除或减少不必要预测因子权重的过程称为特征选择。这个概念在当前场景中很重要,因为岭回归直接处理它。
3。回归中的参数计算
虽然回归中的最小二乘法的过程已经讨论过了,但是现在是用图形来理解这个概念的时候了。考虑下面给出的数据集。降雨量与温度和湿度的系统由数据表示:
如果我们希望通过回归拟合上述数据中的模型,我们需要拟合类型为 Y = Bo + B1 X1 + B2 X2 的线性方程,或者更简单地说,我们需要计算 Bo 、 B1 和 B2 。这里 X1 是温度 X2 是湿度 Y 是降雨量。让我们暂时忘记波(截距),为 B1 和 B2 选择任意值,比如说B1= 1&B2= 2。这些并不是我们想要的值,而是为了理解一个概念而随机选择的。还有,我们把 Bo 的值取为零。现在,我们有了参数值,让我们预测降雨量值并计算 RSS(误差平方和)。下表显示了所需的计算:
由上表可见,对于 B1 = 1 和 B2 =2,RSS 值为 3743。在这里总结任何东西之前,让我们假设一个不同的回归参数值集。设 B1 = 3.407,B2 = 1,我们继续忽略 Bo 。如果我们再次进行预测计算&也计算 RSS,你会发现它会再次出来是 3743(几乎)。这里我想说的一点是,对于残差平方和为常数的回归参数,有不同的值。如果绘制这些点,将生成如下所示的图:
上图针对的是两个预测因子的系统,预测因子的数量越多,上图的尺寸就越大。我们最初假设 Bo 为零,但是对于 Bo 的任何值,曲线仍然相同,只是根据 Bo 的符号&大小向上或向下移动。
上述图称为回归的成本等值线图。每个轮廓或循环绘制在参数 B1 和 B2 之间,代表一个恒定的 RSS 值。在回归中,我们的目标是找出由中心点表示的值,该值既唯一又代表最小 RSS。
4。岭回归
岭回归是对最小二乘回归的改进,使其更适合特征选择。在岭回归中,我们不仅试图最小化残差平方和,还试图最小化等于回归参数平方和乘以调整参数的另一项。换句话说,在岭回归中,我们试图最小化以下数量:
上述表达式中的第一项是残差平方和,第二项是岭回归中特别添加的内容。因为这是岭回归中引入的一个特殊术语,所以让我们试着进一步理解它。对于有两个预测器的数据集,它将是 a (B1^ 2+ B2^ 2),其中 a 是调整参数。它也被称为惩罚项,因为它对回归的最小二乘法施加了约束。在寻求最小化它的过程中,它被限制到一个特定的值,由下面的等式描述:
仔细看上面的方程,是一个阴影圆的方程,半径的平方等于 s/a (约束),其中一部分如下图所示:
将上述图表与成本分布图结合起来,将得到如下所示的图表:
上图给出了岭回归的思想。这是最小二乘条件满足参数约束或惩罚条件的地方。代表约束的圆的半径直接取决于调谐参数( a )。调谐参数值越大,圆越小,惩罚越高。你可以借助上图直接想象一下。调谐参数的值越大,圆越小,两个图形的交点越靠近原点,因此回归参数的值越小。
结论:
在岭回归中,寻找对应于最小残差平方和的参数不是所寻求的。对参数施加约束以检查它们,因此不允许它们增长。这个条件确保不同的参数被赋予不同的权重,因此成为特征选择的重要工具。请注意,在岭回归中,任何预测值的参数都不会为零,但参数权重是变化的
这就是岭回归的全部内容。请发表您的评论/建议。关于这个话题的任何疑问,你可以通过 LinkedIn 联系我。
进一步阅读:
谢谢,
祝你玩得愉快😊
原载于 2020 年 4 月 17 日 https://www.wildregressor.com*。*
机器学习中的奇异值分解:岭回归和多重共线性
了解什么是多重共线性,它如何影响最小二乘法,以及经典岭回归如何有所帮助
本文从奇异值分解 (SVD)的角度讨论了什么是多重共线性,它如何影响最小二乘法,以及岭回归如何帮助避免这种情况。它在很大程度上基于 Rebecca Willet 教授的课程机器学习的数学基础,并假设了线性代数的基础知识。
在本节中,我们将研究多重共线性以及它如何影响最小二乘法。
多重共线性
考虑一个形状为 n × p 的矩阵X。对于其列 X₁ , X₂ ,…, Xₚ ∈ ℝⁿ,我们说它们是线性无关当且仅当 ∑αᵢXᵢ = 0 对于 i = 1,2,…, p 。直观上,在 X 中没有一列可以写成其他的加权和。反过来,如果某些列不是这种情况,我们称它们为线性相关**。假设 rank( X ) = r ,那么 X 的( p — r )列是线性相关的。**
多重共线性在回归术语中,指的是多元回归模型中的一个预测因子可以从其他预测因子中以相当高的准确度进行线性预测的现象。换句话说,预测值近似是其他预测值的线性组合。完美的多重共线性表示特征矩阵中的线性相关性。直觉上,这意味着我们的特征中存在冗余,其中一些特征无法为回归提供唯一和/或独立的信息。
多重共线性不仅在理论上很重要,在实践中也很重要。系数估计值可能会随着模型或数据的微小变化而不规则地变化,而它们本身根本没有意义。为什么会这样?我们将从奇异值分解的角度来看。在此之前,下面是对奇异值分解的快速回顾。
奇异值分解
对于矩阵 X,t 这里总是存在矩阵*,σ, V 这样:*
当 U 和 V 正交时:
**σ是对角线:
**σ的对角元素称为奇异值(σ₁≥σ₂≥…≥σₚ≥0)。非零奇异值的个数是矩阵 X 的秩,σ的列是 X 的行的基础。
多重共线性最小二乘
回想一下,对于特征矩阵 X 和目标变量 y ,最小二乘法试图通过最小化残差的平方和来近似线性系统 y = Xw 的解。权重向量可以用 法方程 写出:
请注意,A 是可逆的当且仅当 n ≥ p 并且秩( X ) = p。现在不难看出为什么完美多重共线性是最小二乘的一个主要问题:它意味着特征矩阵不是满秩的,因此我们无法找到一组适当的系数来最小化残差平方和。
然而,为什么多重共线性,或者具体来说是强多重共线性,也是有问题的呢?让我们从 SVD 的角度来了解一下。
考虑到真实权重 w ,我们知道y*=xw+ϵ,其中 ϵ 是一些可忽略的噪声或误差:*
我们可以看到,最小二乘系数通过 ϵ 乘以某个通货膨胀项而偏离真实权重。仔细看看本文末尾链接的前一篇文章中的通货膨胀术语:
如果 x 的所有列线性无关,我们仍然有 p 奇异值和σ₁≥σ₂≥…≥σₚ>*0。**但是,*随着多重共线性的存在,一些 σᵢ , σₚ 等将接近于零。那么对角元素 1/ σₚ 将是巨大的,导致真正大的膨胀项,因此最小二乘权重与真实权重有很大的偏差。直觉上,多重共线性会损害最小二乘法,因为它会导致较小的奇异值。系数的估计误差由于这些奇异值的倒数而增大,因此变得太大而不能忽略。
如何才能避免这种情况?一种可能是岭回归。
在本节中,我们将了解岭回归如何通过正式推导来帮助避免线性回归中多重共线性所导致的问题。
里脊回归
岭回归通过在成本函数中添加正则化项来建立在最小二乘法的基础上,因此它变成∩y-Xw∩+λ∩w∩,其中 λ 表示正则化的强度。我们可以将成本函数 f(w) 写成:
然后我们可以计算梯度并将其设置为零:
**
仔细看看表达式的中间部分:
这有什么帮助?
考虑 σₚ ≈ 0,这次 σₚ /( σₚ + λ ) ≈ 0 当且仅当 λ ≠ 0。因此,使用岭回归,不重要要素的系数将接近于零(但不会恰好为 0,除非存在完美的多重共线性),并且误差项不会膨胀到爆炸式增长。注意,当没有正则化( λ = 0)时,事情回到最小二乘法。还有,对于大多数场合( σₚ ≫ λ ),σₚ/(σₚ+λ)≈1/σₚ就像在最小二乘法中一样。
实证结果
在本节中,我们将使用一个样本数据集[*seatpos*](https://www.rdocumentation.org/packages/faraway/versions/1.0.7/topics/seatpos)
来验证我们之前的发现。
汽车司机为了自己的舒适喜欢调整座位位置。汽车设计者会发现知道不同的司机会根据他们的身材和年龄把座位放在哪里是很有帮助的。密歇根大学 HuMoSim 实验室的研究人员收集了 38 名司机的数据。
数据集包含以下特征:
我们希望拟合一个基于数据集中所有其他特征预测hipcenter
的线性模型。根据描述,一些特征可以彼此紧密相关。比如Weight
和Ht
,Ht
和HtShoes
。绘制相关矩阵:
上面的情节证实了我们的猜测。在我们的特征矩阵中有很强的多重共线性。好消息是,我们的目标hipcenter
与大多数特性密切相关,我们可以期待一个很好的匹配。产生上述相关图的代码:
使用以下代码块:
- 向特征矩阵添加偏移量;
- 将数据集分成训练集和测试集;
- 归一化特征矩阵,以便我们可以比较系数,因为我们期望变化较大的特征具有较小的系数,其他条件相同
为了简单起见,首先看一个只有Ht
和HtShoes
作为预测器的模型。
*X_train_sub = X_train_[:, 2:4]
X_test_sub = X_test_[:, 2:4]ls = LinearRegression(fit_intercept=True)
ls.fit(X_train_sub, y_train)
print(ls.intercept_, ls.coef_) -165.844 [54.745 -105.923]*
令人惊讶的是,尽管Ht
和HtShoes
几乎完全相关,但它们对hipcenter
的部分影响却具有相反的符号。这可能是高度多重共线性的结果。改为拟合一个 λ = 10 的岭回归模型。
*ridge = Ridge(alpha=10)
ridge.fit(X_train_sub, y_train)
print(ridge.intercept_, ridge.coef_) -165.844 [-21.593 -22.269]*
岭回归的系数似乎更有意义。将其测试 RMSE 与最小二乘法进行比较。
*ls_rmse = mean_squared_error(y_test, ls.predict(X_test_sub))
ridge_rmse = mean_squared_error(y_test, ridge.predict(X_test_sub))print("Least squares test RMSE: {:.3f}".format(ls_rmse))
print("Ridge test RMSE: {:.3f}".format(ridge_rmse)) Least squares test RMSE: 643.260
Ridge test RMSE: 519.287*
对于二元线性模型,岭回归导致更好的泛化能力。然而,由于岭回归引入了正则化项,它的偏差有时可能会更高,以换取更低的方差,这可能导致更差的拟合。
最后,让我们看看完整的模型,并检查最小二乘法和岭回归中系数的大小如何不同,以及它们如何随着惩罚的强度 λ 而变化。
我们可以看到,最小二乘权重与岭回归权重在Ht
和HtShoes
上的差异很大,正如预期的那样。随着惩罚越来越强,岭回归权重越来越接近零。产生上述图的代码:
这篇文章是何坤宇写的。昆玉目前是芝加哥大学的硕士生。他发现理解统计建模和机器学习技术、将它们应用于真实世界的数据并帮助创建金融服务行业的端到端解决方案是一件有趣的事情。在 LinkedIn 上联系昆玉!🐷
* [## 昆玉何-即将上任的全球量化策略非周期分析师-美银美林…
芝加哥大学正在接受理学硕士计算分析项目培训的数据科学家。对…充满热情
www.linkedin.com](https://www.linkedin.com/in/kunyuhe/)*
从零开始岭回归正则化
降低回归模型的方差。
贾里德·阿兰戈在 Unsplash 上的照片
为了使机器学习模型有效,它必须在偏差和方差之间取得平衡。岭回归正则化旨在通过折衷偏差来减少方差。
偏差和方差:
要理解岭回归正则化的使用及其实现,需要了解它试图解决的问题的一些背景。
偏差本质上是模型的均方误差,当应用于它被训练的数据时。具有低均方误差的模型因此具有低偏差。
方差是将数据与数据集的不同样本进行比较时,损失变化的度量。过度拟合的模型具有很高的方差,因为它们的预测对其他样本不起作用。
这个模型有很高的偏差,因为它完美地符合每一点。
然而,当对一个不同的样本进行拟合时,它没有被训练过,表现很差。
每种机器学习算法都有偏差和方差之间的权衡。一般的经验法则是,参数越多的模型偏差越小,但方差越大,而参数越少的模型偏差越大,但方差越小。
岭正则化如何减少方差?
与最小化均方误差函数的回归模型相反,岭正则化最小化添加到λ和斜率平方的乘积的均方误差函数。
代码:
import numpy as np
from matplotlib import pyplot as pltdef sigmoid(x):
return 1/(1+np.exp(-x))def sigmoid_p(x):
return sigmoid(x)*(1 -sigmoid(x))def relu(x):
return np.maximum(x, 0)def relu_p(x):
return np.heaviside(x, 0)def tanh(x):
return np.tanh(x)def tanh_p(x):
return 1.0 - np.tanh(x)**2def deriv_func(z,function):
if function == sigmoid:
return sigmoid_p(z)
elif function == relu:
return relu_p(z)
elif function == tanh:
return tanh_p(z)class NeuralNetwork:
def __init__(self):
self.layers = []
self.weights = []
self.loss = []
def add(self,layer_function):
self.layers.append(layer_function)
def propagate(self,X):
As,Zs = [],[]
input_data = X
for layer in self.layers:
index = self.layers.index(layer)
weights = layer.initialize_weights(self.layers,index)
if type(weights) != type(None) :
self.weights.append(weights)
a,z = layer.propagate(input_data)
As.append(a)
Zs.append(z)
input_data = a
print(a.shape)
return As,Zs
def train(self,X,y,iterations):
loss = []
for i in range(iterations):
As,Zs = self.propagate(X)
loss.append(np.square(sum(y - As[-1])))
As.insert(0,X)
g_wm = [0] * len(self.layers)
for i in range(len(g_wm)):
pre_req = (y-As[-1])*2
a_1 = As[-(i+2)]
z_index = -1
w_index = -1
if i == 0:
range_value = 1
else:
range_value = 2*i
for j in range(range_value):
if j% 2 == 0:
pre_req = pre_req * sigmoid_p(Zs[z_index])
z_index -= 1
else:
pre_req = np.dot(pre_req,self.weights[w_index].T)
w_index -= 1
gradient = np.dot(a_1.T,pre_req)
g_wm[-(i+1)] = gradient
for i in range(len(self.layers)):
if self.layers.trainable == True:
self.layers[i].network_train(g_wm[i])
return loss
class Perceptron:
def __init__(self,nodes,input_shape= None,activation = None):
self.nodes = nodes
self.input_shape = input_shape
self.activation = activation
self.trainable = True
def initialize_weights(self,layers,index):
if self.input_shape:
self.weights = np.random.randn(self.input_shape[-1],self.nodes)
else:
self.weights = np.random.randn(layers[index-1].output_shape[-1],self.nodes)
return self.weights
def propagate(self,input_data):
z = np.dot(input_data,self.weights)
if self.activation:
a = self.activation(z)
else:
a = z
self.output_shape = a.shape
return a,z
def network_train(self,gradient):
self.weights += gradient
model = NeuralNetwork()Perceptron = model.Perceptron
这是我创建的一个神经网络框架,执行基本的线性和逻辑回归。我在这里添加了完整的代码,这样当示例完成时,您可以自己实现它。让我们从培训功能中删除所有内容:
def train(self,X,y,iterations):
loss = []
for i in range(iterations):
As,Zs = self.propagate(X)
loss.append(np.square(sum(y - As[-1])))
As.insert(0,X)
g_wm = [0] * len(self.layers)
for i in range(len(g_wm)):
pre_req = (y-As[-1])*2
a_1 = As[-(i+2)]
z_index = -1
w_index = -1
if i == 0:
range_value = 1
else:
range_value = 2*i
for j in range(range_value):
if j% 2 == 0:
pre_req = pre_req * sigmoid_p(Zs[z_index])
z_index -= 1
else:
pre_req = np.dot(pre_req,self.weights[w_index].T)
w_index -= 1
gradient = np.dot(a_1.T,pre_req)
g_wm[-(i+1)] = gradient
for i in range(len(self.layers)):
if self.layers.trainable == True:
self.layers[i].network_train(g_wm[i])
这个代码通过神经网络导航,将导数链接到它们各自的部分。您会注意到变量 pre_req 对于所有计算的梯度都是一致的。这是预测对损失函数的偏导数。我们需要更改的只是那行代码:
pre_req = (y-As[-1])*2
目前,该变量包含均方误差函数的导数。让我们用岭回归损失函数的导数来代替它:
#The loss function
loss = np.square(y-As[-1]) + lam*self.weights[0]
#the derivative
pre_req = (y-As[-1])*2 + lam*self.weights[0]
结论:
岭正则化的工作原理是对较高斜率值的模型进行惩罚,从而降低数据集中不同样本之间的方差
谢谢你看我的文章!
简易模式下的岭回归
了解岭回归模型背后的理论,如何通过 python 和 scikit-learn 对其进行编码和调优。
它们是什么?
岭回归可以被认为是线性回归的一个步骤。它们也被称为吉洪诺夫正则化;和对于缓解线性回归中的多重共线性问题特别有用,该问题通常出现在具有大量参数的模型中。
照片由尼古拉斯·J·勒克莱尔在 Unsplash 拍摄
简单概括线性回归:他们通过最小化模型的残差平方和(RSS) 来估计线性模型截距和斜率系数。RSS 公式及其生成的线性模型如下所示:
点击这里了解更多关于如何用 python 编写自己的线性回归代码!
虽然简单的线性回归在大多数数据分析情况下通常被认为是有效的,但它们总是产生直线最佳拟合线。这源于关于因变量和自变量之间关系的强有力的先验假设:它们具有线性关系。
当我们不得不抛弃这个假设时,问题就来了,我们需要接受缺乏参数来控制模型复杂性的事实。
这就是岭回归的用武之地。他们增加了一个额外的术语,如下图红色所示。
这一项被称为 L2 正则化参数,其中 L1 可以产生稀疏模型,而 L2 不能。最终结果仍然是一个简单的线性模型,如果使用 OLS 方法,其格式与相似,但系数可能不同。(通过下面的示例显示)
岭回归方程
正则项充当损失函数,它是在计算岭回归的 RSS 时对错误预测的惩罚。它通过将系数的平方值加到模型的 RSS 上来起作用。由于“最佳”模型是具有最小 RSS 的模型,具有较大系数的模型根据被有效过滤。
正则化的作用是通过试图限制模型以降低复杂性来减少过拟合。正则项通过将系数的平方值添加到模型的 RSS 中来起作用。由于“最佳”模型是 RSS 最小的模型,因此系数较大的模型会根据进行有效过滤。
最终结果是,模型更喜欢系数较小的特征。
正则化对于 100+变量特别有效。**此外,正则化的量由正则化项中的阿尔法参数控制。**较高的 alpha 值导致模型招致更多的惩罚,使系数进一步向 0 收缩。python 中的默认值是 1。一个特殊的情况是,当α= 0 时,得到的模型相当于 OLS 简单线性回归。
代码
为了举例说明岭回归的编码,我们将看看如何使用犯罪数据集。
包装
对于包,让我们导入*犯罪数据集、*和用于创建训练测试分割、进行 MixMaxScaling 和创建岭回归的类。
import numpy
from adspy_shared_utilities import load_crime_dataset
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import Ridge
加载数据集,并创建 75 / 25 列车测试数据分割:
(X_crime, y_crime) = load_crime_dataset()
X_train, X_test, y_train, y_test = train_test_split(X_crime,
y_crime, random_state = 0)
# take note of the indentation.
缩放训练和测试数据集:
scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
创建 alpha 值为 20.0 的岭回归对象,并在缩放的 X 训练数据上拟合该对象以及相应的训练数据 Y 标签:
linridge = Ridge(alpha=20.0).fit(X_train_scaled, y_train)
获取模型系数:
linridge.intercept_
linridge.coef_ **-3352.423035846206
[ 1.95091438e-03 2.19322667e+01 9.56286607e+00 -3.59178973e+01
6.36465325e+00 -1.96885471e+01 -2.80715856e-03 1.66254486e+00
-6.61426604e-03 -6.95450680e+00 1.71944731e+01 -5.62819154e+00
8.83525114e+00 6.79085746e-01 -7.33614221e+00 6.70389803e-03
9.78505502e-04 5.01202169e-03 -4.89870524e+00 -1.79270062e+01
9.17572382e+00 -1.24454193e+00 1.21845360e+00 1.03233089e+01
-3.78037278e+00 -3.73428973e+00 4.74595305e+00 8.42696855e+00
3.09250005e+01 1.18644167e+01 -2.05183675e+00 -3.82210450e+01
1.85081589e+01 1.52510829e+00 -2.20086608e+01 2.46283912e+00
3.29328703e-01 4.02228467e+00 -1.12903533e+01 -4.69567413e-03
4.27046505e+01 -1.22507167e-03 1.40795790e+00 9.35041855e-01
-3.00464253e+00 1.12390514e+00 -1.82487653e+01 -1.54653407e+01
2.41917002e+01 -1.32497562e+01 -4.20113118e-01 -3.59710660e+01
1.29786751e+01 -2.80765995e+01 4.38513476e+01 3.86590044e+01
-6.46024046e+01 -1.63714023e+01 2.90397330e+01 4.15472907e+00
5.34033563e+01 1.98773191e-02 -5.47413979e-01 1.23883518e+01
1.03526583e+01 -1.57238894e+00 3.15887097e+00 8.77757987e+00
-2.94724962e+01 -2.32995397e-04 3.13528914e-04 -4.13628414e-04
-1.79851056e-04 -5.74054527e-01 -5.17742507e-01 -4.20670930e-01
1.53383594e-01 1.32725423e+00 3.84863158e+00 3.03024594e+00
-3.77692644e+01 1.37933464e-01 3.07676522e-01 1.57128807e+01
3.31418306e-01 3.35994414e+00 1.61265911e-01 -2.67619878e+00]**
获得模型 R 平方得分
linridge.score(X_train_scaled, y_train)
linridge.score(X_test_scaled, y_test)**-31.672
-37.249**
非零特征的数量:
(np.sum(linridge.coef_ != 0))**88**
调整 alpha 值以最大化训练和测试分数。我们可以获得非零特征的数量以及如下的训练和测试分数:
for alpha in [0, 1, 10, 20, 50, 100, 1000]:
linridge = Ridge(alpha = this_alpha).fit(X_train_scaled,y_train)
r2_train = linridge.score(X_train_scaled, y_train)
r2_test = linridge.score(X_test_scaled, y_test)
num_coeff_bigger = np.sum(abs(linridge.coef_) > 1.0)
print('Alpha = {:.2f}\nnum abs(coeff) > 1.0: {}, \
r-squared training: {:.2f}, r-squared test: {:.2f}\n'
.format(this_alpha, num_coeff_bigger, r2_train, r2_test))**Ridge regression: effect of alpha regularization parameter****Alpha = 0.00
num abs(coeff) > 1.0: 88, r-squared training: 0.67, r-squared test: 0.50
Alpha = 1.00
num abs(coeff) > 1.0: 87, r-squared training: 0.66, r-squared test: 0.56
Alpha = 10.00
num abs(coeff) > 1.0: 87, r-squared training: 0.63, r-squared test: 0.59
Alpha = 20.00
num abs(coeff) > 1.0: 88, r-squared training: 0.61, r-squared test: 0.60
Alpha = 50.00
num abs(coeff) > 1.0: 86, r-squared training: 0.58, r-squared test: 0.58
Alpha = 100.00
num abs(coeff) > 1.0: 87, r-squared training: 0.55, r-squared test: 0.55
Alpha = 1000.00
num abs(coeff) > 1.0: 84, r-squared training: 0.31, r-squared test: 0.30**
结论
通过这篇文章,我希望您已经了解了岭回归背后的理论,以及如何通过 python 和 scikit-learn 对岭回归模型进行编码和调优。
我通过由 Coursera 主办的密歇根大学 MOOC“Python 中的应用机器学习”了解到了这一点。
如果你有问题或者想讨论后新冠肺炎世界,请随时联系我。
我希望我能够以这样或那样的方式帮助您学习数据科学方法!
这是另一篇数据科学文章!
使用 scikit-学习 python
medium.com](https://medium.com/analytics-vidhya/k-nearest-neighbors-in-6-steps-efbcbebce54d)
Riot API:一个机器学习和数据分析应用
实践教程
一个简单的基于 python 的教程,通过 Riot API 进行数据分析和机器学习,以提高个人水平
为什么要看这篇文章?
一个简单的基于 python 的教程,通过 Riot API 进行数据分析和机器学习,以提高个人水平。
如果你正在阅读这篇文章,你可能是《英雄联盟》的粉丝,这是一款流行的 MOBA 类型的在线游戏(多人在线竞技场)。或者你可能对机器学习和数据分析在网络游戏世界中的可能应用感兴趣。这款游戏由 Riot Games 开发发布。
全世界有数百万玩家,这款游戏拥有广泛的业余玩家和职业玩家。它利用了游戏的不断进化和统计复杂性。这个游戏的基本原理(非常)简单。由于有成千上万的变量和可能的场景,每场比赛都是不同的。
给定大量的数据,提取重要的数据可以让你获得关于你的比赛风格的有趣信息。你可以提取有用的信息来改善你的游戏风格或预测你未来的表现。
许多网站如 op.gg 提供了大量的数据、分析和图表。这很好,但是如果您想要开发定制的或者更复杂的模型,您将需要一些手工工作。
RiotGamesAPI是一个 REST API 为开发者构建自己的应用或网站提供有用的数据。
我建议您在开始编程之前阅读文档,以避免违反服务的法律条款。您还可以避免数据请求速率的问题。
在接下来的部分中,我们将了解如何:
- 从 Riot API 中提取有用的数据
- 处理数据以获得有用的信息
- 创建简单的预测模型
从 Riot API 中提取有用的数据
让我们从安装和导入一些基本库开始。如果您使用的是 Google 协作笔记本,您将不会遇到任何问题,否则,您将需要根据您的操作系统安装单独的库。
!pip3 install riotwatcher!pip install -q seaborn!pip install -q git+https://github.com/tensorflow/docsimport numpy as np
import matplotlib.pyplot as plt
import pathlib
import pandas as pd
import seaborn as sns
import tensorflow as tf
import time
from tensorflow import keras
from tensorflow.keras import layers
import tensorflow_docs as tfdocs
import tensorflow_docs.plots
import tensorflow_docs.modeling
from riotwatcher import LolWatcher, ApiError
为了提取数据,我们使用了 RiotWatcher ,它是一个薄薄的包装器,位于英雄联盟的 Riot Games API 之上。必须使用 Riot API 密钥,每 24 小时生成一次。请记住,此密钥是个人的,不应共享。让我们从提取一个玩家(或者召唤师)的一些信息开始:让我们得到想要的玩家的等级
lol_watcher = LolWatcher('%YOUR RIOT API KEY%')
my_region = 'euw1'
me = lol_watcher.summoner.by_name(my_region, '%YOUR SUMMONER NAME%')
my_ranked_stats = lol_watcher.league.by_summoner(my_region, me['id'])print(my_ranked_stats)
让我们提取一个更新版本的冠军,物品,召唤师法术和任何其他所需的属性,因此我们的比赛历史:
versions = lol_watcher.data_dragon.versions_for_region(my_region)
champions_version = versions['n']['champion']
summoner_spells_version=versions['n']['summoner']
items_version=versions['n']['item']
( ... )
current_champ_list = lol_watcher.data_dragon.champions(champions_version)
( ... )
my_matches = lol_watcher.match.matchlist_by_account(my_region, me['accountId'])
我们拥有大量的数据,这些数据的重要性是高度主观的。更多的功能将导致更复杂,但更准确的模型。为了获得真正准确的分析,有必要获得尽可能多的游戏信息,以更好地适应我们的模型,并使结果更可信。让我们从过去的 100 场比赛中提取数据,并定义一系列包含所有主要信息的熊猫数据帧。
n_games = 100Games = {}
Game_duration=np.zeros(n_games)
Damage = np.zeros(n_games)
(...)
j=0
cont=0
while cont<n_games:
try:
last_match = my_matches['matches'][cont]
match_detail = lol_watcher.match.by_id(my_region, last_match['gameId'])
participants = []
for row in match_detail['participants']:
participants_row = {}
participants_row['champion'] = row['championId']
participants_row['win'] = row['stats']['win']
participants_row['assists'] = row['stats']['assists']
( ... )
participants.append(participants_row)
Games[j] = pd.DataFrame(participants) champ_dict = {}
for key in static_champ_list['data']:
row = static_champ_list['data'][key]
champ_dict[row['key']] = row['id'] summoners_dict = {}
for key in static_summoners_list['data']:
row = static_summoners_list['data'][key]
summoners_dict[row['key']] = row['id'] Summoner_name = []
for row in match_detail['participantIdentities']:
Summoner_name_row = {}
Summoner_name_row=row['player']['summonerName']
Summoner_name.append(Summoner_name_row) i=0for row in participants:
row['championName'] = champ_dict[str(row['champion'])]
row['Summoner_name']=Summoner_name[i]
row['Summoner Spell 1']=summoners_dict[str(row['spell1'])]
row['Summoner Spell 2']=summoners_dict[str(row['spell2'])]
i+=1
Games[j]= pd.DataFrame(participants)
for index, row in Games[j].iterrows():
if row['Summoner_name']=='%YOUR SUMMONER NAME%':
Damage[j]=row['totalDamageDealt']
Gold[j]=row['goldEarned']
( ... ) time.sleep(10)
j+=1
cont+=1
except:
cont+=1
至此,我们已经提取了所有感兴趣的数据:让我们继续进行数据分析。警告:在每个循环中插入了 10 秒钟的暂停,以不超过 Riot API 允许的每小时请求的最大数量。
数据处理
在这一点上,我们拥有大量的数据,显然并不重要:要获得有用的信息,你需要将你在“游戏属性”方面的兴趣与数据分析和机器学习的现代算法结合起来,能够给出有效的答案。数据可以给出很多关于游戏中表现的答案,有可能发现优势/劣势,甚至根据你的现场游戏统计数据预测获胜的概率!为了便于理解,在下面的段落中给出了对一组简化的参数进行的一些简单分析作为例子,但是您可以很容易地生成更复杂和有趣的模型。我们可以从准备一个可以有效用于数据分析的数据库开始:让我们看看我们游戏的一些简单特性:
dataset={}
dataset['Total Damage']=Damage
dataset['Gold']=Gold
( ... )
dataset['Victory']=Victory #Boolean
无论我们的目标是解决回归问题(连续输出系统)还是分类问题(离散输出系统),都有必要将起始数据集分成两个独立的数据集:
- 训练集:该数据集用于模型(即神经网络)的训练。在训练集上具有良好的预测性能是重要的,但同时,避免过拟合现象也是必要的。
- 测试集:在训练迭代过程中用于模型验证的集
train_dataset_raw = dataset.sample(frac=0.8,random_state=0)
test_dataset_raw = dataset.drop(train_dataset_raw.index)
train_dataset=train_dataset_raw.iloc[:,range(0,4)]
test_dataset=test_dataset_raw.iloc[:,range(0,4)]
train_labels=train_dataset_raw.iloc[:,4]
test_labels=test_dataset_raw.iloc[:,4]
配对图
pair plot 绘制数据集中的成对关系。Pairplot 函数创建一个轴网格,这样数据中的每个变量将在 y 轴的一行中共享,在 x 轴的一列中共享。
sns.pairplot(train_dataset_raw, diag_kind="kde")
作者图片
为什么要分析这样一个图?因为它允许您快速获得有关所选数据之间各自关系的定性信息。例如,我们可能会注意到,所拥有的黄金总量的增加会导致更大的总伤害,这是获胜次数和游戏参数之间的关系,也是各自领域中个体数量的概率分布。
互相关矩阵
对于数据间相关性的更定性分析,可以参考相关矩阵。计算相关值有几种方法。最流行的是 皮尔逊相关系数 。然而,应该注意的是,它只测量两个变量之间的线性关系。换句话说,它可能无法揭示非线性关系。皮尔逊相关值的范围从-1 到+1,其中+/-1 表示完全正/负相关,0 表示不相关。相关矩阵是对称矩阵,所有对角元素等于+1”
corr = dataset.corr()
mask = np.triu(np.ones_like(corr, dtype=bool))
f, ax = plt.subplots(figsize=(11, 9))
cmap = sns.diverging_palette(230, 20, as_cmap=True)
sb.heatmap(corr, mask=mask, cmap=cmap, vmax=0.9, center=0, vmin=-0.2,
square=True, linewidths=.5, cbar_kws={"shrink": .5}, annot = True)
plt.show()
作者图片
知道这个问题的人可能会意识到,比如说,附身黄金的伤害增加或者死亡和胜利之间的反向趋势是正确的,即使看起来微不足道。然而,用简单的语句对这些模型进行验证,可以更准确地应用于更复杂的数据集。
胜利概率的估计:一个简单的分类问题
首先,让我们将数据标准化:
def norm(x):
return (x - train_stats['mean']) / train_stats['std']
normed_train_data = norm(train_dataset)
normed_test_data = norm(test_dataset)
Keras 和 TensorFlow 库提供的强大工具有助于模型生成。让我们为我们的分类定义一个简单的序列模型,它具有以下属性:
- 型号:顺序
- 输入层:4 节点层
- 2 隐藏层:activation = ’ relu 节点数= 16/32
- 2 个下降层:0.2
- 输出层:activation = ’ sigmoid 节点数= 1;
- 模型属性:loss='binary_crossentropy ',optimizer='adam ',metrics=[‘accuracy’]
dumbo=(normed_test_data,test_labels)
model = Sequential()
epochs=700
model.add(Dense(16, input_dim=4, activation='relu'))
layers.Dropout(0.2)
model.add(Dense(32, activation='relu'))
layers.Dropout(0.2)
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam',metrics ['accuracy'])
history = model.fit(normed_train_data, train_labels, epochs=epochs,validation_data=dumbo)
然后,我们在整个测试数据集上评估模型预测的质量:
作者图片
定性地说,我们可以注意到在训练集和验证集上都有非常好的表现(与所研究案例的简单性相关)。从数量上我们得到:
- 测试损失:0.4501 —测试精度:0.9583
- 列车损失:0.0891-列车精度:0.9688
从图形上看,我们得到:
作者图片
我们根据选择的游戏参数,有 97%的准确率正确预测游戏结果! 显然,预测的质量将取决于所选择的特征、模型的质量等等。
结论
我们已经看到了 riot API 的一个简单应用,我们开发了一系列工具来分析我们在游戏中的技能。我们还预测了我们未来的表现!这是开发代码、应用程序等的起点。利用英雄联盟游戏中产生的大量数据。
感谢阅读
RIP 相关性。引入预测能力评分
我们定义并开源的预测能力评分(PPS)。PPS 是在您的数据中发现更多模式的相关性的替代方案。
相关性有太多问题
现在是周五下午,您的老板告诉您,数据发送出乎意料地提前到了——前后只有 4 周。这是您的预测模型缺少的部分。您很兴奋,但也有点焦虑,因为您知道接下来会发生什么:探索数据。好吧。45.列。这可能需要几个小时,但您知道这是值得的,因为没有数据理解,您就是在瞎走。一个明显的步骤是查看所有单变量列分布。但这还不够。
您会问自己:列之间存在什么关系?
要回答这个问题,您只需要重复典型的练习:计算一个相关矩阵,并检查一些令人惊讶的关系。每当你感到惊讶的时候,你就花点时间画出手头两列的散点图,看看你是否能理解它。希望你能做到,但通常你做不到,因为你甚至都不知道这些列的含义。但这是另一天的故事。
检查完相关矩阵后,您继续前进,您甚至不知道您不知道的东西(可怕)。
让我们花点时间回顾一下相关性。评分范围从-1 到 1,表示是否存在强线性关系——正向或负向。到目前为止还不错。然而有许多分数根本检测不到的非线性关系。例如,正弦波、二次曲线或神秘的阶跃函数。分数将只是 0 分,表示“这里没什么有趣的”。此外,相关性只为数字列定义**。所以,让我们放下所有的分类栏。在我上一个项目**中,超过 60%的列是分类的,但是嘿。没关系。不,我不会转换列,因为它们不是有序的,一个原子编码会创建一个矩阵,它的值比宇宙中的原子还要多。
关联为 0 的方案太多。这让我怀疑我是否错过了什么……(节选自丹尼斯·博伊格罗的图像)
如果你受过良好教育,你会知道相关矩阵是对称的。所以你基本上可以扔掉一半。太好了,我们节省了一些工作!或者我们有吗?对称意味着无论你计算 A 和 B 的相关性还是 B 和 A 的相关性,相关性都是相同的。然而,现实世界中的关系很少是对称的。更多的时候,关系是不对称的。这里有一个例子:我最后一次检查时,我的邮政编码 60327 相当可靠地告诉陌生人我住在德国的法兰克福。但是当我只告诉他们我所在的城市时,不知何故,他们永远无法推断出正确的邮政编码。Pff …业余爱好者。另一个例子是这样的:一个有 3 个唯一值的列永远不可能完美地预测另一个有 100 个唯一值的列。但事实可能恰恰相反。显然,不对称很重要,因为它在现实世界中非常普遍。
想到相关性的那些缺点,我开始怀疑:我们能做得更好吗?
**需求:**去年的一天,我梦见了一个分数,它会告诉我两列之间是否存在任何关系——不管这种关系是线性的、非线性的、高斯的还是只有外星人知道的。当然,分数应该是不对称的,因为我想检测城市和邮政编码之间的所有怪异关系。如果没有关系,得分应该是 0,如果有完美的关系,得分应该是 1。作为锦上添花,score 应该能够开箱即用地处理类别和数字列。总结一下我所有的学术朋友:一个不对称的,数据类型不可知的分数,用于两列之间的预测关系,范围从 0 到 1。
计算预测能力得分(PPS)
首先,没有唯一的方法来计算预测能力得分。事实上,有许多可能的方法来计算满足前面提到的要求的分数。所以,让我们把预测能力分数看作是一个分数家族的框架。
假设我们有两个列,并希望计算 A 预测 B 的预测能力得分。在这种情况下,我们将 B 视为我们的目标变量,将 A 视为我们的(唯一)特征。我们现在可以计算一个交叉验证的决策树和计算一个合适的评估指标。当目标是数字时,我们可以使用决策树回归器并计算平均绝对误差(MAE)。当目标是类别时,我们可以使用决策树分类器并计算加权 F1。您也可以使用其他得分,如 ROC 等,但让我们先把这些疑虑放在一边,因为我们还有另一个问题:
如果不与基线进行比较,大多数评估指标都是没有意义的
我想你们都知道这种情况:你告诉你的奶奶,你的新车型的 F1 分数为 0.9,不知何故,她不像你一样兴奋。事实上,她非常聪明,因为她不知道是否有人能得 0.9 分,也不知道你是否是第一个在数百万令人敬畏的卡格勒人尝试后得分高于 0.5 分的人。所以,我们需要“标准化”我们的评估分数。你如何使分数正常化?你定义了一个下限和一个上限,并把分数放在适当的位置。那么下限和上限应该是多少呢?让我们从上限开始,因为这通常更容易:一个完美的 F1 是 1。完美的 MAE 是 0。嘣!完成了。但是下限呢?事实上,我们不能绝对地回答这个问题。
下限取决于评估指标和您的数据集。这是一个简单的预测器所能达到的值。
如果你的 F1 成绩是 0.9,这可能是非常糟糕或者非常好。如果你的超级花哨的癌症检测模型总是预测“良性”,并且在高度倾斜的数据集上仍然得到 0.9 分,那么 0.9 显然不是那么好。所以,我们需要为一个非常幼稚的模型计算一个分数。但是什么是幼稚的模型呢?对于分类问题,总是预测最常见的类是非常天真的。对于回归问题,总是预测中值是相当幼稚的。
让我们来看一个详细的、虚构的例子:
回到邮政编码和城市名称的例子。想象两列都是范畴。首先,我们要计算邮政编码到城市的 PPS。我们使用加权 F1 分数,因为城市是一个范畴。我们的交叉验证决策树分类器达到了 0.95 F1 的分数。我们通过总是预测最常见的城市来计算基线分数,并获得 0.1 F1 的分数。如果您对分数进行归一化,则在应用以下归一化公式后,您将获得 0.94 的最终 PPS:(0.95–0.1)/(1–0.1)。正如我们所见,0.94 的 PPS 分数相当高,因此邮政编码似乎对城市有很好的预测能力。但是,如果我们以相反的方向计算 PPS,我们可能会获得接近 0 的 PPS,因为决策树分类器并不比总是预测最常见的邮政编码好多少。
请注意:MAE 的标准化公式不同于 F1。对于 MAE,越低越好,最佳值为 0。
将 PPS 与相关性进行比较
为了更好地感受 PPS 及其与相关性的差异,让我们来看下面两个例子:
示例 1:非线性效应和不对称
示例 1:y = x 时与 PPS 的相关性比较
让我们使用一个典型的二次关系:特征 x 是范围从-2 到 2 的均匀变量,目标 y 是 x 的平方加上一些误差。在这种情况下,x 可以很好地预测 y,因为存在明显的非线性二次关系——毕竟我们就是这样生成数据的。然而,在从 y 到 x 的另一个方向上,这是不成立的。例如,如果 y 是 4,则不可能预测 x 大致是 2 还是-2。因此,预测关系是不对称的,分数应该反映这一点。
这个例子中的分值是多少?如果你还不知道你在找什么,相关性会让你无所适从,因为相关性是 0 。从 x 到 y 和从 y 到 x,因为相关是对称的。然而,从 x 到 y 的 PPS 是 0.67 ,检测到非线性关系并挽救了局面。然而,PPS 不是 1,因为在关系中存在一些误差。在另一个方向,从 y 到 x 的 PPS 是 0 ,因为你的预测不可能比原始基线更好,因此分数是 0。
示例 2:分类列和隐藏模式
让我们将相关矩阵与 Titanic 数据集上的 PPS 矩阵进行比较。“泰坦尼克号数据集?又来了??"我知道,你可能认为你已经看到了关于泰坦尼克号数据集的一切,但也许 PPS 会给你一些新的见解。
示例 2:比较 Titanic 数据集的 Pearson 相关矩阵(左)和 PPS 矩阵(右)。
关于相关矩阵的两个发现:
- 相关矩阵更小,省略了许多有趣的关系。当然,这是有意义的,因为像 Sex、TicketID 或 Port 这样的列是分类的,并且不能为它们计算相关性。
- 相关矩阵显示了股票价格和中等强度等级(-0.55)之间的负相关。如果我们看一下 PPS,我们可以仔细检查这种关系。我们将会看到,TicketPrice 是该类别的一个强预测值(0.9 PPS),但反之则不然。该类仅预测 PPS 为 0.2 的 TicketPrice。这是有道理的,因为无论你的机票价格是 5.000 美元还是 10.000 美元,你都很有可能是最高等级的。相比之下,如果你知道某人在最高级,你就不能说他是花了 5000 美元还是 10000 美元买的票。在这种情况下,PPS 的不对称性再次显现。
关于 PPS 矩阵的四项发现:
- 矩阵的第一行告诉您幸存的列的最佳单变量预测值是列性别。这是有道理的,因为在救援过程中女性是优先考虑的。(我们在相关矩阵中找不到此信息,因为删除了列性别。)
- 如果您查看 TicketID 的列,您会发现 TicketID 对于一系列列来说是一个相当好的预测器。如果你进一步挖掘这个模式,你会发现许多人有相同的 TicketID 。因此,TicketID 实际上是指一起买票的潜在乘客群体,例如意大利罗西大家庭,它将任何夜晚都变成了奇观。因此,PPS 帮助我发现了一个隐藏的模式。
- 比 TicketID 强大的预测能力更令人惊讶的是 TicketPrice 在广泛的列中的强大预测能力。特别是,TicketPrice 在预测 TicketID (0.67)方面相当不错,反之亦然(0.64)。进一步研究后,你会发现门票往往有独特的价格。例如,仅意大利罗西家族就付出了 72,50 美元的代价。这是一个关键的洞察力!这意味着****ticket price 包含了关于 TicketID** 的信息,因此也包含了关于我们意大利家庭的信息。在考虑潜在信息泄露时,您需要掌握的信息。**
- 查看 PPS 矩阵,我们可以看到可以用因果链来解释的影响。(他刚才说的是因果吗?—当然,这些因果假设必须认真对待,但这超出了本文的范围。)例如,你可能会惊讶为什么 TicketPrice 对存活率有预测能力(PPS 0.39)。但是如果你知道这个职业会影响你的存活率(PPS 0.36),而且 TicketPrice 是你职业的一个很好的预测指标(PPS 0.9),那么你可能会找到一个解释。
PPS 和 PPS 矩阵的应用
在我们了解了 PPS 的优点之后,让我们看看在现实生活中我们可以在哪里使用 PPS。
免责声明:PPS 和相关性都有用例。对于在数据中寻找预测模式而言,PPS 明显优于相关性。然而,一旦发现了模式,相关性仍然是传达发现的线性关系的好方法。
- ****查找数据中的模式:PPS 查找关联所找到的每个关系,甚至更多。因此,您可以使用 PPS 矩阵作为相关矩阵的替代,来检测和理解数据中的线性或非线性模式。使用一个范围总是从 0 到 1 的单一分数,这在所有数据类型中都是可能的。
- ****特征选择:除了您通常的特征选择机制之外,您还可以使用预测能力得分来为您的目标列找到好的预测器。此外,您可以消除只是添加随机噪声的要素。这些特性有时仍然在特性重要性度量中得分很高。此外,您可以排除可由其他要素预测的要素,因为它们不会添加新信息。此外,您可以在 PPS 矩阵中识别相互预测的特征对,这包括强相关的特征,但也将检测非线性关系。
- ****检测信息泄漏:使用 PPS 矩阵检测变量之间的信息泄漏——即使信息泄漏是通过其他变量介导的。
- ****数据规范化:通过将 PPS 矩阵解释为有向图,找到数据中的实体结构。当数据包含以前未知的潜在结构时,这可能会令人惊讶。比如:泰坦尼克号数据集中的 TicketID 往往是一个家庭的指标。
如何在自己的(Python)项目中使用 PPS
如果你还在跟随,你就是少数仍有注意力持续时间的人之一——你这个疯狂的野兽!如果你迫不及待地想知道 PPS 将在你自己的数据上揭示什么,我们有一些好消息给你:我们开源了 PPS 的一个实现,作为一个名为 ppscore 的 Python 库。
在使用 Python 库之前,请花点时间通读一下计算细节
安装软件包:
pip install ppscore
计算给定熊猫数据框架的 PPS:
import ppscore as pps
pps.score(df, "feature_column", "target_column")
您还可以计算整个 PPS 矩阵:
pps.matrix(df)
与相关性相比,PPS 的速度有多快?
虽然 PPS 比相关法有许多优点,但也有一些缺点:计算时间较长。但是有多糟糕呢?是需要几周时间,还是几分钟甚至几秒钟就能完成?当使用 Python 库计算一个单 PPS** 时,时间应该没有问题,因为它通常需要大约10–500 ms。计算时间主要取决于数据类型、行数和使用的实现。然而,当计算 40 列的整个 PPS 矩阵时,这会导致 40*40= 1600 次单独计算,而可能需要 1-10 分钟。所以你可能想在后台开始 PPS 矩阵的计算,去那个你一直梦想的暑假!🏖️For:我们的项目和数据集计算性能一直很好,但当然还有改进的空间。幸运的是,我们看到许多方法可以改进 PPS 的计算,以实现 10-100 倍的速度增益。例如,使用智能采样、试探法或 PPS 的不同实现。如果你喜欢 PPS 并且需要更快的计算,请联系我们。**
限制
我们成功了——您很兴奋,想要向您的同事展示 PPS。然而,你知道他们总是对新方法吹毛求疵。这就是为什么你最好准备好了解 PPS 的局限性:
- 计算比相关(矩阵)慢。
- 分数不能像相关性那样容易解释,因为它不能告诉你任何关于所发现的关系的类型的信息。因此,PPS 更适合于发现模式,而相关性更适合于传达发现的线性关系。****
- 您不能以严格的数学方式比较不同目标变量的得分,因为它们是使用不同的评估指标计算的。分数在现实世界中仍然是有价值的,但是你需要记住这一点。
- 发动机罩下使用的部件有局限性。请记住:您可以交换组件,例如使用 GLM 代替决策树,或者使用 ROC 代替 F1 进行二元分类。
- 如果使用 PPS 进行功能选择,您还需要执行向前和向后选择。此外,PPS 无法检测目标特征之间的交互影响。
结论
在使用相关性多年后,我们变得如此大胆(或疯狂?)来建议一种可以检测线性和非线性关系的替代方案。PPS 可以应用于数字列和类别列,并且是不对称的。我们提出了一个实现,并开源了一个 Python 包。此外,我们在一些示例中展示了相关性的差异,并讨论了我们可以从 PPS 矩阵中获得的一些新见解。
现在由你来决定你对 PPS 的看法,以及你是否想在你自己的项目中使用它。我们已经将 PPS 作为 bamboolib 库的一部分使用了一年多,PPS 对于添加一些高级功能是必不可少的,因此我们希望与更广泛的社区共享 PPS。因此,我们希望收到您对该概念的反馈,如果您在自己的数据上尝试 PPS,我们将非常激动。如果有可能得到积极的回应,我们很高兴听到您对实现进行调整或改进的请求。正如我们之前提到的,有许多方法可以提高速度,以及如何针对更具体的用例调整 PPS。
****Github:【https://github.com/8080labs/ppscore】T4
8080labs.com 的弗洛里安
****简讯:如果您想了解更多关于 PPS 和我们其他即将推出的数据科学项目和工具的信息,您可以 订阅此处 。我们不会写付费产品,你可以随时取消订阅,很遗憾我们不得不提到这一点,我们永远不会放弃你的电子邮件。
原载于 2020 年 4 月 23 日 https://8080labs.com。****
上涨布伦特 2020。伦敦文化区 2020 推特分析
分析 3000 条关于伦敦文化区 2020 开幕活动 RISE 的推文
2020 年 1 月 18 日星期六,伦敦西北部的布伦特区举办了伦敦文化区 2020 庆祝活动。布伦特区是第二个伦敦文化区,第一个是沃尔瑟姆森林区,赢得了伦敦市长的竞标。
伦敦文化区项目的目标是“将社区聚集在一起,庆祝整个伦敦的文化多样性”。市长以及私人和企业合作伙伴提供资金,促进为期一年的艺术和文化事件和活动方案。这是一个很棒的倡议,作为一个伦敦人,我很自豪!
今年布伦特 2020 的开幕活动是,由左撇子舞蹈团编排的长达一小时的表演。去年,我对文化区 2019 年的开幕活动做了一个非常类似的分析,名为 欢迎来到森林 ,你可以在这里阅读。与去年不同的是,今年我实际上参加了开幕式,度过了一段美好而愉快的时光,并拍了一些照片,在这篇博文中分享😊
这篇文章的目的是使用 Twitter 数据来了解事件的涨落,并应用机器学习和自然语言处理技术来阐明社会价值和文化价值。通过分析参加 RISE 的用户的推文,我们能够深入了解该活动是否实现了伦敦文化区的目标。
让我们试一试!请滚动查看分析。希望你喜欢。
这张照片是我用索尼 a6600 拍的
数据和方法
与去年的开幕式不同,这次活动没有专门的标签。相反,我收集了所有包含#Brent2020 计划官方标签的推文,以及提到@LBOC2020 的推文,这是 Brent2020 的推特账号。在事件发生时,我使用 Twitter API 收集了 2020 年 1 月 14 日至 1 月 21 日之间总共 3000 条推文。需要注意的是,我只收集了包含#Brent2020 或@ LBOC2020 当然,有许多关于崛起的推文不包含这些搜索词。
在收集了推文之后,我执行了一系列高级统计和机器学习自然语言处理技术,以帮助我理解该事件的社会和文化价值。具体来说,我使用了谷歌云自然语言 API 来计算每条推文的情感,然后我使用了 gensim 库的 Word2Vec 模型来对推文的整个语料库进行语义分析。
我以各种角色处理过艺术和文化的经济、社会和文化 价值测量:作为 UCL Bartlett 高级空间分析中心
的文化数据科学家和研究员;担任全球首家致力于艺术与文化的数据科学咨询机构cultureincities总监;关于下一个英国文化城市的技术参考小组,考文垂 2021;最重要的是,作为 2019 年伦敦文化区的一部分,他领导了沃尔瑟姆森林委员会的数据科学研究。
正如英国社会价值所描述的,“社会价值是人们对他们在生活中经历的变化的相对重要性的量化”。“崛起”是当地居民对布伦特历史和文化的一种依恋。然而,正如 Geoff Mulgan 指出的,社会价值很难衡量。尽管这篇文章没有使用 Mulgan 建议的健壮的方法学技术——很大程度上是因为它们昂贵且耗时——在这里我向 NLP 提供了一个有趣的方法来尝试捕捉 RISE 的参与者感受到的体验。
这张照片是我用索尼 a6600 拍的
夜晚的概观
下面是一张图,用我那天晚上拍的照片展示了这件事是如何在 Twitter 上展开的。 上升 大约在晚上 7 点 15 分开始,这由第一个尖峰说明。然后,在晚上 7 点 54 分,a 里面出现了一个令人惊叹的舞者,在晚上 8 点 03 分,大量彩色粉末被抛向空中,最后,当利维将军在晚上 8 点 36 分出现时,出现了一个高峰!
你可以观看下面由马丁·弗朗西斯制作的酷视频,他更详细地记录了那个夜晚!
自然语言处理
在活动当天,共有 741 名独立用户发了推文,一周有 876 名用户发了推文。如果我们更深入地研究文本,我们就能够根据人们在推文中使用的语言来分析他们对事件的反应。自然语言处理(NLP)提供了一种创新的方法,使用机器学习来分析文本的情感和语义结构,帮助我们得出结论。
每条推文的情绪是使用谷歌的云 NLP API 计算的。下面的条形图显示了七天期间推文的总频率和每天推文的平均情绪,其中-1 表示非常消极的情绪,+1 表示非常积极的情绪。我们看到,在活动前几天,推文的情绪徘徊在 0.42 左右,在活动当天下降到 0.36,然后在活动后两天急剧上升到 0.49 和 0.57 的非常强烈的情绪。总体而言,全天上涨的平均情绪为 0.57。
语义分析
为了从 tweets 中获得更细致的文本理解,我进行了语义分析。在这一步,从分析中删除所有转发是很重要的,因为它们会产生重复的推文,因此在分析文本时会产生不必要的噪音。
Word2Vec 是一个神经语言机器学习模型,它将大量文本(在这种情况下,来自 3000 条推文的文本)作为输入,并输出一个向量空间,通常有数百个维度,每个唯一的单词对应于空间中的一个向量——单词嵌入。
具体来说,空间中距离较近的物体意味着它们是相似的。最近邻是来自 Word2Vec 模型的少数几个基于余弦度量相似性得分与“ Brent ”最相似的单词。下面的散点图显示了“布伦特”的最近邻居。
与 Brent 、、【familyfriendly】、、、、、【社区】、【骄傲】、等词非常接近的还有、、、【欢庆】、等词也在中出现。word 2 vec 模型的结果非常积极,因为这些词与伦敦文化区的总体目标紧密相关,即“将社区聚集在一起,庆祝伦敦的文化多样性”。这项发现从统计学上证明,这些词最接近人们在推特上描述他们的经历时描述的的方式,因此可以表明社会价值。****
这张照片是我用索尼 a6600 拍的
结论
自然语言处理提供了一种创新的方法来分析文本数据,以揭示和说明人们在推特上谈论某个事件时的感受。这项研究的发现表明,有用的描述性词语是从推特数据中提取出来的,以证明的崛起展示了社会价值。对于任何评估研究来说,拥有一种可量化和定量的方法来衡量诸如社会和文化价值之类的东西现在是至关重要的,这将使文化机构有别于它们的同行。
然而,应该注意的是,NLP 并不是一种完美或完整的技术。此外,只分析社交媒体数据也有问题。事实上,在上涨事件后的一周内,许多推文都被转发了。更准确的研究当然包括实地调查收集和访谈,这些问题的答案仍然可以使用 NLP 进行分析。
这张照片是我用索尼 a6600 拍的
伦敦文化区的最大使命之一是将社区聚集在一起,庆祝伦敦的文化多样性,从而创造社会和文化价值。重要的是能够在某种程度上定量地捕捉和展示这种价值,以便这些发现可以用于利用像这样的计划的重要性。
在接下来的 12 个月里,我将跟踪整个项目,看看文化数据科学如何让我们更深入地了解这个项目。还有巨大的潜力来进一步挖掘推文!
祝贺布伦特取得如此重大的事件和成就,并祝伦敦文化区今年剩余时间一切顺利!
谢谢,
Vishal
Vishal 是一名文化数据科学家,也是伦敦 UCL 学院的研究生。他对城市文化的经济和社会影响感兴趣。你可以在Twitter或者LinkedIn上与他取得联系。在insta gram或他的 网站 上看到更多 Vishal 的作品。
现代自然语言处理的兴起和可解释性的需要!
现代 NLP 在可分析性、可理解性、透明性、可解释性和脆弱性方面的能力和挑战。
在embi be(AI 学习成果平台),我们正在利用现代自然语言处理来解决诸如内容摄取、知识图完成、智能元标记、问题生成、问题回答、概念总结、学生对话助手、白话学术翻译、描述性答案评估等问题。将现代 NLP 应用于现实世界的应用需要可解释性,以使系统更加透明、可解释和健壮。让我们看看现代自然语言处理的兴起和可解释性的需要!
现代 NLP 处于计算语言学的前沿,它涉及自然语言的计算建模。
可解释性:太阳+雨= >反射、折射和色散= >彩虹。(图片由胡炬雄在 Unsplash 上拍摄)
乔姆斯基在 20 世纪 50 年代对计算语言学潜力的理解,特别是对那些统计模型的理论基础的理解,有点类似于爱因斯坦对量子物理的反应,【上帝不掷骰子】。这些是世界见证另类理论兴起的关键时刻。然而,无论如何,乔姆斯基为语言学理论奠定的基础仍然是相关的,并有助于计算语言学的发展、分析和理解。
的确,已经有很多工作试图将统计模型应用于各种语言问题。我认为有一些成功,但也有很多失败。有一个成功的概念……我认为这在科学史上是新颖的。它将成功解释为逼近未分析的数据。”—诺姆·乔姆斯基
他提到,成功的概念不是成功。好吧,缺陷可能是理论基础,但从经验上来说,它可以被认为是“可解释性”,这说明了这些计算模型的可分析性、透明性、可问责性和可解释性。
计算语言学的主要进步归功于三个后续阶段:统计建模、经典机器学习和深度学习。这些阶段的可解释性越来越复杂。
统计建模处理数据的统计分析和推断,并以机器学习的形式获得预测能力。使用机器学习解决问题有三个重要方面,
- 设计输入要素。
- 派生特征表示。
- 架构模型内部。
经典的 ML 技术总是给人一种控制的感觉,因为特性是明确指定的,而且大部分是由人类直觉驱动的。过去本质上是聚集的和统计的特征表示也在可解释性的范围内,即基于 Tf-Idf 的向量表示等。像决策树、逻辑回归、支持向量机或其他参数模型这样的 ML 模型也很容易推理。这些模型的扩展变得复杂,因为使用了非线性内核、集成、boosting 等技术来进一步提高性能。然而,仍然有可能理解模型的内部结构。
为提高命名实体识别、情感分析、分类等经典自然语言处理任务的性能所做的持续努力,以及不断增加越来越复杂的任务,如问答、摘要、机器翻译等,已经引起了研究界越来越多的关注。
现代 NLP 的兴起要归功于一个简单模型——感知器的进化。随着深度神经网络的出现,感知机的扩展不仅仅是集成或增强等技术的二阶扩展,而是指数级扩展,如果不是渐近扩展的话。
“我深信,在我们的有生之年,机器能够并且将会思考。”—奥利弗·塞尔弗里奇(思考机器— 1961)。
回顾微小的感知机转变为深度学习海啸的历程,将标志着几个重要的里程碑。举几个例子,1958 年感知器的诞生与 20 世纪 60 年代“思维机器”的研究远见相结合,随后是 20 世纪 80 年代反向传播的发明,以及 21 世纪 10 年代初数据激增与超级计算能力的结合。所有这些都加剧了数百万个感知机之间相互作用的化学反应,从而导致了深度学习和现代 NLP 的兴起。
自然地,深度学习让计算语言学重获新生;使用神经机制学习的潜在统计模式给出了令人难以置信的表现。只是为了加强,在某些定义良好的 NLP 任务上,人类基线的表现优于深度学习模型,这些任务的复杂性逐年增加。图像的合成性质使得卷积神经网络获得了巨大的成功,而自然语言不同于图像,因为它不仅具有合成依赖性,还具有顺序状态。递归神经网络和长短期记忆(LSTM)网络超过了现有技术水平,最近,注意力机制在新型变压器方面取得了前所未有的成功。
现代 NLP 的关键成功还归功于自我监督的预训练目标,以学习上下文嵌入和将学习转移到下游特定任务模型的能力。自我监督的预训练目标已经放弃了对大规模标记数据的需求。另一方面,迁移学习已经放弃了巨大的计算成本的需要。因此,我们可以看到复杂模型的指数增长。
图一。自然语言处理模型复杂性的指数增长(图片:Turning-NLG [8])
那又怎样?
- 深度学习使得特征工程变得多余,因此灭绝了!
- 令牌的底层表示变得密集而复杂
- 深度神经网络复杂架构的内部变得难以理解。
因此,我们不能直接强调决策是如何做出的,什么特征是重要的,或者因果关系来自哪里?现代自然语言处理的成功扩大了可解释性的挑战。
可解释性在领域采用中起着关键的作用,它也为现实世界的应用建立了信心。我们可以将正在进行的研究工作集中在以下问题中来解释神经 NLP 模型:
- 语言学知识是习得的还是忽略的?
- 为什么模型会以这种方式工作?
- 我们能解释模型预测吗?
- 什么使得 NLP 模型易受攻击?
- 知识图如何推进现代 NLP 及其可解释性?
让我们深入了解这些问题的含义。
- 语言知识:忽略还是习得?
图二。句子中的语言知识
语言学,研究语言及其结构,包括语法、句法和语音学等。对人类来说很直观的是,除非系统能够学习语言成分,否则理解、推理和生成自然语言的能力是不可能的。在经典的自然语言处理中,诸如词性标注、命名实体识别、依存关系树、主谓一致、共指消解等语言特征是使用规则驱动或统计学习方法获得的。深度神经网络模型,如 RNNs、LSTMs、Transformers 等,不需要这些手工制作的功能,但仍然能够在某些明确定义的现实世界任务中表现出色,如分类、语义分析、问题回答、摘要、文本生成等。所以,要回答的问题是“ 现代 NLP 模型 ”学到了哪些(如果有的话)语言学知识。
- 为什么模型会以这种方式工作?
*黑盒系统有利于模块化和集成,但系统需要透明才能分析和改进。透明度是可解释性的一个关键支柱。**“模型理解”*是一个利基领域,处理模型的内部。这需要详细分析给定 dnn 中的每一层模块学到了什么,它们如何相互作用,从而有助于模型决策。
图三。伯特模型中不同层次的注意力是如何在处理一个特定的表征时注意其他表征的。
基本上,一个模型的学习如何归因于它的构建模块或底层机制?对模型如何工作的更深入的理解将促进可解释性,并打开进一步改进系统的机会。例如,注意力机制是驱动最先进的 LSTMs 或变形金刚模型成功回家的关键思想。“在自然语言处理模型中,注意力是如何促进学习的?” (即将推出) 倒要研究得更深一些。
- 预测可能还行,能解释一下吗?
图 4。模型预测说明(图片:里贝罗等[11])
好吧,知道什么语言知识是通过模型学习的,以及底层机制如何使这些 NLP 模型的学习成为可能是 NLP 可解释性的基础。最重要的是将*”转向对 NLP 模型的可信和忠实的解释?**【即将推出】 这需要深入研究输入记号如何影响模型决策,从而将预测归因于记号,并推导记号的重要性。我们如何从这些重要的记号中产生解释呢?这些生成的解释可信吗?或者说,产生忠实解释的最佳方式是什么?这些解释能在理解一个模型的潜在稳健性方面发挥积极作用吗?这是一个活跃的研究领域,最近已经取得了很多进展。*
- 在成功的背景下,是什么让现代 NLP 模型变得脆弱?
现代 NLP 在现实世界的应用中取得了适度的进展,例如对话聊天机器人、实时翻译、自动问答、仇恨言论或假新闻检测。是否有可能出于恶意入侵这些模型,比如使假新闻合法化,或者在无法访问训练数据的情况下窃取模型?
图 5:对抗性攻击示例
一个透明的、可解释的和可解释的系统将更好地理解*“现代 NLP 漏洞的挑战和缓解”(即将推出)。*在这里,可以理解敌对攻击的风险、潜在的偏见、不可靠的评估标准以及提取模型的学习状态的可能性,并且可以采取措施来减轻这些风险。
- 知识图谱呢?它能进一步推进现代自然语言处理和可解释性吗?
传统上,知识图,即以图的形式表示的结构化信息,是基于特定领域用例的信息检索系统的核心。主要是因为知识图可以由专家确定性地构建,更容易理解,无缝集成,对特定用例有效,并且易于解释。因此,依赖于知识图的系统很容易在不同的领域被采用。现代 NLP 出现之前的检索系统主要是在知识图的基础上开发的。
图六。知识注入式学习(Image:kur uncu等[5])
自我监督学习使现代 NLP 能够学习统计模式,而不用担心专家的干预。这些系统在各种复杂的用例中变得可扩展和强大,但在非常简单的任务中可能会失败,因为简单的事实由于数据中缺乏统计意义而被忽略。这就是为什么,如果知识图可以与现代 NLP 系统集成,它将带来两个世界的最佳效果,使系统变得全面。知识图还可以调整特征的内部表示,使其更有意义。**“面向高级和可解释 NLP 的知识启始”(即将推出)*** 将是未来时代的一个活跃研究领域。*
探索现代 NLP 在上述维度上的限制,可以很好地理解为什么可解释性很重要,挑战是什么,在这些方面取得了什么进展,以及哪些问题仍然存在?虽然我们试图尽可能地广泛,但这绝不是对 NLP 现状的详尽调查。了解一个现代的 NLP 将如何在未来变得可分析、透明、健壮、可靠、可解释和安全是一件有趣的事情。另一方面,将 KG 和 NLP 结合起来也同样令人着迷,这不仅有助于 NLP 的可解释性,还能提高其在教育、医疗、农业等领域的应用。
我要感谢所有合作者为发表本文所做的努力,特别是Amit Sheth教授的评论和反馈,以及Aditi Avasthi的支持。
参考文献
[1]曼宁光盘。计算语言学和深度学习,麻省理工学院出版社 2015 年
[2]诺维格 P. 论乔姆斯基与统计学习的两种文化,施普林格 2017
[3]贝尔基诺夫和格拉斯。神经语言处理中的分析方法:调查,麻省理工学院出版社 2019 年
[4]曼宁和舒茨。统计自然语言处理基础,1999
[5] 库尔顺库、高尔、谢斯、维克拉马拉奇和亚达夫。知识注入深度学习,ACM 2020
[6] Arrieta 等人.可解释的人工智能(XAI):面向负责任的人工智能的概念、分类法、机遇和挑战,Elsevier,2020 年
[7]鲁梅尔哈特、辛顿和威廉姆斯。通过反向传播错误学习表征,自然 1986
[8]图灵-nlg:微软的 170 亿参数语言模型,微软研究博客,2020 年
【9】张盛阿兹米李。对自然语言处理中深度学习模型的对抗性攻击:一项调查,ACM 2020
[10] 克拉克,坎德尔瓦尔,列夫 y 和曼宁。伯特在看什么?对 BERT 注意力的分析,ACL Workshop BlackboxNLP 2019
[11] 里贝罗、辛格和盖斯特林。"我为什么要相信你?"解释任何分类的预测
[12]柯勒·本德。“攀登 NLU:数据时代的意义、形式和理解”,ACL 2020
机器学习中规范栈的兴起
一个占主导地位的新软件栈将如何解锁下一代尖端人工智能应用
(来源:图片由作者/Shutterstock 提供)
随着每一代计算技术的出现,都会出现一个占主导地位的新软件或硬件堆栈,扫除竞争对手,将一项新兴技术推向主流。
我称之为规范堆栈(CS) 。
想想 20 世纪 80 年代和 90 年代的 WinTel 王朝,95%的个人电脑都装有“Intel inside”认为灯和的意思是栈。想想亚马逊的 S3 正在成为一个近乎通用的存储 API。想想云编排的 Kubernetes 和 Docker 。
当组织寻求解决同样具有超级挑战性的问题时,堆栈从成千上万的其他解决方案中脱颖而出。在任何复杂系统的开始阶段,问题都是很多的。一个项目的进展停滞阻碍了其他几十个项目的进展。但是当人们完全解决了一个问题,它打开了通向大量新解决方案的大门。
在互联网的早期,工程师们同时致力于解决数以千计的新问题,每个解决方案都建立在最后一个之上。一旦有人发明了 SSL,你就可以对信息进行加密传输。一旦你有了能做 SSL 的 Netscape 浏览器,你现在就可以开始从事电子商务了。每个解决方案都解开了一个新的难题,让人们可以构建越来越复杂的应用程序。
随着越来越多的碎片聚集在一起,网络效应开始发挥作用。每一个上线的节点都让网络越来越有价值。突然,当你增加了足够多的人时,你就达到了一个“ ”的临界点 ”,采用会以指数 S 曲线快速上升。一旦它加速足够快,你就达到了临界质量,采用就变得不可阻挡。
当 CS 形成时,它让开发人员“向上移动”以解决更有趣的问题。在过去的几十年里,随着越来越好的栈出现,我们看到传统软件开发达到了令人眩晕的新高度。在 20 世纪 80 年代和 90 年代,曾经需要一小群开发人员编写一个界面丑陋的数据库,为几千名企业用户服务。
WhatsApp 只用了 35 名工程师就拥有了 4 . 5 亿用户。
这是完全有效的网络效应,任何团队都可以利用来自其他几十个团队的尖端 ide、API 和库,以极快的速度交付创新。
我们可以用著名的技术采用曲线来追踪 CS 的形成。
(来源:维基共享资源)
在他 1962 年的著作《创新的扩散》中,社会学家埃弗雷特·罗杰斯向我们展示了在采用新技术时,人和企业分成五个不同的群体。杰弗里·摩尔在他的商业畅销书《跨越鸿沟》中建立了这个想法。
想想智能手机。我跑出去拿到了第一部苹果 iPhone,这让我处于早期采用者阶段。我从中受益,因为我成功地保持了相同的无限手机合约 15 年,这是在所有手机公司淘汰它们之后很久。但我也深受其害,因为早期的手机没有我们今天这么多的应用程序,因为网络效应没有发挥作用。最终,早期的大多数加入了智能手机革命,不久我们就有了像 Instagram、AirBnB、WhatsApp 和优步这样的大型应用程序,它们利用了你口袋里的智能手机操作系统、GPS 和互联网的标准堆栈。现在智能手机无处不在,几乎每个人都有一部,甚至在世界上最遥远的地方。
如果你知道有人还在使用翻盖手机,他们是落后者的一部分。
现在,计算机领域正在发生一些新的事情。软件的本质正在改变。我们已经非常擅长构建手工编码的软件,以至于我们已经达到了它所能做的上限。
直到最近,编码人员手工制作他们软件的所有逻辑。这对于设计电子表格的界面非常有效,但是对于在图片中识别猫或者在手机上识别你的声音就不太好了。这就是为什么在过去的十年里,一种新的软件出现了。
机器学习。
我们训练机器,让它们自己学习规则,而不是手工编写规则。
我们需要机器学习来解决以前无法解决的问题,比如自动驾驶的汽车,检测欺诈,识别人脸,驾驶无人机,理解自然语言等等。虽然机器学习与传统的软件开发有很多共同之处,但它也完全不同,它需要不同的规范堆栈。
机器学习栈
ML 开发周期有多个独特的步骤,比如训练和超参数优化,这些步骤与传统的软件开发方式完全不匹配。
研究人员和大型科技公司开发了许多最好的算法,以及将这些算法训练成模型并部署到生产中所需的工具。随着大科技解决了生产应用程序中创建、训练和服务模型的问题,越来越多的工具进入了开源项目,这推动了人工智能革命的发展。随着越来越多的团队获得这些工具,我们终于开始看到“人工智能的民主化”
随着尘埃落定,我们现在可以看到机器学习规范堆栈(MLCS)** 形成的早期轮廓。我们也可以开始清楚地看到**机器学习生命周期(MLL)的主要阶段,在现实世界中制作前沿模型所需的步骤。很多时候,公司甚至看不到阶段。这就是为什么你会看到带有 45 种机器学习的 NASCAR 幻灯片的文章。
机器学习不会有 45 类。
随着该技术继续发展成为下一个十年的发电站技术,将会有三个或四个主要的。
机器学习生命周期
MLL 有四个关键阶段:
- 数据采集和转换
- 试验、培训、调整和测试
- 生产、部署和推理
- 监控、审计、管理和再培训
(来源:图片由作者提供)
这个过程的大部分仍然是难以置信的手工操作。我们仍然随处可见数据科学家编写网页抓取器和粘合脚本,从数据库中复制数据,拼凑在一起,从一个地方移动到另一个地方。
这种情况变化很快。
我们已经看到 ML 开发周期中每个阶段的早期竞争者从竞争的混乱中脱颖而出。
数据收集和转换
当团队试图争论他们的数据时,我们看到像Pachyderm这样的先驱通过不可变的写入时复制文件系统大规模提供数据版本控制,该系统面向 Google Cloud Store (GCS)、Amazon S3、Azure Blob Storage 和 Minio 等对象存储。
数据版本控制是 AI/ML 管道独有的东西,也是每个数据科学团队在试图扩展团队以快速将模型交付到生产中时最终遇到的问题之一。
TerminusDB 与 Pachyderm 不同,它提供了一个可扩展的图形数据库,允许 Git 一样的版本控制。虽然 Pachy 侧重于可以放入对象存储的任何类型的文件,但 Terminus 最适合放入数据库的数据。
一旦公司拥有了这些数据,像 Superb AI 这样的 SaaS 服务就可以帮助数据科学家快速标记大量数据,而不必全部手动完成,这是将数据传递给数据饥渴的神经网络的关键组件。 YData 还可以帮助数据科学团队快速标记、清理和构建数据集,甚至生成合成数据集,为训练、调整和测试阶段增加数据。
实验、培训、调整和测试
在所有的数据都被清理和标记后,像 maiot 核心引擎 或 Allegro AI 这样的平台及其 Trains 框架形成了一个顺畅的实验和训练管道。
像【TFX】和 Horovod 这样的开源库正在成为跨 GPU 和 TPU 快速扩展训练的标准,但这些库很可能会被纳入更高级的训练、数据和可视化系统,如 Determined AI 。Determined AI 利用 Horovod 在 GPU 之间快速分割和扩展训练工作,同时还进行超参数调整,并在全面的达尔文战争中测试许多不同的算法变体。这可不是小事,因为几年前,在多个 GPU 上并行运行一个算法还是一个手动过程。我们也看到像 Hyperopt 这样的库用于快速超参数调整和搜索。
如果这些人工智能架构是神经网络,那么该团队几乎肯定会在两个基本平台中的一个设计这个网络,脸书支持的【py torch】,或者谷歌支持的 Tensorflow 。这些强大的平台创造了一场两匹马的比赛,许多其他框架曾经在这里比赛,比如 MXnet 和 Chainer。
当然,不是每个团队都是从零开始开发算法和模型的。许多团队可能永远不需要超越最先进的水平。他们可以抓住一个顶级模型,用迁移学习来训练它,以使他们的模型适应他们的特定数据集,并在产品推荐、自动图像标记或情感分析等已知问题上提供令人难以置信的性能。
期待看到越来越多的训练有素的系统嵌入到各地的应用中。我们已经看到了经过充分训练的变形金刚模型的出现,它们有像 拥抱脸的变形金刚 这样的库,它们不会是最后一个。
我们看到许多公司和组织试图成为预训练模型的“中心”,如 Pytorch Hub 和 Tensorflow Hub。像 Algorithmia 这样的公司希望将 SaaS API 前端交付给预训练的模型,而不是让公司下载他们自己的模型版本,他们很有可能成为 GitHub,用于训练模型访问并大规模运行那些处理器密集型模型。在未来几年,有人将开发每个人都标准化的模型库,也许是类似于 ModelHub 的东西,但现在它是任何人的游戏。
当然,所有这些库、超参数搜索和训练运行都需要一个引擎来驱动,这就是管道平台发挥作用的地方。
生产、部署和推理
管道平台构成了 ML 规范堆栈的基石。
管道引擎可能会吸收人工智能/人工智能难题的许多其他部分,形成一个完整的端到端系统,用于选择、训练、测试、部署和服务人工智能模型。
管道桂冠有三个主要竞争者:
- Kubeflow
- MLFlow
- 厚皮动物
厚皮动物是管道系统中最简单明了的。它使用定义良好的 JSON 或 YAML 定义来调用容器,以便在模型通过 ML 生命周期时对其进行转换、训练和跟踪。它是数据驱动的,因此每次数据发生变化时,它都可以使用数据的状态来驱动管道前进。它的管道系统也可以轻松地向其他管道系统(如 Kubeflow 或 MLFlow)提供数据沿袭。
Kubeflow 背靠谷歌等。它正在发展成为一个覆盖广阔土地的强大生态系统。它的主要功能是作为一个编排引擎,利用 Kubernetes 的力量来快速扩展容器,但它仍然是一个庞大的项目,厨房里有很多厨师,它有成为机器学习开放堆栈的危险,这是一个伟大的想法,但由于其复杂性,从未得到广泛采用。
最后一个大的竞争者是 MLFlow ,由 Databricks 支持,这是一家专门从事 Spark 传统统计分析的公司。MLFlow 得到了为其代码库做出贡献的大公司的大力支持。Kubeflow 来自于将许多不同的不同组件集成到一个统一架构中的理念,而 MLFLow 则提供了一个清晰、明确、有目的的简单设计,因为它来自于一家公司打造端到端管道的愿望。
许多公司和组织使用 气流 用于 AI/ML 管道,但它不是专门为 AI 而建的。它是由 AirBnB 创建的,用于管理任何类型软件中的复杂工作流程。它有一个庞大的生态系统和安装的用户群,但它的主要缺点是,它不是专门为人工智能工作流构建的,它 100%专注于 Python,不允许任何简单的方法来插入其他语言。从长远来看,可能的赢家将是一个纯粹的人工智能/人工智能焦点,它不会局限于单一的语言或框架。
在寻找行业标准管道引擎的过程中,你不会看到类似亚马逊的 SageMaker 的东西。像 SageMaker 这样的产品将永远赚钱,所有加入亚马逊的公司都将为这一特权付费,但 SageMaker 无可救药地被锁定在单一云上。这意味着它永远不会成为 CS 的一部分,除非亚马逊决定向其他云开放它。
另一方面,我们已经看到了像algorithm ia的 MLOps 栈这样的闭源管道系统的良好采用,因为它没有被锁定,可以在任何地方运行,不像它的亚马逊竞争对手。我们还看到与许多其他堆栈集成良好的管道,如 Neu.ro ,开始获得真正的牵引力,因为它们像乐高积木一样与其他解决方案相结合。最后, Allegro AI 的 企业产品在多个类别的管道中提供服务,并获得了很大的牵引力,国防领域的也是如此。
在争夺管道霸权的竞赛中挑选赢家还为时过早,但这场竞赛现在正在升温。风险资本正在涌入,因为如果你创造了未来推动机器学习的基础设施,你对那里的每一个公司和项目都是有用的。
所有这些公司和项目都帮助数据科学家快速创建工作模型。现在,我们必须将它部署到生产环境中,这样它才能开始工作。这就是模型服务、监控和可解释性框架出现的地方。
谢顿 部署 已经迅速成为 ML 在这个星球上的顶级模型服务系统之一。Algorithmia 的企业基础设施堆栈也在这一领域发挥作用,并在规模上提供强大的模型服务。他们在快速生产和部署模型方面与 Algorithmia 和他们的企业 ML 堆栈竞争。
部署系统运行 A/B 和 canary 测试来验证模型在离开开发并投入生产后是否真的如您所愿。这让你可以对一小部分用户进行测试,以确保它能正常工作。它还淘汰了旧型号,但将它们存档,以便在出现问题时快速重新部署。
监测、审计、管理和再培训
最后,我们有一个现场制作的 AI 应用程序。它在现实世界中工作,为客户服务。现在,我们需要在 AI/ML 流程的这个阶段对其进行监控。
我们有许多框架已经将机器学习整合到他们的监控应用程序中,如 Splunk ,但我们几乎没有监控人工智能本身的应用程序。在未来几年,越来越多的日志分析工具和实时监控框架将把 ML 融入其中。他们将进行异常检测和智能的自动化事件管理和解决方案,在任何人接触系统之前解决问题,或者向人类工程师建议可能的解决方案,如 Red Hat Insights 。
但是我们也需要对人工智能本身进行监控。
生产 AI 团队需要知道应用程序是否仍然表现良好?像 COVID 这样的重大黑天鹅事件是否破坏了你的供应链管理模式,就像它对许多生产人工智能模型所做的那样?是漂移吗?机器是否将其做出的每一个决定都记录到分布式数据库中,以便以后进行审计和取证?
各地政府即将出台的立法将要求对这些应用进行越来越多的监控。当事情出错时,他们希望得到解释,你和你的企业以及法律体系也是如此。当的自动驾驶汽车测试在亚利桑那州杀死一名妇女和的安全司机刚刚被指控过失杀人时,优步面临着激烈的调查,所以监控和理解你的人工智能的每个方面的风险非常非常高。公司需要他们在毁掉一个人的生活或底线之前到位。
谢顿 不在场证明 和 提琴手 框架可以帮助传递那种可解释性。这就是我们询问一个模型来理解它为什么做决定的地方。这有助于我们揭开黑盒。我们可能会有一个卷积神经网络告诉我们它集中在哪些像素上,以告诉我们图片包含一只狗,以防它开始错误地标记东西。Fiddler 的框架在这两者中走得最远,它将监控和可解释性结合到一个堆栈中。
我们还将看到对人工智能系统的直接攻击大幅增加。即使您设法在这些系统投入生产时保护它们,它们仍然会受到利用其逻辑和推理漏洞的新型攻击。这是地球上任何一个安全团队过去都没有处理过的事情。错误和漏洞可能会使生产 IT 系统瘫痪,但是完全有可能出现一个“没有错误”的人工智能,它仍然会犯一些错误,让攻击者可以利用这些错误。
脸书建立了一个人工智能红队来阻止对 Instagram 的攻击,当聪明的用户使用图像中微小的,难以察觉的图案来欺骗裸体探测器时。几个月前,我写了关于建立人工智能红队来阻止问题的文章,现在它们已经成为现实,各地的公司都在竞相建立它们。
谢顿的 不在场证明检测 用于发现神经网络上的对抗性攻击,它们将加入任何红队的工具包。
新的堆栈现在
在任何新的领域发展一个规范的堆栈都需要时间。在它发展并释放出新的创新浪潮之前,任何人都很难看清它的走向。大多数人不容易看到未来。他们只能看到现在正在发生的事情。当当前的问题没有解决方案时,他们认为我们永远也不会有解决方案。
但只要有足够的时间、兴趣和投资,总会有解决的办法。
人工智能将触及并改变地球上的每一个行业和国家,其影响力超过互联网本身。
当我们解决了一个问题,它就开启了新的可能性。最终,当你解决了足够多的问题,你就有了一个网络效应,将新技术推向主流。人工智能已经开始感受到网络效应的力量,进展越来越快。
我们很快就会将智能融入这个星球上的每一个应用、每一个设备、每一辆车和每一件产品。
随着大量的投资,真正的解决方案和真正的尖端产品的开发,这是一场完美的风暴,将使人工智能民主化,并向全世界提供它。
而正是规范堆栈将使它成为现实。
###########################################
作者 【工程师】 亲博者播客我还运营了 实用人工智能伦理联盟 和 人工智能基础设施联盟 ,这两个开放社区帮助将规范栈带入现实,并确保人工智能为我们所有人工作。**
###########################################
这篇文章包括亚马逊的会员链接。
###########################################
数据战略家的崛起第二部分
什么是数据战略家,他们的技能是什么?
图片由安德里亚斯亲切
在系列的第二篇博客数据战略家的崛起 ( 第一部分)中,伯颜·安杰洛夫和马杰拉·克拉克提出了一个新的维恩图和思考——什么是数据战略家?定义和揭示新角色所需的技能是什么?
让我们面对现实吧——数据科学博客充斥着描述这十年来最受欢迎的职业之一的终极技能集的维恩图,但当我们进入 2020 年时,我们是否在优化数据人才的管理?更具体地说,我们是否正在使用数据能力和人工智能(AI)来产生重大的商业影响?随着数据经济的发展,这正是许多企业目前在问自己的问题。
商界人士知道,远见卓识和良好的商业策略对于保持竞争地位至关重要。数据策略通常是由寻求业务领导支持的业务经理制定的。另一方面,数据科学家和数据工程师通常继续与 IT 或数字运营保持组织一致,即使数据战略和愿景将由业务人员制定。因此,数据专业人员和业务经理/领导之间需要一个翻译角色,这种需求目前正在增长。
在一个充满独角兽人才的理想世界中,可以提议扩大数据科学家和工程师所需的技能集,以包括业务专业知识、领域专业知识和高度通用的通信技能。然而,经验丰富的商业领袖知道,商业决策受益于多元化团队形式的多学科和跨学科见解。团队越多样化,集体智慧越高。在伯颜·安杰洛夫的上一篇博客— 数据战略家的崛起第一部分(链接)中,伯颜提出了一个令人信服的案例,数据战略家的角色是一个非常有用的角色,可以将数据科学与商业案例联系起来。
在那篇博客的后续文章中,我们在 DAIN 工作室的数据策略师集思广益,设计了一种交叉方法来开发和列出专业领域及其相关技能,这些领域定义了数据策略师所需的独特技能。我们通过为下图中的数据战略家提出以下维恩图来补充维恩图和数据文献。
数据战略家的维恩图
这三个圆圈代表了数据战略家最重要的知识领域;除了数据和技术之外,还有商业、通信。
业务技能对于数据策略师来说非常重要,因为他们需要将数据用例与业务目标和操作联系起来。数据和技术知识领域在任何数据和人工智能战略的实施中具有明确的作用,然而,区分数据战略家的数据和技术技能和经验非常重要,这与数据工程师的技能和经验有很大不同。更具体地说,数据策略师需要对数据基础设施、框架和数据管理工具有很好的了解,但不需要在设计这些框架和工具方面有丰富的经验或技能。理想情况下,数据策略师需要了解当前技术和数据解决方案的广泛选择,以及如何应用它们来支持业务目标。为了能够有效地将数据和技术概念与业务联系起来并进行翻译,强大的沟通技巧很快成为数据战略家翻译角色中最关键的技能之一。
为了进一步阐述建议的数据战略家文氏图,我们在与数据战略家相关的三个知识领域中分别提出了以下顶级技能:
业务领域:
- **业务战略和用例知识:**企业越来越关注数据的战略性使用,以提高组织绩效。因此,对于战略家来说,拥有一个来自不同行业和处于不同数据成熟度阶段的组织的成功(和不成功)用例的库,以支持决策和战略建议是有利的。当在公司内追求更高水平的数据和人工智能成熟度时,收益应该总是大于成本,数据策略师需要广泛的用例库来证明数据投资的潜在价值。
- **跨职能和跨领域的业务翻译技能:**端到端(E2E)解决方案需要跨职能和跨领域的知识和技能,以便能够概念化和向团队翻译“大画面”。数据策略师需要能够看到组织内不同的业务领域和功能如何合作来解决问题并创新新产品和服务。例如,当孤立的领域专家可能不知道其他孤立的领域专家正在使用的数据和解决方案时,这种知识需要应用,常常错过可重用数据集的有价值的业务洞察力。
- **治理和数据协议:**保护个人数据和认识到网络安全重要性的最新立法和法规要求有新的协议,需要在业务职能部门内进行管理。此外,自动化和最新的技术发展(例如 5G、云等)创造了新的工作方式。数据策略师需要了解他们的组织数据协议以及保护和保障数据的管辖法律。不良的数据治理可能会对整体业务战略产生重大影响。
- **项目管理:**项目管理是一项必不可少的业务技能。对于一个数据战略家来说,不同项目管理实践的知识,从 scrum 到瀑布,将是有用的,因为许多高级分析项目在被推广到企业范围的行动之前,最初是通过更短的项目/试点方法来构建的。
- **创造力和复杂问题的解决:**计算思维和数据科学改变了我们思考问题和开发商业解决方案的方式。例如,熟悉设计思维、头脑风暴、简化和抽象等方法有助于利用人工智能进行创新,并利用数据科学获得对问题的深刻见解。
- 数据角色的战略性人力资源管理:对于战略家来说,了解数据域中的不同角色(即科学家、工程师、商业智能开发人员和其他人)是什么,他们如何协同工作,以及不同的用例需要什么样的数据专家组合,这一点非常重要。
- **预见:**通常被称为 21 世纪最重要的商业和领导技能之一,预见是使用不同的战略方法来扫描和寻找演进路径,为未来进行规划。数字转型和技术一方面创造了一个正在经历快速变化的商业环境。通过机器学习获得的大量自动化数据也提供了部署预测分析以获得未来洞察力的新方法。
数据和技术领域:
- 数据资产管理 —与任何业务战略家一样,理解并增加业务资产的价值是取得业绩的先决条件。数据资产管理(DAM)是数据策略师的一项关键技能,因为数据策略师的建议和意见的结果、质量与数据质量越来越密切相关。因此,数据策略师需要了解在组织内收集、管理和管理数据价值的最佳实践。此外,了解什么方法适合于什么类型的数据也很重要(即计算机视觉与文本、数据 360)。例如,当处理大量非结构化数据时,深度学习方法通常更有用。
- 机器学习方法的一般知识 —虽然策略师能够构建和部署机器学习(ML)模型当然不是必需的,但他们对当前可用的不同技术有很好的理解是必不可少的。比如有监督与无监督的方法,回归与分类,深度学习。了解基本的 ML 方法和相关的潜在业务用例以及可以部署这些方法的分析见解,对于维护有效的算法组合具有重要的战略业务意义。
- 数据工程意识 —了解建立可行的数据基础设施和架构的拼图对于支持数据、人工智能和/或数字化转型战略的实施至关重要。在这一点上,数据战略家应该使数据库选择、云提供商和各种开源技术等问题符合业务战略。考虑体系结构和技术的性能与成本效率是决策过程中的关键因素。
- 数据伦理 —现在,机器学习系统正在部署到更关键的行业(如医疗保健和政府等),将伦理渗透到工作的各个方面至关重要。成功的机器学习系统有可推广的结果。要做到这一点,数据必须代表手头的任务。此外,这些数据必须没有偏见——这里,来自一个称为可解释人工智能(xAI)的发展中领域的方法可以应用于系统的不同部分(即,数据收集、模型训练、部署的模型调试)。
通信域:
- 数据可视化 —一张图胜过千言万语,可以使用大量数据非常快速地传达概念。数据可视化是一项强大的技能,可以说服和敬畏企业领导人和经理,并推动变革。
- **倾听技巧:**倾听是翻译角色的另一面。倾听变得越来越重要,因为它对生产力以及管理团队和人们的情绪和反应至关重要。
- 表达技能——对于所有数据驱动的洞察力,当向拥有不同技能组合的业务人员传达复杂的技术概念时,交付非常重要。演示技巧是数据战略家的翻译角色的顶点。例如,与 CEO / C-suite 讨论相同结果时,与上下文相比,数据战略家与数据科学家讨论分析时,在交付和讨论结果时会使用非常不同的翻译语言。
- **辅导和指导技能:**通往高级分析的道路可能是漫长而疲惫的,辅导经理克服障碍和阻力,以及给予经理和他们的团队实施数据战略路线图的勇气和信心,都是非常值得赞赏和重视的。
- **变革管理:**也许是在实施数据战略或任何数字化转型过程中最被低估的技能。一旦数字化转型过程在组织内开始,并且企业领导人了解追求高水平分析成熟度的投资回报,变革就需要伴随着及时和适当的沟通。一个好的变革管理者可以在不断变化的抽象环境中获得信任,并创建一个业务领导者长期致力于的平稳变革过程。变更管理是数据策略师需要的技能,以确保数据策略的有效实施。
对技术通才商务人士的需求仍在增长。支持数据战略家角色需求的技能将技术领域&数据、通信和业务结合在一起。在双边数据战略领域交叉点上,我们有数据和业务架构师,他们精通跨领域数据&技术解决方案,了解跨职能业务流程和目标;业务领域专家是在沟通、业务运营和管理方面有丰富经验的领导者。数据和技术倡导者在技术&数据领域拥有丰富的知识和经验,拥有成熟的翻译技能,能够在适当的参与级别上交流复杂的数据和技术概念。我们认为,数据战略家 unicorn 在所有三个领域内运作,以指导领导者和组织实施高度以数据为中心的业务战略,利用和货币化其数据资产。
注:本文原载于 丹工作室博客 。
鸣谢——除了本文作者之外,数据策略师文氏图也是由 DAIN 工作室的顾问开发的,他们包括海纳·阿尔伯斯曼、埃里卡·格罗恩、妮娜·哈格曼、德克·霍夫曼、阿尔图·胡蒂涅米、詹姆斯·凯尔斯特德、乌拉·克鲁什-莱托宁和琳娜·佩苏。
NBA 的上升趋势:日心说
理解 NBA 进攻中使用的概念。
近年来,以太阳为中心的术语被用作定义首选团队建设方式的趋势。可以理解的是,球队优先考虑聚集明星,让明星成为场上的最终决策者(有些场下也是如此)。回到 2019 年 12 月, 塞斯·帕特诺 为竞技写了一篇文章,阐述球星如何成为各自球队的中锋。他特别调查了年轻的明星,特雷·杨和卢卡·东契奇,以及他们各自的球队,亚特兰大鹰队和达拉斯小牛队。
在这篇文章中,我使用了和 Seth 一样的方法,通过几个指标来评估球员在进攻端的使用情况。在Basketball-Reference.com、NBA.com和pbpstats.com(基于 NBA.com 的详细数据)上有许多统计数据,以探索球员的影响,Seth 估计包括跟踪数据以估计战术使用情况,这对于考虑战术行动是有意义的。
总的用法基本上是由三个部分相互总结而成的。
- 评分用法:
(投篮次数+ 0.44 *罚球次数)/总机会
- 游戏制作用法:
(潜在助攻+罚球助攻)/总机会
- 营业额用途:
失误/总机会
从定义上来说,得分的用法主要是由控球型风格的明星球员组成的,我相信这里有两点需要注意。
我注意到的第一件事是在名单的顶端(得分使用率超过 30.0 的球员),只有休斯顿火箭队有一个以上的球员:詹姆斯·哈登和拉塞尔·维斯特布鲁克,很明显。从天文学的角度来说,把火箭的进攻描述成他们有两个太阳是没有错的。另一方面,在新奥尔良鹈鹕队的情况下,尽管只打了 24 场比赛,锡安·威廉森发现自己在高得分球员名单上。以太阳为中心不是鹈鹕队进攻的最佳术语,至少在过去的一个赛季,因为他们是一个基于使用分布的合作团队。看看他们如何从现在开始发展,以及他们是否能实现预期的飞跃,这将是一件有趣的事情。
休斯顿火箭队和新奥尔良鹈鹕队的使用情况分析
在下面,你可以找到 2019-2020 常规赛得分超过 30.0 的球员名单。
2019-2020 常规赛得分使用排名靠前的球员名单
对于组织进攻的使用,跟踪数据让我们可以看到各种类型的助攻。在 NBA 统计术语表中,二次助攻被定义为*“在接到球后 1 次运球内将球传给投篮的队友”,罚球助攻被定义为“如果球员将球传给在接到球后 1 次运球内造成投篮犯规的球员”*。正如 Seth 已经在他的文章中指出的,这种组织进攻的措施是信任球员发现队友空位(或没有空位)而不管投篮进还是出,并且也考虑到以罚球结束的传球。
2019-2020 常规赛潜在助攻和罚球助攻前 25 名球员
2019-2020 赛季常规赛最佳球员
在这种用法中很少有名字值得一提,尽管他们玩的时间可能是一个小样本。蒂姆·弗雷泽、克里斯·基奥扎和乔丹·麦克劳克林在他们有限的机会中展示了一个真正的组织者,我相信这三名球员在几乎每个 NBA 球队的替补角色中都能在压力下茁壮成长。
由于失误的用法是不言自明的,现在是时候从得分和组织进攻的角度来研究 NBA 中进攻是如何定义的了。
2019-2020 常规赛 NBA 球队使用明细
上表是得分用法和组织进攻用法的综合表示。在每支球队中,我都标记出总使用率最高的球员,并试图了解他们的进攻负荷分布。在塞斯写的文章中,他提到了亚特兰大老鹰队和达拉斯小牛队,以及他们的进攻是如何围绕他们的二年级球员特雷·杨和卢卡·东契奇进行的。常规赛结束后,再一次,可以说两支球队都在走一条相似的路线。有趣的是,东契奇的支持者明显比特蕾·杨多,这可能是一个很好的指标,可以观察亚特兰大在休赛期会选择什么类型的球员,我相信(也希望)他们会通过改善阵容来最大化特蕾(和老鹰)的进攻能力。
亚特兰大老鹰队和达拉斯小牛队的使用明细
由于跟踪数据只能从 2013 年到 2014 年获得,我制作了一个动画,展示了球队如何分配他们的进攻负荷/使用率,从下面可以看出,明星驱动的球队近年来与众不同。
从 2013–2014 年到 2018–2019 年改变团队的使用
在塞斯的文章之后,本·泰勒制作了一个精彩的视频通过回顾这些年来 NBA 进攻的历史发展来审视 NBA 中的日心说概念。他的方法与 Seth 的有点不同,但结论是相似的:NBA 球队用其他威胁包围控球型球员"为他们创造空间,然后惩罚帮助摆脱这些威胁的防守队员"。在下图中,我看了一些明星驱动的球队和他们的进攻负荷,以更好地理解他们的进攻组织。
明星驱动团队中的使用分布示例
Seth 提到了他的作品,即没有一支球员总使用率超过 50%的球队在那个赛季赢得冠军,随着明星驱动的进攻系统的兴起,在未来几年有一个问题需要回答:是否会有以太阳为中心的进攻赢得冠军,或者冠军是合作参与的结果,而不是一个巨大的太阳系?2020 年 NBA 季后赛,特别是总决赛可能是一个很好的起点,可以提取有价值的见解来回答这个问题。
风险叠加:对于人生决策,使用至少一个的概率
生活中充满了决定,但小决定其实很重要。
Riho Kroll 在 Unsplash 上拍摄的照片
生活充满了决定。
无论是流行文化还是传统智慧,都普遍强调个人的重大决定——所谓的十字路口——这是可以理解的。然而,在决定一个人的结果时,一系列更小的日常决定也同样重要——如果不是更重要的话。
本质上,这不是因为较小的日常决定有更多的内在风险,而是因为它们可以更频繁;由于风险的累积,重复事件最终发生不希望的结果的可能性实际上增加了。
假设你认为数字 4 不吉利。如果你掷出六面骰子六次,你掷出至少一个 4 的几率是多少?
- A) (1/6) * (6) = 1 * 100 = 100%
- B) (1/6)⁶ = 0.0000214 * 100 =约 0.00214%
- C) (1/6) = 0.1667 * 100 =约 16.67%
- D) 1-(5/6)⁶ = 0.6651 =约 66.51%
答案是 D) ,这个百分比大概直观上说得通。机会越多,感觉机会就越高。答案中的等式更有意思。
错误的答案
首先,在 A) 中,我们可以直观地感觉到,永远不掷出 4 肯定是有可能的——有人会说不吉利。
B) 不正确;而是计算你连续六次掷出 4 的几率(你有六次机会,每次有六分之一的几率)。不用说,这是非常不可能的,而且在 0.00214%的可能性下,也许你应该考虑宇宙可能试图告诉你什么。
T21 也是错误的,但也许你的头脑先去了那里。可以理解;骰子的每一次滚动都有 1/6 的机会,所以总的机会可能是 1/6。事情是六分之一的机会只适用于一个骰子滚动;有了 6,你就有很多机会拿到一张不需要的 4。
正确答案
D) ,或 66.51%,是正确答案,可能不直观怎么得出那个数。
首先,考虑一下而不是掷出 4 的概率是有帮助的;这样想的话,你有 5/6 的机会获得正面结果,并掷出不同的数字。
这种情况连续发生六次的几率是 (5/6)⁶ ,或者大约是 0.33489 (作为百分比,乘以 100 得到 33.49%)。
在对这些进行建模时,采用这个通用等式来确定至少一个事件发生的概率:
P(at least one of a specific outcome) = 1 - P(no outcomes of the specific outcome)
在我们的例子中没有一个具体结果的概率是前面提到的 (5/6)⁶ 或大约 0.33489 。因此,我们有:
P(at least one of a specific outcome) = 1 - 0.33489
然后我们得到最终结果 0.665 ,当你把它乘以 100 得到一个百分比,大约是 66.5% 。
因此,虽然一次掷出 4 的几率约为 1/6,但每次掷出 4 的几率都越来越高。
这似乎很明显。那么我该如何将此应用于生命风险呢?
虽然看起来很明显,随着机会的增多,出错的机会也越来越多,但实际上,在众多事件发生的情况下,风险累积的速度之快令人惊讶。
一个例子
比方说,每次骑自行车时,被其他车辆严重伤害的可能性只有 0.5%——这是一个虚构的数字,所以请不要把它当作实际的统计数据。考虑到这些可能性,你认为骑自行车实际上是非常安全的,所以你不介意骑自行车上下班。
一年大约有 252 个交易日——或者工作日,不包括节假日——假设你真的很努力工作,只休了两天带薪假(顺便说一下,我并不真的建议这样做),那么你今年工作了 250 天。你还决定骑自行车上下班,从你家到你家,所以这是 250 * 2 = 500 骑自行车。
使用上述至少一个等式的概率,我们可以得出以下计算结果来模拟您受到严重伤害的可能性:
P(at least one of a specific outcome) = 1 - P(no outcomes of the specific outcome)P(getting a severe injury while riding a bike) = 1 - P(no outcomes of not getting a severe injury while riding a bike)P(getting a severe injury while riding a bike) = 1 - (1-0.0005)^500[note: the reason we have 0.0005 above is because we divided 0.05% by 100]P(getting a severe injury while riding a bike) = 1 - (0.9995)^500P(getting a severe injury while riding a bike) = 0.22125
将最终结果乘以一个百分比,我们得出在您的工作年度内,另一辆车造成严重自行车伤害的概率为 22.125% !
这肯定比 0.05%的单次乘坐机会更不和谐,这表明风险的累积——毕竟你是在乘坐 500 次——实际上可以显著增加总体机会;当然,你不希望这种严重受伤的结果发生,即使在你的整个一年中有一次。
换句话说,如果你被告知你有 22.125%的几率在骑车时发生车祸,你可能会考虑你的决定,而不仅仅是考虑简单的 0.05%的风险。
日常决定累积起来
为了让你日复一日地重复生活中的决定,你希望完全避免负面结果发生*,你可以使用这种思路——以及这种经验统计公式——来看看什么程度的风险是真正值得冒的*
正如他们所说,选择权在你。
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
tremaineeto.medium.com](https://tremaineeto.medium.com/membership)*
人寿保险资格的风险分类评估
案例研究—数据科学项目
卢卡斯·布拉塞克在 Unsplash 上的照片
作者备注 —该项目是作为案例研究任务的一部分开发的,旨在更全面地了解数据科学在行业中的实施情况。2016 年,保诚人寿宣布在 Kaggle 举办一场比赛,邀请数据科学家提出一个风险评估模型。本案例研究的基础基于相同的问题空间,并使用来自 Kaggle 的数据和通过在线研究发现的数据来演示数据科学流程。演示文稿的链接可以在 这里找到 。
行动纲要
保险公司正专注于利用大数据和机器学习的力量来推出满足不同客户和细分市场需求的产品。下面的案例研究简要介绍了美国最大的保险公司之一保诚金融有限公司如何利用强大的数据科学路线图在整个组织内进行社会化分析,同时解决为客户群提供可扩展风险评估模型的最大瓶颈。案例研究分析了实施的数据和业务模型、数据存储和处理的规模和范围,提供了对数据和软件标准的清晰简洁的评估,同时验证了所使用的关键分析和统计方法。
项目描述
即使在提供了充分和广泛的信息之后,客户通常也会经历较长的医疗检查等待时间。任何保险计划的初始在线报价通常都不准确。销售和呼叫中心团队必须依靠传统方法向客户提供保险报价,这非常耗时。这些因素让任何客户都望而却步,迫使他们寻找其他替代品。该公司认为,只有通过更好地获取和留住客户,才能提高 L&A 部门的收入。由于获得一个新客户所需的努力比保留现有客户要高得多,因此识别具有高机会的市场并减少客户的入职时间非常重要(Kaggle,2016)。
商业模式
概观
保诚金融公司采用细分市场的方法开发产品和服务,以满足各种客户和机构的需求。价值主张是其商业模式的一个关键要素,其重点是金融产品的可获得性、改善的商业诚信、强大的道德以及通过改善客户关系提升的品牌形象。
下面的图 1 显示了项目的拟议目标如何影响一些关键业务领域,如客户关系(通过改进报价)、保险产品开发(通过研究现有业务和市场份额)、营销渠道优化和客户获取。
图一。项目在不同业务领域的优势。图片致谢——由作者使用 PowerPoint 制作。
挑战
由于不同的客户特征,预测模型在其他保险细分市场中的可扩展性以及对不同的利益相关者、销售和客户参与团队进行关于采用该模型的培训是具有挑战性的。
数据处理
分析数据模型是建立客户数据一站式商店的关键,同时确定开发风险评估模型的关键因素(麦肯锡公司,2017 年)。下面的图 2 展示了不同数据源、数据质量管理框架和分析如何集成的概念视图。
图二。保诚金融公司的数据模型。请注意*网站数据将涉及通过 L&A 网络部分获取的客户信息和其他必要的详细信息。图片致谢——由作者使用 PowerPoint 制作。
下面让我们来看看数据模型的一些关键组件。
数据源 —内部和外部,包括通过网站收集的数据、产品信息、财务数据、通话活动数据(客户和销售代表的 IVR 通话)、来自第三方供应商的索赔数据、市场人口统计信息和外部调查
数据量—2000 万客户,内部数据云存储 2.5
数据速度—L&A 段的通话和网络数据每日更新,财务和产品信息每月更新,外部数据每季度获取
数据种类 —客户人口统计、医疗、就业和家族史。数据还包括销售额、拨打的电话、促销和活动
数据准确性 —各地标准不同;DQM 用于确保数据质量
ETL (Extract Load Transform)工具 —用于 web 保险应用和调用日志数据的 Teradata 和 Teradata SQL 产品和财务数据通常通过 Excel 存储和流通,并直接输入 info link 存储(SAS 数据集)。从第三方供应商处获得的外部数据(如索赔数据)存储为 SAS 数据集。该组织正计划将通过 web 生成的数据转移到 Apache Spark
分析工具 — SAS & Python。SAS 用于数据安全目的;医疗信息非常敏感,因此该公司倾向于 SAS。Python (Jupyter Notebook)用于建模
商业智能工具 — QlikSense 和 Power BI
处理 —分析处理、数据量处理和查询优化
能力 —支持后续风险评估和客户细分研究的模型
安全/隐私 —医疗记录和患者数据需要隐私和保密。健康保险便携性和责任法案(HIPAA)管理美国健康数据的数据保护
生命周期 —需要全面的数据管理
资源
下面的图 3 说明了不同的工具和技术在英国保诚金融有限公司的应用。
图 3。整合工具和技术以促进组织中的数据科学项目。图片致谢——由作者使用 PowerPoint 制作。
推荐工具的特点:
-
Teradata —以结构化形式存储数据的关系数据库管理系统,便于最终用户查询(Teradata,2014)
-
Apache Spark (推荐)——包含 map-reduce 功能。无模式设计在本质上是分布式的,允许更好地摄取点击流数据。存储成本要低得多,并且支持云原生或本地处理引擎
-
SAS —支持更好的数据安全性,并附带用于预测分析的分析功能。与任何开源平台相比,大多数制药和银行公司更喜欢 SAS
4.Python——通用且易于使用的语言,与 SAS 相比具有更好的机器学习和预测分析能力。由于有多个开源库可用,所以更适合模型开发
5.QlikSense/Power BI—QlikSense 是一款自助式商业智能工具,它利用内存使用来加速仪表盘。允许为 QVDs (Qlik View 数据集)的数据争论和转换编写脚本,允许更快地前端加载大型数据集。Power BI 的基本版本与组织购买的 Microsoft 软件包捆绑在一起,仅用于内部报告
数据分析
探索性数据分析
数据分析分为两个部分。下面图 4 所示的第一个部分涉及为业务用户创建一个 360 度仪表板,以访问当前的市场场景,而下一个部分涉及构建风险评估模型。所有涉及客户群、市场份额、可用产品、收入和增长的顶级 KPI 都与按地理位置和产品划分的相对绩效指标一起显示在执行摘要页面中。使用 QlikSense 的探索性数据分析能够识别需要注意的业务领域,同时整合模型开发所需的准备工作。
图 4。Qlik Sense 仪表板中的执行摘要概述。请注意,仪表板是使用 Qlik Sense Desktop 开发的,没有使用其他扩展。图片来源-作者使用 Qlik Sense desktop 开发的仪表板快照。
从上述数据分析中快速发现:
1.保诚金融公司拥有 2200 万客户,但在美国仅占有 6%的市场份额
2.该公司在美国西部主要是加利福尼亚州、内华达州、新墨西哥州和科罗拉多州有较好的知名度
3.产品 D3 和 D4 是 L&A 组合中表现最好的产品
4.该公司拥有不同年龄组的客户,观察到年龄和风险水平之间呈正相关(使用皮尔逊相关系数进行相关性检查)
风险评估模型
概念图
在模型开发之前,先开发一个高级概念图,以确定影响风险水平的因素。概念图如下图 5 所示。
图 5。影响保险公司风险水平的多个因素的概念图。由作者使用 Lucid Chard 开发。
模型开发
保诚金融公司将风险分为从 1 到 8 的 8 个主要类别,1 是风险最低的保险公司,8 是风险最高的。风险级别是一个多类属性,因此使用决策树和集成技术的组合来识别具有最高准确度分数的模型。集成意味着组合来自一组模型的结果以获得更好的准确性和稳定性。尝试和测试了多种算法,以在偏差和方差之间取得平衡。数据争论、缺失值处理、异常值处理在模型开发之前完成。计算所有属性的集中趋势和偏斜度,缺失值用 0 或模式替换。利用箱线图和四分位数间距组合来识别异常值。以下算法(Analytics Vidhya,2016)是在推荐要在服务器上部署的模型之前开发的,如下图 6 所示。
1.决策树 —用于分类问题的监督学习算法,适用于分类变量数量较多的数据集。适用于处理多类问题,但经常导致模型过度拟合而没有修剪。基尼指数和熵被用作分裂的信息增益标准
2.随机森林 —一种通用的机器学习方法,可以处理回归和分类问题。允许数据和特征子集(独立变量)的引导抽样在一个森林中生长多棵树。基于最大投票将数据分类到标签中。随机森林可以很好地处理具有更高维度的大型数据集,并结合多个分类器的结果来提高模型的稳定性
3.装袋 —类似于随机森林,除了它利用所有特征来发展树
- Boosting —结合弱学习者创建强学习者的算法家族。ADA boost 依次训练不同的预测器,以提高前一个预测器的输出。ADA boost 通过改变每次迭代的不正确预测的样本权重来工作,而梯度 boost 通过识别在前一次迭代中计算的较大残差来工作
5.网格搜索 CV —一种通过尝试多个模型参数范围来微调模型输出的技术。使用 K 倍交叉验证技术,根据 K 倍的结果输出算法的最佳参数。如果使用多个参数范围,计算时间会长得多
图 6。如何利用不同的集成技术提出模型的流程。图片致谢——由作者使用 PowerPoint 制作。
模型输出
下面的图 7 显示了使用 Bagging 技术开发的模型的配对图、精确度、召回率、F1 和 ROC 分数。在比较来自不同算法的模型参数时,考虑宏观平均分数。Bagging 的准确率最高,为 0.56,召回率和准确率分别为 0.42 和 0.51。在下一个刷新阶段,可以使用 k 倍交叉验证或自举采样对模型结果进行微调。
图 7。由 bagging 技术产生的模型的配对图、精确度、回忆、F1 和 ROC 分数。图像来源 Jupyter 笔记本中模型结果的输出。
结论
保诚金融公司正在利用数据的力量做出明智的决策。数据科学领域目前是一条合理回报的河流,行为科学和设计思维开辟了通过人、流程和技术平台的整体生态系统加速解决问题的途径。风险评估模型和 360 度仪表盘是同类产品中的第一个,有可能在未来几天内以十分之一的管理顾问成本释放 1000 万美元的价值。
参考
1.德勤金融服务中心。(2019). 2020 年保险展望【白皮书】。检索自https://www2 . Deloitte . com/us/en/insights/industry/financial-services/financial-services-industry-outlook/insurance-industry-outlook . html
2.卡格尔。(2016).保诚人寿保险评估。检索自https://www . ka ggle . com/c/prudential-life-insurance-assessment/overview
3.保诚金融公司(2020)。 2019 年年报。检索自http://s22 . q4c dn . com/600663696/files/doc _ financials/voting _ results/Prudential-ar 2019 . pdf
4.Teradata (2014 年)。大数据:TERADATA 统一数据架构 TM 在行动。[在线]可从以下网址获得:http://assets . teradata . com/resource center/downloads/whites/EB 7805 . pdf
5.麦肯锡公司(2017)。利用保险数据的潜力。[在线]麦肯锡公司。可从以下网址获得:https://www . McKinsey . com/industries/financial-services/our-insights/having-the-potential-of-data-in-insurance。
6.分析 Vidhya (2016 年)。基于树的算法:从头开始的完整教程(用 R & Python 编写)。[在线]分析维迪亚。可在:https://www . analyticsvidhya . com/blog/2016/04/tree-based-algorithms-complete-tutorial-scratch-in-python/获取。
风险情报
死于新冠肺炎的风险有多大?
沃洛季米尔·赫里先科拍摄的照片(经由取消拍摄
风险智能是准确估计事件概率的能力。在本文中,我们应用迪伦·埃文斯的思维方式来评估:
- 死于新冠肺炎的风险有多大
- 电影一般会放多长时间
- 有多少 M & Ms 在 100 米的距离上排成一行
- 你的风险情报有多好
天气预报员对医生
天气预报员通过明确提及天气事件是否会发生的确定程度来使用概率预报。他们经常被要求在预报中包括天气事件发生的可能性。当他们预测“明天有 90%的可能性会下雨”时,他们有 85%的可能性是正确的。
天气预报员会在校准曲线上打满分。相比之下,医疗从业者会表现出过度自信。
当医生确信他们的病人有 90%的机会患肺炎时,只有 15%的病人被检测出肺炎阳性(见下文)。这是极端的高估偏差。
气象预报员对降水的预测和医生对肺炎的诊断的校准曲线(通过斯科特·普劳斯
医生对其诊断准确性的信心比证据实际保证的要大得多。他们宁愿安全也不愿后悔,即使这可能会导致更多的假阳性病例。如果晚期病人被发现是假阴性,医生将面临诉讼。
你有没有注意到,医生更喜欢用模糊的词语来描述他们的诊断有多大可能是正确的?
使用诸如“可能”、“可能”、“大概”这样的模糊词,他们可以回避他们所传达的模糊信息,这样他们就不太可能出错。
天气预报员的工作是重复的。他可以立即检查他的天气预报第二天是否是真实的。问题“明天会下雨还是下雪?”,“周五东京遭受台风袭击的可能性有多大?”都是定义明确的。答案清晰明确。因此,天气预报员可以通过从即时反馈中学习来快速提高他的风险情报。
医生很难从病人那里得到即时反馈。病人可能不会回来了。病人可能会被介绍给另一位医生。医学领域的许多问题无法准确回答。某些传染病,如伊波拉病毒和新冠肺炎病毒,需要进行预后筛查测试、基因组测序、接触者追踪、数据分析和严密监控。
诸如“这种新药对病人有副作用吗?”、“对于患有慢性疾病的新冠肺炎患者,应该给予什么样的治疗?”通常会在几周或几个月内导致医学诊断的改变。
未知的未知
邓宁-克鲁格效应是一种认知偏差,根源在于缺乏风险智能。大卫·邓宁和贾斯汀·克鲁格认为,无能不仅会导致糟糕的表现,还会导致无法认识到自己的无能。无能的人最容易产生虚幻的优越感。出于过度自信和缺乏自我意识,他们更有可能高估自己的知识或能力。
知识渊博的人在获得更多知识的同时,会更加意识到自己知识的局限性,即使这种意识可能会削弱他们的信心。一个博学的学者可能因此遭受虚幻的自卑。他可能低估了自己的能力。他知道有很多问题他还不知道答案。
未知的知识
你的知识通常是基于你没有意识到的事情。这可能是直觉、本能或直觉。
以英语为母语的人可能不知道语法规则,但他们可以连贯、正确地说和写。非母语人士将不得不花费数年时间学习时态、句子结构和词汇,以达到足够好的掌握水平。
大学生可能已经学习了数学概念和规则,但不知道如何将它们应用于一个特别困难的问题。他们所接受的数学基础是未知的知识。但是对于数学天才来说,这些问题只是小菜一碟。
他们不知道的是,数学天才更擅长调用数学基础来解决问题。数学天才在很小的时候就学习数学,他们已经将数学概念、方法和技巧内化了。简而言之,他们更善于发现联系,并将隐性的已知转化为显性的已知。
已知的未知
一个专业的赌徒会故意犯一些明显的错误来判断他的对手会如何对付他。如果对手巧妙地利用了他的错误,这个专业赌徒就会停止游戏。他只有在确信自己能赢的时候才会下注。专业赌徒通常了解自己的优势、弱点和局限性,并从过去的错误中吸取教训。
展示智慧的欲望会抑制风险智慧。知道自己不知道的东西,可以防止自己屈服于解释深度的错觉。
贝叶斯定理
当我们确定地知道其他概率时,贝叶斯定理对于寻找未知概率是有用的。
65 岁及以上的老年人死于 Covid 的可能性有多大?
一个中国人和美国人的死亡风险会略有不同。对于 65 岁以上的中国人:
P(死于 Covid | 65 岁以上)= P(死于 Covid)* P(65 岁以上|死于 Covid)/P(65 岁以上)
P(C|>65) = P© * P(>65 | C) / P(>65)
P© = 死于 Covid 的概率= 2.3% = 0.023
p(> 65 | C)=65 岁以上中国人死于 Covid 的概率 = 81% = 0.81
p(> 65)=65 岁以上中国人的百分比 = 9.5% = 0.095
p(C | > 65)= 65 岁以上中国人死于 Covid 的概率= 0.023*0.81/0.095 = 0.196 = 19.6%
如果一个中国人年龄在 65 岁或以上,他有 19.6%的机会死于 Covid。
对于一个年龄相仿的美国人来说:
P(C|>65) = P© * P(>65 | C) / P(>65)
P© = 死于 Covid 的概率= 3.86% = 0.0386
p(> 65 | C)=65 岁以上美国人死于 Covid 的概率 = 80% = 0.8
p(> 65)=65 岁以上美国人的百分比 ol d = 15.2% = 0.152
p(C | > 65)= 65 岁以上美国人死于 Covid 的概率= 0.0385*0.8/0.152 = 0.203 = 20.3%
美国人有 20.3%的几率死于 Covid。
贝叶斯定理只有在你能避免犯基础率谬误时才有效。不同的国家有不同的基本利率。人口老龄化的国家往往有更高的病死率。
正态分布
如果你去拜访一个看了 30 分钟电影的朋友,你会预测电影的长度是多少?
当托马斯·格里菲斯和约书亚·特南鲍姆问人们完全相同的问题时,人们根据他们的日常经验给出了统计估计。通过考虑电影播放时间的基本比率,他们不知不觉地采用了贝叶斯思维。
Griffith 和 Tenenbaum 发现电影运行时间遵循高斯分布,由此预测值围绕平均值聚集(见下文):
电影在“所有上映电影”和“票房最高电影”中的分布(通过斯蒂芬跟随
你不必掌握贝叶斯定理或高斯分布的复杂数学理论来得出上述结果。风险情报看起来很直观。
已知的知识
费米问题是我们永远不会知道确切答案的数学问题。如果我们能做出合理的假设和大概的估计,我们就能做出有根据的猜测,得出一个大概的答案。
微软和谷歌喜欢用费米问题来拷问他们的受访者,以测试他们的思维能力。准备好面对这些臭名昭著的问题:
芝加哥有多少钢琴调音师?
这里的解决方案是。
如果银河系中有相当数量的智慧文明,为什么我们的文明从未遇到过其他文明?
费米悖论可以用德雷克方程解决。
测量单条 M&Ms 线路到 100 米的距离需要多少数据包?
一个 1.59 盎司的袋子里大约有 30 颗 M & Ms 巧克力豆。
一个普通的 M&M 直径约为 1 厘米。
一包 M & Ms 可以做 30cm 距离的单行。
100 米的距离将有 100 米/0.3 米= 333 个 M & Ms 包
如果你是一百万秒,你是多少岁?一百万小时前?一百万天前?
1 年= 365 天 x 24 小时 x 60 分钟 x 60 秒= 31,536,000 秒
1000000 秒/31536000 秒= 0.03 年
这意味着你是一个 11 天大的婴儿。
1 年= 365 天 x 24 小时= 8,760 小时
1,000,000 小时/ 8,760 小时= 114 年
这使你成为一个非常老的超级百岁老人。
1 年= 365 天
1,000,000 天/ 365 天= 2740 年
这对人类来说是不可能的,至少现在是这样。
以下是你如何做出更好的预测
风险智能可以防止我们停留在无知的幸福或过度恐惧的反应。总体而言,预测地缘政治、宏观经济和股市趋势等紧迫问题要困难得多。
令人惊讶的是,每个人都可以有条不紊地训练预测未来的能力。Philip Tetlock 提出了以下实用的方法。参加概率推理和预测的简短培训课程。识别日常生活中的认知偏差。阅读新闻并与其他预报员讨论。加入全球预测锦标赛。
最后但同样重要的一点是,保持开放的心态,愿意经常快速地改变你的想法。
编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
本文最初发表于showdeyang.com
人工智能驱动的信贷自动化的风险——综述
企业人工智能越来越多地被应用于改造和自动化银行流程,包括贷款和信贷价值链。
银行业似乎正在依赖人工智能(AI)和智能自动化来保护不断减少的利润。企业人工智能越来越多地被应用于改造和自动化银行流程,包括贷款和信贷价值链。对于一个历史上保守的行业来说,这是一个前所未有的举动,但绝望的时刻需要绝望的措施。人工智能仍然是一项成熟的技术,其创造者在技术行业尚未理解和控制风险。人工智能风险及其影响会在高度监管的大规模银行信贷流程中放大。银行很清楚这一点,但他们别无选择,因为他们的利润率正受到来自各个方面的冲击,时间对他们不利。
银行被迫部署提高效率和削减成本等防御性策略,以维持利润率。理论上,这是人工智能和自动化有望拯救银行业的地方。
传统信贷和贸易本身一样古老,自从大约 4000 年前基于物物交换系统的作物贷款在美索不达米亚的古代寺庙中引入以来,其核心概念并没有根本改变。然而,自那以后,信贷流程、系统和效用发生了演变,推动了人类文明的大规模扩张和进步。尽管非银行贷款在现代经济中发挥着至关重要的作用,但银行仍是神圣不可侵犯的现代信用殿堂。自 19 世纪初以来,银行已经建立了一个强大的信贷业务堡垒,并成功抵御了多次冲击。然而,对银行来说,最新的破坏性冲击是非传统的、未知的领域。当前人工智能驱动的颠覆正在走向成熟,但却是尖端技术,它通过快节奏的产品和运营创新推动快速变化,并呈现出一大堆未知的未知。这与当前保守的银行业经营理念或商业模式很难兼容。银行第一次面临一个可怕的敌人。由于多年来在低于标准的信贷实践中躲闪和迂回,持牌银行和受监管银行陷入了错综复杂的监管之中。一方面,银行业正试图应对人工智能如何影响现有银行和信贷法规的合规性,另一方面,人工智能本身将如何受到监管存在监管不确定性。
尽管存在所有的不确定性,但银行业正缓慢但肯定地被人工智能的无情打击所吸引,似乎正在梦游进入智能自动化陷阱,而没有充分意识到与之相关的风险。
事实上,对银行业人工智能风险的集体理解还需要数年时间。在讨论风险,特别是人工智能模型风险之前,有必要了解人工智能驱动的自动化预计将如何重塑银行的信贷价值链及相关流程和技术。让我们从 10 万英尺高空的卫星视图开始,然后快速下降,处理信贷价值链的细节以及地面上的相关模型和算法。
10 万英尺高空的工业革命
工业 4.0:早期工业化以来的工业革命
由于数字技术进步的令人振奋的步伐,我们被认为正在经历第四次工业革命,被称为“工业 4.0”。这一革命性阶段背后的普遍影响有时被称为“网络物理系统”,实际上是人工智能。工业 4.0 主要专注于将智能注入每个系统和流程,使其智能和自主。
万英尺高空的数字进化
数字进化:数字企业成熟度和时间表
对工业革命的进一步研究表明,“工业 4.0”及其前身对“数字进化”做出了重大贡献。数字企业(DE)被认为是在三个不同但相互关联的阶段中发展。DE 1.0 主要关注个人电脑和软件等技术的发展,而 DE 2.0 则关注移动性和互连性的进步。最新阶段的 DE 3.0 是关于利用技术基础设施和注入智能,使流程和系统智能和自治。今天,大多数 DE 3.0 企业都是大型科技公司,已经掌握了利用人工智能的技术基础设施。大多数传统银行刚刚开始升级其遗留系统,还远未实现人工智能的全部潜力。理想情况下,阶段之间的过渡应该是一个渐进的过程,组织有机会建立、消化和维持。在尝试大规模部署人工智能之前,银行业似乎没有时间、技能或资源来达到所需的技术成熟度水平。银行渴望成为科技企业,这很可能是一个有效的战略选择。但是,受监管银行的商业模式和文化并没有发生重大变化,以适应技术驱动的战略。
系统中人工智能风险的积累可以比作’ 【沸腾的青蛙】 '在这种情况下,风险在突然发生灾难性转变之前就已经酝酿好了。银行正以某种方式面对自己的“ 柯达时刻 ”。
人工智能进化@ 5000 英尺
人工智能波——DARPA 人工智能进化分类
作为愿望或抽象概念的人工智能与人类思想本身一样古老,尽管它可能从未被设想为一种技术可能性。虽然人工智能作为一个具体的概念和计算机科学的一个分支自 20 世纪 50 年代以来一直在酝酿之中,但直到 2010 年代初才带来任何商业利益。人工智能只是在与数字进化融合时才开始有商业意义。国防高级研究计划局(DARPA),一个著名的前沿人工智能研究的先锋,已经将人工智能进化分为三个浪潮。波浪被称为手工知识、统计学习和语境适应。今天的人工智能属于第一波和第二波,但离解释它们的行为和结果还有一段距离。
可解释性和透明度是在信贷和银行领域有效实施人工智能面临的一些最大挑战。监管机构要求银行能够解释贷款和信贷决策,并充分披露批准或拒绝信贷决策背后的原因。
此外,数字进化 3.0 是一个必要的技术生态系统,可以充分发挥人工智能的全部潜力,并充分管理其风险。据估计,银行在实现 DE 3.0 到期方面落后 10 到 15 年。
人工智能@ 1000 英尺
受 DARPA 启发的人工智能分类:人工智能模型的整体图景
人工智能是一种结合数据、业务逻辑和机器/统计学习模型来影响或自动化流程的系统。虽然这需要一种计算机科学的方法来描述人工智能,并且不一定是人工智能的学术定义,但从应用模型风险的角度来理解人工智能是有用的。DARPA 启发的分类是比标准定义更好的理解人工智能的方法。
- 机器学习 : DARPA 将其称为“统计学习”,是经典统计建模和监督、非监督和强化学习的融合。深度学习是机器学习的一个子集,使用多层神经网络来解决更高维度的问题。
- 智能服务自动化:自然语言处理(NLP)、语音、音频、视频和图像处理被认为是智能服务自动化(ISA)。ISA 应用机器学习和深度学习技术,并且它们在它们的效用水平上被商品化。
- 机器人:机器人将物理传感器和控制与人工智能相结合。
100 英尺处的银行模型
银行模型清单:信贷模型不仅仅是法规遵从性
银行已经广泛使用模型和工具来产生商业见解、自动化流程和做出商业决策。任何标准的零售和商业银行模型库存都可能有成百上千的金融和非金融模型。大型零售银行和企业银行可能有 1,000 到 2,500 种工具和模型。
大多数银行模型属于上述 DARPA 分类的第 1 波& 2。大多数 wave 2(统计学习)信贷和贷款模型的开发和部署都是为了支持高级巴塞尔协议 II & III 认证。
从信贷角度来看,模型主要属于零售和非零售(公司)投资组合。但是,值得考虑的是与信用相关的市场和市场风险模型以及包括信用策略(风险偏好)在内的与信用相关的运营和操作风险模型。
50 英尺的信用模型
银行业中的信贷模型清单-企业人工智能越来越多地用于自动化信贷价值链
银行将大部分信贷建模精力用于遵守风险报告的各种监管要求。高级统计学习模型的真正潜力在管理与信用风险及其操作相关的风险方面几乎从未发挥过重要作用。尽管巴塞尔(Basel)和多德-弗兰克(Dodd-Frank)等监管要求迫使银行更加以数据为导向,但客观的基本银行文化从未出现过。例如,信贷模型性能指标在过去十年中几乎没有改善,但这从来都不是问题,因为投资和改善模型性能没有太大的商业意义。银行业信贷模型的最大风险不是模型可能出错,而是监管者会注意到这一点,并对违规行为处以重罚。缺乏来自行业外的竞争,部分是由于其庞大的规模,导致银行自满,监管机构一直在打勾,直到现在。
银行业的竞争态势突然发生了变化,BigTech、FinTech、TechFin、neo banks 等新的参与者。正在通过一次一次的技术颠覆蚕食银行利润。过去,银行成功应对了传统的竞争和干扰,但现在它们面临着痛苦的“千刀万剐”的局面。
企业人工智能被这个行业作为银弹出售,这个行业也是通过专有贷款(亚马逊)、支付系统和信用卡(苹果、谷歌)、加密货币(脸书)等盈利的有力竞争者。此外,他们可以使用更成熟的技术基础设施,并且不受法规的束缚,至少目前是这样。银行别无选择,只能与这些科技巨头合作,实施人工智能,实现信贷价值链的自动化。尽管监管信贷模型目前超出了先进人工智能算法的限制,但整体信贷价值链正在快速自动化。正在使用先进的人工智能算法开发下一代模型,以找到优秀的客户并参与其中,改善整体客户体验,为客户开发个性化的价值主张,帮助银行提高效率和道德水平,管理收款等。
人工智能算法@地面
用人工智能算法复制人脑——信贷价值链自动化越来越多地利用这些算法。
最新的人工智能算法已经以不同的复杂程度复制了人类大脑的大部分活动。对于银行来说,应用这些能力来改善客户价值主张和应对竞争的诱惑是不可抗拒的。这些算法的全部主机将可能被用于生成集体见解、增强客户体验和提高效率。它已经在聊天机器人、语音银行、智能信贷政策整合、连接物联网数据以自动化流动性和贸易融资、交易员和银行家对话分析以改善销售机会、监控行为和增强客户服务等方面发挥作用。其中一些人工智能算法复杂、精密且不透明,但由于它们没有应用于监管模型,因此被认为风险重要性较低。
众所周知,沸腾的锅的温度似乎上升得相当快,而青蛙仍然幸福地不知道。
总之……
银行在转型项目上投资数十亿美元,希望提升信贷和银行系统,使它们为人工智能做好准备。企业人工智能有望在信贷和关联银行流程的自动化和智能化方面发挥重要作用。但是,由于目前的技术成熟度和相关技能差距,根本的转型战略绝不是以人工智能为中心的。大多数银行仍在从传统系统(数字企业 1.0)向移动和基于云的基础设施(数字企业 2.0)过渡。银行正在努力获得正确的数据和基础设施基础,以便能够有效地利用人工智能。这在正常情况下是有道理的,但现在是银行和信贷的非常时期。
竞争和成本压力持续存在,银行已经开始将人工智能模型滴入银行生态系统,而没有整体的人工智能战略或监管指导方针。杂耍才刚刚开始,但随着更多的人工智能模型进入生态系统,它将变得异常困难。
教机器行为:强化学习
强化学习基础
第一部分
这篇文章的目的是为任何人进入强化学习提供一个切入点。我打算提供理解什么是强化学习算法,它们如何工作所必需的基础知识。后续文章将深入讨论具体的算法和实现。一定要订阅。
TL;大卫:在文章的最后,你会发现所有学习材料的总结。
Re enforcement Learning(RL)是一门科学,旨在创造能够学习如何在特定环境中以最佳方式行动的机器。如果我们将智能代理定义为最佳行为的智能代理,那么这个领域可以被认为是人工智能的一个子领域。一个这样的智能代理将是一个学习如何在世界冠军的水平上下棋的系统。
请注意,正如在所有机器学习子领域中一样, RL 程序并不是显式编码的,以便在某些给定的任务中最佳地执行。相反,这门科学背后的动机是设计通用算法,这些算法能够不断地从环境中学习 T21,这样它们就可以利用学到的知识在特定的任务中表现出色。
基础知识
RL 的灵感来自于行为心理学*,这是一个科学领域,专注于个体的行为如何通过强化 和重复来改变。在这种情况下,正确的行为会得到奖励,不受欢迎的行为会受到惩罚;想出一个典型的对狗的调理方法:当狗表现好时奖励它,但当它咬你的鞋子时惩罚它。通过足够多的互动,个体可以学习到最优行为,即最大化其总回报,或者等价地最小化其惩罚。*
总报酬可以被认为是在一个代理人的生命周期中的每个时间步给出的独立报酬的总和。
为了最大化其总回报,一个 RL 代理需要学习如何最佳地表现。这意味着,它必须花一些时间在每时每刻寻找最佳行动。测试未知的行动路径可能会浪费代理人的时间(比如说,如果代理人的时间有限,像大多数生物一样),这些时间可以用来在更好的已知路径下获得更高的奖励。这意味着必须在探索环境和使用* 已经获得的知识之间找到平衡。这种困境在强化学习中被命名为探索 vs 利用,是工程化类似类型在职者时需要解决的一个经常性任务。*
强化学习的重点是开发代理,这些代理学习在环境中采取行动,以便最大化累积回报的一些概念。
为了构建一个具有这些特征的代理,我们利用数学框架来模拟代理的执行。正如你将看到的,一个问题的数学模型允许工程师在计算机上实现它们。
一群与环境互动的蓝色特工。他们的目标是避免被红色特工直接看到[1]。
任务建模
简单的模型
让我们假设一个智能体与环境的交互是这样的:一个智能体在时间* t
、中的一个点上观察环境状态** s
,并根据它所看到的,决定执行一个给定的动作 a
。在随后的时间t+1
,比如说一秒钟后,代理接收到奖励/惩罚 r
以执行该动作;这个循环在时间t+1
重新开始,此时代理观察到环境的新状态s.t+1
。该循环要么永远重复,要么直到最后一个时间步T
。*
主体-环境相互作用模型。摘自[2]。
一系列的状态、动作和奖励被正式称为轨迹:s0, a0, r1, s1, a1, r2, ...
。
如果环境曾经到达一个 最终状态 (例如,在国际象棋游戏中到达一个对弈对手),我们认为这个交互是插曲:它有一个开始和一个结束*。相反,没有在任何时间点完成的任务被命名为连续(我们的宇宙可能就是这样的环境之一)。我们需要区分这两者的原因将在下面几节中变得显而易见。*
有限马尔可夫决策过程
根据状态*、动作和奖励来公式化这种相互作用,允许我们将问题构建在被称为马尔可夫决策过程 ( MDP,简称)的数学框架中。您可以将 MDP 视为数学模型,它允许我们将这种高层次的交互概念简化为定义明确的元素。具体来说,MDP 可以使用一个三元素元组对交互进行建模:*
- S :可能状态的有限集合*。
比如井字游戏的一个 单态**s**
就是游戏的网格,它告诉被玩的 x 的 和 o 的 所在的位置。所有状态的集合将包含所有可能实现的板的组。***
井字游戏中可实现的各种状态列表。
- A(s) :从状态
**s**
可用的有限组可能动作*。
如前所述,动作将代理从一个状态带到下一个状态( sᵢ → sᵢ₊₁ )。因此,从任何状态s
,将有一组可能采取的行动,定义为**A(s)**
。在井字游戏开始时,第一个玩家可以选择最多 9 个单元格来标记(要采取的行动),而第二个玩家在第一轮只能从 8 个单元格中选择。***
井字游戏状态图。每个箭头都是将代理从一种状态带到下一种状态的操作。
- Prob(s ',r| s,a) :转移概率函数。* 这个概率函数描述了代理的环境机制:当从一个状态
s
开始并采取一个行动a
时,实现一个状态奖励对(例如,check-mate,WIN)的概率是多少。更正式地说,我们可以将单个交互描述为 {s,a → s ',r}: 从状态**s**
开始,执行动作**a**
,将代理带到一个新的状态**s'**
,获得奖励**r**
。如果想象起来很混乱,下一段旨在让它变得清晰。***
备份图是非常有用的工具,可以让我们更好地可视化 MDP。我们可以将代理和环境之间可能的交互想象成一个图,其中 S 中的每个状态 s 是一个节点,来自给定状态 A(s) 的每个可能动作是一个动作节点*,边是每个下一个状态*S’的奖励概率以及它们相关的奖励 r 。
让我们通过备份图来说明转移概率函数。让我们假设你处于这样一个场景中,你可以购买一张彩票,以千分之一(0.1%)的概率赢得$1000
,以 99.9%的概率输掉$10
,或者不购买,既不赢也不输钱,但有 100%的概率。
所有可能的转换包括:
Prob(Win, $1000| Initial, Buy)
= 0.1%Prob(Lose, -$10| Initial, Buy)
= 99.9%Prob(GoHome, $0| Initial, DontBuy)
= 100%
所有其他的转变组合都是不可能的,这意味着它们发生的概率为零。举几个例子:
Prob(Win, $999999999| Initial, Buy)
= 0.0%
不可能用一张单人票赢得超过 1,000 美元的奖金。Prob(Win, $1000| Initial, DontBuy)
= 0.0%
不买票不可能中奖。
随机与确定
状态转移是随机定义的(用更简单的话来说,是一个概率函数),允许像扑克游戏这样的随机环境用 MDP 来建模。在 确定性环境 ( 非随机,如井字游戏)中,从状态**s**
开始并采取行动的代理人**a**
总是会转换到状态**s'**
并获得相同的奖励**r**
。**
奖励
最优代理人本身的目标是最大化累积报酬,而不是个人报酬。一个聪明的代理人宁愿在它的轨迹中获得小的回报,最终得到正的累积和,也不愿随着时间的推移获得高的正回报和低的负回报,最终得到低的累积和。所有奖励之和 G 在一定时间后 t 定义为返回*** 。这种回归就是我们希望我们的代理人学会最大化的价值。***
如果交互作用是幕式的,则此和 G(t) 将被限制,因为有最大数量的步骤: T 。**
情景任务中的奖励累积总和
反之,在连续 互动中,由于最终时间 T 不存在,累积总和、 G(t)** 将趋向于+infinity
或-infinity
。这是因为将会有无限多的奖励。****
例外情况:
- 如果所有的返回值都为零,那么总和也将是 0。
- 如果每个后续奖励都比前一个小,并且其总和已经有界(更多信息见下文)。
持续互动中的累积奖励总和(从时间 t 开始)
折扣未来的奖励
一般来说,对无限回报建模是没有用的,因为它不允许我们优化代理的行为。为了解决这个问题,有人提出了一个非常聪明的想法:贴现。它包括给予代理人【能力】优先考虑/加权短期回报。这样,长期奖励会以指数方式贴现(这意味着每个后续奖励的价值都会比前一个减少更多)。正如您将看到的,这使我们能够摆脱无限报酬的问题。
一个有用的类比是,将贴现理解为代理人在其累积报酬计算中变得短视。
**实际上,我们将把每个奖励乘以一个**贴现因子(𝛾;希腊单词“gamma”)带有指数项,随着时间的推移,奖励越大。
折扣累积奖励金额
折扣演示
让我们举例说明折扣奖励是如何工作的。让我们任意决定,在每一步,奖励 R 为1。下图对此进行了说明,其中 x 轴是时间步长,y 轴是相应时间步长的计算奖励。
在所提供的示例中,每个时间步长的奖励
如果我们应用𝛾=0.9 的贴现值,每一步R * gamma
的回报都成指数递减。这意味着,在随后的每个时间步长,该值比之前步骤中已经减少的值减少更多。
如果我们只使用到时间t
(下图中的 x 轴)的奖励来计算回报G
(下图中的 y 轴),您将会看到奖励限制在某个值。在下面的例子中,考虑所有奖励直到无穷大,提供了 10 的有界回报G
。
使用贴现因子时,显示奖励累计总额的图表是有界的。折现系数(γ)= 0.9;每一步 r = 1;G = 10。
当我们将越来越多的时间步长加入到我们的回报G
计算中时,计算这个相同的值,没有任何折扣,将为我们提供一个无穷大的值。
如果不使用折扣,则显示奖励累积总额的图表不受限制。
考虑
重要的是要记住:
- 贴现因子是一个有理数。
- 贴现因子需要在开放范围内: 0 < 𝛾 < 1。
数值越接近 1,越考虑长期回报。
该值越接近 0,就越不会考虑长期奖励。 - 当贴现因子等于 1 (𝛾 = 1)时,我们再次得到上面看到的无界累积报酬公式。如前所述,在这种情况下,回报将趋于(+/-)无穷大。如果贴现因子大于 1 (𝛾 > 1),也会发生同样的情况。
- 如果贴现因子等于零(𝛾 = 0 ),回报将是微不足道的,等于 0。
这种技术也可以用于建模的情景任务。如果折扣因子被设置为 1,并且时间 T 之后的所有奖励被设置为零,它将模拟一个情节任务。**
在上述条件下,奖励的折扣总额也可以代表偶发任务
最佳行为:政策和价值函数
许多 RL 算法涉及估计值函数,该值函数定量地描述“代理将自己定位在状态 s 中有多好】。**值的概念是根据一个代理人在一个给定状态开始时能够获得的 回报或累积未来回报 来定义的。****
价值函数的简单建模
将奖励分配给各州可以让代理了解其周围的环境,从而提供最佳策略的洞察力。当井字游戏代理被设置为第一次玩时,它的值函数可以将零分配给所有状态,因为它们是未知的。通过遵循预定义的行为,代理可以了解哪些状态导致了赢和输,并相应地更新值函数。一个状态值代表在一个状态**s**
下开始并遵循策略π ( 希腊字母 pi ),代理人的行为的期望报酬。在国际象棋棋盘上,一个直接导致对弈的状态将被赋予一个值1
给获胜的一方,而-1
给失败的一方。
状态值函数定义。它是遵循策略 π 的状态 S 的期望值。
也可以为[状态,动作]对定义值函数。他们估计从状态**s**.
开始采取行动**a**
的回报
给定策略的动作值函数的定义 π 。
策略则是代理在每个状态下采取的指导方针或决策。
一个策略 P 可以理解为在状态st53】时选择一个动作 aᵢ 的概率。
形式上,策略被定义为可用动作的概率分布函数,给定输入状态。它们不一定是确定性的,因为代理的策略可能是随机的,这意味着它会选择具有一定程度随机性的决策。****
例如, 随机策略 将为来自状态 s 的每个可用动作提供相等的概率(等效地使用均匀分布),并且在执行期间将从策略中对动作进行采样。使用随机函数来描述策略允许代理处理一定程度的随机性,这种特性在存在不确定性的环境中(例如扑克游戏)是有价值的。
政策的数学表述
在此框架中可以定义两种类型的策略:
- ****探索性策略:它们允许代理采取非最优决策,目的是探索潜在的最优未知路径,并改进其策略。他们给导致明显非最优回报的行为分配一个非零概率。
- ****开发性政策:利用现有的环境知识,试图获得最佳回报的政策。它们是贪婪的政策,分配产生最高预期回报的概率。当环境不为人所知时,这种政策的不利之处就来了,代理人会得到次优的回报。
寻找最优策略:贝尔曼方程
强化学习代理的最终目标是学习提供最高回报的策略。这就是所谓的最优策略,用 π 表示。对于这样一个最优策略,在任何状态下,其预期收益都大于或等于任何其他策略的预期收益。换句话说,在每一个可能的状态下遵循 π 的预期回报,如果不比使用任何其他可能的策略(π’)时更高,至少等于。**
*为了确定未知的最优策略 π,让我们利用目前所学的知识。首先,让我们将【v (s)定义为最优状态值函数,如果我们遵循最优策略【π】则实现该函数。类似地, a 是最优状态-动作-值函数,如果遵循最优策略 π 获得。
最佳值函数:在遵循使 v(s)和 a(s,a)最大化的策略 π 时获得
假设最优值函数 v 和 a 是已知的,但是最优策略是未知的,可以通过以下方式建立最优策略:**
- ******当 v (s)已知时:通过允许代理仅采取从状态
s
开始的使价值最大化的行动,可以建立最优策略。换句话说,给任何使【v (s)最大化的行动分配非零概率的策略将是最优策略。 - 当 q(s,a)已知时 :最优策略可以通过允许代理在每个可用状态下采取任何使 q(s,a)最大化的行动来建立。*
使用 q (s,a) v(s) 有一大好处。即使v (S)是一个更简单的值函数,由于它只取决于可能的状态数| S |(S 的大小),所以它需要环境的知识。用 v 生成最优策略需要知道从初始状态**s**
可达的可能状态【s’。相反,用 q(s,a)生成最优策略只需要知道初始状态**s**
和在该状态下可用的可能动作。*****
贝尔曼方程
但是,当我们不知道最优策略时,我们如何确定最优值函数呢?等式:
没有提供太多关于如何获得最大化价值函数的策略的信息:最优策略。我们必须计算所有可能策略的价值函数,然后选择提供最大价值的策略。幸运的是,我们可以以一种不依赖于特定政策的方式定义最优价值函数,并允许我们计算它们。
具体地说,我们将根据其他状态的价值函数来重新表述给定状态的价值函数。从数学上来说,我们将递归地定义它们。
根据定义,最优价值函数【v *(s)被表示为期望回报G
,从状态s
开始,并采取使该值最大化的行动a
。
代表最佳状态值函数 v(s)的备份图
- 等效表示为:
定义为预期收益的状态值函数。
- 使用 G 的定义,即奖励的贴现累计总和,我们得到:
- 用值函数代替
G
:
当采取最优行动时,状态 s 的最优值是下一个奖励的期望值加上下一个状态**s'**
的贴现最优值。
**q(s,a)**
也是如此:
在状态**s**
采取行动**a**
时的最优值是后续奖励的期望值加上在后续状态***s'***
采取后续最优行动**a'**
时的贴现最优值。
表示最佳状态值函数 q(s,a)的备份图
求解贝尔曼方程
这些方程被称为贝尔曼最优方程,以美国数学家理查德·贝尔曼的名字命名,他是最早描述这些方程的人之一。贝尔曼优化方程可以用类似于动态规划的优化方法数值求解(例如使用计算机)。
如果我们有所有后续步骤s'
的价值函数的近似值,那么就有可能计算状态s
的最佳价值函数。这应该允许我们学习一个最优策略。
尽管如此,最好将这一解释留给后续文章。已经有很多信息需要消化了,我很高兴你能理解这一点。
在我的下一篇文章中,我将总结用来做这件事的技术的基础和状态。当我把它们写下来的时候:
- 看看更多的机器学习内容:例如我最近的一篇解释 GANs 的文章。
- 在我的强化学习 Github 知识库中,您可以随意地先睹为快更高级的算法来寻找最优策略🙂。
- 对于更高级的技术,请随意浏览我实现的玩 Atari 游戏的深度 Q 学习算法。
- 入门看 Deepmind 的强化学习入门。
GitHub: diegoalejogm
摘要
- 强化学习是研究如何构建智能代理的领域,智能代理是在给定环境中设置时表现最佳的代理。受行为心理学启发。**
- 马尔可夫决策过程可以通过状态
s
、动作A(s)
、奖励r
和转移概率Prob(s', r | s, a)
对主体-环境交互进行建模:通过执行动作a
从s
到达状态s'
并获得奖励r
的概率。 - **奖励 的累计总和称为 回报,可以用贴现因子 𝛾 有界到一个离散数。在强化学习中,我们试图教会代理一种行为,使这种价值最大化。
- **值函数 v(s) 和 q(s,a) 近似于代理在处于状态 s 时将会收到的期望值。它们可用于定量评估达到某个状态或执行某个动作的效果。
- 策略是代理遵循的行为。它们被定义为处于给定状态
s
时采取行动a'
的概率。 - 最优值函数
v*
和q*
允许我们确定最优策略【π***,这将允许我们生成智能代理。****
参考文献
[1] OpenAI。2020.多智能体交互产生的紧急工具使用。[在线]可在 https://openai.com/blog/emergent-tool-use/查阅[2020 年 4 月 11 日查阅]。
[2]萨顿和巴尔托(未注明日期)。强化学习。第二版。麻省剑桥:麻省理工学院出版社。
[3]szepesva ri,C. (2010 年)。强化学习的算法。[加州圣拉斐尔]:摩根&克莱普尔出版社。
[4] Mnih,v .等《通过深度强化学习实现人级控制》。性质 518,529–533(2015)。