基于arima模型(对ARIMA模型的深入研究)

基于arima模型(对ARIMA模型的深入研究)(1)

预测未来一直是一个普遍的挑战,从现在或下周种植庄稼、与某人结婚或保持单身、出售或持有股票、上大学或全职演奏音乐等决定。我们永远无法完美预测未来 ,但我们可以使用预测统计领域的工具来更好地了解未来。

预测涉及时间序列数据,或随着时间的推移重复测量。在每小时温度、每日电力消耗或年度全球人口估计等数据中,我们可以寻找将成百上千的数字分解为几个定义特征的模式。我们可以使用时间序列分析来量化值向上或向下趋势的速率,测量一个值与前几个值的相关程度,将我们的数据分解为其潜在的重复周期等等。

基于arima模型(对ARIMA模型的深入研究)(2)

过去五年标准普尔 500 指数的每日价格,这是一个经过高度研究的时间序列的例子。

要总结时间序列并预测其未来,我们需要对时间序列中的值彼此之间的关系进行建模。今天是否与昨天、一周前或去年相似?时间序列之外的因素(例如噪声或其他时间序列)在多大程度上起作用?

为了回答这些问题,我们将从一个基本的预测模型开始,然后迭代到一个完整的自回归移动平均 (ARMA) 模型。然后,我们将更进一步,包括集成的、季节性的和外生的组件,扩展为 SARIMAX 模型。

换句话说,我们将以此为基础构建:

基于arima模型(对ARIMA模型的深入研究)(3)

对此:

基于arima模型(对ARIMA模型的深入研究)(4)

它看起来很复杂,但这些部分中的每一个——自回归(蓝色)、移动平均(紫色)、外生(绿色)和季节性(黄色)分量——只是加在一起。我们可以通过添加或删除项以及在原始数据和差异(红色)数据之间切换来轻松调整模型的复杂性,以创建 ARMA、SARIMA、ARX 等模型。

一旦我们建立了一个模型,我们就能够预测如下所示的时间序列的未来。但也许更重要的是,我们还将了解产生时间序列的潜在模式。

基于arima模型(对ARIMA模型的深入研究)(5)


目录

入门

AR:自回归

MA:移动平均线

把它放在一起

附加组件

Python 中的时间序列


入门

<自相关>

在开始构建任何模型之前,我们需要讨论一个对描述时间序列至关重要的主题:自相关。自相关意味着“自相关”:它是时间序列值与早期值或滞后的相似性。例如,如果我们的时间序列是值 [5, 10, 15],那么我们的滞后 1 自相关将是 [10, 15] 与 [5, 10] 的相关性。

我们可以使用自相关图可视化当前值与 n 滞后前的先前值的相关性。这些图是通过计算每个值 (y_t) 与前一时间步 (y_{t-1})、两步前 (y_{t-2})、三步 (y_{t-3 }), 等等。 y 轴显示滞后 n 处的相关强度,我们将阴影误差区间之外的任何值视为显着相关。

滞后零处的相关性始终为 1:y_t 最好与 y_t 完全相关,否则会出现问题。对于剩余的滞后,存在三种典型模式:1) 缺乏自相关,2) 逐渐衰减,以及 3) 急剧下降。 (尽管在现实世界的数据中,您可能会混合使用 #2 和 #3。)

基于arima模型(对ARIMA模型的深入研究)(6)

下面我们将标普 500 指数每日收盘价(左)与芝加哥植物园每日最高温度(右)的自相关可视化。标准普尔 500 指数的价格是如此相关,以至于您必须回顾三个月以上的过去才能找到不相关的值。芝加哥的温度在大约两个月后变得更快,但随后从另一侧射出并与 4-7 个月前的温度呈负相关。

基于arima模型(对ARIMA模型的深入研究)(7)

<偏自相关>

自相关图很有用,但滞后之间可能存在大量相关“溢出”。例如,在标准普尔 500 指数价格中,滞后 1 的相关性是惊人的 0.994 - 很难很好地了解以下滞后,第一个滞后间接影响所有下游相关性。

这是偏自相关可以成为有用度量的地方。部分自相关是相关性y_t 和 y_{t-n} 的变化,控制早期滞后的自相关。

假设我们想要在没有滞后 1 溢出的情况下测量滞后 2 自相关。我们不是直接测量 y_t 和 y_{t-2} 的相关性,而是拟合 y_t ~ β₀ β₁y_{t-1} 的线性回归,y_{t-2} ~ β₀ β₁y_{t} 的回归-1},然后找到这两个回归的残差之间的相关性。

残差量化了 y_t 和 y_{t-2} 中无法由 y_{t-1} 解释的变化量,使我们能够公正地看待 y_t 和 y_{t-2} 之间的关系。然后我们可以重复这个过程,测量延迟到 n 的回归残差之间的相关性,以找到延迟 n 的偏自相关。我们将测量滞后 3 处的偏自相关,例如,通过将 y_t ~ β₀ β₁y_{t-1} β₂y_{t-2} 的残差与 y_{t-3} ~ β₀ 的残差进行回归β₁y_{t-1} β₂y_{t-2}。

以下是偏自相关图如何寻找标准普尔 500 指数价格和芝加哥气温。请注意,滞后 1 自相关如何仍然非常显着,但随后的滞后却一落千丈。

基于arima模型(对ARIMA模型的深入研究)(8)

自相关图和偏自相关图可用于确定简单的 AR 或 MA 模型(与完整的 ARIMA 模型相反)是否足以描述您的数据 ,但您可能不会以这种方式使用它们。自首次引入自相关图以来的 50 年里,您的笔记本电脑可能已经变得足够强大,可以执行强力扫描以找到最能描述您的数据的 ARIMA(甚至 SARIMAX)模型的参数,即使有数千个观测值.那么,这些图作为可视化数据时间依赖性的补充方式可能更有用。

<平稳性>

与任何统计模型一样,在预测时间序列数据时必须满足一些假设。最大的假设是时间序列是平稳的。换句话说,我们假设描述时间序列的参数不随时间变化。无论您查看时间序列的哪个位置,您都应该看到相同的均值、方差和自相关。

基于arima模型(对ARIMA模型的深入研究)(9)

这并不意味着我们只能预测看起来像上面绿色混乱的时间序列。虽然大多数真实世界的时间序列都不是平稳的,但我们可以将时间序列转换为平稳的,对平稳数据生成预测,然后对预测进行反变换以获得真实世界的值。一些常见的转换包括差分(然后可能再次差分)、取数据的对数或平方根,或取百分比变化。

转换是必要的,因为线性模型要求它们建模的数据是独立的,并且很可能来自父总体。时间序列数据的情况并非如此——任何自相关都立即违反了独立性假设。但是独立随机变量的许多便利——例如大数定律和中心极限定理——也适用于平稳时间序列。因此,使时间序列平稳是能够对我们的数据进行建模的关键步骤。

基于arima模型(对ARIMA模型的深入研究)(10)


AR:自回归

有了一些基础知识,让我们开始构建我们的 ARIMA 模型。我们将从 AR 或自回归组件开始,然后添加移动平均线和积分部分。

AR(0):白噪声

我们可以构建的最简单的模型是一个没有项的模型。只有一个常数和一个误差项

基于arima模型(对ARIMA模型的深入研究)(11)

这种时间序列称为白噪声。 ϵ_t 是从均值为 0 且方差为 σ² 的正态分布中抽取的随机值。 每个值都是独立绘制的,这意味着 ϵ_t 与 ϵ_{t-1}、ϵ_{t 1} 或任何其他 ϵ_{t±n} 没有相关性。数学上写,我们会说:

基于arima模型(对ARIMA模型的深入研究)(12)

因为所有的 ϵ_t 值都是独立的,所以模型 y_t = ϵ_t 所描述的时间序列只是一个无法预测的随机数序列。您对下一个值的最佳猜测是 c,因为 ϵ_t 的预期值为零。

以下是从标准偏差增加的正态分布中提取的三个白噪声时间序列。 c 为零,因此从等式中省略。

基于arima模型(对ARIMA模型的深入研究)(13)

我们无法预测的时间序列随机值实际上是一个有用的工具。对于我们的分析来说,这是一个重要的零假设 - 数据中是否存在足够强大的模式以将序列与白噪声区分开来?我们的眼睛喜欢寻找模式——即使实际上不存在模式——所以白噪声比较可以防止误报。

白噪声对于确定我们的模型是否捕获了它可以从我们的时间序列中获得的所有信号也很有用。如果我们预测的残差不是白噪声,我们的模型就会忽略一种模式,它可以用来生成更准确的预测。

AR(1):随机游走和振荡

让我们开始向我们的项目中添加自回归项模型。这些项将是我们时间序列的滞后值,乘以能够最好地将这些先前值转换为我们当前值的系数。

在 AR(1) 模型中,我们通过取常数 c,添加由乘数 α₁ 调整的前一个时间步 y_{t-1},然后添加白噪声 ϵ_t 来预测当前时间步长 y_t。

基于arima模型(对ARIMA模型的深入研究)(14)

α₁ 的值在我们的时间序列中起着决定性的作用。如果 α₁=1,我们得到一个随机游走。与白噪声不同,我们的时间序列可以自由地偏离其原点。随机游走对于许多应用中的随机过程来说是非常有用的模型,例如模拟粒子在流体中的运动、觅食动物的搜索路径或股票价格的变化。

基于arima模型(对ARIMA模型的深入研究)(15)

所以当 α₁ = 0 时,我们得到白噪声,当 α₁ = 1 时,我们得到一个随机游走。当 0 < α₁ < 1 时,我们的时间序列表现出均值回归。这很微妙,但您会注意到这些值彼此相关,并且它们倾向于在零附近徘徊,就像不那么混乱的白噪声一样。这个过程的一个真实例子是股票价格的巨大变化:突然的变化往往伴随着均值回归。

基于arima模型(对ARIMA模型的深入研究)(16)

在拟合 AR 模型时,统计包通常在执行最大似然估计时将 α 参数空间限制为 -1 ≤ α ≤1。除非您对指数增长或急剧振荡进行建模,否则这些模型描述的时间序列可能不是您想要的。

基于arima模型(对ARIMA模型的深入研究)(17)

最后,我们对 c 的解释随着 AR(1) 模型而变化。在 AR(0) 模型中,c 对应于我们的时间序列的中心位置。但是由于 AR(1) 模型考虑了 y_{t-1},c 现在代表我们的时间序列向上(如果 c > 0)或向下(如果 c < 0)趋势的速率。

基于arima模型(对ARIMA模型的深入研究)(18)

AR(p):高阶项

我们的模型添加更多滞后只是添加 α_n*y_{t−n} 项的问题。这是 AR(2) 模型的样子,附加项以蓝色突出显示。

基于arima模型(对ARIMA模型的深入研究)(19)

这表示当前时间步长 y_t 的值由常数 c 加上前一时间步长 y_{t-1} 乘以某个数字 α₁ 的值,再加上两个时间步长前的值 y_{t-2乘以另一个数 α₂,再加上一个白噪声值 ϵ_t。为了拟合这种类型的模型,我们现在估计 α₁ 和 α₂ 的值。

随着我们向模型添加更多滞后,或者我们开始包含移动平均、外生或季节性项,将我们的自回归项重写为总和将变得有用。 (统计学家也使用后移表示法,但我们将坚持求和以避免学习曲线。)这是 AR(p) 模型的一般形式,其中 p 是滞后数。

基于arima模型(对ARIMA模型的深入研究)(20)

上面的等式简单地说:“我们的当前值 y_t 等于我们的常数 c,加上每个滞后 y_{t-n} 乘以其系数 α_n,再加上 ϵ_t。”无论 p 是 1 还是 100,我们都可以使用相同的等式……但如果您的模型有 100 个滞后,您可能需要考虑包括我们将描述的下一项:移动平均线。

基于arima模型(对ARIMA模型的深入研究)(21)


MA:移动平均线

ARIMA 模型的第二个主要组件是移动平均组件。这个分量不是滚动平均值,而是白噪声的滞后。

ϵ_t 项,以前我们添加到我们的预测中的一些容易忘记的噪声,现在占据了中心位置。在 MA(1) 模型中,我们对 y_t 的预测是我们的常数加上之前的白噪声项 ϵ_{t−1} 和乘数 θ₁,再加上当前的白噪声项 ϵ_t。

基于arima模型(对ARIMA模型的深入研究)(22)

和以前一样,我们可以用这个总和简明地描述一个 MA(q) 模型:

基于arima模型(对ARIMA模型的深入研究)(23)

下面是三个 MA(1) 时间序列,它们的值 θ₁ 不同,θ₁ 是 ϵ_{t−1} 上的乘数。如果您在看到这些时没有经历“ah-ha”的时刻,请不要感到难过;它们看起来应该与白噪声非常相似。

基于arima模型(对ARIMA模型的深入研究)(24)

移动平均过程比自回归直观得多——什么时间序列不记得它过去的行为,但记得它以前的随机噪声?然而,数量惊人的现实世界时间序列是移动平均过程,从商店商品和销售的错位、因自然灾害而购买的电池,以及汽车音响上的高音旋钮等低通滤波器。

这是 YouTuber ritvikmath 的一个愚蠢但有用的错位示例。想象一个经常性的聚会,您被分配为每位客人提供一个纸杯蛋糕。 y_t 是正确的纸杯蛋糕数量。您预计大约有 10 个人,因此您首先带来 10 个纸杯蛋糕 (c=10)。当您到达时,您会注意到您供应过剩或供应不足 (ϵ_t) 的纸杯蛋糕数量。

在接下来的会议中,您带来 10 个纸杯蛋糕,根据与上次会议的差异(现在为 ϵ_{t−1})乘以某个因子 (θ₁) 进行调整。您想带来上次关闭的纸杯蛋糕数量的负数,因此您设置 θ₁=−1。例如,如果你上次少了两个 (ϵ_{t−1}=−2),那么你会多带两个。

出现的客人数量本质上是随机的,但客人记住了数量上次会议上的纸杯蛋糕——如果太多,就会有更多的客人出现,如果太少,那么来的客人就会减少。

因此,我们可以在每次会议上模拟正确数量的纸杯蛋糕,如下所示。蓝色项是您参加会议的纸杯蛋糕数量,橙色项是我们带来的数量与出席人数之间的差值。

基于arima模型(对ARIMA模型的深入研究)(25)

这里要注意的是,这个时间序列并不关心它自己的历史(纸杯蛋糕的正确数量);它只受外部随机噪音的影响,这些噪音会在短时间内记住(纸杯蛋糕数量和参加聚会的人数之间的差异)。因此,这是一个移动平均过程。

基于arima模型(对ARIMA模型的深入研究)(26)


把它放在一起

涵盖了 AR 和 MA 流程后,我们拥有了构建 ARMA 和 ARIMA 模型所需的一切。正如您将看到的,这些更复杂的模型只是由加在一起的 AR 和 MA 组件组成。

ARMA:自回归移动平均线

虽然许多时间序列可以归结为纯自回归或纯移动平均过程,但您通常需要结合 AR 和 MA 组件来成功描述您的数据。这些 ARMA 过程可以使用以下等式建模:

基于arima模型(对ARIMA模型的深入研究)(27)

ARMA 方程简单地表明,当前时间步长的值是一个常数加上自回归滞后及其乘数之和,加上移动平均滞后及其乘数之和,再加上一些白噪声。这个方程是广泛应用的基础,从建模风速、预测财务回报,甚至过滤图像。

下面是四个 ARMA(1,1) 时间序列。与上面的 MA(1) 图一样,很难查看下面的任何时间序列并直观地了解参数值,甚至很难判断它们是 ARMA 过程,而不仅仅是 AR 或 MA。我们正处于时间序列变得过于复杂的地步,无法通过观察原始数据来直觉模型的类型或其参数。

基于arima模型(对ARIMA模型的深入研究)(28)

不过没关系。展望未来,我们将开始使用 AIC 来确定哪个模型最能描述我们的数据,无论是 AR、MA 还是 ARMA 模型,以及每个组件的最佳滞后数。我们将在本文末尾介绍这个过程,但同时让我们介绍 SARIMAX 模型的其余部分。

ARIMA:自回归综合移动平均线

我们已经找到了这篇博文的同名:ARIMA 模型。尽管进行了构建,但我们实际上会看到 ARIMA 模型只是一个 ARMA 模型,预处理步骤由模型而不是用户处理。

让我们从 ARIMA(1,1,0) 模型的方程开始。 (1,1,0) 意味着我们有一个自回归滞后,我们对数据进行了一次差分,并且我们没有移动平均项。

基于arima模型(对ARIMA模型的深入研究)(29)

请注意我们如何从建模 y_t 到建模 y_t 和 y_{t-1} 之间的变化。因此,我们的自回归项,以前是 α₁(y_{t-1}),现在是 α₁(y_{t-1} -y_{t-2})。

换句话说,ARIMA 模型只是差分时间序列上的 ARMA 模型。而已!如果我们用 d_t 替换 y_t,代表我们的差分数据,那么我们只需再次获得 ARMA 方程。

基于arima模型(对ARIMA模型的深入研究)(30)

我们可以自己执行差分,但是如果 d 大于 1,它会变得很麻烦,并且大多数统计包会在幕后为我们处理差分。例如,这里有一个 Python 演示,它展示了原始数据上的 ARIMA(1,1,1) 模型和差分数据上的 ARMA(1,1) 模型中的模型系数是如何相等的。

上面,我们首先使用 arma_generate_sample 函数来模拟具有指定 α 和 θ 参数的 ARMA 过程的数据。然后我们使用 ARIMA 函数在原始数据上拟合 ARIMA 模型,在差分数据上拟合 ARMA 数据。最后,我们比较了两个模型的估计参数并表明它们是相等的。

这是原始数据上的 ARIMA(1,2,1) 模型与两次差分数据上的 ARMA(1,1) 模型的相同概念证明。

基于arima模型(对ARIMA模型的深入研究)(31)


附加组件

有了 AR、MA 和 I 组件,我们就可以分析和预测各种时间序列。但是还有两个额外的组成部分可以真正将我们的预测提升到一个新的水平:季节性和外生变量。在查看一些代码然后结束这篇文章之前,让我们简要介绍一下这些内容。

S:季节性

顾名思义,季节性是指数据中具有固定频率的重复模式:每天、每两周、每四个月等重复的模式。电影院门票销售往往与上周的销售相关,因为例如,虽然房屋销售和温度往往与上一年的值相关。

季节性违反了 ARIMA 模型的平稳性假设,因此我们需要对其进行控制。我们可以通过使用季节性 ARIMA 模型或 SARIMA 来实现。这些模型具有广泛的应用,从预测巴西的登革热病例到估计模仿台湾机械工业的产量或希腊的发电量。

下面是 SARMA 模型的一般方程,季节性成分以橙色突出显示。 (对于 SARIMA,用差分数据 d_t 替换 y_t。)

基于arima模型(对ARIMA模型的深入研究)(32)

请注意季节性和非季节性成分看起来非常相似。这是因为季节性模型在滞后上拟合了一组额外的自回归和移动平均分量,滞后抵消了一些滞后 s,即我们的季节性频率。

例如,对于每周季节性很强的每日电子商务利润模型,我们将设置 s = 7。这意味着我们将使用一周前的值来帮助告知明天的预期。这个过程可以用如下的 SARMA(0,0)(1,0)₇ 模型建模。

基于arima模型(对ARIMA模型的深入研究)(33)

但是对于现实世界的时间序列,即使是高度季节性的数据也可能仍然使用一两个非季节性成分进行更好的建模:季节性成分可能捕捉长期模式,而非季节性成分调整我们对短期变化的预测。我们可以修改模型以包含非季节性自回归项,例如,将其转换为 SARMA(1,0)(1,0)₇ 模型。

基于arima模型(对ARIMA模型的深入研究)(34)

SARIMA 模型还允许我们通过季节性频率以及任何非季节性差异来区分我们的数据。一个常见的季节性 ARIMA 模型是 SARIMA(0,1,1)(0,1,1),我们在下面展示了 s = 7。滞后位于等式的右侧,使其更容易阅读。

基于arima模型(对ARIMA模型的深入研究)(35)

X:外生变量

到目前为止,我们描述的所有组件都是我们时间序列本身的特性。我们的最后一个组成部分,外生变量,通过考虑外部数据对我们的时间序列的影响来逆转这一趋势

这听起来不应该太吓人 - 外生变量只是任何非时间序列模型中的特征。例如,在预测学生考试成绩的模型中,标准线性回归将使用学习小时数和睡眠小时数等特征。同时,ARIMAX 模型还将包括内生特征,例如学生之前的 n 次考试成绩。

ARIMAX 模型中外生变量的其他一些示例包括石油价格对美国汇率的影响、室外温度对电力需求的影响以及对伤残保险索赔的经济指标。

这是我们完整的 SARIMAX 方程的样子。外生术语以绿色突出显示。

基于arima模型(对ARIMA模型的深入研究)(36)

请注意,外生因素的影响已经间接包含在我们的时间序列历史中。例如,即使我们在美国汇率模型中不包括石油价格的术语,石油的影响也会反映在汇率的自回归或移动平均分量中。任何现实世界的时间序列都是数十或数百个外生影响的结果,那么为什么要为外生术语操心呢?

虽然外部影响在我们模型中的内生项中间接表示,但直接衡量这些影响仍然有效得多。例如,我们的预测将对外部因素的变化做出更快的反应,而不是等待它反映在滞后中。

基于arima模型(对ARIMA模型的深入研究)(37)


Python中的时间序列

到目前为止,我们已经介绍了时间序列模型的自回归、移动平均、积分、季节性和外生组件背后的理论和数学。只需稍加努力,我们就可以填写 SARIMAX 模型的方程并手动生成预测。但是我们如何找到模型的参数值呢?

为此,我们将使用 Python 的 statsmodels 库。我们将首先拟合一个我们提前知道我们的模型顺序应该是什么的模型,例如一个自回归滞后和两个移动平均滞后。在下一节中,我们将展示如何使用 pmdarima 库来扫描潜在的模型订单并找到最适合您的数据的匹配项。

拟合模型

假设我们是某电子商务公司的数据科学家,我们想预测接下来几周的销售额。我们有去年每日销售额的 CSV,以及每天的广告支出。我们知道我们希望我们的模型有一个非季节性的 ARIMA(1,1,1) 组件,一个周期为 7 天的季节性 AR(1) 组件,以及一个广告支出的外生变量。

换句话说,我们知道我们想要一个 SARIMAX(1,1,1)(1,0,0)₇ 模型。下面是我们如何在 Python 中拟合这样的模型。

我们使用 SARIMAX 指定我们的模型,然后使用 .fit 方法(必须将其保存到单独的变量中)对其进行拟合。然后我们可以使用 summary 方法获得 scikit-learn 风格的模型摘要。 predict 方法让我们将模型样本内预测与实际值进行比较,而预测方法生成对未来 n 步的预测。

比较模型拟合

这一切都很好,但是如果我们不提前知道我们的模型顺序应该是什么怎么办?对于简单的 AR 或 MA 模型,我们可以分别查看偏自相关或自相关图。但对于更复杂的模型,我们需要进行模型比较。

我们通常使用 AIC 进行模型比较,这是衡量我们的模型与数据拟合程度的指标。 AIC 通过惩罚更复杂的模型来防止过度拟合 - 是的,随着我们添加更多项,模型准确性不可避免地会增加,但是这种改进是否足以证明添加另一个项是合理的?

为了确定最佳模型,我们对各种模型顺序执行参数扫描,然后选择具有最低 AIC 的模型。 (如果我们特别担心过度拟合,我们可以改用更严格的 BIC。)

我们不需要自己编写一堆 for 循环,而是可以依靠 pmdarima 库中的 auto_arima 函数来完成繁重的工作。我们需要做的就是传递对 AR、I 和 MA 分量的初始阶次估计,以及我们为每个分量考虑的最高阶次。对于季节性模型,我们还需要传入季节性频率,以及季节性 AR、I 和 MA 分量的估计值。

从本文开始,我们将通过以下方式确定标准普尔 500 指数每日收盘价的最佳 SARIMA 模型。

上面的代码表明,SARIMA(2,1,0)(1,0,0)₇ 模型最适合标准普尔 500 指数过去五年的数据……但有一些重要的警告!在你用这个模型的预测来赌你一生的积蓄之前,我们应该记住,尽管参数扫描很方便,我们仍然有很多准确性,我们可以通过建模这个数据来挤出。

首先,我们没有以任何方式预处理数据,例如扫描异常值或插入任何间隙。同样,我们没有检查是否有任何转换会使数据更容易预测,例如采用百分比回报或平方根。

最后,我们的季节性频率 7 是凭空而来的——可能有一个季节性,例如每月、每季度或每年,可以显着提高我们的模型性能。像这样的考虑对于提供以后不会让您难堪的预测至关重要!

为什么不深度学习?

最后一个概念我们还没有涉及,它为这篇文章提供了一个重要的视角。经典统计学很棒,但在机器学习时代,ARIMA 是过去的遗物吗?当 Facebook 的 Prophet 和 LinkedIn 的 Greykite 等开源库生成的预测比精心打磨的 SARIMAX 模型更准确时,为什么还要费心去理解之前的移动平均纸杯蛋糕示例呢?

基于arima模型(对ARIMA模型的深入研究)(38)

这个问题涉及机器学习和统计之间的重要区别,最终涉及准确性和可解释性之间的权衡。要选择使用哪种工具,您必须了解您的目标是生成最准确的预测,还是了解数据中的潜在生成过程。

当您想要最大限度地提高准确性并愿意牺牲一些可解释性时,机器学习 - 尤其是深度学习 - 是首选工具。例如,循环神经网络是一种强大的预测工具,但要解释网络如何生成预测,就需要搜索前向和后向馈送的隐藏层的混乱混乱——这是一项艰巨的任务。如果贵公司的高层领导正在根据您的预测权衡一项重大业务决策,即使您不太了解它的工作原理,他们也不太可能接受模型。

因此,即使 ARIMA 模型具有较低的预测能力,它也可能是一个有吸引力的替代方案。通过具体了解时间序列中的值如何相互关联,更容易为时间序列本身建立直觉,例如今天的值对明天的影响有多大,季节性周期等等。

正确的工具——机器学习或经典统计——最终取决于您分析的更广泛的业务背景。 (通过使用曲线拟合模型的线性组合,Prophet 实际上介于这两个极端之间。)

基于arima模型(对ARIMA模型的深入研究)(39)

结论

这篇文章深入探讨了 ARIMA 系列时间序列预测模型

我们从一些预测模型的基础理论开始,包括自相关和平稳性。然后我们建立了简单的自回归模型,其中时间序列的现值是一些先前值的加权和。然后,我们检查了移动平均过程,这是一种非直观但常见的现象,其中时间序列会记住历史外部噪音。

我们将这些组件放在一起形成 ARMA 模型,然后展示了 ARIMA 模型如何只是我们差分数据上的 ARMA 模型。然后,我们展示了如何通过添加一组季节性自回归和移动平均分量以及直接测量外生因素对我们数据的影响来解释季节性

最后,我们在 Python 中训练了一个 SARIMAX 模型并执行了一个参数扫描以确定我们的标准普尔 500 指数收盘价数据集的潜在模型订单。然后我们讨论了为什么 ARIMA 仍然是一个有用的选择,即使存在更准确的方法。

时间序列预测是一个庞大的领域,我们可以用模型选择和制定方面的细微差别来填充更多的博客文章。但不管你的时间序列知识的时间序列如何,我希望它不断向上发展。

脚注

1. 介绍

“我们永远无法完美地预测未来”听起来很明显,但背后的原因却很有趣。在《智人》一书中,尤瓦尔·诺亚·哈拉利 (Yuval Noah Harari) 谈到了两种类型的混沌系统。第一个是混乱,对它的预测没有反应,比如天气。天气是通过无数空气分子的非线性相互作用产生的——预测非常困难,但我们可以使用越来越强大的计算机模拟来逐步提高我们的准确性。

与此同时,第二种混沌系统确实对有关它的预测做出反应。历史、政治和市场都是这种系统的例子。例如,如果我们完美地预测明天的石油价格会比今天高,那么抢购石油将改变今天和明天的价格,从而导致预测变得不准确。

作为数据科学家,我们习惯于将我们的分析与我们试图理解的过程分开考虑。但在我们的预测实际上影响结果的情况下,我们几乎没有希望完美地预测未来……除非我们可能保持我们的猜测非常安静。

2. 偏自相关

自相关图中滞后 n 处的急剧下降表示 MA(n) 过程,而偏自相关图中的明显下降表示 AR(n) 过程。但是,除非您的数据集确实非常庞大,否则您很可能最终会进行参数扫描,以确定最能描述您的数据的模型的参数。如果两个自相关图都变小了,那么您正在查看 ARMA 或 ARIMA 过程,并且无论如何都需要进行参数扫描。

3. 平稳性

我走进了一个很长的兔子洞,试图理解平稳性假设的真正含义。在平稳过程与非平稳过程的图形中,我使用有噪声的正弦波作为平稳过程的示例。该数据集确实通过了 Augmented Dicky-Fuller 测试,但如果将数据扩展到 1000 个样本,ADF 测试将不再表示时间序列是平稳的。

这是因为 ADF 本质上是衡量回归均值——一个非平稳过程没有问题漂移,并且之前的滞后不提供相关信息。同时,平稳过程的滞后值确实提供了预测下一个值的相关信息。

4. AR(0):白噪声

在我们的示例中,ϵ_t 值是从正态分布中采样的,因此这是高斯白噪声。不过,我们可以轻松地使用另一种分布来生成我们的值,例如均匀分布、二元分布或正弦分布。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页