TowardsDataScience 博客中文翻译 2019(四百五十九)

TowardsDataScience 博客中文翻译 2019(四百五十九)这篇文章将帮助你理解什么是 STL 分解 以及如何从头开始

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

STL 分解:如何从零开始?

原文:https://towardsdatascience.com/stl-decomposition-how-to-do-it-from-scratch-bec?source=collection_archive---------0-----------------------

弄清楚什么是 STL 分解,以及它是如何工作的。

这篇文章将帮助你理解什么是 STL 分解,以及如何从头开始。最后,我也将使用 statsmodel 库,在几秒钟内得到结果。

什么是 STL 分解?

所以,STL 代表使用黄土进行季节和趋势分解。这是一种将时间序列数据分解为包含季节性、趋势和残差的 3 个分量的统计方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,什么是时间序列数据?它是一系列数据点,在一个连续的时间轴上变化。下面是一个时间序列数据的例子,你可以看到时间轴是在一个小时的水平,股票价值随时间而变化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们来谈谈趋势。趋势给你一个总体数据的大致方向。从上面的例子中,我可以说,从上午 9:00 到上午 11:00 有一个下降趋势,从上午 11:00 到下午 1:00 有一个上升趋势,下午 1:00 之后趋势是恒定的。

而季节性是以固定时间间隔重复出现的规则且可预测的模式。例如,下图有助于我们了解零售商每月的总销售量。所以,如果我们仔细观察,我们会发现每年 12 月份的单位销售额都在增加。因此,在 12 个月的时间内,单位销售额有一个规律或季节性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机性或噪声或残差是随机波动或不可预测的变化。这是我们无法猜测的。例如,2014 年 3 月有一个高单位销售额,这在每个 3 月都是不规则的。因此,我们可以说,在这个月中,它有一些高百分比的噪声或残余。

现在,我们来谈谈黄土。因此,黄土是一种回归技术,它使用局部加权回归来拟合通过序列中的点的平滑曲线,在我们的情况下,序列是时间序列数据。要更详细地了解黄土,这里。

如何从零开始做 STL 分解?

所以在这里,我采用 Corporación Favorita 杂货销售预测数据集来可视化每一步。为了更好地理解,我将数据按月进行了汇总。

该数据集的时间序列数据如下所示。这里我们可以观察 2013 年到 2016 年每个月售出的单位价值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第一步

找出符合上述时间序列数据的近似趋势线。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第二步

通过用近似趋势线减去时间序列数据,找到去趋势序列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第三步

找出季节性因素。在这里,我找出了月水平上的季节性(周期= 12)。因此,我必须按月对去趋势化系列进行分组,以找出整个数据(48 个月)中每个月的平均销售量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第四步

在整个数据中填充此组件(48 个月)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第五步

通过用季节性数据减去时间序列数据,找到去季节性的时间序列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第六步

通过将去季节性数据拟合到多项式模型中来寻找趋势。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第七步

通过减去具有季节性和趋势性的时间序列数据来找到残差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时间序列的分解成分

所以,下面是 STL 分解的最终图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 stats 模型库进行 STL 分解

首先,您必须完成 statsmodel 库的 pip 安装。然后,运行下面几行代码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过比较两种技术的结果,我们可以看到,趋势和残差分量只有显著变化,季节分量与实际情况相同。

链接到笔记本

这里是到笔记本的链接,用于上面执行的观察。

最后,我只想说,一旦你使用一个库来完成任何统计和机器学习任务,试着去了解构建这些任务所需的实现和数学。这将帮助您更好地理解任何库的每个已定义类的方法参数的用法。

敬请关注下一篇博客…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机梯度下降——解释清楚!!

原文:https://towardsdatascience.com/stochastic-gradient-descent-clearly-explained-53dd31?source=collection_archive---------0-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机梯度下降是各种机器学习算法中非常流行和常用的算法,最重要的是形成了神经网络的基础。在这篇文章中,我尽力用简单的语言详细解释它。我强烈建议在阅读本文之前,先浏览一下线性回归

梯度下降的目的是什么?

简单地说,坡度意味着一个表面的斜度。所以梯度下降字面上的意思是沿着斜坡下降,到达表面的最低点。让我们想象一个二维图形,比如下图中的抛物线。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A parabolic function with two dimensions (x,y)

在上图中,抛物线的最低点出现在 x = 1 处。梯度下降算法的目标是找到“x”的值,使得“y”最小。“y”在这里被称为梯度下降算法操作的目标函数,以下降到最低点。

在继续下一步之前,理解以上内容是很重要的。

梯度下降——算法

我用线性回归问题来解释梯度下降算法。正如我们从这篇文章中回忆的,回归的目标是最小化残差平方和。我们知道,当斜率等于 0 时,函数达到最小值。通过使用该技术,我们解决了线性回归问题并学习了权重向量。同样的问题可以用梯度下降技术解决。

“梯度下降是一种迭代算法,它从一个函数上的随机点开始,一步一步地沿着它的斜率向下移动,直到它到达那个函数的最低点。”

在通过将函数的斜率等于 0 而找不到最佳点的情况下,该算法很有用。在线性回归的情况下,您可以在脑海中将残差平方和映射为函数“y ”,将权重向量映射为上面抛物线中的“x”。

如何分步下移?

这是算法的关键。总的想法是从一个随机的点开始(在我们的抛物线例子中,从一个随机的“x”开始),并找到一种方法在每次迭代中更新这个点,这样我们就可以沿着斜坡下降。

该算法的步骤是

  1. 找到目标函数相对于每个参数/特征的斜率。换句话说,计算函数的梯度。
  2. 为参数选择一个随机的初始值。(为了澄清,在抛物线的例子中,区分“y”和“x”。如果我们有更多像 x1、x2 等功能。我们对每个特征取“y”的偏导数。)
  3. 通过插入参数值来更新梯度函数。
  4. 计算每个特征的步长:步长=梯度*学习率。
  5. 计算新参数如下:新参数=旧参数-步长
  6. 重复步骤 3 至 5,直到梯度几乎为 0。

上面提到的“学习率”是一个灵活的参数,它严重影响算法的收敛性。较大的学习率使得算法在斜坡上向下迈出巨大的步伐,并且它可能跳过最小点,从而错过它。所以,坚持 0.01 这样的低学习率总是好的。从数学上也可以看出,如果起点较高,梯度下降算法会在斜坡上向下迈出较大的步伐,当它接近目的地时会迈出较小的步伐,以确保不会错过它,并且足够快。

随机梯度下降

梯度下降算法有一些缺点。我们需要更仔细地看看我们为算法的每次迭代所做的计算量。

假设我们有 10,000 个数据点和 10 个特征。残差平方和由与数据点一样多的项组成,因此在我们的例子中有 10000 项。我们需要计算这个函数相对于每个特征的导数,所以实际上我们每次迭代要做 10000 * 10 = 100,000 次计算。通常需要 1000 次迭代,实际上我们有 100,000 * 1000 = 次计算来完成算法。这是相当大的开销,因此梯度下降在大数据上是缓慢的。

随机梯度下降来救我们了!!“随机”,简单来说就是“随机”的意思。

在梯度下降算法中,我们可以在哪里引入随机性??

是的,你可能猜对了!!在每一步选择数据点来计算导数。SGD 在每次迭代中从整个数据集中随机选取一个数据点,以极大地减少计算量。

通常在每一步采样少量的数据点,而不是一个点,这被称为“小批量”梯度下降。Mini-batch 试图在梯度下降的优势和 SGD 的速度之间取得平衡。

结论

我希望这篇文章有助于掌握该算法。敬请关注更多文章。请在下面留下您的评论/疑问。

随机过程分析

原文:https://towardsdatascience.com/stochastic-processes-analysis-f0ae4?source=collection_archive---------2-----------------------

内部 AI

随机过程的介绍,以及它们在数据科学和机器学习中的日常应用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(Source: https://www.europeanwomeninmaths.org/etfd/)

“唯一简单的事实是,在这个复杂的宇宙中没有简单的东西。一切都有关联。万物相连”

—约翰尼·里奇,《人类剧本》

介绍

机器学习的主要应用之一是模拟随机过程。机器学习中使用的随机过程的一些例子是:

  1. 泊松过程:用于处理等待时间和排队。
  2. 随机漫步和布朗运动过程:用于算法交易。
  3. 马尔可夫决策过程:常用于计算生物学和强化学习。
  4. 高斯过程:用于回归和优化问题(如超参数调整和自动机器学习)。
  5. 自回归和移动平均过程:用于时间序列分析(如 ARIMA 模型)。

在本文中,我将向您简要介绍这些过程。

历史背景

随机过程是我们日常生活的一部分。使随机过程如此特殊的是它们对模型初始条件的依赖。在上个世纪,许多数学工作者如庞加莱、洛仑兹和图灵都被这个话题迷住了。

如今,这种行为被称为确定性混沌,它与真正的随机性有着截然不同的界限。

多亏了爱德华·诺顿·罗伦兹,对混沌系统的研究在 1963 年取得了突破。那时,洛伦兹正在研究如何改进天气预报。洛伦兹在他的分析中注意到,即使是大气中很小的扰动也会引起气候变化。

洛伦茨用来描述这种行为的一个著名表达是:

“一只蝴蝶在巴西扇动翅膀就能在得克萨斯州引起一场龙卷风”

—爱德华·诺顿·罗伦兹

这就是今天混沌理论有时被称为“蝴蝶效应”的原因。

分形

一类混沌系统的简单例子是分形(如文章精选图片所示)。分形是不同尺度上永无止境的重复模式。它们不同于其他类型的几何图形,因为它们的比例不同。

分形是递归驱动的系统,能够捕捉混沌行为。现实生活中的一些分形的例子有:树木、河流、云彩、贝壳等…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 1: MC. Escher, Smaller and Smaller [1]

艺术中运用自相似物体的例子很多。毫无疑问,M.C. Esher 是从数学中获取作品灵感的最著名的艺术家之一。事实上,在他的画中重现了各种不可能的物体,比如彭罗斯三角形和 T2 的莫比乌斯带。在《越来越小》中,他也再次使用了自相似性(图 1)。除了蜥蜴的外环,图画的内部图案是自相似的。它包含了每次重复的一半比例的副本。

确定性和随机过程

有两种主要类型的过程:确定性的和随机的。

在确定性过程中,如果我们知道一系列事件的初始条件(起点),我们就可以预测这一系列事件的下一步。相反,在随机过程中,如果我们知道初始条件,我们就不能充满信心地确定接下来的步骤。那是因为有很多(或者无限!)过程可能演变的不同方式。

在确定性过程中,所有后续步骤的已知概率为 1。另一方面,这不是随机过程的情况。

任何完全随机的东西对我们来说都没有任何用处,除非我们能从中识别出一种模式。在随机过程中,每个单独的事件都是随机的,尽管连接这些事件的隐藏模式是可以识别的。这样,我们的随机过程就不再神秘,我们能够对未来事件做出准确的预测。

为了用统计术语描述随机过程,我们可以给出以下定义:

  • 观察:一次试验的结果。
  • 总体:可以从试验中登记的所有可能的观察结果。
  • 样本:从分离的独立试验中收集的一组结果。

例如,投掷一枚公平的硬币是一个随机的过程,但是由于大数定律,我们知道给定大量的尝试,我们将得到大致相同数量的正面和反面。

大数定律表明:

随着样本量的增加,样本的平均值将更接近总体的平均值或期望值。因此,随着样本量趋于无穷大,样本均值将收敛于总体均值。重要的是要明确样本中的观察值必须是独立的”

——杰森·布朗利[2]

随机过程的一些例子是股票市场和医疗数据,如血压和脑电图分析。

泊松过程

泊松过程用于模拟一系列离散事件,其中我们知道不同事件发生之间的平均时间,但我们不知道这些事件可能发生的确切时间。

如果一个过程满足以下标准,则可以认为它属于泊松过程类:

  1. 这些事件相互独立(如果一个事件发生,这不会改变另一个事件发生的概率)。
  2. 两件事不能同时发生。
  3. 事件发生之间的平均速率是恒定的。

让我们以停电为例。电力供应商可能会公布平均每 10 个月可能会发生一次停电,但我们无法准确说出下一次停电会在何时发生。例如,如果发生重大问题,电力可能会重复中断 2-3 天(例如,如果公司需要对电源进行一些更改),然后在接下来的 2 年内继续供电。

因此,对于这种类型的过程,我们可以非常确定事件之间的平均时间,但是它们的发生在时间上是随机间隔的。

从泊松过程中,我们可以得到一个泊松分布,它可以用来计算不同事件发生之间的等待时间的概率或一段时间内可能发生的事件的数量。

泊松分布可以使用以下公式建模(图 2),其中 k 代表一段时间内可能发生的事件的预期数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 2: Poisson Distribution Formula [3]

可以使用泊松过程建模的现象的一些例子是原子的放射性衰变和股票市场分析。

随机行走和布朗运动过程

随机行走可以是在随机方向上移动的任何离散步骤序列(长度总是相同)(图 3)。随机漫步可以发生在任何类型的维度空间(如 1D,2D,钕)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 3: Random Walk in High Dimensions [4]

我现在将向你介绍使用一维空间(数线)的随机漫步,这里解释的这些相同的概念也适用于更高维度。

让我们想象一下,我们在一个公园里,我们可以看到一只狗在寻找食物。他现在在数轴上的零位置,他有相等的概率向左或向右移动以找到任何食物(图 4)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 4: Number Line [5]

现在,如果我们想知道狗在 N 步之后的位置,我们可以再次利用大数定律。利用这个定律,我们会发现,当 N 趋于无穷大时,我们的狗可能会回到它的起点。反正这个在这种情况下用处不大。

因此,我们可以尝试使用均方根(RMS)作为我们的距离度量(我们首先平方所有的值,然后计算它们的平均值,最后计算结果的平方根)。这样,我们所有的负数都会变成正数,平均值不再等于零。

在这个例子中,使用 RMS 我们会发现,如果我们的狗走 100 步,它平均会从原点移动 10 步(√100 = 10)。

如前所述,随机游走用于描述离散时间过程。相反,布朗运动可以用来描述连续时间的随机行走。

随机行走应用的一些例子是:在扩散过程中追踪分子穿过气体时所采取的路径,体育赛事预测等

隐马尔可夫模型

隐马尔可夫模型都是关于理解序列的。它们可应用于数据科学领域,例如:

  • 计算生物学
  • 书写/语音识别。
  • 自然语言处理(NLP)。
  • 强化学习。

hmm 是概率图形模型,用于从一组可观测状态中预测一系列隐藏(未知)状态。

这类模型遵循马尔可夫过程假设:

鉴于我们了解现在,未来独立于过去

因此,当使用隐马尔可夫模型时,我们只需要知道我们的当前状态,以便对下一个状态做出预测(我们不需要任何关于先前状态的信息)。

为了使用 hmm 进行预测,我们只需要计算隐藏状态的联合概率,然后选择产生最高概率(最有可能发生)的序列。

为了计算联合概率,我们需要三种主要类型的信息:

  • 初始条件:我们在任何隐藏状态下开始序列的初始概率。
  • 转移概率:从一个隐藏状态转移到另一个隐藏状态的概率。
  • 发射概率:从隐藏状态转移到可观察状态的概率。

举个简单的例子,假设我们正试图根据一群人的穿着来预测明天的天气(图 5)。

在这种情况下,不同类型的天气将成为我们的隐藏状态(如晴天、刮风和下雨),而穿着的衣服类型将成为我们的可观察状态(如 t 恤、长裤和夹克)。我们的初始条件将是这个系列的起点。转移概率,将代表我们从一种不同类型的天气转移到另一种天气的可能性。最后,排放概率将会是某人根据前一天的天气穿着某种服装的概率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 5: Hidden Markov Model example [6]

使用隐马尔可夫模型时的一个主要问题是,随着状态数量的增加,概率和可能场景的数量呈指数增长。为了解决这个问题,可以使用另一种称为维特比算法的算法。

如果您对生物学中使用 HMMs 和 Viterbi 算法的实际编码示例感兴趣,这可以在我的 Github 库中的这里找到。

从机器学习的角度来看,观察形成了我们的训练数据,隐藏状态的数量形成了我们要调整的超参数。

hmm 在机器学习中最常见的应用之一是在基于代理的情况下,如强化学习(图 6)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 6: HMMs in Reinforcement Learning [7]

高斯过程

高斯过程是一类平稳的零均值随机过程,完全依赖于其自协方差函数。这类模型可用于回归和分类任务。

高斯过程的最大优点之一是,它们可以提供关于不确定性的估计,例如,给我们一个估计,一个算法有多确定一个项目是否属于一个类。

为了处理包含一定程度不确定性的情况,通常使用概率分布。

离散概率分布的一个简单例子是掷骰子。

想象一下,现在你的一个朋友向你挑战掷骰子,你赌 50 点。在公平掷骰子的情况下,我们期望 6 个面中的每一个都有相同的概率出现(各 1/6)。这如图 7 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 7: Fair Dice Probability Distribution

无论如何,你玩得越多,你越会注意到骰子总是落在相同的面上。在这一点上,你开始认为骰子可能被装载了,因此你更新了关于概率分布的最初信念(图 8)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 8: Loaded Dice Probability Distribution

这个过程被称为贝叶斯推理。

贝叶斯推理是一个过程,通过这个过程,我们在收集新证据的基础上更新我们对世界的信念。

我们从一个先验信念 开始,一旦我们用全新的信息更新它,我们就构建一个 后验信念 。这一推理同样适用于离散分布和连续分布。

因此,高斯过程可以让我们描述概率分布,一旦我们收集到新的训练数据,我们就可以使用贝叶斯规则(图 9)更新概率分布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 9: Bayes Rule [8]

自回归移动平均过程

自回归滑动平均(ARMA)过程是一类非常重要的用于分析时间序列的随机过程。ARMA 模型的特点是它们的自协方差函数只依赖于有限数量的未知参数(使用高斯过程是不可能的)。

ARMA 首字母缩写词可以分为两个主要部分:

  • 自回归 =该模型利用了预定义数量的滞后观测值和当前观测值之间的联系。
  • 移动平均 =该模型利用了残差和观测值之间的关系。

ARMA 模型利用了两个主要参数(p,q)。这些是:

  • p =滞后观察次数。
  • q =移动平均线窗口的大小。

ARMA 过程假设时间序列围绕一个时不变均值均匀波动。如果我们试图分析一个不遵循这种模式的时间序列,那么这个序列将需要差分,直到它能够达到平稳。

这可以通过使用 ARIMA 模型来实现,如果你有兴趣了解更多,我写了一篇关于使用 ARIMA 进行股票市场分析的文章。

感谢阅读!

联系人

如果你想了解我最新的文章和项目,请在媒体上关注我,并订阅我的邮件列表。以下是我的一些联系人详细信息:

  • 领英
  • 个人博客
  • 个人网站
  • 中等轮廓
  • GitHub
  • 卡格尔

文献学

[1]M . C .埃舍尔,“越来越小”——1956 年。可从以下网址获取:https://www . etsy . com/listing//m-c-escher-print-escher-art-smaller-和

[2]机器学习中大数定律的温和介绍。机器学习大师,杰森·布朗利。访问:https://machine learning mastery . com/a-gentle-introduction-to-the-law-of-large-numbers-in-machine-learning/

【3】正态分布,二项分布&泊松分布,让我来分析。访问网址:http://makemanealyst . com/WP-content/uploads/2017/05/Poisson-Distribution-formula . png

[4]维基共享。访问网址:https://commons . wikimedia . org/wiki/File:Random _ walk _ 25000 . gif

【5】什么是数线?数学怪物。访问地址:https://www . mathematics-monster . com/lessons/number _ line . html

[6] ML 算法:一种 SD (σ)-贝叶斯算法。萨吉沙伊尔,中等。访问:https://towards data science . com/ml-algorithms-one-SD-% CF % 83-Bayesian-algorithms-b 59785 da 792 a

[7] DeepMind 的 AI 正在自学跑酷,结果很萌。边缘,詹姆斯·文森特。访问:https://www . the verge . com/tldr/2017/7/10//deep mind-parkour-agent-reinforcement-learning

[8]为数据科学专业人员介绍强大的贝叶斯定理。KHYATI MAHENDRU ,分析 Vidhya。访问:https://www . analyticsvidhya . com/blog/2019/06/introduction-powerful-Bayes-theory-data-science/

使用 ARIMA 进行股票市场分析

原文:https://towardsdatascience.com/stock-market-analysis-using-arima-8731ded2447a?source=collection_archive---------3-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(Source: https://ei.marketwatch.com/Multimedia/2018/03/30/Photos/ZH/MW-GG561_DJI_20_510_ZH.jpg?uuid=57e356ee-342a-11e8-978d-ac162d7bc1f7)

投资中最危险的四个字是:“这次不一样”

-约翰·邓普顿爵士

时序数据

时间序列是我们日常生活的重要组成部分。事实上,它们被用于医学(脑电图分析)、金融(股票价格)和电子学(传感器数据分析)。为了处理这些类型的任务,已经创建了许多机器学习模型,两个例子是 ARIMA(自回归综合移动平均)模型和 RNNs(递归神经网络)。

介绍

我最近一直在 Kaggle 上做一个股票市场数据集。该数据集提供了所有美国股票的每日价格和交易量数据。如果你想了解更多,我所有的代码都可以在我的 Kaggle 和 GitHub 个人资料中免费获得。

在这篇文章中,我将解释如何使用 ARIMA 进行时间序列预测,以及在预测微软公司股票价格时,我使用这种方法获得了什么结果。

ARIMA(自回归综合移动平均)

ARIMA 的首字母缩写代表[1]:

  • 自回归 =该模型利用了预定义数量的滞后观测值和当前观测值之间的联系。
  • 综合 =原始观测值之间的差异(例如,减去不同时间步长的观测值)。
  • 移动平均 =该模型利用了残差和观测值之间的关系。

ARIMA 模型利用了三个主要参数(p,d,q)。这些是:

  • p =滞后观察次数。
  • d =差分的程度。
  • q =移动平均窗口的大小。

如果应用于短期预测,ARIMA 可以产生特别好的结果(就像本例中所使用的)。Python 中 ARIMA 的不同代码模型在这里可用。

分析

为了实现下面的代码练习,我使用了下面的库和依赖项。

import numpy as np import pandas as pd import matplotlib.pyplot as plt from pandas.plotting import lag_plot from pandas import datetime from statsmodels.tsa.arima_model import ARIMA from sklearn.metrics import mean_squared_error 

首先,我在所有其他可用的数据集中加载了特定的微软(MSFT)数据集。该数据集由七个不同的要素组成(图 1)。在这篇文章中,我将只研究“开放”的股票价格特性。对于大多数其他特征,可以重复同样的分析。

df = pd.read_csv("../input/Data/Stocks/msft.us.txt").fillna(0) df.head() 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 1: Dataset Head

在开始研究时间序列预测之前,我决定分析相对于固定滞后 5 的“开放”特征的自相关图(图 2)。图 2 中显示的结果证实了 ARIMA 是适用于此类数据的良好模型。

plt.figure(figsize=(10,10)) lag_plot(df['Open'], lag=5) plt.title('Microsoft Autocorrelation plot') 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 2: Autocorrelation plot using a Lag of 5

接着,我将数据分为训练集和测试集。完成后,我将两者绘制在同一张图上,以便对我们的时间序列有一个大致的了解(图 3)。

train_data, test_data = df[0:int(len(df)*0.8)], df[int(len(df)*0.8):] plt.figure(figsize=(12,7)) plt.title('Microsoft Prices') plt.xlabel('Dates') plt.ylabel('Prices') plt.plot(df['Open'], 'blue', label='Training Data') plt.plot(test_data['Open'], 'green', label='Testing Data') plt.xticks(np.arange(0,7982, 1300), df['Date'][0:7982:1300]) plt.legend() 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 3: Graphical Representation of Train/Test Split

为了评估 ARIMA 模型,我决定使用两种不同的误差函数:均方误差(MSE)和对称平均绝对百分比误差(SMAPE)。SMAPE 通常用作基于相对误差的精度测量(图 4)。

Scikit-learn 目前不支持 SMAPE 作为一个损失函数,因此,我必须首先自己创建这个函数。

def smape_kun(y_true, y_pred): return np.mean((np.abs(y_pred - y_true) * 200/ (np.abs(y_pred) + np.abs(y_true)))) 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 4: SMAPE (Symmetric mean absolute percentage error) [2]

之后,我创建了 ARIMA 模型用于这个实现。在这种情况下,我决定将 p=5、d=1 和 q=0 设为 ARIMA 参数。

train_ar = train_data['Open'].values test_ar = test_data['Open'].valueshistory = [x for x in train_ar] print(type(history)) predictions = list() for t in range(len(test_ar)): model = ARIMA(history, order=(5,1,0)) model_fit = model.fit(disp=0) output = model_fit.forecast() yhat = output[0] predictions.append(yhat) obs = test_ar[t] history.append(obs) error = mean_squared_error(test_ar, predictions) print('Testing Mean Squared Error: %.3f' % error) error2 = smape_kun(test_ar, predictions) print('Symmetric mean absolute percentage error: %.3f' % error2) 

该模型的损失结果如下所示。根据 MSE,模型损耗相当低,但是对于 SMAPE,模型损耗一直较高。这种差异的主要原因之一是因为 SMAPE 是时间序列问题中常用的损失函数,因此可以提供更可靠的分析。这表明我们的模型还有改进的余地。

Testing Mean Squared Error: 0.343 Symmetric mean absolute percentage error: 40.776 

最后,我决定绘制训练、测试和预测价格相对于时间的曲线图,以直观地显示模型相对于实际价格的表现(图 5)。

plt.figure(figsize=(12,7)) plt.plot(df['Open'], 'green', color='blue', label='Training Data') plt.plot(test_data.index, predictions, color='green', marker='o', linestyle='dashed', label='Predicted Price') plt.plot(test_data.index, test_data['Open'], color='red', label='Actual Price') plt.title('Microsoft Prices Prediction') plt.xlabel('Dates') plt.ylabel('Prices') plt.xticks(np.arange(0,7982, 1300), df['Date'][0:7982:1300]) plt.legend() 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 5: Microsoft Price Prediction

图 6 提供了图 5 的放大版本。由此可以看出两条曲线是如何紧密相连的。然而,预测价格似乎看起来像实际价格的“嘈杂”版本。

plt.figure(figsize=(12,7)) plt.plot(test_data.index, predictions, color='green', marker='o', linestyle='dashed',label='Predicted Price') plt.plot(test_data.index, test_data['Open'], color='red', label='Actual Price') plt.legend() plt.title('Microsoft Prices Prediction') plt.xlabel('Dates') plt.ylabel('Prices') plt.xticks(np.arange(6386,7982, 300), df['Date'][6386:7982:300]) plt.legend() 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 6: Prediction vs Actual Price Comparison

使用 ARIMA 的这种分析总体上导致可观的结果。事实证明,该模型提供了良好的预测精度,并且与 RRNs(递归神经网络)等其他替代方法相比相对较快。

联系人

如果你想了解我最新的文章和项目,请通过媒体关注我,并订阅我的邮件列表。以下是我的一些联系人详细信息:

  • 领英
  • 个人博客
  • 个人网站
  • 中等轮廓
  • GitHub
  • 卡格尔

文献学

[1]如何用 Python 创建时间序列预测的 ARIMA 模型,Jason Brownlee ,机器学习精通。访问网址:https://machine learning mastery . com/ARIMA-for-time-series-forecasting-with-python/

[2]对称平均绝对百分比误差,维基百科。访问地址:https://en . Wikipedia . org/wiki/Symmetric _ mean _ absolute _ percentage _ error

“股市异常”和“股市异常检测”是两回事

原文:https://towardsdatascience.com/stock-market-anomalies-and-stock-market-anomaly-detection-are-two-different-things-c7b65a?source=collection_archive---------4-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果这是你第一次看到这两个术语,你可能会想:“啊?他要谈什么?它们不都是关于股市中发生的怪事吗?”大多数人不明白他们代表了两个不同的大型文学研究作品。发行的动机和技术也不同。在这篇文章中,我将谈论他们是什么。

股票价格时间序列值得我们努力研究和创新。对于刚刚开始研究股价运动的读者,可能会对我的文章《R 中技术指标的算法交易》和《RNN/LSTM/GRU 股价预测技术指南》感兴趣。

(一)什么是股票市场异常现象?

人们认为,价格应该已经充分反映了所有可用的信息。没有办法“跑赢大盘”获得超额收益。这就是著名的“效率市场假说(EMH)”。根据 EMH 的观点,价格已经反映了至少所有过去公开的信息——所谓的弱式;或者价格瞬间变化以反映所有可公开获得的信息——所谓的半强式;或者价格也反映了任何隐藏的内幕信息——所谓的强势形式。尤金·法玛(Eugene Fama)提出 EMH 后,几十年来一直有激烈的争论和实证数据分析。2013 年诺贝尔奖得主尤金·法玛(Eugene Fama)认为,异常现象与理性定价是一致的。他将此归因于风险回报权衡:没有办法使用预测模型来改善风险回报权衡。

所有交易者都订阅 EMH 吗?不完全是。许多交易者认为,存在价格被错误定价的机会,他们可以获得异常回报。“异常”是一种价格没有完全反映所有公开信息的情况,因此提供了一个交易机会。尽管“战胜市场”是许多新手或有经验的交易者都想做的事情,但很少有人成功。罗伯特·希勒——也是 2013 年诺贝尔奖得主——认为市场是非理性的,并且受制于投资者预期的行为偏差。如果是这样的话,投资业绩可以通过已经存在或即将出现的先进预测模型来提高。

公认的市场异常有哪些?

几十年的市场研究在金融文献中被吹捧。已经发现了许多市场异常现象。这里我描述八个典型:

  1. *动量:*你是否有时会观察到一个上涨的股票价格持续上涨超过合理水平,或者持续下跌低于不可思议的水平?似乎有一种推动资产价格超出预期价值的势头。
  2. *“一月”回来:*这种异常现象就是“一月效应”,或许也是符合逻辑的。前一年第四季度表现不佳的股票往往会在 1 月份跑赢大盘。这种“日历效应”有一个很好的解释:投资者倾向于在年底前出售亏损的股票,以冲销他们的税收损失。然而,这种现象不会在市场历史中可靠地重复。因此,在 1 月份买入 12 月份的输家并不能保证交易策略盈利。
  3. *一周中的每一天:*股票往往在周五而不是周一有好的结果。这种现象有时被称为周末效应,自 20 世纪 70 年代以来就有记录。但它的规模还不足以成为一种有利可图的交易策略。可能的解释是,公司倾向于将坏消息保留到周五收盘后。
  4. 账面市值比:这可能是文献中记载的最古老的效应。它将公司的账面价值与其价格进行比较。较大的市净率意味着股价被低估,否则被高估。公司的账面价值来源于其历史成本或会计价值。一家公司的市场价值是其股票价格乘以其发行在外的股票数量,即市场资本总额。这种异常在经典的 Fama 和法国研究论文(1993) 中有很好的描述。一种解释是,投资者对成长股的增长方面反应过度,因此价值股被低估。
  5. *被忽视的股票:*文献记载,不太知名的公司的股票可以产生更高的收益。小型股往往较少被市场分析师分析。但是,是因为不重视还是因为小?文献还发现,较小的公司可以表现出更好的业绩,因为更高的风险和更高的回报。
  6. 价格反转:关于这个主题的文献中有大量可信的研究。表现非常好的股票在长达一年的时间里逆转并跑输市场。类似地,在一段时间内表现不佳的股票可以在很长一段时间内跑赢市场。即使没有基本的财务报表来证明价格变动,这种现象也会发生。价格反转的原因是什么?这可能是投资者心理使然。不幸的是,很难预测投资者情绪开始导致价格突然上涨或下跌的时间。
  7. *收益惊喜:*投资者根据分析师的报告形成预期。当实际报告的收益与预期相差很大时,收益意外可能会导致价格长期大幅波动。福斯特、奥尔森和谢夫林表明,积极的惊喜导致价格在宣布后长达两个月的时间里上涨,而消极的惊喜导致在随后的七天里大幅下跌。他们的研究表明,如果投资者只是观察收益惊喜并迅速做出反应,异常情况就可能发生。它们还显示,价格变化没有 EMH 所说的那么快。
  8. *小公司效应:*小公司往往表现优于大公司。Banz (1981)和 Reinganum (1981)首次证明了这种小企业效应。随后的许多其他研究发现了小企业在其他资产和市场中的影响。然而,自从发现小企业异常现象的论文首次发表以来,这种现象似乎已经消失了。

市场异常现象经常发生,但并不总是发生
创造超常回报一直是许多投资者的追求。请记住,市场异常可能已经发生,但不会可靠地重复。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(B)什么是股市异常检测?

异常检测在统计学和机器学习中被广泛研究,它也被称为异常检测、偏差检测或新奇检测。各种成功的异常值检测算法的出现现在被应用于检测股票市场价格中的异常值。

异常值检测的一个直接应用是检测任何市场操纵。市场操纵是一种故意干预市场价格的企图,目的是在证券价格方面制造人为的、虚假的或误导性的表象。市场操纵是有害的,因为它扭曲了价格,破坏了证券市场的功能。更有甚者,由于大多数操纵者的非法获利,许多投资者将遭受重大损失。艾伦和盖尔(1992) 和贾罗(1992) 是最早研究操纵的研究者。艾伦和盖尔将操纵行为分为基于行动的操纵、基于信息的操纵和基于交易的操纵。这里的重点是基于交易的操纵,艾伦和盖尔将其定义为通过实际交易订单扭曲股票市场价格。为此,需要收集每日股票数据或日内数据,如分笔成交点数据。检测任何非法内幕交易是另一个应用。任何人在内部消息公开之前就掌握了它,就可以利用这一优势进行交易。在大多数情况下,非法内幕交易是在消息公开一段时间后才被发现的。往往为时已晚:欺诈已经发生,无辜的投资者已经处于不利地位。我们需要及时的反应或预警探测系统。因此,机器学习开始扮演一个有希望的角色。

我想你明白“股市异常”和“股市异常检测”之间的区别:前者涉及效率市场假说(EMH),后者的动机主要是由机器学习创新驱动的。

发生内幕交易的典型企业事件有哪些?

并购(M&A)和收益公告是典型的发生内幕交易的公司事件。 Ahern (2017) 通过使用美国证券交易委员会(SEC)和司法部(DOJ)在 2009 年至 2013 年间提交的所有内幕交易案件,报告称 M & As 占内幕交易的大约 51%,其次是收益公告,占 26%。剩下的事件包括临床试验和监管公告、新证券的销售以及运营新闻,如首席执行官更替。

典型的内幕交易有哪些症状?

当人们根据内部消息交易时,他们会在交易数据中留下痕迹。多诺霍(2004) 记录了一些已知的症状:

  • 异常高的交易量
  • 异常的价格变动
  • 交易较少(或“交易清淡”)的证券
  • 选项作为经济高效的渠道。如果内幕人士对内幕消息非常确定,期权可以放大内幕人士的收益。例如,如果一个人知道 XXX 公司将在未来几周内被收购,股票很可能从 50 美涨到 60 美。如果内幕人士以 50 美买入 XXX 股票,当股票涨到 60 美时,他或她获利 20%。然而,如果这个人以 1 美买了一个看涨期权(执行价格为 50 美),那么这个看涨期权在跳跃后将价值 10 美。交易者将获得 900%的利润,而不是 20%。

早期预警系统的目标是提醒监管者进行进一步的调查。值得注意的是,股票价格的上涨并不总是涉及内幕交易,即使所有的迹象都表明异常。金融业监管局(FINRA)的欺诈检测和市场情报办公室(OFDMI)肩负着这一特殊使命。OFDMI 将其组织结构分为四个单位:(I)内幕交易监督小组,(ii)欺诈监督小组,(iii)中央审查小组,以及(iv)举报人办公室。听本期播客了解他们发现非法内幕交易的操作。

一些著名的股价操纵

你可能在新闻中听说过“泵转储”和“欺骗交易”。泵和转储是一种操纵方法,购买股票,推动其价格上升,然后转储所有的股票,以赚取利润。欺骗交易是一种操纵方法,欺骗其他投资者以操纵的价格买入或卖出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure (I): Pump and dump

追踪内幕交易的证据

当人们根据内部消息交易时,他们会在交易数据中留下痕迹。交易量通常非常高,价格波动也不寻常。这在“交易清淡”的证券(通常交易量较低)中尤其如此,因为少量的内幕交易对整体交易有较大的影响。

利用数据发现价格操纵

监控系统的建立是为了寻找内幕交易的痕迹证据。新闻是“触发器”,开始搜索新闻之前的异常交易。全国证券交易商协会(NASD)的市场监管部建立了两个主要的“中断检测”系统——高级检测系统(ADS)和证券观察、新闻分析和监管(SONAR)——用于监视纳斯达克和其他几个市场。除了检测非法交易,该系统还可以用来防止恐怖袭击。

数据分析师将使用所有数据源,包括新闻、文本、每日股票价格或报价单位价格、公司信息等。找出任何操纵价格的行为。贸易数据可以分为两个层次。1 级数据是成功执行的交易。它是特定时期内的开盘价-最高价-最低价-收盘价和成交量。2 级数据包括 1 级数据和不匹配的买/卖订单。它显示输入、取消或匹配的每个特定订单。

创建要检测的特征

创建信号以识别潜在的泵送和倾倒方案仅仅是第一步,这并不容易。我们必须非常有创意地创造信号,或者用数据科学术语“特征”。这些功能可能会检测到完全正常的股票走势,因此信号会变成假阳性。我们的工作是高效和有效地发现异常交易,换句话说,以较小的误报率。图(二)是一个假设的“泵送-倾倒”方案(用圆圈标出)。你可以应用 5 日和 10 日移动平均线来发现潜在的情况。你也参考同期新闻或内幕交易信息,获得更多见解。除了价格变动,你还可以监控交易量的变化。图(二)的底部监测数量变化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个假设的例子

这里我们选取一只小股票“利民纸业有限公司”,代号 LMPMY,来创造特色。当您使用getSymbols()时,它将在数据集中加载股票的历史价格。数据有开盘-盘高-盘低-收盘和成交量信息。我使用 R 库quantmodTTR。这在股票市场分析中很流行。

我加了几个技术分析指标:addVo()加成交量,addBBands()加布林线,addCCI()加商品通道指数。布林线是一种统计图表,描述了价格和波动性随时间的变化。商品通道指数是一个振荡器。还有很多其他的技术指标。注意,这些指标本身都不能揭示异常交易。你需要相关信息来调查案件。

*外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 [ 通过我的推荐链接加入 Medium-Chris Kuo/data man 博士

阅读 Chris Kuo/data man 博士的每一个故事。你的会员费直接支持郭怡广/戴塔曼博士和其他…

dataman-ai.medium.com](https://dataman-ai.medium.com/membership)*

RNN 利用每日市场变量进行股票市场预测

原文:https://towardsdatascience.com/stock-market-predictions-with-rnn-using-daily-market-variables-6f928c867fd2?source=collection_archive---------10-----------------------

在这个项目中,我试图构建一个 RNN(特别是 LSTM)来预测股票市场的回报。该预测是根据 S&P500 指数做出的,该指数是最广泛用于交易和衡量股票市场回报的指数之一。然后,基本交易策略的执行基于预测,其相对于 S&P500 指数的表现是我们衡量成功的标准。

众所周知,股票市场由于其高维空间而很难预测,S&P500 可能是全球最有效的市场股票指数。由于这个原因,项目任务更具挑战性。因此,这可以看作是作者对机器学习技术的学习,特别是对时间序列分析中的神经网络的学习。

该项目经历了以下几个步骤:数据生成、数据预处理和特征选择、基线预测、LSTM 训练和结果展示。该项目已建立在 Python 编程语言与神经网络的 Keras 库。

训练集和测试集的数据生成

该项目使用了 20 多个具有日常频率的市场变量(特征),数据历史从 2006 年开始,一直到 2019 年 4 月。数据来源于彭博终端。使用的特征大多是各种 S&P500 技术指标,但也有市场变量,如指数前瞻共识收益估计,美国国债 2 年期和 10 年期收益率,美指数,商品指数和波动指数。第三类是用 S&P500 指数信号收盘和开盘,高,低称为 OHLC 集,和交易量。与该领域的大多数类似项目相比,最初的特征选择试图带来更多的多样性和代表性,这些项目主要使用价格信号或指数的 OHLC。在项目期间,不同的特征集合已经被实验,但是最终总共 10 个特征被选择用于训练。预测的输出是 S&P500 指数第二天的回报(价格变化)。

数据预处理遵循 RNNs 情况下所需的时序排序原则。它是超过 13 年的连续每日数据,被分成 43 个学习周期,每个学习周期的长度为 3 年(假设一年中有 240 个交易日)用于培训,60 天(大约。3 个月)进行测试。它提供了 10 年零 9 个月的连续预测范围。图一。下图说明了数据排列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 1. Dataset arrangement during the whole period

此外,每个研究周期(训练和测试)被排序作为图 2 中的示例说明。在滚动功能窗口和相应的输出方面。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 2. Input sequence illustration on selected features and output

在项目期间,试验了 5 到 20 天范围内的不同时间步长,但这里选择了 10 天时间步长。整个数据集按照以下维度顺序排列:病历报告、样本、时间步长、特征。

数据预处理和特征选择

用于训练的原始输入数据被标准化为每个研究期间的 z 得分,因此训练数据中的每个要素的均值为 0,标准差为 1。重要的是,用从训练数据中获得的平均值和标准偏差来标准化测试数据。

为了确定特性的相对重要性,来自 XGBoost 库的回归器在标准化的特性和输出上实现。图 4。下面显示了功能的重要性,从中选出了 10 个最重要的功能,以供以后使用。然而,当选择具有最高重要性的特性时,我们冒着丢失全部特性集合中所表示的关系的风险。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 4. Feature importances from XGBoost

数据预处理后,数据集具有以下形状,可用于训练和测试。

X train (43, 711, 10, 10) y train (43, 711, 1) x test (43, 60, 10, 10) y test (43, 60, 1) 

基线预测-K-最近邻

为了评估 RNN 在股市预测中的能力,我们使用 scikit-learn 回归实现了基于 K-近邻算法的基线预测。从 1 到 200 范围内的不同 K-s 已经在训练期间回归,并且在验证期间具有最小均方误差的 K-s 已经在测试的特定研究期间使用。图五。下图在上图中显示了真实的 S&P500 和预测回报。下图显示了测试期间的交易表现(在任何真实生活成本之前)。这里我们使用的是对称规则,即如果预测回报为正,则 150%投资于指数,如果预测回报为负,则 50%投资于指数。在超过 2500 个交易日的所有测试期间,该结果与 S&P500 指数买入并持有表现一起绘制。即使准确性是评估分类模型的传统度量,我们在这里和在后面的阶段使用性能来比较 K-NN 和 RNN 预测能力。K-NN 模型在整个期间都取得了优异的表现,回报是初始投资的 3.5 倍,而 S&P500 买入并持有策略的回报是 3.0 倍。下方面板中的红色标记代表相对于全指数投资的多头(1)和空头(-1)头寸信号(在 alt y 轴上)。即使 K-NN 在整个期间的结果是正的,它也是不一致的,因为在时间跨度的开始和后半段有很长一段时间(以年计)表现不佳。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 5. K-NN performance

LSTM 预测

该问题被设置为二进制分类,并为正的日回报分配值 1,为负的日回报分配值 0。所使用的 LSTM 网络设置和架构如图 6 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 6. LSTM settings and architecture

用于拟合的参数是批量大小 32、验证分割 20%和 200 个时期。每个研究阶段的训练和验证损失结果如图 7 所示。以及图 8 中的相应精度。这些表明网络在纪期间在验证方面有困难。重要的是,很少有损失更低、准确性更高的异常值研究集,这可以在测试期间对交易表现产生影响。然而,在训练期间近似的关系似乎在验证期间也勉强成立,因为在最后一个时期之后的研究期间的平均验证准确度是 53.75%。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 7. LSTM network training and validation loss

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 8. LSTM network training and validation accuracies

基于 LSTM 模型的交易绩效

当对 LSTM 输出应用与 K-NN 相同的交易规则时,结果表现在图 9 中。我们可以观察到,交易结果是初始投资的 4 倍,相比之下,S&P500 买入-持有是 3 倍,K-NN 是 3.5 倍(图 5。).因此,在这个项目中,基于 LSTM 的交易表现优于 S&P500 指数和 K-NN 算法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 9. S&P500 buy&hold and LSTM based trading performance

该项目的结论是,在其他机器学习方法中,LSTM 神经网络可以很好地替代股票市场时间序列预测。然而,目前的 LSTM 设置在解决该项目中的任务方面的整体成功是值得怀疑的,因为在所有测试期间,51.6%的测试精度可能是不够的。需要进一步测试不同的参数和架构设置,以提高精度。

未来工作:用于特征提取的神经网络

下一步,计划是使用卷积神经网络(CNN)上的自动编码器生成提取的特征。想法是使用提取的特征作为 LSTM 网络的输入。由于时间限制,这里不介绍由此产生的损失、准确性和交易性能,但是下面介绍构建自动编码器和提取压缩特征的描述。将 CNN 用于特定目的的想法来源于一篇很好的文章这里是,它提供了自动编码器不同网络的比较和结果,其中 CNN 似乎是一个有前途的替代方案。

为该项目构建的自动编码器网络架构如图 10 所示。可以看出,尝试将 10 个特征编码成 5 个特征。在对来自第一卷积层的编码器输出进行拟合之后,它被用于生成压缩特征,然后将被馈送到 LSTM。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig. 10 CNN autoencoder

进一步的想法包括用小波进行输入转换,并试验不同的数据处理方法和超参数。

免责声明:本故事中呈现的材料不应被视为与持有、购买或出售证券或其他金融产品相关的建议或推荐,也不是创建或使用本故事中提及的任何技术或策略的建议或推荐。

不要孤注一掷

原文:https://towardsdatascience.com/stock-portfolio-optimization-d1dc66c7251?source=collection_archive---------36-----------------------

如何利用数据科学优化你的股票投资组合

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Markus Spiske on Unsplash

现代投资组合理论认为,多样化有助于降低投资组合的风险。投资组合包含高波动性但总体波动性低的资产,因为你可以组合负相关的资产——当一些资产上涨,另一些资产下跌。

这篇文章描述了我使用 S&P500 的股票,通过数学和数据科学优化投资组合的努力。

模型

目的是确定投资组合的哪一部分投资于几种可能的资产中的每一种,以最小化投资组合的波动性为目标,并符合目标回报。

为了用数学方法来框定这个问题,假设 f 是一个 n 维向量,它是我将投资于每一项 n 金融资产的分数。设 C 表示资产日收益的协方差矩阵,一个 n x n 矩阵。设 r 为每项资产预期收益的 n- 维向量。目标回报由 r*决定。

要解决的优化问题是:

由于我们希望最小化投资组合波动性(风险水平)的函数,问题的三个约束是:

  • 分数之和应该是 1。
  • 投资组合应该达到目标收益, r* 。
  • 每只股票的分数应小于 100%。

因为我们要最小化的目标函数是一个二次的,这类问题在运筹学和数值优化界被称为二次 程序。值得注意的是,因为它是一个凸函数,所以总是有唯一的解。

数据

我用了一个 2019 年 2 月 20 日到 4 月 18 日之间的股票价格的数据集。我选择了科技行业的一些股票——AMZN、GOOGL、MSFT、IBM、FB 和 NFLX(亚马逊、谷歌、微软、IBM、脸书和网飞)——并制作了一个图表来可视化它们的相关性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

除了网飞(NFLX)之外,大多数股票都有很强的相关性,但是记住这只是 2 个月的时间。

最优投资组合分配

为了解决这个问题,我需要计算 S & P500 指数中每只股票的日收益和估计收益的协方差矩阵 C 。我决定用 9%作为我的目标回报率。

一旦我计算了预期收益和每日收益的预期波动性(和协方差),我就准备好解决最优化问题了。

访问 this repo 查看我的 Python 代码,它将在 Watson Studio 桌面上运行。(你只需要将数据集放入你的项目中。)下面是一个片段:

优化模型从 S&P500 指数中的 500 只股票中选择了总共 28 只股票,包括作为前 3 名的这些股票:

  1. COTY——11.14%
  2. SRE——9.14%
  3. 冠心病——8.74%

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Portfolio Optimal Allocation

为了解决优化问题,我使用了来自 Python 的决策优化工具 CPLEX,灵感来自 CPLEX github repo 的一个笔记本。

最后的想法

  • 我在这篇博客中使用的预期回报只是来自数据集中观察到的 2 个月期间,但你也可以使用机器学习和人工智能技术来确定它们。如果您对项目的预测方面感兴趣,请联系我们,我们可以合作!
  • 该数据仅包含 S&P500 指数的股票。显然,股票是风险很大的资产。根据你的风险厌恶程度,你可以选择将短期和中期债券纳入投资组合,以降低投资组合的波动性。
  • 同样,我只使用了两个月的数据。我当然不会建议根据这个数据集或任何时间框架如此短的数据集做出任何严肃的决定。
  • 每个目标回报都有相应的投资组合波动性。对不同的目标回报率做同样的练习,以画出所谓的马科维茨有效边界。如果感兴趣,请阅读这篇关于用 Python 绘制有效边界的伟大的帖子
  • 我在 Watson Studio 桌面中完成了所有的分析,结合了不同的工具:Jupyter 笔记本、数据精炼(用于可视化)和 CPLEX 决策优化社区版(用于求解二次规划)。

[1]哈里·马科维茨。(1952).投资组合选择。《金融杂志》第 7 卷第 1 期。(1952 年 3 月),第 77-91 页。

[2]数据来源:https://www . ka ggle . com/qks 1 lver/amex-NYSE-Nasdaq-stock-histories

[3] IBM 决策优化(CPLEX) Github Repo。https://ibmdecisionoptimization . github . io/tutorials/html/Beyond _ Linear _ programming . html

特别感谢史蒂夫·摩尔对这篇文章的大力反馈。

在 Twitter 上关注我:@ castan 在 LinkedIn 上找我: @ jorgecasta

基于递归神经网络的股票预测

原文:https://towardsdatascience.com/stock-prediction-using-recurrent-neural-networks-c0?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Normalized stock price predictions for train, validation and test datasets. Don’t be fooled!

与人工智能交易

预测给定股票的梯度

这种类型的帖子已经写了很多次,但很多都让我不满意。最近,我阅读了利用深度学习的最新进展来预测股票价格走势的,我认为这是一篇非常有趣的文章。它涵盖了许多主题,甚至给了我一些想法(它也促使我写了我的第一篇文章🙂).但它实际上并没有说明网络的表现有多好。我的直觉告诉我“不太好”,因为这是通常的情况,但也许/希望我是错的!
一段时间以来,我一直在开发自己的交易算法,所以这篇文章介绍了我的方法、想法和一些结果。

这包括:

  1. 挑战
  2. 数据
  3. 构建数据集
  4. 培训
  5. 结果
  6. 结束语

挑战

总体挑战是确定一个收盘价和下一个收盘价之间的梯度差。不是实际的股票价格。为什么?当你试图预测可能小幅波动(| < 0.01%|)和/或大幅波动(| > 5%|)的东西时,很容易欺骗自己认为你有一个可行的模型。下图给出了一个例子。一个基本模型(没什么特别的)被训练来预测高盛的(标准化)价格:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Actual vs predicted (normalized) prices for the validation dataset.

股票的实际价格在 y 轴,而预测价格在 x 轴。这里显然有一个很好的线性趋势。或许可以由此发展出一种交易策略。但是如果我们画出两个连续点之间的梯度会怎么样呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The actual vs predicted gradient for the validation+test datasets. Ideally, it would be a diagonal line.

啊哦。对于预测下一根蜡烛线(这里梯度的定义)的价格是上涨还是下跌,我们的模型本质上并不比猜测好多少。这是一个相当大的基本问题。这里的准确度(51.5%)是通过将正确象限(右上和左下)中的值相加并除以所有点计算出来的。

我不会告诉你为什么这是一个困难的问题(你可能已经知道了),我会提到我在这里面临的两个个人斗争。

  1. 数据。数据的质量决定了你的模型的结果显然是。清理和处理你的数据,理解它,玩它,绘制它,拥抱它。确保你探索了它的每一个方面。比如说;我用新闻故事。它们在不同的时区出版。股票价格数据来自另一个时区。确保您正在正确同步,而不是使用未来的信息欺骗自己。这只是一个例子。另一个:当向我的经纪人索要每小时一次的烛台时,第一栏是一个 30 分钟的窗口。如果没有抓到这个的检查,你将会有一段时间挠头。
  2. 构建一个简单的估计器。我的意思是,你的模型的预测很大程度上是基于前一点。这似乎是股票预测中最常见的问题。建立一个模型来缓解这种情况并保持准确性是关键,因此也是困难的部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A naive estimator. The red line (the prediction) follows the blue line (the actual price) with a lag of 1 data point.

好吧,简而言之:

我们能否训练一个模型,准确预测下一个梯度变化,同时减轻天真的估计影响?

剧透警告:是的,我们可以!(我觉得)。

数据

股票价格信息

花在这个项目上的大部分时间是确保数据的格式正确,或者排列正确,或者不太稀疏等等。(嗯,还有我围绕这个工具构建的 GUI,但那是完全不同的问题🙄).

我的数据来自 互动券商 (IB)。注册并存入最低金额后,您就可以订阅各种订阅源。目前,我每月为实时数据支付 15 欧。

我利用 他们的 API 下载股票价格的功能可以在本要旨 中看到 。

重要的是:

1)连接到 IB
2) 创建一个“契约”
3) 请求使用那个契约的历史条。

由于我的代码已经在一个线程上,所有这些都放在一个打了补丁的异步循环上(因此有了包 nest_asyncio )。上述要点中的用法给出了一个如何调用这个函数的例子。

我现在有一个 1 小时烛台的熊猫数据框。从那里很容易制作情节:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

60 minute candlesticks for Goldman Sachs

我用的是相当牛逼的库。稍微复杂一点的语法是对交互式情节的牺牲(尽管对本文来说不是交互式的)。通过放大某个部分,可以更好地突出目标:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

What is the gradient (i.e. sign change) from one Close price to the next? To make this prediction, everything in the shaded box (among other things) is taken into account. More on variables later. This shows a sequence of 5 candles used to predict the 6th.

我将尝试预测从我最近的收盘价到即将到来的收盘价的梯度。这可以用来制定交易策略。在稍后阶段,梯度的大小也可能被考虑。

新闻

假设是新闻对股票价格的演变有很大的影响。有几个消息来源,比如 newsapi.org,IB 也有一些选择,汤森路透等等。至于我的消息来源,我还没准备好分享🙂。

我目前以最基本的形式使用新闻情绪:我计算给定时间段内正面/负面和中性故事的数量,并将它们用作特征。我使用自己自制的半监督新闻分类器,但也可以使用 BERT 或任何其他预先训练好的库。
还有其他方法来包含情感,例如将嵌入内容直接注入网络。

对于每只股票,我选择了某些关键字并检索相关的新闻文章。一个超参数是“滞后”。滞后值为 0 意味着如果我预测下午 2 点的收盘价,那么只使用同一天下午 2 点之前的报道。滞后 1 表示包括前一天的新闻,依此类推。这里的问题是:消息通过社会和交易算法传播需要多长时间,它对股票的影响有多长时间?
下面显示了给定时间段和 2 天滞后期内高盛的故事数量。我认为 4 月 15 日至 18 日之间的负峰值与银行报告第一季度业绩喜忧参半有关。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The number of positive and negative news articles with lag=2 for a given date range

构建数据集

变量和特性

预测股票价格的一个问题是,实际上只有有限的数据。此外,我不想回到太久远的过去,因为我相信从 2013 年到现在,交易的本质已经完全改变了。我可以训练许多或少数股票串联在一起,与其他人使用的功能。通过将股票串联起来,我增加了数据的数量,也可能学到新的见解。我的数据集构建器的伪代码如下所示:

# Specify stocks to concatenate and specify those to use as features. Training_assets=[...] # i.e. currencies, or other stocks Feature_assets[...] # i.e. related stocks For stock in Training_assets: Download/update stock from IB Merge in News sentiments Add extra variables like MACD, Boilinger Bands, etc. Download Feature_assets and append to stock Normalize Concatenate with the previous training stock 

归一化

在训练期间,我将每个特征标准化,并将参数保存到一个标量文件中。然后,在推断时,我读取文件并将参数应用于变量。这加快了我可以向我的经纪人询问最新数据的推断过程。如何正常化的一个要点可以在这里看到。一个有趣的参数是norm_window_size。这指定了要素中有多少个点应该一起归一化。窗口太大意味着分辨率不够精细。尚未被考虑在内的各种各样的外部因素将发挥更大的作用。太小的窗口本质上看起来就像噪音。这是一个有趣的参数。

相关性

每个变量之间的相关性如下所示。请记住,在最广泛的意义上,两个高度相关的变量意味着如果一个增加,另一个也会增加。对于反相关,如果一个变量减少,另一个就会增加。
较高的正相关性颜色较深,较低/负相关性颜色较浅。目前,我确实使用开放、高、低作为特征。它们与收盘价高度相关,但我在推断时有所有这些信息,所以嘿,为什么不呢。在未来的训练中,我可能会移除它们,看看会发生什么。总的来说,有“重复性”的变量不好。
其他看似多余的功能是用收盘价构建的指标。但是它们给了我一个简单的方法来改变那些变量的序列长度,所以我现在把它们留在这里。

但是有哪些“外部”来源(即,不是来自我们试图推断的股票)?这些是最重要的变量。
货币、指数等特征之间的高度相关性以及与 VIX 的反相关性是非常有前途的。
一些货币可能会被淘汰,以减少整体网络规模(即,美和南非兰特似乎不会相互影响,但谁知道呢),针对不同变量的进一步培训可能会淘汰其中一些货币。

重要的是要记住“…相关性和交易预测不是一回事。”正如丹尼尔·夏皮罗在 算法交易的数据科学 中指出的,我。相关性不是因果关系。因此,待办事项列表中的一项过滤技术是,观察单个变量与给定股票收盘价的相关性如何随时间演变。这将允许我们删除变量并减少维数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Variable correlations. Currencies are technically “midpoints” instead of “close” prices.

滑动窗口算法

此时pandas.head()给出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中显示了 5 个时间步长,7 个归一化特征(为了简洁)。

然后,我们创建训练、验证和测试数据集。
由于这是一个序列预测问题,我们使用滑动窗口算法。前提如下图所示。使用了 X 个点(图中为 4 个),以 X+1 作为标签,形成一个新的数组。然后,窗口向前移动 1 点,重复计算。这样你就有了一个大的数组(X,是你的输入)以及你的标签,y。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sliding window algorithm of sequence length 4, for data (X) and corresponding labels (Y).

从这里开始,在分成训练、验证和测试大小(80%、15%、5%)之后,数据可以输入到神经网络中。

结构

我尝试过各种架构(包括 GANs),直到最终选定一个简单的递归神经网络(RNN)。就这样 奥卡姆可以安息 。理论上,LSTM(RNN 的一种)应该更好,我需要再玩一次。Christopher Olah 提供了一篇关于 RNN 和 LSTMs 的非常好的文章。

我在 Tensorflow (1.12)中的模型看起来有点像这样(名称空间和直方图等)。已删除):

def gru_cell(state_size): cell = tf.contrib.rnn.GRUCell(state_size) return cell# Inputs inputs = tf.placeholder(tf.float32, [None, seq_len, len(variables)]) labels = tf.placeholder(tf.float32, [None ,n_outputs])# Placeholder for dropout to switch on and off for training/inference keep_prob = tf.placeholder(tf.float32)# Run the data through the RNN layers batch_size = tf.shape(inputs)[0]initial_state = tf.zeros([batch_size, num_layers * size])cell = tf.contrib.rnn.MultiRNNCell([gru_cell(size) for _ in range(num_layers)], state_is_tuple=False)outputs, final_state = tf.nn.dynamic_rnn(cell, inputs, initial_state=initial_state) # Then feed into a dropout layer dense_layer = tf.contrib.layers.dropout(outputs[:,-1], keep_prob=keep_prob)# ... and a dense layer dense_layer = tf.layers.dense(dense_layer, dense_units, activation=tf.nn.selu)# ... followed by a single node dense layer final_predictions = tf.layers.dense(dense_layer,n_outputs,activation=tf.sigmoid) 

图表看起来像这样:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Tensorboard graph visualization (The multi_rnn namespace is connected to accuracy by a variable placeholder, batch size).

这是一个相当简单的网络,其中一个多层 RNN(带有 GRU 层)被馈入一个密集层(包括一个漏失层)。层数、激活和退出百分比都在训练期间被优化。
“准确性”节点是一组复杂的 TF 运算,将密集网络的预测转换为二梯度运动。作为一个实验,这种精度实际上目前在我的成本函数中使用为:

cost = (1-Accuracy) + tf.losses.mean_squared_error(labels, final_predictions) 

其中标签是归一化价格,最终预测是归一化实际价格预测。我使用具有循环函数学习率的adamotimiser。这是做这件事的最佳方法吗?我还不完全确定!🙂

培养

我在训练阶段也使用了 贝叶斯优化 (BO)。我认为这是一个很棒的库,但是,我确信它对这种类型的问题很有效,并且实际上节省了大量的时间吗?不完全是。我想画一些图来看看训练是如何进行的,功能是什么样子的。但是有这么多参数,这很难。然而,也许它提供了一个略有偏差的随机数生成器。也就是说,本文中用于结果的参数是:

Final parameters used for training for the purpose of this article

这里有一个有趣的阅读 关于比例指数线性单位(selus)。

训练(橙色)和验证(蓝色)数据集的损失曲线如下所示。生产线非常不稳定,也许使用更大的批量会有所帮助。这两个数据集之间也有一些不同。这并不奇怪。请记住,我已经将高盛的多只股票串联(并洗牌),所以我们实际上训练的是一个给定“部门”的模型,或者随便你怎么称呼它。理论上,它更一般化,因此更难训练(这是获得更多数据的代价)。因此,它可能暗示一些过度训练;有待进一步检查的东西。然而,人们可以看到验证损失随着时间的推移而减少的趋势(直到某一点)👍。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Loss function for 4k iterations. Only the best model is saved.

结果

这种最新型号性能如何?下面是实际坡度与预测坡度的对比。65%的准确性(使用之前使用的相同定义)并不算太差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The actual vs predicted gradient for the validation+test dataset.

下图显示了实际梯度与预测梯度的混淆矩阵。它表明,我们 59%的时间正确预测负梯度,而 71%的时间正确预测正梯度。这种不平衡可能来自数据集和模型的性质,即,可能三个小的正梯度进行单个负梯度。模型了解这一点,因此引用准确性可能有点误导。这在实际制定交易策略时会变得非常重要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Confusion matrix showing accuracy for up and down predictions.

再次显示了封面图,重点是验证和测试数据集。说实话,不是那么性感。但是有时候梯度变化的趋势确实是遵循的。对我来说,每当这样的情节以看似完美的重叠出现时,读者的脑海中就会响起警钟。
记住,验证数据集仅在训练步骤中用于确定何时停止训练(即 x 个时期后无改善,停止)。测试数据集没有在任何地方使用
即表示该图显示了大约 600 小时的“半看不见的”数据,以及不到 300 小时的完全看不见的数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Predictions for the validation and test datasets.

我们的结果有多稳定?
在 114 次训练中,预测梯度的准确度分布如下所示(绿色直方图)。每次训练的准确度都用橙色标出了跑步次数。这证实了我的怀疑,BO 在这里工作得不太好,但也许它只是需要更多的迭代和/或调整参数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

事实证明,我本可以使用一个更好的结果。哎哟😀。(更好的结果是在混淆矩阵中上/上相对于下/下有更均匀的分布,这很好)。
从绿色直方图中可以看出,我们正在学习一些东西。同样,很高兴看到有些结果并不比猜测好,这意味着我们并不总是在玩参数时学到东西。有些模特就是很烂。如果没有模特表现糟糕,这将是一个警钟。

结束语

在这篇文章中,我强调了我构建 RNN 的方法,它能够在大约 65%的时间内预测两个收盘价之间的正确梯度差。我相信随着更多的发挥和一些调整,这个数字可以得到改善。此外,还可以进行更多的检查和研究。
回测的时候真的会赚钱吗?交易直播的时候呢?需要考虑的数量很大。从使用相当酷的back trader库,到将其插入 IB API,这些将是下一篇文章的主题。🙂

我希望你觉得这篇文章很有趣…我写得很开心!

约书亚·怀亚特·史密斯

使用 Twitter 进行股票预测

原文:https://towardsdatascience.com/stock-prediction-using-twitter-e432b35e14bd?source=collection_archive---------4-----------------------

有没有想过如果你能预测股市你能做什么?很多:)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

许多经济学家认为,股票市场是随机的,因为它受随机事件的控制,这是在有效市场假说和随机漫步理论中提出的。但真的是这样吗?

研究人员对此进行了测试,并试图预测股票市场,以表明确实有可能对市场的走向有所了解,并且似乎已经证明了他们的观点具有一定的准确性。关于这个主题的一篇里程碑式的论文是由博伦等人撰写的。艾尔。, [1]在这篇博客中,我将试着用简单的语言解释他们是如何做到的。

Bollen 利用公众意见(使用 twitter tweets)证明了在 twitter 上表达的公众情绪与股市表现之间存在相关性。

在详细了解 Bollen 做了什么以及他是如何做的之前,我们需要了解一些事情:

  1. 什么是股票市场,它是如何运作的?
  2. 如何从推文中找到表达的心情?
  3. “如何发现/证明两个时间序列之间的相关性”
  4. 假设两个时间序列相关,如何从一个时间序列回归/预测另一个时间序列的未来结果。

什么是股票市场?

公司是一个大实体。现在,大多数公司都不是由一个人甚至一个组织所拥有,而是大量的人分享公司,这些人被称为股东。所有这些人都拥有公司的一部分,称为股票,因此这些人也被称为股东。股票市场是一个你可以出售你的公司股票或购买公司股票的地方。

更正式地说,股票可以定义为:

一家公司的是该公司所有权被分割成的全部股。【1】在美式英语中,股份俗称股票。【1】一股股票代表与股份总数成比例的公司的部分所有权。这通常赋予股东那部分公司收益、资产清算所得(在清偿所有优先债权,如有担保和无担保的债务)、【2】或投票权,通常按照每个股东投资的金额比例进行分配。-维基百科

股票市场可以定义为:

一个股票市场是股票(也称为股份)的买方和卖方的集合(一个松散的经济交易网络,而不是一个实体设施或实体),它代表着对企业的所有权要求;这些可能包括在公共证券交易所上市的证券,以及只在私下交易的股票。-维基百科

如果您有兴趣了解更多信息,请参考此链接

现在有许多股票市场,但我们的重点将是“纽约证券交易所”。为什么?因为它是最大的股票市场,大部分研究都围绕着它。在继续之前,我们需要了解一个术语,它就是“道琼斯工业平均指数”,或者简称为“道琼斯指数”。

道琼斯工业平均指数(DJIA)是在纽约证券交易所和 T2 纳斯达克交易的 30 种重要股票的价格加权平均值。DJIA 是查尔斯·道在 1896 年发明的。

通常被称为“道琼斯”,DJIA 是世界上最古老、最受关注的单一指数之一,包括通用电气公司、华特·迪士尼公司、埃克森美孚公司和微软公司等公司。当电视网说“T4 股市今天上涨了”时,他们通常指的是道琼斯指数。-投资媒体

所以道琼斯(或 DJIA)给了我们一个好主意,股票市场是在高点还是在低点收盘,那么 DJIA 到底衡量什么呢?它只是前 30 家公司股票价格的加权平均值,其中价值更高的股票具有更大的权重,最终结果被归一化以剔除一次性事件。因此,它本身就是一个价格。

所以有了 DJIA,我们现在有了一个可靠的方法来观察市场一天的表现。我们现在需要的是挖掘公众意见的方法,为此我们求助于 twitter。

推特情绪分析

机器能理解情感吗?不,他们不能,直到现在,我说的“不”不是指一个完美的“不”(而是一个非常不完美的“不”),因为机器现在可以理解广泛的情感(尽管不是完美和可靠的),并且很容易被愚弄/混淆。(这是另一篇博文的话题)。

有了机器学习算法,就有可能衡量某段文本中表达的情绪(或情感)。但是精确度还有待提高。但是如果情感表达明确,文字没有扭曲,那么我们就可以做出一个可靠的情感分析模型。这是 Bollen 用来从推文中获取情绪的工具背后的想法。

情感分析是机器学习的一个非常重要的应用,难怪许多不同的算法(我指的是很多)被应用于从文本中获取情感,让我们选择一个最简单和直观的算法。让我们考虑一下正文:

“埃隆·马斯克的个性和他的人生哲学给我留下了深刻的印象,难怪特斯拉和 spaceX 会如此努力”。

我们的算法将只查看重要的词,如“漂亮”、“印象深刻”等。(而不是像“我”、“我”之类的词。此外,我们的算法可能不知道 spaceX、Elon、Musk,所以它可能会忽略它)。现在,考虑到该算法之前已经看到了积极的文本看起来是什么样子(在训练它的时候),它已经弄清楚了像“漂亮”、“印象深刻”、“棒极了”这样的词大多与积极的情绪相关联。因此,很可能将文本标记为正面的。

这是一种非常简单的方法,它是由 Textblob (一种文本分析工具)采用的,Textblob 基于朴素贝叶斯算法,这是一种非常简单的算法,考虑到它的简单性,它给出了很好的结果,所以其思想是-每个单词根据它所关联的文档的类型给出一个分数,因此在正面文档中出现得比负面文档多的单词可能具有更大(或更正面)的分数,因此如果它出现在文档中,那么该文档更可能是正面的。因此,每个单词都有自己的分数,然后对这些分数进行平均,以获得文档的情感。

不用说,这种方法并不理想,而且在复杂的文档中效果很差。因此,大多数研究人员使用更复杂的分类器(如支持向量机)来建立情感分析模型。

Bollen 使用了两个工具进行意见挖掘,一个是意见查找器,另一个是情绪状态的 Google Profile。这些天我没有看到很多人使用意见查找器,它对这个博客来说也不是很重要,所以我们将把它放在一边,专注于谷歌情绪状态(或 GPOMS)的概况。

GPOMS 是一个工具,可以帮助你准确地检测出一段文字所表达的情绪。它基于情绪状态简介问卷,这是一份由 65 或 37 个问题组成的问卷,取决于你选择哪一个。对于每个问题,你都要表明你的感受——从“一点也不”、“一点点”、“一般”、“相当多”、“非常多”。例如,对于问题“遗憾”,你将表明你作为上述状态之一的感受,它将使用 a 标准转换为分数,并根据你的回答计算你的情绪。这里有一个到测试的链接。

那么 GPOMS 是如何利用 POMS 从文本中预测情绪的呢?谷歌连接来了。博伦使用了谷歌发布的数据集之一。该数据集由从英语网络文本的 1 万亿个单词中提取的 n 语法的频率计数组成。你可以在这里试试。bollen 所做的是:将 POMS 调查问卷中的每个单词与谷歌 n-gram 数据集中的 n-gram 相关联,然后将最频繁出现的 n-gram 分成标记,现在这些单词中的每一个都有与之相关联的语气,并可以给它们一个加权分数(基于出现次数),根据这些单词在一段文本中的出现方式,可以用相应的语气进行标记。

以上是我对 Bollen 在论文中解释的内容的理解:

因此,964 个术语的扩大词典允许 GPOMS 捕捉推文中更广泛的自然出现的语气术语,并将它们映射到各自的 POMS 语气维度。我们将每条推文中使用的术语与该词典进行匹配。匹配 n 词的每个推文词被映射回其原始 POMS 词(根据其共现权重),并通过 POMS 评分表映射到其各自的 POMS 维度。因此,每个 POMS 情绪维度的得分被确定为与 GPOMS 词典匹配的每个推特词语的同现权重的加权和。

不幸的是,GPOMS 不再可用,它现在是一个闭源工具。Goel-Mittal【2】用一种更简单的方法建立了一个类似的模型(尽管不太准确),他们使用了 POMS 调查问卷中出现的单词的同义词,然后将它们映射到文本。

根据他的 GPOMS 模型和意见搜索器,博伦发现了人们的情绪,结果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Results From GPOMS and Opinion Finder

如你所见,图表上有两件突出的事情:一件是 2008 年总统大选,另一件是感恩节,Bollen 似乎因为这个非常特殊的原因选择了这个时期,因为人们的情绪在这些场合是可以理解的,所以我们可以用这个来表明我们的模型确实能够衡量公众的情绪,公众情绪和股票市场的波动都很大,因此很容易观察到。

我们现在完成了四个部分中的两个,我们知道如何衡量公众的情绪和市场的情绪。现在我们可以继续证明这两者确实相关。

时间序列之间的相关性

如上图所示,我们已经获得了人们情绪的时间序列,类似的时间序列对于 DJIA 的得分也可以很容易地获得。现在我们需要寻找一种方法来证明这些是相关的,或者人们的情绪(从 twitter 上挖掘)导致了股票市场的变化。

我们用格兰杰因果关系来做这件事。那么格兰杰因果关系到底是什么?根据这篇的《学院派》文章:

格兰杰 因果关系 是基于预测的因果关系的统计概念。根据格兰杰因果关系,如果一个信号 X 1“格兰杰原因”(或“G 原因”)一个信号 X 2,那么 X 1 的过去值应该包含有助于预测 X 2 的信息,而不仅仅是包含在 X 2 的过去值中的信息。它的数学公式是基于随机过程的线性回归模型(格兰杰 1969)。存在对非线性情况的更复杂的扩展,然而这些扩展在实践中通常更难应用。

因此,如果我们有两个时间序列,比如 X1 和 X2,我们可以证明 X2 依赖于它以前的值,即,

X2(t)= a(0)+a(1)X2(t-1)+a(2)X2(t-2)+……。+ a§X2(t-p)

这里,常数 a(1),a(2),…,中的至少一个…,a§不为零,那么我们可以说 X2(t)依赖于其先前的值,在表明这一点之后,如果下面的关系对于 b(1),b(2),…,中的至少一个成立。,b§不为零:

X2(t)= a(0)+a(1)X2(t-1)+a(2)X2(t-2)+……。+a§X2(t-p)+b(1)X1(t-1)+b(2)X1(t-2)+……。+b§X1(t-p)

那么我们可以说 X1 是 X2 的原因,或者 X1 有可能预测 X2。请参考这段视频更好的理解格兰杰因果关系。

经过双变量格兰杰因果分析,Bollen 发现,在六个情绪状态(即平静、警觉、确定、充满活力、善良和快乐)中,只有一个,即“平静”情绪状态与股票市场的格兰杰因果关系最高,滞后时间为 2 到 6 天,其他四个情绪维度与股票市场的因果关系不显著。

因此,博伦绘制了“平静”时间序列(滞后 3 天)和 DJIA 时间序列,以显示两者之间的相关性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

阴影部分显示了具有显著相关性的部分。我们应该记住,平静的图表是滞后 3 天的,因此 twitter 数据不是同时预测市场,而是提前 3 天预测。如果我们仔细观察,我们可以看到在这个图表中存在大量的相关性,因此现在可以确定这两个时间序列之间存在相关性。我们可以利用这些信息来预测股票市场,看看我们的预测有多准确。

预测股票市场

现在进行石蕊测试,我们能根据可用的推文预测以前看不见的股票市场趋势吗,我们能预测未来吗?!!

为了预测股票市场,Bollen 使用了一种称为自组织模糊神经网络(SOFNN)的东西,他们使用了一种五层混合 SOFNN 模型来预测股票市场,并获得了相当令人印象深刻的结果。他们使用不同的数据排列,例如,只有平静,平静和快乐等等。他们最好的准确率是 87.6%(哎哟!!!)是他们用非线性的方式把平静和快乐结合起来后得到的。

那么,SOFNN 到底是什么?根据的这篇学者百科文章,他们结合了模糊逻辑和神经网络的精华,为这类任务创建了一个非常好的模型。这两个主题都超出了本文的范围。因此,我们将只简要地讨论其中的每一个。

当处理计算机时,我们主要处理布尔或二进制逻辑,即,任何实体可以是 0 或 1,但是这种类型的逻辑在许多真实世界场景中不适用,因为我们主要处理不止一个结果,例如,游戏的结果主要是赢或输,但是也可以是平局/平局,或者可能赢的差距也可以被考虑, 因此,在 0 和 1 之间可以有更多的状态,这对我们来说似乎比二进制(又称黑和白)方法更自然,更有助于模拟真实世界的情况,这种模糊方法是模糊逻辑背后的逻辑,你可以在这里阅读更多信息。

如果你还没有听说过神经网络,现在是时候从岩石下走出来了,看看一些博客,神经网络是一个时髦词。基本上,它们是一个数学模型,试图模仿(还没有成功)人脑内部的神经。

这里有一个来自 sholaropedia 的关于什么是混合模糊神经网络的很好的解释:

混合神经模糊系统是同质的,通常类似于神经网络。这里,模糊系统被解释为一种特殊的神经网络。这种混合 NFS 的优点在于它的结构,因为模糊系统和神经网络不再需要相互通信。他们是一个完全融合的实体。这些系统可以在线和离线学习。

模糊系统的规则库被解释为神经网络。模糊集可以被视为权重,而输入和输出变量以及规则被建模为神经。神经可以在学习步骤中被包括或删除。最后,网络的神经代表模糊知识库。显然,两种基本系统的主要缺点都被克服了。

大局

以上四个部分试图解释用于构建 Bollen 提出的模型的较小部分。现在我们来看看最终的模型,以便更好地理解可用于预测股票市场的模型:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The Final Model

首先提取和处理来自 twitter 和 DJIA 的原始数据,然后 twitter 数据通过情绪分析模型 Opinion Finder 和 GPOMS,然后对它们进行格兰杰因果分析,以证明来自 twitter 的情绪确实与 DJIA 值有一些相关性,一旦这种相关性消失,我们现在可以开始用 SOFNN 模型预测股票市场。

[1] Bollen,j .,Mao,h .,Zeng,x .:推特情绪预测股市。计算科学杂志,2(1),1–8(2011)

[2]米塔尔、安舒尔和阿尔皮特·戈埃尔。"使用推特情绪分析进行股票预测."斯坦福 cs 229(2011)http://cs 229 . Stanford . edu/proj 2011/goel Mittal-stockmarketpredictionusingtwittersentimentanalysis . pdf)(2012)。

股票价格预测系统使用 1D CNN 与 tensor flow . js-机器学习轻松有趣

原文:https://towardsdatascience.com/stock-price-prediction-system-using-1d-cnn-with-tensorflow-js-machine-learning-easy-and-fun-fe5323e68ffb?source=collection_archive---------1-----------------------

了解如何建立股票价格预测系统使用 1D 卷积神经网络与张量流。JS 库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image 1: Stock Price Prediction Application

当我在网上阅读股票预测时,我看到人们谈论使用 1D CNN 来预测股票价格。这引起了我的注意,因为 CNN 是专门为处理像素数据而设计的,用于图像识别和处理,这看起来是一个有趣的挑战。

这个解决方案是使用 Tensorflow.js 库的前端应用程序,最好的部分是它不需要任何服务器端。数据可通过“ IEX 开发者平台API 服务获得。上面的图片 1 来自这个股票预测应用程序。

代码可以在我的 Github 库中找到。

[ gago 993/股票预测 CNN

使用卷积神经网络和 TensorflowJS-gago 993/StockPredictionCNN 的股票预测

github.com](https://github.com/Gago993/StockPredictionCNN)

所有需要完成的工作可以分为 6 个步骤:

  1. 获取数据
  2. 生成要素
  3. 生成 ML 模型
  4. 训练 ML 模型
  5. 测试 ML 模型
  6. 用 ML 模型预测

那么让我们开始…

获取数据

这些数据是使用 IEX 的 API 收集的。API 描述可从以下链接获得。在此应用程序中,我使用的图表端点具有预定义的 1y (1 年)历史周期。占位符 %company% 用于替换我们在应用程序中输入的公司符号。

let url = 'https://api.iextrading.com/1.0/stock/%company%/chart/1y' 

这个 API 的结果是带有所请求公司历史数据的 json 数组。以下是来自响应数据的一些示例。

[ ... { "date":"2018-02-20", "open":169.4694, "high":171.6463, "low":168.8489, "close":169.2724, "volume":, "unadjustedVolume":, "change":-0.5713, "changePercent":-0.336, "vwap":170.3546, "label":"Feb 20, 18", "changeOverTime":0 }, ... ] 

生成要素

检索数据后,我们需要处理它并准备特征集和标签集。当我在研究的时候,我发现了他们使用日期字段作为特性的想法。然而,我不喜欢这样,因为有两个原因。首先,日期是不断增加的特征。第二,日期是独立的(与股价没有直接联系)。

我认为与当前股价联系更紧密的是过去股价是如何变化的。例如,今天的股价取决于过去 7 天的股价变化。为此,我们为测试集定义了 7 个特征,每个特征都标有第二天的股票价格。

所有这些数据的预处理都是在 helpers.js 文件中定义的 processData 函数中进行的。在我们的例子中时间部分变量的值为 7。

... // Create the train sets for (let i = timePortion; i < size; i++) { for (let j = (i - timePortion); j < i; j++) { trainX.push(scaledFeatures[j]); } trainY.push(scaledFeatures[i]); } ... 

另一件重要的事情是,我们首先使用 helpers.js 文件中定义的 minMaxScaler 函数来规范化我们的特性。这将缩放 0 到 1 之间的所有值。这一点很重要,这样预测模型才能更好地适应我们的模型,并且在有大量数据时会更快。如果你想知道更多关于这个最小-最大标准化的信息,你可以在这个博客的末尾找到参考资料。

生成 ML 模型

下一步是创建 CNN 模型。这是由 prediction.js 文件中的 buildCnn 函数完成的。使用 Tensorflow 库确实简化了这一步。我们需要做的是定义顺序(层的线性堆叠)张量流模型,然后添加预定义的层,以便构建我们的 CNN 模型。

但 CNN 是什么? CNN卷积神经网络是深度神经网络的一类,最常用于分析视觉表象。这就是为什么用它来预测股票价格是不寻常和有趣的挑战。

CNN 有 4 个重要的层次,使它与众不同。它们是卷积层、ReLU 层、汇集层和全连接层。他们每个人都有具体的任务要做。然而,我现在不会深入解释 CNN。

让我们继续用 Tensorflow 构建 CNN。我们总共定义了 7 层:

  1. 输入层—输入大小为[7,1],因为我们有 7 个特征
  2. conv1d—第一个卷积层
  3. averagePooling1d 第一个平均池层
  4. conv1d —第二卷积层
  5. 平均池 1d-第二个池层
  6. 展平-减小维度,将输入整形为[样本数,要素数]
  7. 密集-使用线性激活函数的全连接图层,其中 1 个单返回 1 个输出值

下面是我们在顺序张量流模型中定义所有这些层的代码。

在我们建立模型之后,我们进入下一步,即训练我们的模型。

训练 ML 模型

既然我们已经创建了模型,我们需要准备好并转换我们的数据。这意味着将我们的训练和标签集转换为张量数据,因为 tensorflow 使用的是它自己的数据类型,即张量。

这是非常简单的一步。我们创建张量并将我们的特征数据整形为[样本数,时间部分,1]。在这种情况下,时间部分是 7。

... let tensorData = { tensorTrainX: tf.tensor1d(built.data.trainX).reshape([built.data.size, built.data.timePortion, 1]), tensorTrainY: tf.tensor1d(built.data.trainY) }; ... 

现在我们已经得到了张量,我们将它们与 cnn 函数中的模型一起使用。在这里,我们首先建立优化算法和损失函数。我们使用“ adam ”算法作为优化器,使用“ minSquaredError ”作为损失函数。

model.compile({ optimizer: ‘adam’, loss: ‘meanSquaredError’ }); 

与 SGD(学术梯度下降)不同,Adam 优化器对每个权重使用不同的学习率。

这里我们需要做的最后一件事是在 tensorflow 模型上调用 fit 函数,并发送 trainX (特征)和 trainY (标签)集合。我们还将 epochs 的选项设置为 100。

在集合的每个项目上训练你的网络一次是一个时期。

... // Train the model model.fit(data.tensorTrainX, data.tensorTrainY, { epochs: epochs }).then(fucntion (result) { ... 

当训练结束时,它返回结果,并且模型准备好用于生成预测。

测试 ML 模型

在这一步中,我们已经为将来的预测准备好了模型。我们首先要做的是使用这个模型在我们训练模型的同一个集合上进行预测。这背后的想法是,我们可以比较(可视化)我们的模型符合训练集的程度。

我们简单地通过从模型中调用预测函数来创建预测。

var predictedX = model.predict(tensorData.tensorTrainX); 

我们通过调用以下命令获得预测数据:

predictedX.data().then(function (pred) { ... 

由于我们之前已经归一化(缩放)了我们的特征,所以我们需要运行逆最小-最大运算,以便获得真实的特征值。我们通过从 helpers.js 调用minmaxinverscaler函数来实现,在这里我们发送预测数据以及最小值和最大值。

var predictedXInverse = minMaxInverseScaler(pred, min, max); 

现在我们使用 plot.js 中定义的 plotData 函数,这样我们就可以可视化(实际的和预测的)数据集。P.S .我用了 Chart.js 库做可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image 2: Actual vs Predicted values for AAPL(Apple)

用 ML 模型预测

剩下要做的是为第二天的股票价格预测生成测试特性。该特性是使用 helpers.js 文件中的generateNextDayPrediction函数生成的。

let nextDayPrediction = generateNextDayPrediction(result.originalData, result.timePortion); 

这个函数做的很简单。它从给定的数据中提取最近 7 个股票价格值,并创建测试特征集(用于第二天的预测)。

然后,我们重复相同的步骤,将该数据转换为张量数据,并将其整形为[样本数,特征数,1],在这种情况下,它将是[1,7,1],因为我们只有一个测试示例。

接下来,我们从模型中调用预测函数。

let predictedValue = model.predict(tensorNextDayPrediction); 

我们得到预测值并运行逆最小-最大归一化

predictedValue.data().then(function (predValue) { // Revert the scaled features, so we get the real values let inversePredictedValue = minMaxInverseScaler(predValue, min, max); ... predictedXInverse.data[predictedXInverse.data.length] = inversePredictedValue.data[0]; 

最后,我们只需将该值添加到预测数据的末尾(来自之前“测试 ML 模型”部分中的训练集),这样就可以在图表上显示该值。

结论

希望这是清晰易懂的。如果您认为某些部分需要更好的解释,请随时添加评论或建议。如有任何问题,请随时联系我。

希望你喜欢它!

有用的链接

[ 功能缩放-维基百科

特征缩放是一种用于标准化独立变量范围或数据特征的方法。在数据中…

en.wikipedia.org](https://en.wikipedia.org/wiki/Feature_scaling) [ 深度学习的 Adam 优化算法简介

你的深度学习模型的优化算法的选择可能意味着良好结果之间的差异…

machinelearningmastery.com](https://machinelearningmastery.com/adam-optimization-algorithm-for-deep-learning/)

别再自称是机器学习公司了

原文:https://towardsdatascience.com/stop-calling-yourself-a-machine-learning-company-c7b231cbe365?source=collection_archive---------30-----------------------

为什么给自己贴上这样的标签可能弊大于利

你听说过一个建筑商把他的公司叫做螺丝刀公司吗?一个摄影师把他的生意叫做相机公司怎么样?那为什么我们突然开始看到所有这些公司都自称为机器学习公司?我认为这个类比很简单,你不应该用你使用的工具来定义你的业务,不管这个工具有多酷。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Ross Findon on Unsplash

根据你带来的价值来定义你的业务

如果你看过盖伊·卡瓦斯基关于创新艺术的演讲,你可能听说过美国制冰行业的发展。我会建议检查整个演讲,但现在,让我们总结一下这个故事。

Ice 1.0 始于 20 世纪初,人们从冰冻的湖泊中收获冰块,并运送给人们

Ice 2.0 始于人们建造中央制冰厂,可以全年制冰,并按需向人们提供冰块

Ice 3.0 始于我们家里都有冰箱的时候

虽然现在很容易看到这种演变,但许多 Ice 1.0 公司没有过渡到 Ice 2.0,许多公司也没有过渡到 Ice 3.0。这就是我想在这里谈论的,因为我认为给公司贴上机器学习公司或人工智能公司的标签,我们可能会让它们失败。

曾经有一段时间,机器学习是一种可行的方法,当时人们能够建立统计模型来解决他们的业务问题。它可能不那么准确或高效,但它奏效了,而且我们没有看到一波 GLM 公司的成立。尽管机器学习和人工智能很酷,但它只是一种帮助人们解决特定问题的工具。企业需要定义自己,不是通过他们的工具,而是通过他们能给客户带来的价值。如果那些 Ice 收割机在过去根据他们给客户带来的价值来定义他们的业务,帮助他们保持食物的冷藏和新鲜,那么他们将有更好的机会跟上 Ice 1.0 到 3.0 的发展,甚至可能超越这一发展。

机器学习应该放在哪里?

我们需要开始面对这样的事实,仅仅因为你拥有最新的机器学习技术,并不意味着你有一个伟大的企业。为了真正利用人工智能、机器学习和其他技术可以提供的力量,你需要从顶层开始。

如果你不知道你要去哪里,任何一条路都会把你带到那里。
——刘易斯·卡罗尔

一个企业的存在首先是因为它想给生活带来某种改变。这是公司愿景的基础,也是组织努力的目标。借用 Simon Sinek 著名的黄金圈概念,这也是这个行业的原因。请务必注意,无论您提供什么解决方案、销售什么产品以及使用什么工具,您做什么的原因都是一样的。一旦你有了一个清晰的愿景,那么你就可以考虑你的方法,这是你可以传递你独特的愿景的方法。可以是你对客户服务的执着,也可以是你优秀的品质,也可以是你有竞争力的价格等等。只有在你清楚地阐明了为什么和如何之后,你才能继续做你想做的事情,这就是你选择工具的地方。你可能想使用机器学习来在国际上扩展你的个性化客户服务,或者你可能想使用机器学习来提高供应链的整体效率。人工智能和机器学习的使用应该总是伴随着公司为了实现目标而想要解决的问题。人们很容易被诱惑去追逐炒作和跟随市场,并试图以某种方式利用这些新技术,但如果你想实现你的愿景,你必须努力理解这些工具如何增加价值,而不是分散你的目标。

接下来会发生什么?

尽管机器学习和人工智能目前是媒体的一大焦点,但如果历史可以借鉴的话,我们知道总有一天它们会变得像人们使用电脑工作一样普遍。我相信,如果企业想要长期成功,关键是要保持一个长期的观点,一个不受(相对)短期炒作支配的观点。这并不是说公司不应该专注于使用最新的技术和技巧,但这绝不应该是业务的唯一焦点。

随着新技术和新方法的产生和向世界发布,我相信这将为不同市场的参与者提供公平的竞争环境。小型创业公司将和大型成熟企业一样有机会接触到最新技术,这将迫使每个人专注于为人民解决真正的问题。毫无疑问,拥有更多资源的公司可以犯更多的错误,并在游戏中呆更长的时间,但继续保持领先的唯一方法是向客户提供真正的价值。

如何为自己的成功做准备

我在这里绝对不是说你不应该专注于定义一个强大的数据战略和建立一个高级分析工具包。当涉及到交付你想要做的东西时,它们肯定是重要的,但是,它们不应该决定你的企业为什么存在。我认为强大的数据分析能力是一个加速器,它不会告诉你应该去哪里,但会让你快速到达那里,所以在你起飞前明智地选择目的地是非常重要的。

尽管我们非常希望有一颗银弹,但机器学习、人工智能、数据科学以及未来将出现的任何新技术都不会是银弹。如果我们想保持领先,给世界带来积极的变化,我们必须超越工具,开始关注我们为什么要做我们正在做的事情。

如果您喜欢我的内容,请在 https://jchoi.solutions/subscribe注册更多内容

停止对商业领袖说精确和回忆…

原文:https://towardsdatascience.com/stop-saying-precision-and-recall-to-business-leaders-f17082ab5052?source=collection_archive---------11-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

开始说捕获率,改为命中率。

写这篇文章的动机是基于我最近参与的一个项目,在这个项目中,管理层试图辨别一个预测模型的商业价值。对模型结果及其业务影响的理解不够清晰。

用于评估模型能力的指标是准确度、精确度和召回。我不会去解释为什么这些特定的度量标准会被使用,那将是另一个时间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A diagnostic testing table for binary classification. Source: en.wikipedia.org/wiki/F1_score

我会假设你已经熟悉精度,并回忆或至少理解它们是什么。如果你没有听说过这些指标,Koo 的这篇文章很好地解释了它们。下面是公式的快速复习:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: towardsdatascience.com/331fb37c5cb9

我想关注的是管理层在分解预测模型结果时反复提出的问题:那么如果精度是 90%呢?如果我的回忆率低于准确率,这对决策有什么帮助?这些是数据科学家在交流他们的发现以帮助企业决策时必须克服的障碍。在追求创建有史以来最好的模型的过程中,经常会忽略模型的实际方面。

除了了解什么是精确度和召回率,还应该了解关注不同的指标会如何影响预测模型在业务环境中的作用。

我将尝试创建一个强大的业务联系,以提供更多关于如何提升业务价值预测模型的直觉。

精度转换为转化率

让我们从一个简单的上下文开始。假设我们是一家在线零售商,每天有 1000 名访客访问我们的网站。您制作的预测模型用于预测访问者是否可能购买(热门线索)。然后,跟进针对这些线索。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该模型预测并识别了这 1000 人中的 100 个热门线索,并假设 80 个热门线索实际上最终进行了购买。这意味着 80%的转化率。你可能意识到的是,转化率实际上是模型的精度!就这么简单!现在,你可以用一种熟悉的方式告诉管理层预测如何帮助业务,即提高转化率。现在,管理层可以将这个指标与他们当前的过程进行比较,您的项目现在有了清晰的业务含义。

翻译召回捕获再到

假设现在你知道有一个由 100 名高价值访客组成的团队,他们比普通顾客花费更多。预测模型做着同样的预测:一个访问者是否具有高价值,后续行动是针对这些个人的。

该模型设法包括 80 个高价值客户,这是我们的目标市场。这将意味着我们试图锁定的 100 个人的捕获率为 80%。嗯,80%的捕获率实际上就是该车型的召回

简单来说,精准是获得高价值客户比例最高的能力,召回是不错失高价值客户的能力。

请注意,对于不同质量的客户,我们的关注点会有所不同。在第一种情况下,我们更感兴趣的是用最少的努力将尽可能多的访问者转化为买家,而在第二种情况下,我们的目标是抓住尽可能多的目标细分市场。

让我们看一个不同的例子。如果一家银行发起一项活动,提供有吸引力的个人贷款套餐,你会希望将你的套餐提供给尽可能多的潜在贷款支付者,同时避免贷款给潜在的违约者。为了简单起见,我没有考虑其他成本,如竞选成本或因不平等待遇而疏远现有客户的成本。

重温之前的类比:

精准是在活动中获得最高贷款支付者比例的能力,召回是不遗漏贷款支付者的能力。

或者,precision 的目标是不把任何人误认为付款人。召回旨在不将任何人误认为违约者。你的精度是借款人的命中率,而召回是借款人的捕获率

精确度越高,招募违约者的可能性就越小,但潜在客户群会变得更小。召回率越高,潜在客户群就越大,但招募违约者的风险也就越高。我们的召回和精确水平的平衡是一个风险偏好的问题。为了吸引更多的潜在客户,我们是否愿意承担招募不良客户的更大风险?至关重要的是,这些是企业关注的重点。

与业务目标保持一致

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

企业的战略目标可以是任何东西,从识别潜在客户,捕捉欺诈,最大限度地提高活动效果或减少流失。为了有效地传达预测模型的结果,我们应该与业务领导关注的指标保持一致:转化率、流失率、欺诈事件率、捕获率、命中率等。

因此,与其说你的模型实现了某个百分比的召回率或精确度,不如说你设法实现了更高的捕获率或命中率。

模型度量与业务目标完全一致!

虽然数据科学家能够产生所需的结果,但随之而来的沟通不匹配可能会让决策者感到困惑。确定业务指标对于最大化稳健预测算法的优势至关重要。

我希望我成功地引入了一种不同的视角来使用精确度和召回率来弥合业务用户和数据科学之间的差距。感谢阅读!

停止使用均值来填充缺失数据

原文:https://towardsdatascience.com/stop-using-mean-to-fill-missing-data-678c0d396e22?source=collection_archive---------7-----------------------

均值插补是我用过的第一种处理缺失数据的“高级”方法。在某种程度上,这是用 0 或常数(例如-999)填充缺失值的一大步(请不要这样做)。

然而,这仍然不是一个最佳的方法,今天的帖子会告诉你为什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Pietro Jeng on Unsplash

数据集

对于本文,我选择使用泰坦尼克号数据集,主要是因为它广为人知,并且 年龄 列包含一些缺失的值。首先,让我们导入所有需要的东西,并做一些基本的数据清理。以下是进口货:

Imports — https://gist.github.com/dradecic/bd084cb0c27bd76ed848dccabc9ed9b4

当您检查数据集的头部时,您将得到以下内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Titanic Head

关于数据清理,应该完成以下工作:

  1. PassengerIdTicket 应该被丢弃——第一个只是一个任意的整数值,第二个对于每个乘客都是不同的。
  2. 性别 列的值应重新映射为 0 和 1,而不是“男性”和“女性”
  3. 姓名 中提取人物头衔,如先生、夫人、小姐…,如果头衔常见(先生、小姐…),则进一步转换为 0 和 1-0。),如果不是,则为 1(博士、牧师、上尉)。最后, 名称 应该去掉
  4. 应替换为 舱 _ 已知 —如果值为 NaN ,否则为 1
  5. 虚拟列应该从 开始创建 并且第一个虚拟列应该被删除以避免共线性问题

下面是实现这一点的一小段代码:

Data Cleaning — https://gist.github.com/dradecic/74a77c38c4986b490dee74c3ca

平均插补

数据集现在是干净的,但是在 年龄 列中仍然包含丢失的值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Missing values

因为我不想弄乱原始数据集,所以我会做一个副本并做上标记,所以很明显这里会做均值插补。然后,我将创建一个新属性—Age _ Mean _ Filled—顾名思义,它将包含 Age 属性的平均估算值:

Mean Imputation — https://gist.github.com/dradecic/f7cde4d83cd2fc800a63e59bb2

从统计学角度来说,均值插补对数据集的影响如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mean Imputation Changes

是的,意思是一样的,很明显,但是看一下第 25 位第 50 位第 75 位百分位。另外,查看标准差的变化。结论是显而易见的——均值插补对属性可变性有影响。

让我们看看这些分布是什么样子的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mean Imputation Distribution Check

左侧和右侧都很接近,但是显著的差异在中间——如你所见。

现在的问题是——如何解决这个问题?

介绍老鼠

MICE,或链式方程多插补(多么难忘的术语),是一种插补方法,通过多次填充缺失数据来工作。链式方程方法还有一个好处,就是能够有效地处理不同的数据类型,比如连续数据和二进制数据。

引用 statsmodels.org 的,

基本思想是将每个有缺失值的变量视为回归中的因变量,剩余变量中的一些或全部作为其预测变量。MICE 程序通过这些模型循环,依次拟合每个模型,然后使用一种称为“预测平均匹配”(PMM)的程序,从拟合模型确定的预测分布中产生随机抽取。这些随机抽取成为一个估算数据集的估算值。[1]

根据国家生物技术信息中心的说法,以下是使用老鼠的一些主要优势:

多重插补比其他缺失数据方法有许多优势。多重插补涉及多次填充缺失值,创建多个“完整”数据集。如斯查费和格拉汉姆(2002) 所述,缺失值是基于给定个体的观察值和其他参与者数据中观察到的关系进行估算的,假设观察变量包含在插补模型中。[2]

好了,说够了,让我们做一些编码!要开始,您需要通过 pip 安装 impyute 库:

pip install impyute 

如果你习惯于均值估算,你可能会认为其他任何事情都要复杂得多,至少在实现方面是如此。在这种情况下,你就大错特错了。

由于 impyute 库的简单性,MICE 的实现不能再简单了。你需要在数组中传递纯值,所以默认情况下 Pandas DataFrame 不会剪切它。很幸运,你可以直接叫 。值就设置好了:

MICE Imputation — https://gist.github.com/dradecic/6b567e42dd9890f9e6dae125a70a433f

这很快。

快速调用到*。描述()* 对 小鼠 _ 年龄 会产生以下结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MICE default

请注意最小值。现在是零下 7 度。因为这个属性代表年龄,所以有负值是没有意义的。这可以通过一些基本的列表理解很容易地解决:

Negatives — https://gist.github.com/dradecic/8e8a4c5df08369abb6b3246f25cd5cfc

如果你现在检查原始的 年龄 的统计数据,和老鼠估算的一,你会看到数值更接近:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MICE Imputation Changes

快速分布图证实了这些说法。小鼠估算值的分布更接近原始分布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MICE Imputation Distribution Check

最后的话

你现在知道你的库存里有什么新技能了。我的建议是,你可以试着在你已经处理过的数据集上使用它,但是用均值插补或者其他方法代替。

如果你在那里开发了一个预测模型,看看准确性如何比较。如果能因此挤出点额外的精准度就太好了。

感谢阅读。

直到下一次…

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

[ 通过我的推荐链接加入 Medium-Dario rade ci

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@radecicdario/membership)

参考

[1]—https://www.statsmodels.org/stable/imputation.html

[2]—https://www.ncbi.nlm.nih.gov/pmc/articles/PMC/

停止使用终结者图像

原文:https://towardsdatascience.com/stop-using-terminator-images-10b2feb79c78?source=collection_archive---------37-----------------------

人工超级智能不会有奥地利口音

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image by WikiImages from Pixabay

我们都看过这些文章。他们警告我们,未来先进的人工智能(AI)将变得“流氓”,并毁灭我们所知的生命。由于这部分是终结者电影的情节,这些文章使用这些电影的图像来说明这一点。

我完全赞成警告人类人工智能未来可能出现的问题。我确实认为这会导致我们的灭绝。这可能是我们最大的生存风险。我在使用《终结者》系列电影的图像时遇到的问题是,这些电影预测了一个极不可能的未来。终结者特许经营是娱乐——它(可能)甚至不意味着是准确的。

对于不知道终结者特许经营权的你们中的少数人,我将快速解释一下剧情。这个想法是,在某个时间点,一群人构建了一个名为天网的人工智能。用于国防,天网这个学习系统变得越来越聪明,最终发展成为一个有自我意识的 AI 。将人类视为一种威胁,它建立了一支杀手机器人军队,在导致不同国家相互投掷核弹后,与人类的残余进行战斗。人类由一个名叫约翰·康纳的人领导,天网在约翰出生前派了一个终结者(阿诺德·施瓦辛格饰演的一个被人肉覆盖的人形机器人)回到过去杀死了约翰的母亲莎拉·寇娜

从电影中我不太清楚天网的确切智能水平,但由于天网确实有自我意识,并且是一个学习系统(智能不断增加),我将假设它是一个人工超级智能:一个比任何人类都要智能得多的人工智能。

为什么我认为《终结者》电影中的场景不太可能?首先,高度先进的感知暗杀机器人将能够准确射击,施瓦辛格扮演的终结者是一个可怕的射手。

任何人类与 ASI 对抗并且不会很快被消灭的场景都是不现实的。

但是关于终结者的场景有一个更大(也更可怕)的问题,那就是:任何人类与人工智能对抗并且不会很快被消灭的场景都是不现实的。从定义上来说,一个 ASI 非常擅长实现它的任何目标,而且几乎对任何目标来说自我保护都很有用。因为从定义上来说,人工智能比我们更聪明,所以它很可能比我们更善于自我保护。这直接意味着将赢得这场战争,如果有一个的话。如果你认为一个 ASI 可能没有办法杀死我们,再想想。它会找到办法的。它甚至可能说服我们给它提供手段,就像如果它没有互联网连接,它会说服我们给它提供互联网连接一样。我在这里写了一个有趣的实验:

[ 人工智能盒子实验

一个简单的实验能教会我们什么是超级智慧

towardsdatascience.com](/the-ai-box-experiment-18b)

《终结者》的场景不切实际,这是不使用其图片来说明高级人工智能出错警告的一个非常好的理由。即使人们知道这是科幻小说,我仍然害怕看到图片会产生一些 锚定 效果他们知道场景是假的,但他们没有在头脑中进行足够的调整。结果是对未来的某种半虚构的憧憬,这对任何人都没有好处。考虑 ASI 已经非常困难了,因为我们很难不把拟人化;看到终结者的图像只会让这变得更加困难。

停止使用邮政编码进行地理空间分析

原文:https://towardsdatascience.com/stop-using-zip-codes-for-geospatial-analysis-ceacb6e80c38?source=collection_archive---------3-----------------------

上次使用邮政编码时,您很可能是在网站上输入您的地址进行购物,在您家或办公室附近寻找商店,或者填写其他在线表格。你很可能找到了你想要的答案,而没有停下来进一步思考你刚刚输入的五位数代码。

然而,许多公司、营销人员和数据分析师会花数小时查看邮政编码。他们正在决定如何使用与这些邮政编码相关的数据来了解趋势,经营他们的业务,并使用相同的五位数代码找到联系您的新方法。

即使有不同的地点关联对你个人来说可能更有意义,例如街区、街道或你居住的街区,但在许多组织中,邮政编码是地理单位的选择。它用于制定营销、开店或关店、提供服务的重大决策,以及可能产生巨大财务影响的决策。

问题是,邮政编码并不能很好地代表真实的人类行为,当用于数据分析时,往往会掩盖真实的潜在见解,并可能最终导致糟糕的结果。要理解这是为什么,我们首先需要了解邮政编码本身。

邮政编码:简史

邮政编码的前身是邮政区,代表特定城市的邮局部门。例如:

无名氏先生

亨内平大街 515 号

明尼苏达州明尼阿波利斯 16

*“16”*代表明尼阿波利斯市的邮政区。但是随着越来越多的邮件被发送,1963 年邮政服务决定推出区改善计划,该计划将地址改造成如下所示:

无名氏先生

亨内平大街 515 号

明尼苏达州明尼阿波利斯 554 16

五位数代码代表国家的一部分(5_ _ _ ),一个部门中心设施( ** 5 4 _ ),以及相关的邮局或投递区域( _ _ 1 6)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The first digit for every zip code for the states in the contiguous United States

到 1967 年,邮政编码成为批量邮寄的强制性规定,并继续被几乎所有在美国发送邮件的人所采用。随着时间的推移,添加了 ZIP+4 来增加邮政编码的粒度,以表示特定的位置,甚至是供邮政工作人员投递的建筑物。邮政服务甚至创造了一个角色,邮政先生,来推广邮政编码的使用,他出现在邮票、商业广告和歌曲中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mr. Zip

邮政编码本身实际上并不代表一个区域,而是一组路线:

尽管大多数邮政编码的地理来源不同,但编码本身并不代表地理区域;通常,它们对应于地址组或传递路线。因此,邮政编码“区域”可以重叠,可以是彼此的子集,也可以是没有地理区域的人工构造(例如,095 表示寄给海军的邮件,它在地理上是不固定的)。以类似的方式,在没有常规邮政路线的地区( 农村路线 地区)或者没有邮件递送的地区(不发达地区),不分配邮政编码或者基于稀疏的递送路线,因此邮政编码地区之间的边界是不确定的。

美国人口普查局为邮政编码列表区或地理文件提供数据:

邮政编码列表区(ZCTAs)是美国邮政署​(USPS)邮政编码服务区的通用区域表示。

USPS 邮政编码标识与邮寄地址相关联的各个邮局或大都市地区投递站。USPS 邮政编码不是区域要素,而是邮件递送路线的集合。

在这里,我们发现了邮政编码的第一个问题,即它们并不代表地图上的实际区域,而是帮助邮政工作人员有效投递邮件的路线集合。它们不是为了衡量社会人口趋势而设计的,而这正是一家企业通常想要做的。您可以实际查找单个交货路线,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

One zip code route in New York’s East Village

我们在这里只是触及了问题的表面。类似的问题在世界各地都存在,邮政编码代表着奇怪的边界:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Postal Codes in London, Toronto, and Sydney

使用邮政编码进行数据分析

快进到今天,许多公司可以很容易地查看他们的数据库,找到一个带有 zip_code 列的数据集,这使他们能够分组和聚合数据,以查看趋势和业务绩效指标。如前所述,邮政编码的问题在于:

  1. 它们并不代表真正的边界,而是路线
  2. 它们不代表人类的行为方式

后者代表了使用空间数据的两个具体问题:观测的空间比例和空间比例支持(您可以在 UChicago 的 Luc Anselin 的讲座中了解更多信息,此处)。首先,人类的行为不会基于行政单位,如邮政编码,甚至人口普查单位。他们的行为更多地受到他们邻居的影响,或者受到社区或高活动区域(如中央商务区)的影响。第二,空间数据是以多种比例提供的,而且这些边界往往重叠或嵌套在另一个边界内。

让我们来看一个发生在达拉斯某个特定地区的例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Zip Code boundaries (white) with Census Block Groups based on Income

在这张地图中,我们可以看到大的白色边界,代表邮政编码的边界,在它们下面是美国人口普查区块组的边界。美国人口普查提供的数据显示,深绿色代表高收入。

当我们查看一个特定邮政编码时,我们可以看到更详细的收入数据:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,在这个单一邮政编码(75206)中,12 个月的家庭收入中位数在 9700 美到 美之间,当我们看完全或部分属于这个单一邮政编码的街区群体时,人口普查列出的家庭收入中位数为 63392 美。

收入中位数是评估一个邮政编码范围内的值的一种方法(请记住,这些是 ZCTA 边界),但我们可能会在人口、就业和其他数据分析的相关指标中看到这样的差异。

坚持家庭收入中位数,我们决定将这一分析扩展到整个美国,当您查看邮政编码和与 ZCTA 边界相交的人口普查区块组(至少有 1 人居住在该区块组中)时,看看哪些区域最不平等和最不平等。

最不平等的邮政编码是佛罗里达州迈阿密海滩的 33139

  1. 33139:佛罗里达州迈阿密(差额 美)
  2. 44120:俄亥俄州克利夫兰( 美差额)
  3. 10013:纽约州纽约市(233,559 美差额)
  4. 10023:纽约州纽约市(233,157 美差额)
  5. 11201:纽约布鲁克林( 美的差价)
  6. 10601:纽约州怀特普莱恩斯(232,813 美差价)
  7. 33141:佛罗里达州迈阿密(差额 美)
  8. 92648:加州亨廷顿海滩( 美差价)
  9. 98105:华盛顿州西雅图市(230,906 美差额)
  10. 33143:佛罗里达州迈阿密(差额 美)

最相似的*邮政编码在西弗吉尼亚州的切萨皮克

  1. 25315:西弗吉尼亚州切萨皮克(2 美差额)
  2. 79357:德克萨斯州圆锥市(4 美差价)
  3. 65052:密苏里州林恩克里克(9 美差价)
  4. 73093:俄克拉荷马州华盛顿(相差 12 美)
  5. 68370:东北希伯伦(相差 13 美)
  6. 19541 年:宾夕法尼亚州莫尔斯维尔(相差 15 美)
  7. 05340:佛蒙特州邦德维尔(18 美差价)
  8. 12958:纽约州穆尔市(相差 26 美)
  9. 19941 年:埃伦代尔,德(相差 37 美)
  10. 54896:洛丽塔,威斯康星州(38 美的差异)

*差异大于 0 时类似

为了对整个美国进行这种分析,我使用 CARTO 及其笔记本扩展 CARTOframes 来获取人口普查区块组和人口普查 ZCTA 地区的人口普查数据,这些数据存储在 CARTO 中。

一旦我们有了两组边界,我们就要查看所有完全被 ZCTA 边界包含,或者至少 50%被 ZCTA 边界包含的块组。为此,我们可以使用 PostGIS 来查找这些交叉点,并根据这些数据创建不同的统计测量值(最小值、最大值和百分位数)。

你可以在这个笔记本里看到完整的方法论和代码。

SELECTz.*,MIN(b.median_income),MAX(b.median_income),SUM(b.total_population) AS total_pop,percentile_disc(0.25) WITHIN GROUP (ORDER BYb.median_income) AS p_25,percentile_disc(0.5) WITHIN GROUP (ORDER BYb.median_income) AS mean,percentile_disc(0.75) WITHIN GROUP (ORDER BYb.median_income) AS p_75,stddev_pop(b.median_income)FROMincome_zips zLEFT JOIN income_bgs b ON ST_Intersects(z.the_geom, b.the_geom)WHEREb.total_population > 0AND (ST_Area(ST_Intersection(z.the_geom, b.the_geom))/ ST_Area(b.the_geom)) >.5GROUP BYz.cartodb_id 

创建新表后,我们可以看到,大多数最不平等的邮政编码往往位于城市或更大的都会区,而更平等的邮政编码往往位于全国各地的农村地区。

根据最高值和最低值之间的范围探索邮政编码的空间显著性聚类也是值得的,这非常适合使用空间自相关。你可以在这篇文章或者这篇教程中了解更多。

那么我们为什么使用邮政编码呢?

实际上,使用邮政编码作为地理空间单位很容易。正如我们之前所说的,几乎所有使用定位或需要以任何方式定位用户的电子商务或交付服务或应用程序都会收集邮政编码。此外,每个人都熟悉邮政编码,因为在大多数国家,邮政编码是任何地址的一部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

‘Find A Store’ on Target.com

不经常使用地理空间数据的人不太熟悉人口普查区块组或区域等术语,它们可能更难找到和使用,尤其是如果您不熟悉 Shapefile、FTP 和 ETL 等术语。即使这样,你也必须通过美国人口普查 FTP 网站,下载各州的地理文件,并将这些文件加入人口普查数据。

最后,不用看地图,大多数人都知道邮政编码代表的区域比城市小,但比街区大。从概念上讲,他们觉得自己足够小,可以获得一个非常集中的世界视图,也足够大,可以捕捉足够多的趋势样本。

简短的回答是邮政编码很容易找到,很熟悉,并且提供了一个足够详细的世界视图(或者我们是这样认为的)。

也就是说,在地理空间分析中使用邮政编码会产生一些现实问题。一个例子是房地产,在许多城市或地区,有房屋列在一个‘期望’邮政编码中,尽管我们知道这些界限是任意的。这篇来自《哈佛商业评论》的文章也描述了 Airbnb 房源和房租上涨的类似现象。

简单来说,我们认为,如果一个邮政编码是“旅游性的”,意味着它有很多餐馆和酒吧,如果 Airbnb 的知名度增加,我们使用谷歌搜索指数搜索关键词“Airbnb”,那么该邮政编码的 Airbnb 供应的任何跳跃都可能是由 Airbnb 短期租赁需求的增加驱动的,而不是当地的经济状况。

更重要的是,使用邮政编码进行分析可以掩盖在不同空间尺度上发生的严重情况。弗林特水危机就是其中之一。密歇根州立大学助理教授 Richard Casey Sadler 的这篇文章详细描述了这个问题,并提出了关于邮政编码的类似观点(全文值得一读):

亚利桑那州立大学的教授托尼·格鲁贝希奇博士称它们为“世界上更加古怪的‘地理学’之一”哈佛大学教授南希·克里格(Nancy Krieger)博士和他的同事们呼吁他们的用于小范围分析。

最终,该州使用邮政编码来分析血铅统计数据,这有效地掩盖了实际问题。这是因为:

在弗林特的案例中,州政府的错误是因为“弗林特邮政编码”与弗林特市或其供水系统不一致。城市和水系统几乎 100%相连,也就是说,它们共享相同的边界…总之,该州分析中使用的弗林特邮政编码覆盖了弗林特周围八个不同自治市(七个乡镇和一个城市)的部分区域。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Map by Richard Casey Sadler

在弗林特的例子中,简单地观察不同的空间尺度或分析可能会更清楚地显示问题。对于公共卫生和关键服务等领域,理解和使用适当的空间比例至关重要。

我们还能做什么?

因此,如果您被迫放弃邮政编码分析,好消息是有几种不同的选择。

使用地址

首要的建议是使用真实的地址。当你知道一个地址串时,你可以使用地理编码器——或者谷歌或其他地图搜索引擎用来获取地址并将其转换为纬度和经度的服务。几乎每个主要的服务都为不同的语言提供了 API 和包装器来实现这一点。请记住,通常有一些清理数据的最佳实践,你将需要有效的地址串来这样做。其他工具如 Libpostal 可以帮助你规范化和解析你的地址字符串。

使用普查单位

您也可以使用人口普查单位,如人口普查区块组或区域。正如我提到的,寻找和收集大规模的数据并不总是容易的,但有许多新的工具正在变得可用。 CenPy 是一个 Python 库,允许你连接和查找人口普查数据(好的教程在这里),在这里你可以找到十年一次的人口普查或美国社区调查的数据。CARTO 还通过数据观测站提供人口普查和 ACS,该观测站在笔记本中用于完整的美国分析。

您还可以使用美国人口普查地理编码器找出特定地址位置的人口普查几何 id。你可以在 API 中传递各种参数,或者在 Python 中使用 censusgeocode 包。

在收集地址数据时,您可以轻松地将人口普查区域或街区组 ID 添加到该条目中,并在数据中使用该 ID 而不是邮政编码字段。这将允许您进行与之前相同的聚合,只是在更合适的地理范围内。

使用自己的空间索引

最后,现在有越来越多的地理空间索引工具。谷歌用 S2 单格,你可以用四键索引网格单格,优步用 H3 hexbins 。所有这些库的好处是父单的子单被父单更均匀地包含,以避免空间重叠问题。只要您有纬度和经度(这将需要地理编码),您就可以使用各种各样的库之一为该记录分配一个 ID。

使用空间索引有两个主要优点。首先,您不会被锁定到任何特定的边界类型,您可以在地球上的任何地方使用相同的研究单位。只要基础数据相同,您就可以将曼哈顿中城的某个单格的趋势与尼日利亚拉各斯的某个单格的趋势进行比较。

*外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Uber H3 Cells*

第二是敏感数据的匿名化。考虑到地址数据可能很敏感,您可以创建一个数据管道,只需读取传入地址,对其进行地理编码,分配一个空间索引,然后将该索引数据传递到一个单独的表中,然后您可以根据需要存储或删除地址数据。

使用空间数据可能很困难,但数据和工具的可用性使其变得更容易访问。通过使用正确的空间比例并放弃邮政编码级别的分析,您可以提高见解的质量并创建更有意义的结果和分析。

Matt Forrest 在 CARTO 工作,过去 9 年一直从事空间数据科学方面的工作。

别等了!开始使用异步并等待!

原文:https://towardsdatascience.com/stop-waiting-start-using-async-and-await-18fcd1c28fd0?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Harry Knight on Unsplash

介绍

对我们数据科学家来说,最重要的因素是数据。我们如何把我们需要的数据输入到我们的程序中?我们通过一些 I/O 操作来做到这一点,如查询数据库、从磁盘加载文件或通过 HTTP 请求从 web 下载数据。这些 I/O 操作可能需要相当长的时间,我们只是在等待数据被访问。当我们必须加载多个文件、执行多个数据库查询或执行多个 HTTP 请求时,情况会变得更糟。大多数情况下,我们按顺序执行这些操作,这导致执行 100 个 I/O 操作总共要比执行单个操作多花 100 倍的时间。现在等待不仅令人讨厌,而且成为一种真正的痛苦。但是等待,不要太久:),在我们启动另一个完全独立的请求之前等待请求的响应有意义吗?或者举一个日常生活中的例子,当你给两个人发邮件时,你会等到收到第一个人的回复后再给第二个人发邮件吗?我想不会。在本文中,我想向您展示如何使用 Python 中的异步 IO(简称 AsyncIO)编程范例来显著减少 IO 绑定问题的等待时间。我不会过多地探究技术细节,而是让它保持相当基本,并向您展示一个小的代码示例,希望这有助于您的理解。

问题是

假设我们想从一个服务器下载三个不同的文件。如果我们按顺序执行,大部分时间我们的 CPU 是空闲的,等待服务器响应。如果响应时间占主导地位,那么总执行时间就是各个响应时间的总和。示意性地,这看起来像图 1 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Picture 1 showing the sequential execution flow and time.

我认为空闲的 CPU 听起来不太理想。按顺序发送请求,等待所有请求完成,然后组合所有响应,这样不是更好吗?在这种情况下,再次假设响应时间占主导地位,总的执行时间大致是所有请求中最大的响应时间。这示意性地显示在图 2 中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Picture 2 showing the idealized concurrently send non-blocking request execution time.

请注意,蓝色条只是显示了发送请求和响应可用之间的时间。在这段时间内,我们不应该只是有一个空闲的 CPU,而是应该利用它来执行一些工作。这正是我们在这里所做的。当一个请求的响应到达时,我们已经处理了它,同时还在等待其他响应的到达。听起来很棒,不是吗?那么我们如何编写利用这一点的代码呢?正如在介绍中已经说过的,我们可以使用 AsyncIO 来达到这个目的。

解决方案

异步是一种更高级的编程范式,在这种情况下,您开始一项任务,虽然您没有该任务的结果,但您做了一些其他工作。这样,尽管在单个进程中使用单个线程,AsyncIO 还是给人一种并发的感觉。实现这一点的神奇要素是事件循环、协程和属于协程的可应用对象——对象、任务和未来。非常简单

  • 一个事件循环协调一个可应用对象的执行和通信。没有事件循环,我们就不能使用 awaitables,因此,每个 AsyncIO 程序至少有一个事件循环。
  • 本地协程是用异步定义定义的 python 函数。你可以把它想象成一个可暂停的函数,它可以保持状态并从暂停状态恢复执行。你可以通过调用wait来暂停一个协同程序。通过暂停,它将控制流释放回事件循环,从而使其他工作得以完成。当 awaitable 的结果就绪时,事件循环将控制流交还给协程。调用协程会返回一个协程对象,必须等待它才能得到实际结果。最后,重要的是要记住你只能在一个协程内调用 await*。*您的根协程需要通过阻塞调用被调度到事件循环上。

下面是一些非常基本的代码,希望有助于您的理解

*import asyncioasync def sample_coroutine(): return 1212async def main_coroutine(): coroutine_object = sample_coroutine() # With await, we stop execution, give control back to the # eventloop, and come back when the result of the # coroutine_object is available. result = await coroutine_object assert result == 1212# Blocking call to get the event loop, schedule a task, and close # the event loop asyncio.run(main_coroutine())* 

如果你对更全面的介绍感兴趣,我向你推荐这个、这个和那个。

这个例子

理论够了,来试试吧。使用原生协程的先决条件是 Python 3.5+,但是 asyncio 发展很快,所以我建议使用最新的 Python 版本,在撰写本文时是 3.7+。举个例子,我下载了几张狗的图片。为了进行比较,我以同步和异步方式进行了相同的操作。为了执行 HTTP 请求,我将请求用于同步部分,将 AIOHTTP 用于异步部分。我有意省略了任何类型的错误检查,以避免重复代码。

代码

所以让我们首先安装必要的模块

*pip install aiohttp requests* 

接下来,我导入模块并添加一个小的助手函数

*import asyncio import time from typing import Any, Iterable, List, Tuple, Callable import os import aiohttp import requestsdef image_name_from_url(url: str) -> str: return url.split("/")[-1]* 

现在,给定一组图像 URL,我们可以通过以下方式将它们顺序下载并存储为一个图像对列表(图像名,字节数组)

*def download_all(urls: Iterable[str]) -> List[Tuple[str, bytes]]: def download(url: str) -> Tuple[str, bytes]: print(f"Start downloading {url}") with requests.Session() as s: resp = s.get(url) out= image_name_from_url(url), resp.content print(f"Done downloading {url}") return outreturn [download(url) for url in urls]* 

我添加了一些打印语句,这样您就可以看到执行该函数时会发生什么。到目前为止还不错,到目前为止没有什么新的,但现在来了异步版本

*async def donwload_aio(urls:Iterable[str])->List[Tuple[str, bytes]]: async def download(url: str) -> Tuple[str, bytes]: print(f"Start downloading {url}") async with aiohttp.ClientSession() as s: resp = await s.get(url) out = image_name_from_url(url), await resp.read() print(f"Done downloading {url}") return out return await asyncio.gather(*[download(url) for url in urls])* 

啊哈,这看起来几乎是一样的,除了所有那些异步和等待关键字。让我给你解释一下这里发生了什么。

  • download_aio 是一个协同例程,因为它是用异步定义定义的。它必须是一个协程,因为我们在其中调用其他协程。
  • 下载协程中,我们使用异步上下文管理器(async with)创建一个会话对象,并等待 get 请求的结果。此时,我们执行潜在的持久 HTTP 请求。通过等待,我们暂停执行,给其他任务工作的机会。
  • asyncio.gather 可能是这里最重要的部分。它执行一系列合适的对象,并返回收集结果的列表。有了这个功能,你可以达到一种并发的感觉,如图 2 所示。使用 gather 不能调度太多的协程,它的数量级是几百个。当您遇到这种问题时,您仍然可以将调用划分为较小的块,然后逐个收集。像调用协程返回一个变量一样,调用 gather 也返回一个变量,您必须等待它才能得到结果。

让我们把它们放在一起,运行它,然后比较下载狗狗需要多长时间。

结果呢

下面是执行同步和异步 Http 调用的代码。

*if __name__ == "__main__": # Get list of images from dogs API URL = "https://dog.ceo/api/breed/hound/images" images = requests.get(URL).json()["message"]# Take only 200 images to not run into issues with gather reduced = images[:200] st = time.time() images_s = download_all(reduced) print(f"Synchronous exec took {time.time() - st} seconds")st = time.time() images_a = asyncio.run(donwload_aio(reduced)) print(f"Asynchronous exec took {time.time() - st} seconds")* 

在稍微简化的版本中,同步版本打印出

开始 1,结束 1,开始 2,结束 2,…,开始 200,结束 200

这反映了图 1 所示的流程。异步副本打印出如下内容

开始 1,开始 2,…,开始 200,结束 3,结束 1,…,结束 199

这反映了图 2 中所示的内容。太棒了,这就是我答应你的。但我认为单凭这一点并不太有说服力。所以,把最好的留到最后,让我们看看执行时间。在我的机器上下载 200 张图片,同步调用需要 52.7 秒,而异步调用需要 6.5 秒,大约比快 8 倍。竟有人会说出这种话来!亏你(他)说得出口加速会因单个项目的最大下载时间而异,这取决于项目的大小和服务器在不减速的情况下可以处理的负载。

外卖

  • 对于您希望加速的 IO 相关问题,请使用 AsnycIO。有许多 IO 绑定操作模块,比如 Aioredis 、 Aiokafka 或 Aiomysql 等等。要获得更高级别的异步 API 的完整列表,请访问 awesome-asyncio 。
  • 您只能等待协程中的协程。
  • 您需要通过调用 python 3.7+中的 asyncio.run 或 asyncio.get_event_loop()来调度您的异步程序或“根”协程。python 3.5–3.6 中的 run_until_complete。
  • 最后也是最重要的:不要等待,等待!

希望你已经学到了一些新东西,可以减少等待时间。感谢您的关注,如果有任何问题、意见或建议,请随时联系我。

仓储+商业建筑:负荷预测

原文:https://towardsdatascience.com/storage-commercial-buildings-part-1-load-forecasting-8d3c4d1e083d?source=collection_archive---------31-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by chuttersnap on Unsplash

长期以来,储能一直被吹捧为“银弹”,它将通过一长串有前途的价值主张(例如,与间歇发电、能源套利、辅助服务相结合)来解决我们所有的能源挑战。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在过去几年中,我们看到前台和后台级别的存储部署都在快速增长。除了 2016-2017 年几个巨大的公用事业规模的电池部署,非住宅存储系统是增长的关键来源。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: Wood Mackenzie U.S. Energy Storage Monitor Q3 2019 (link)

储能市场尚未爆发,技术和成本挑战仍阻碍着广泛部署。然而,我们非常接近拐点,这将为一个全新的技术类别打开大门,这将永远改变更广泛的能源领域的所有方面。从这个项目开始,我们寻求更好地理解这个巨大的技术浪潮(所以我们不要错过它!)🌊

项目目标

为了更好地了解商业存储领域的挑战和机遇,我们在商业建筑环境中模拟了一般电池存储单的调度。

具体来说,我们试图回答以下问题:

  1. 商业建筑负荷(千瓦)的关键决定因素是什么?
  2. 商业存储的价值主张在哪些地区最强?
  3. 是什么阻碍了现有商业规模存储公司的高速增长?
  4. 在大型办公楼中调度电池时,需要考虑哪些关键因素和限制?

我们将首先探索商业建筑负荷,然后使用机器学习技术为我们感兴趣的地理位置生成预测(本文)。然后,我们将使用建筑负载预测作为输入来测试和改进我们的存储调度算法(即将推出⏳).

概述:商业负荷预测

仪表后储能单最重要的变量之一是建筑的每小时能耗(单位为 kWh)。为了对大型商业建筑中的仪表后能量存储单的最优调度进行适当建模,我们需要对建筑的负荷进行多年预测。

我们采用监督学习技术(特别是多项式回归)来预测这个商业建筑负荷。本文的其余部分将介绍这个过程的细节。

1.识别关键驱动因素💭

我们打算使用监督学习技术(特别是多项式回归)来预测这个商业建筑负荷。商业建筑负荷取决于各种内部和外部因素,包括:

  • 小时
  • 温度
  • 尺寸(空间体积)
  • 照明类型和消耗
  • HVAAC 类型和消耗量
  • 雇员人数
  • 工作时间
  • 电动汽车的数量
  • 房间数量
  • 诸如此类…

不幸的是,这些数据很难在训练集中获得。出于此分析的目的,我们采用了一种简单的方法来预测单个建筑的商业负荷,方法是使用外部空气温度(OAT)和时间作为独立变量。

具体来说,我们将使用能源部的参考建筑 7(“办公室”)长期能源消耗&室外空气温度数据集(来源),其中他们已经发布了每小时建模的建筑负荷数据,以及相应的时间戳和 OAT。

2.探索关系🔎

仅仅通过挖掘我们的独立变量(一天中的某个时间,温度)和相关变量(建筑负荷)之间的关系,我们就可以确定清晰的模式和见解。

时间序列(温度、负荷)

为了获得训练数据的鸟瞰图,我们绘制了温度和负载的每小时时间序列数据。将这两张图表放在一起看,你已经可以开始画出它们之间的关系了(极端温度=更高的建筑负荷)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

温度与负载

当我们观察温度和建筑负荷之间的关系时,事情变得更有趣了。一般来说,建筑负荷似乎在极端天气(0–20℉和 80–100℉)期间达到峰值,很可能是由于制冷和供热增加&。这并不奇怪,因为暖通空调系统(供暖、通风和空调)占办公楼总能耗的 28%。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们确实注意到许多情况,尽管温度极高,但能源消耗保持相对平稳。这有点违反直觉,值得在未来研究。

小时与负载

小时与构建负载之间的关系也相当直观(尽管模式相对来说不那么“清晰”)。在典型的工作时间(上午 9 点到下午 5 点)能耗水平较高,从下午 6 点开始能耗水平显著下降(也称为“快乐时光”)🍸)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个意想不到的观察结果是,早上 5 点到 8 点之间的能耗水平明显高于夜间/黎明时段。一种假设是办公大楼可能在员工到达前几个小时就开始制冷/制热(有点怀疑,因为这意味着大楼需要 4 个小时制冷/制热😒).无论哪种方式,绝对值得一看后🕵️‍♀️

3.建模🤖

基于#2 中的探索性分析,很明显,因变量和自变量之间的关系是非线性的。因此,我们将使用带有正则化的多项式回归作为我们的模型。

为了确定超参数的最佳组合(即多项式次数、正则化 alpha),我们使用了 scikit-learnGridSearchCV 功能。

[关于评估指标的更多详细信息即将发布…🔃]

4.结果📊

为了预测我们感兴趣的位置(华盛顿州西雅图市)的建筑负荷,我们需要获得该城市的每小时温度数据。幸运的是,这在来自 Kaggle ( 来源)的历史整点天气数据 2012–2017数据集中很容易获得。我们使用这些数据(经过一些预处理)作为我们在#3 中训练的回归模型的输入,来预测相应的每小时建筑负荷。

虽然得到的每小时负载形状与我们从 OpenEI 得到的训练数据集有些不同,但总体趋势与我们在#2 中观察到的一致。

工作时间的负载峰值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

极端天气下的负载峰值(主要在寒冷的冬天):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结论

由于商业建筑的能耗往往在工作时间达到峰值(尤其是在极端天气事件期间),我们可以得出初步结论,气温变得非常热(例如亚利桑那州、奥斯汀、丹佛)或非常冷(例如纽约、芝加哥)的大都市更有可能成为有吸引力的市场。

考虑到预测值通常有意义并且与训练数据一致,我们开始使用该数据集作为输入来测试存储调度模型。同时,我们打算进一步完善和测试我们的建模,以生成更完善的每小时负载形状。

正如在开始时提到的,这绝对是一个非常简单的商业站点负荷预测模型,因为在现实中有许多其他变量决定着建筑物的能耗。虽然我们可以在 DoE 的参考建筑中保持相同的假设,用于本项目的实际目的,但扩展我们的回归模型以考虑额外的变量(在可能的范围内)可能是值得的。

上面分析的 GitHub repo 可以在这里找到。

项目贡献者: Jae Beom Bae , Niel Patel

商店不会去任何地方:人工智能授权的客户真正想要什么

原文:https://towardsdatascience.com/stores-arent-going-anywhere-what-ai-empowered-customers-really-want-6f06ca007e5f?source=collection_archive---------30-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Mike Petrucci on Unsplash

网上购物更快、更方便,提供了更多的种类和选择,而且不会有烦人的推销人员来推销东西。实体店面对新一代客户,他们拥有人工智能和技术知识,有着多样化的需求和高期望。无论我们关注的是一家小型品牌商店还是整个购物中心,零售业要想生存下去,就必须提供全新的体验,以便为越来越多与渠道无关的一代客户提供服务。那些设法适应的商店将提供如此特别的东西,以至于任何电子商务平台都无法与之竞争。

你可以在网上买到任何东西。从杂货(亚马逊生鲜)到时尚(Stitchfix),从汽车(Carvana)到眼镜(Warby Parker)。你想要的一切只需几下鼠标。很自然,我们不得不期待一场零售业的末日,因为商店正在关门,购物中心越来越空,似乎没有人再去把食品杂货带回家了。这是零售业末日的普遍说法。

这里有些事实可能会让你大吃一惊:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

购物中心没有消亡。

在世界范围内,购物中心的数量正在增长而不是放缓。主要是在亚洲,对线下零售空间和商店概念有巨大的需求。(在科尔尼)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

去商店仍然是零售的首选

目前,电子商务仅占美国零售总额的 16%,预计到 2030 年,这一数字将接近零售总额的三分之一。这意味着:在相当长的一段时间内,三分之二的零售销售不会发生在网上。(在科尔尼)

千禧一代非常喜欢在商店购物

只是不是任何商店。在美国的所有世代中,千禧一代对今天的零售空间持最积极的看法,57%的人说他们觉得商店更有吸引力。40%的 X 世代同意。此外,更令人惊讶的是,56%的千禧一代欢迎更多的个人店内互动,而老一辈人则觉得这很烦人。(来源)

但是等等,还有这个:

商场空无一人。2018 年是美国购物中心空置率最高的一年。各地的传统实体店都在关门。

年轻的购物者对流动性有很高的期望。越年轻的客户越不了解渠道,这意味着他们不在乎通过哪种方式从你这里购买。他们希望在线和线下、信使、电子邮件、网站聊天机器人和店内对话之间实现无缝转换。

电子商务正在扼杀当地企业及其商店。亚马逊杀了当地的书店,成千上万。现在,他们瞄准了你的杂货,并将淘汰较小的杂货连锁店。中国的同行也会如此。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Markus Spiske on Unsplash

显然,我们不会很快看到实体店或购物中心的终结,但我们需要明白,我们正在目睹完全不同的购物期望的出现。这种转变要求企业思考,面对习惯于提高便利水平的人工智能客户,这意味着什么。

大约 20 年前,亚马逊的杰夫·贝索斯对实体店做了一个预测,在他看来,只有当实体店提供即时便利或某种形式的娱乐价值时,实体店才能生存。事实证明他是正确的。顾客关心的是位置、速度、产品的多样性以及在它们之间选择的认知便利性。因此,毫不奇怪,特别是杂货店已经把消除结账过程或至少使其更快作为目标。

未来的商店永远不会看到人们排队。

在旧金山,亚马逊最近开设了几家名为 Amazon Go 的小型杂货店。在这些商店里,当你走进去的时候,用你的智能手机扫一个码。接下来,你抓起所有你想要和需要的东西,放进包里,然后走出来。没有更多的支付过程,因为你被数百个传感器和摄像头跟踪,当你走出去的时候,这些传感器和摄像头会自动为你的亚马逊账户充电。我亲自试过几次,可以确认是绝对无摩擦的体验。当然,亚马逊不是唯一一家试图取消支付处理的零售商。尤其是中国遥遥领先。在那里,你可以用你的脸、你的短信服务或你的阿里巴巴账户付款。

未来的商店永远不会缺货。

大胆的声明,我知道。但是,鉴于商店收集的数据质量不断提高,以及现在有无穷无尽的机会来观察、补充和预测产品需求,商店几乎不可能(或至少不太可能)用完某种产品。为了实现这一点,已经有几种技术问世。我们刚刚谈到的一个是天花板上堆放着摄像机和传感器,以便随时观察一切。沃尔玛正在他们所谓的沃尔玛智能零售实验室进行测试。正如预期的那样,摄像头检测产品及其可用性,从而实时提高补货过程的效率,但真正有趣的是这一应用的结果。这一过程取代的不是销售助理,而是经理。他的任务完全由算法接管,但机器人补货仍然太复杂,甚至无法与地板上的客户交谈。

未来商店的首要目标不是卖东西。

虽然直到今天,商店仍在衡量他们是否、多久以及在不久的将来让顾客购买多少产品,但这一成功指标将不得不转向更复杂的衡量方法。零售空间的目的将不再是展示和销售,而是让顾客体验和谈论。如果你看看线上到线下的品牌和他们的展厅概念,你会发现,他们不仅不鼓励你在商店里买东西,他们实际上并不关心你是在线上还是线下购买。在许多情况下,在商店购买的过程与网上购买非常相似,因为销售代表使用相同的界面来获得想要的产品。通常,他们还会要求您提供电子邮件地址或电话号码,以便识别和跟踪您。

这让我们想到了未来十年零售业最重要的转变:

商店将充满技术,使识别、跟踪、监控、测试和观察顾客成为可能。这方面已经到位的例子有沃尔玛的智能零售实验室,或者前面提到的亚马逊 Go。此外,有趣的案例如 b8ta 或 Target Open House 都旨在观察潜在客户与新产品的互动,并了解他们的问题和障碍。

沃尔玛还获得了一项心率监测器的专利,这种监测器被嵌入顾客推过商店的购物车中。这项技术能够区分紧张的顾客和兴奋的顾客,并告知商店服务员应该和谁交谈以及如何交谈。(来源)

沃尔格林和其他一些公司用屏幕取代了商店冰箱的玻璃门,屏幕上还有摄像头,可以跟踪顾客的虹膜运动,提供顾客的兴趣、偏好和年龄等信息。(来源)

所有这些都只有一个目的:为购物者提供最顺畅、最个性化和最真实的体验。我们谈了很多关于摩擦和效率,摆脱支付过程等等。现在让我们看看其他组件:

只适合我:个性化、完全定制、个性化的体验

电子商务从一开始就一直在分析客户在网上留下的数据踪迹。我们现在看到越来越多的尝试以类似的方式跟踪商店和零售空间中的客户数据。从无处不在的摄像头和传感器到心率监视器、虹膜跟踪和增强现实功能。我们看到有人试图通过客户的联系信息来识别他们,以建立关于他们长期购物习惯以及个人偏好的数据库,从而在他们走进商店时为他们提供定制体验。今天,当我们走过购物中心时,我们看到的商业广告和广告大多是普通的,是为了迎合大量的观众。在不久的将来,我们将会看到广告和横幅广告根据站在他们面前的人的个人喜好进行调整。

第一批数字价格标签正在实施,并允许定制产品信息。想象一下,在你当地的杂货店拿起一块鸡肉,它下面的屏幕开始向你显示鸡肉来自哪里、谁饲养它以及它如何生活的确切信息。对于你旁边拿起同样鸡肉的人来说,显示屏可能会显示最好的低碳水化合物鸡肉食谱。他们怎么知道你想看什么?第一,你购物篮或购物车里的其他产品比你想象的透露了更多关于你的细节。如果你所有的其他产品都是本地养殖的有机产品,你可能会关心你的鸡肉来自哪里。如果你的购物车里有蛋白质棒和一本健身杂志,你更有可能想了解健康食谱。第二,如果一家商店设法用面部识别软件识别你,它就有可能调出你购买过的所有购物车和购物篮。根据你的历史来个性化你的购物体验的机会是无穷无尽的。

因为预测是可能的,所以它将被部署。因为它将无处不在,客户将习惯于被预测。他们将习惯于别人问候他们的名字,他们将期望被记住,他们将要求所呈现给他们的东西具有高度的相关性。

帮助我成长:真实、教育品牌宗旨

你卖的只是开始。在大多数产品品牌中,有难以置信的有价值的未使用的知识。杂货店将成为健康顾问。购物中心将成为娱乐、教育、医疗和个人成长的中心。每个参与体验的个人都将提供一个高度策划的、知识增长的、个人的体验,这是网上无法提供的。

品牌需要问自己,他们服务的最终目的是什么。如果你制作太阳镜,你是想帮助人们看起来更时髦吗?如果是这样,你的品牌不仅仅是太阳镜业务,你也是咨询和发现业务,这就是人们来找你的原因。他们不想买眼镜,他们想看起来很帅。如果你从事空气净化器行业,人们来找你是因为他们担心自己呼吸的空气。那么你是在医疗保健、健身、生活方式或清洁行业。免费的瑜伽课从来没有伤害过任何生意。无论哪种方式,客户都希望向你学习,他们重视你的建议,信任你的专业知识。在美国,49%的千禧一代希望在零售场所看到研讨会和专家讲座。

让我分享一下:社交媒体就绪,值得 Instagram 的空间和设计

伟大的经历值得分享。像 Platform LA T1 这样的新购物中心概念为人们提供了视觉上准备好的空间,通过在不同的社交媒体渠道上分享他们的体验来策划他们的体验。如果购物中心没有 Instagram 帖子,可能是因为它没有提供可分享的体验。如果它不提供这种体验,那么它将无法生存。因此,可治愈性将成为购物中心或商店成功的一个非常重要的指标。虽然今天只有 12%的消费者认为在社交媒体上接触品牌对他们如何感受或思考该品牌有任何意义,但现实是,随着对品牌的影响力来源变得民主化,在线分享体验将变得更加重要。品牌从未完全掌控过自己的品牌形象,但今天和明天,消费者将会把品牌声誉掌握在自己手中。影响者将更加有机地成长,并要求品牌更加真实。

商店和购物中心哪儿也不会去,但它们会戏剧性地改变面貌。实体零售没有死亡,它正在重生。有了数据和人工智能支持的、高度个性化的、方便的、有教育意义的、值得分享的店内体验,实体零售空间将为客户已经在网上期待的东西增加难以置信的价值。

阅读更多 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

  • 【https://www.atkearney.com/retail/article? /a/购物中心的未来-文章
  • https://www . chain storage . com/technology/study-young-customers-show-shopping-in-store-shopping-preferences/
  • https://www . the verge . com/2019/4/25//亚马逊-仓库-履行-中心-生产力-解雇-终止
  • https://info . retailspacesevent . com/blog/10-crazy-technologies-about-transform-physical-retail
  • https://www . fast company . com//inside-the-l-a-mall-that-defying-the-retail-启示录

来自市政分析世界的故事

原文:https://towardsdatascience.com/stories-from-the-world-of-municipal-analytics-d3dc?source=collection_archive---------14-----------------------

我们的城市变得越来越智能

随着地方政府开始认真对待大数据,将其作为一种更好地了解公民、提高项目和政策的有效性以及节省资金的手段,分析领域在美国各城市继续获得发展势头。采用分析实践的城市比以往任何时候都多,这增加了对分析专业人员的需求,以监督这些新技术在当地的采用、部署和评估。在成功实现的项目中,许多都经历了多次失败和迭代,以实现与改善治理相关的目标。随着机器学习和人工智能等复杂技术的出现,人们需要理解更复杂的假设和偏见,这些假设和偏见可能会违背为舒适人群和弱势人群服务的目标。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以在分析的帮助下解决的公民问题可能会通过内部资助的问题来源工作到达当权者的办公桌,但在参与式社区的情况下,需要优先考虑的问题通常会自己出现。为了与分析专业人员一起解决公民问题,似乎不仅必须存在对分析应用的明确需求,而且更重要的是,必须获得拥有决策权的利益相关方的认可,从人才和技术角度获得适当的资源,以及成熟、经过审查的数据。公共部门的创新努力往往会遇到官僚主义和低风险容忍度,这就是为什么较小规模的分析项目试点迭代在展示初始价值方面具有重要地位。尽管该领域存在固有的障碍,但我对市政分析和数据科学的潜力感到非常兴奋。事实上,我们在全国已经看到了许多成功的例子。为了激发您对这一不断发展的领域的兴趣,并希望您能够参与并了解您所在的市政当局在大数据应用于政策方面的进展,我将总结一些我最喜欢的成功故事,让您了解哪些事情已经成为可能,这是由成功实施公民分析的领先国家资源激发的。

烟雾探测器+纽奥良

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: NOLA Office of Performance and Accountability

新奥尔良消防局认识到,当一个家庭安装了烟雾报警器时,因火灾死亡的风险会减少一半,因此决定向有需要的居民免费发放救生烟雾报警器。该市通过其绩效和责任办公室建立了数据能力,该办公室建立了一个数据团队,并决定利用预测分析模型来确定房屋的属性,这将有助于该小组了解每个物业对新烟雾报警器的需求及其整体火灾死亡风险属性。该办公室尚未收集到此类数据,但当一名研究人员在美国人口普查局的美国住房调查中发现一个关于烟雾报警器的问题,并将其与该局的美国社区调查数据相结合时,该项目得以启动。该小组能够确定有助于预测新警报和高度易受影响房屋需求的关键特征。他们能够利用这一点来达成一个逐块烟雾探测器推广和分配计划。两年后,8000 个新的、针对风险的烟雾报警器问世,该部门得以庆祝这一出色的工作,肯定了分析的力量,并激励美国红十字会和 DataKind 在全国复制他们的项目。

参见 预测火灾风险:从新奥尔良到全国范围的工具 (哈佛大学灰中心)

早期警方介入+纳什维尔/夏洛特

芝加哥大学数据科学和公共政策中心开发的早期警察干预系统使警察部门能够识别那些可能发生不良事件的人,以便为他们提供培训、咨询和类似资源。该小组跟踪“不利事件”,这些事件可能以公民或同事投诉、使用武力、事故或伤害的形式出现。该系统用于在部门数据中查找不良事件的预测因素。这包括跟踪警官行为的各种实例,这些实例可能揭示警官的潜在倾向,可能对不良事件的发生有影响,也可能没有影响。系统还学习管理者如何对系统的发现进行优先化或去优先化。传统系统揭示了一个可行性问题,因为它们可能通过标记整个警察队伍中几乎 70%的人来捕获 80%的有不良事件的警察。鉴于许多警察部门的资源已经非常有限,建议一个部门持续地重新培训 70%的警力并不是非常有用。在 UChicago 设计的新系统仍然标记了 80%的警力,但能够锁定 30%最需要干预的警力,并根据历史表现给每个警官一个综合风险评分。像这样的系统显然不是为了取代警察主管做出判断的责任,而是可以帮助通知它,实施的长期影响仍在测量中。

参见“ 警察项目更新:扩大和实施早期干预系统”(UChicago 的数据科学和公共政策中心)

房东歧视+纽约市

纽约市禁止基于种族、性别和收入来源歧视潜在租户……理论上。尽管有《纽约市行政法》第 8 条,基于收入的歧视仍然是报道最多的住房相关问题之一。纽约市长数据分析办公室和人权委员会决定建立一个模型,通过确定房主最有可能非法拒绝潜在租户购买住房券的地区,更有效地部署调查资源。研究人员假设,针对犯有此类行为的大型物业管理公司将产生涓滴效应,鼓励较小的潜在违法者遵守法律。通过确定较大的违规者,该模型更有效地揭露了非法住房做法,使人权委员会能够更好地确定其工作流程的优先次序,并提高纽约市遏制住房歧视的能力。

见项目“ ”。纽约市人权委员会与 MODA 合作,协助确定潜在收入歧视的地点”(MODA 纽约市 GitHub)

城市破坏+新奥尔良

新奥尔良在 2005 年遭受卡特里娜飓风破坏的许多地区在飓风过后的许多年里都没有受到这座城市的影响,当市长米奇·兰德鲁(Mitch Landrieu)在 2010 年上任时,决定对城市周围的财产采取改造或拆除行动以弥补损失是一个关键的讨论话题。该市的数据中心 OPA 的任务是开发一种使用分析的性能管理工具来帮助解决这一问题。他们开发了 BlightSTAT 和 Blight Scorecard,以应对积压的 1500 处房产,这些房产正等待住房法规执行机构做出决定,要么出售房屋,要么继续拆迁。开发的系统允许中级主管外出并对物业进行评分,提高了评估过程的速度和一致性。在这种情况下,像许多情况一样,人类的判断是公民分析过程中不可替代的因素。拆除建筑物的决定是由先进的数据系统告知的,而不是被其取代。这一过程中的书面交流基本上被法规执行部门的技术消除了。反过来,等待裁决的积压财产也基本上消除了。

参见 代码强制消减工具 (新奥尔良市)

参见“ 利用时空数据对有枯萎风险的物业进行早期检测”(UChicago 的《社会公益数据科学》)

食品检查+芝加哥

Chicago Restaurants Failing to Pass Inspections: 2015–2016 (https://chicago.github.io/food-inspections-evaluation/)

尽管对食品制备、储存和服务有着严格的规定,但在一个城市中监控食品安全确实具有挑战性,但分析模型可以帮助城市官员有效地分配专业知识和财政资源来完成这项任务。芝加哥有 7300 多家餐馆、数千家杂货店和其他食品摊贩,它们共同负责这座城市的整体健康。也就是说,只有大约 35 名检查员负责 15,000 多家食品企业。该市决定在分析的同时提高检查绩效,而不是简单地雇佣更多的检查员。芝加哥创新与技术部与公共卫生部合作,预测一家餐馆未通过检查的风险。最终的模型使该市能够比人工过程提前 7 天发现违规行为,并且在研究过程中,该团队创建了一个透明的、社区可访问的食品检查跟踪器,并根据实时检查结果进行更新。

用食品检验预测更快出结果 (哈佛大学灰中心)

参见 食品检验 (芝加哥数据门户)

交通死亡人数+纽约市

随着城市人口的增加,新技术已经为居民如何穿越城市的革命让路,随着这种变化,城市必须调整其系统和法规,以确保公民的安全。丰富的交通数据和新的分析模型为城市提供了一种低成本的途径来评估和改善交通系统。作为通过数据分析解决交通问题和低效率的全球愿景零运动的一部分,纽约市在 2015 年与 DataKind 合作,评估所有新交通改善项目的风险和某些结果的可能性。旨在改善交通模式和减少延误的项目可能与提高安全性相关,也可能与安全性相权衡。在克服了有限有用数据的速度障碍后,该团队能够制作一个模型,绘制暴露地图,以更准确地判断特定街道设计的有效性。该模型使纽约市交通局能够预测特定地区特定时间的活跃汽车数量,以帮助优化交通模式和提高道路安全。

参见“ ”更好的数据能否让零交通死亡成为现实? (哈佛的灰烬中心)

其他被彭博慈善机构“有效城市”认可的前瞻性城市

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A Bloomberg Philanthropies Map of Certified Cities

波士顿市市长马蒂·沃什在他的办公室里安装了一个类似芬威公园记分牌的 T2 大屏幕,汇集了一系列关键的城市绩效指标,如接听 311 电话的平均时间、救护车响应时间、犯罪统计数据以及与基准和目标进行比较的整体成功得分。堪萨斯市市长 Sly James实施了一项季度市民满意度调查来指导政策倡议,第一批由市民关注的问题积极推动的资助项目已经以债券的形式到位,用于资助毁坏建筑的拆除以及道路、桥梁和人行道的翻新。洛杉矶市长埃里克·加希提发布了清洁街道指数,该指数列出了需要清洁的街区,在发布该指数一年后,不清洁街道减少了 82%。路易斯维尔市市长格雷格·菲舍尔(Greg Fischer)推出了一个公民分析创新中心和合作空间,即 Louielab,以鼓励合作,并优先开放所有公共记录作为城市默认设置。圣地亚哥市长 Kevin Faulconer 帮助实现了一个名为 Get It Done 的应用程序,以方便市民报告城市公害,并向市民报告公害修复后的照片。市长穆里尔·布瑟发起了一个名为DC 实验室的内部数据科学研究团队,致力于将科学思维应用到城市的日常运作中,他们因发布一项具有里程碑意义的研究而闻名,该研究是关于佩戴在身上的摄像头在使用警力方面缺乏效力。

未来:智能城市需要智能政府

Click the interactive visualization above for sample solutions & results

只有通过不同类型的利益相关者之间的合作,所有人的最光明的未来才会到来,而参与的不同部门行为者既可以相互传授宝贵的经验,也可以相互学习新的知识。

智慧城市技术,无论源自哪个行业,都必须与健全的政策举措相结合。例如,基础设施投资,倾向于长期的、昂贵的项目生命周期,可以变得更加灵活,以应对不断变化的环境。将现有车道重新分配给行人和骑自行车的人,或者支持建立私人运营的通勤巴士服务,可能会更好地服务于一个拥挤的城市,而不是精心策划一个为期 10 年的地铁线路基础设施开发项目。否则,基于这种长期愿景的项目很容易出现可能会在项目中期发生变化的情况或问题,并且解决方案本身的大部分价值可能会随着时间的推移而丧失。

市政府不应该在私人部门行为者的筒仓中运作。公共部门有充分的理由希望拥有许多智能技术应用和程序,但绝对有理由允许私营部门投资和政府项目财务回报的空间。应该由城市来确定哪些领域退一步是有意义的,并为企业、大学、基金会和非营利组织发挥作用腾出空间。许多城市遵循的“总体规划”方法并没有像那些将自己定位为潜在公私合作伙伴关系的资源中心和生态系统中心的城市所部署的项目那样取得成本效益上的成功。

利用智能的数据驱动系统提高公民参与度也有很大的潜力。公民和政府官员之间真正的双向对话可以通过互动应用和社交媒体来维持。决策者可以向公众关注的实时信息流敞开心扉,并将这些见解作为新政策的基础。因此,新技术和分析工作需要透明,以促进社区参与和信任。更大比例的人口应该上网,以增加获取相关信息的机会,这样城市就可以了解人口统计中的小众和主流意见。更好的信息系统和沟通渠道也有可能激发更积极的社区参与,如志愿服务、指导和其他积极的社区活动。

总之,我认为要真正实现数据驱动的智能城市,需要关注两个领域。公共部门必须找到一种方式,通过独特、创造性的激励计划,与私营部门争夺技术人才。城市还必须优先考虑网络安全,以保护新系统免受精通技术的坏人带来的风险,特别是在供水和电网等关键系统的情况下。似乎从市政技术事业的第一天起,这两个领域都需要加以考虑,以便经受住时间的考验。尽管存在风险,但我对市政部门越来越多地采用数据驱动系统和新技术持乐观态度,并迫不及待地继续阅读不同政府机构如何决定抓住眼前的机遇。

感谢阅读,

亚历克斯

请随时提出您的想法和问题,或者在 LinkedIn GitHubMedium上跟随我的数据科学之旅!

将电影存储到 pi (π)中

原文:https://towardsdatascience.com/storing-a-movie-into-π-960ffcab4eed?source=collection_archive---------29-----------------------

用π做数据存档值得吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

visual representation of φ*,* e and π as treemaps

多年来,关于 T2πT3,人们提出了许多比科学起源更浪漫的说法。所有这些都与无穷大有关,或者说,它的小数部分包含了所有其他从未设想过的数字序列。

这不是真的或者至少没人知道如何证明。即π的正规性的论证还不存在。

但是很多数学家相信π是一个正常数的事实,甚至不知道如何证明;那是因为目前所有的研究都指向这个方向。

因此,假设π是一个正常的数字,我们可以陈述如下:

  • 小数部分的数字是均匀分布的
  • 任何长度的数列都包含在π中。

这意味着我们可以在里面的某个地方找到我们的电话号码,或者,给定一个合适的编码,我们的名字或者这篇文章。

那么我们能在里面找到一部电影吗?是的,将电影和π编码成二进制字符串,我们最终可以在π中找到代表电影的比特序列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好吧……但是如果π真的包含了世界上所有的电影、文章和任何产生的信息,我们能找到它们并记下它们在π中的位置吗?

再说一次,是的,我们可以!那么为什么我们现在不这样做呢?

压缩

在π内寻找一个比特序列,以便只存储它第一次出现的位置,这是一种压缩,因为我们希望通过只存储一个数字内的位置而不是整个序列来节省空间。

但是为了有效,序列(即另一个数)第一次出现的位置(即一个数)必须小于序列本身。否则,我们使用的空间会比需要的多。

让我们算一下

我们想知道的是给定序列 {X₀, ₂, …} 在π中的平均位置是多少,以及该位置是否小于序列的值(或者它平均占用的空间是否更小)。

这个信息可以用下面的定理来检索:

如果{X₀、X₁、X₂、…} 是一个独立同分布在集合 m 素的 S 上的随机变量序列,则连续子序列*【𝜏】𝑆*ⁿ的期望首达时间由下式递归给出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中𝜏 最长的固有 suffix,也是的前缀。

例如,我们可以搜索序列“”,即 𝜏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如我们所见,该序列可以用 6 位数字来描述,但它在π中的位置需要 7 位数字()。序列“”可以在位置 ≈e[t]≈2⋅中找到。因此,存储“”的位置需要比序列本身更多的空间。

还要考虑到所有的 𝜏 认为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,子序列长度 n 呈指数增长。

结论

虽然在π内部“存储”一部电影是可能的,但假设是一个普通的数,在π内部寻找一个序列并存储其位置,无论从空间还是时间上都不方便。以统计方式保存位置比直接存储值需要更多的空间,并且这个空间量呈指数增长。

这显然不仅限于π,而是任何正常的数字。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用数据讲故事

原文:https://towardsdatascience.com/storytelling-with-data-40708c129f37?source=collection_archive---------22-----------------------

优秀的分析和可解释的洞察力的微妙艺术

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Storytelling with Data isn’t as whimsical. It does, however, provide the correct mental model. (Source Pixabay)

你的故事是什么?

纵观全球,我们正在以指数级的速度生产和消费数据。这只是事实。随着 5g 网络的到来,我们应该能够从 4g LTE 的 300 Mbs 处理高达 10 Gbs 的数据。这意味着,与人类历史上的任何时候相比,我们有足够的带宽从各种互联设备和嵌入式系统发送和使用更多的事件数据和指标。然而,你要问自己 “你的数据告诉你什么”?

当你考虑数据优先/数据驱动并在各自行业取得成功的公司(想想谷歌、脸书、微软)与收集数据并最终希望用它来解决未来某个时间点的业务目标的公司——但这些公司收集数据只是为了未来消费;目标和心态有天壤之别。

如果您正在积极地生产、消费和使用组织内生成的数据,那么企业内通常会有丰富的伴随数据文化,以及直接的公司范围的要求,即从各个垂直行业或业务部门发出和存储可用的数据。或者,不使用他们生产的数据的公司不知道数据的结构是否会给公司带来直接的好处,这将阻碍该公司未来根据他们的数据做出明智决策的能力。(参见我的另一篇关于 防止数据湖深渊 的文章,了解更多关于数据卫生的细节)。

为成功准备数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The Library is a good analogy for a Data Store or Data Warehouse. It is organized by category, broken down by author and you can lookup and find exactly what you are looking for no matter when the book was written. (Source: Pixabay)

维护数据词汇表

如果你考虑智慧生命是如何交流的,那么你就可以将其提炼为一个普通的词汇,将单词转化为意义。假设单词的含义是由它们的上下文环境决定的,那么用一组通用的词汇来表示封装在事件或指标中的数据,并在一个在可预见的将来易于理解和维护的结构中进行定义,是有意义的。

采取主动,比如试图为基于事件的基础设施构建开放模式的 CloudEvents 开放规范,或者试图统一组织将数据写入 ElasticSearch 的方式的 Elastic Common Schema ,甚至是更老的 HTML 微数据规范,它使一组公共的实体和关系能够存在于 HTML 的标记中。所有这些计划都有重叠和共同的目标,即创建支持统一数据词汇和结构的规范。

记录可以在您的公司或组织内重用的商定格式是非常宝贵的

无论您是使用这些规范中的任何一个,还是仅仅将它们作为如何对数据建模的备忘单,记录一个可以在您的公司或项目中重用的商定格式都是非常重要的。

共享库和通用格式有助于减轻计算如何对新数据建模的负担。这可以通过多种方式实现,但我是编译结构化数据(如谷歌的协议缓冲区)的大力支持者。协议缓冲区允许使用导入跨许多可组合类型重用数据结构。它们还可以编译成多种语言(Java/obj-c/JavaScript/Scala/etc ),因此通过导入一个库,相同的数据结构可以在整个组织中使用。这篇文章不是关于 protobuf 的,而是关于如何考虑数据建模的,所以我会回头再谈。

当考虑数据时

想象一下,在一家没有数据仓库、没有数据湖、甚至没有传统数据库的公司,对用户数据建模看似简单的用例。初创公司总是面临这种问题,如果你已经开始考虑解决这个问题,那么你可能已经开始考虑你的网飞或脸书用户了。不过,问问自己什么是一般用户,用户的概念是否在多个上下文中具有相同的含义,以及询问封装*“用户数据”*的确切内容是什么,这将有所帮助。

您希望这些数据解决哪些用例

我喜欢从逆向工作开始这个过程。您希望这些数据解决哪些用例。这个过程与产品经理(PM)经历大多数工程师现在非常熟悉的类似实践没有什么不同。你知道“作为该功能的用户,我想……”。人们可以从项目管理用户故事中得出许多推论,并将该过程用作处理数据的心智模型——因为它有助于将复杂的问题分解成简单的上下文想法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Data primitives can be combined to create new structures from common components. (Source: Pixabay)

假设我们都在一家新的创业公司工作,专注于提供下一个伟大的本地农场新鲜到前面门廊的概念。现在我们有了上下文,给定的上下文是王道,我们现在可以开始在同一个页面上考虑用户和用户数据建模之旅。那么,我们应该能够讲述什么样的数据故事呢?

“从这些数据中,我希望能够了解基于地理区域的客户流失情况”

“从这些数据中,我希望能够了解农场新鲜食品供应商如何影响客户满意度”

“从这些数据中,我想了解一年中什么时候对某种农产品的需求较高,这种农产品是什么,以及我们如何从当地供应商(供应商)那里获得这些产品。”

分解东西。因为这很有趣!

如果我们从我们的数据将如何被使用的具体例子开始,那么以相反的顺序分解事物的过程将变得更容易,并且给数据建模者一个什么是必要的清晰的想法。

从上面给出的三个用例中,我们可以提炼出对一个用户(客户)、一个供应商(本例中为供应商/农场)、一个产品(农场新鲜食品箱),其中包含一个或多个项目(产品/货物)的集合,这些项目由一个时间表(交付间隔)控制,该时间表规定了一箱农场新鲜食品何时作为一次交付出现在某人的家门口

现在把这些关系想象成一个总体的数据故事:“我们服务的一个用户在一个给定的时间表收到我们的产品,并且每次交付中的项目包含来自当地供应商的季节性选择”。

这提醒我,我们需要将地理区域以及一些时间数据的概念归属于用户/供应商以及用户和供应商活动/这些数据可以直接封装在主记录(用户/供应商)以及事件中。事件可以是增加或减少交货时间表的频率,或者供应商宣布他们缺货。几乎可以为任何事情创建事件,并使您能够在系统中交叉关联用户和供应商的行为,以开始添加对事件数据层的更多洞察。

在构建用例时,我们还必须考虑用户的满意度,这可以通过与每个产品交付相关联的评级的概念来解决。这可以通过服务应用程序或网站的直接请求来获得,例如,当你走出 Lyft 或获得一些 Doordash 交付时,你会获得典型的“评价你的体验”。这里的积极好处是,您可以根据每个用户之前对其交付的满意度开始向他们学习。这为在所有这些数据的基础上构建新的学习模型打开了大门。假设您希望根据直接的客户反馈来跟踪各个地区的最佳和最差供应商,那么此指标可用于对表现最佳的供应商的合作费用进行折扣,也是抛弃表现不佳的供应商时使用的指标。

讲故事的人

分解复杂的想法并从文字中传递意义是任何一个伟大的讲故事者的责任。对于一个讲数据的人来说,这甚至更重要,因为他们的成功可以成就或毁灭一家公司,他们的想法和意义是由易于遵循的指标、明确定义的事件和对大量枯燥数据的深刻行为驱动的会计组成的!现在去为你自己实现它吧。

今天的文章 TowardsDataScience 博客中文翻译 2019(四百五十九)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-31 17:57
下一篇 2024-12-31 17:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/97673.html