| 扬声器 |
抄本 |
| |
您好,感谢您抽出时间阅读这篇文章。我叫 Jacob Rhyne,是 JMP 的一名软件测试员。今天,我将与您分享一个我编写的插件,它可以帮助您在 JMP 的时间序列平台中选择 ARIMA 模型或状态空间平滑模型。 |
| |
因此,我首先简要概述一下在时间序列平台中拟合 ARIMA 和状态空间平滑模型。 |
| |
我将介绍如何使用插件来帮助在两种模型类型之间进行选择。并概述时间序列交叉验证,这是插件的主要工具。最后,我将使用 JMP 16.1 演示插件的使用方法。 |
| |
JMP 的时间序列平台允许用户拟合多种不同的时间序列模型。本次演示将重点介绍 ARIMA 模型和状态空间平滑模型,我将使用钢铁装运样本数据演示如何拟合这两个模型。 |
| |
钢铁出货量样本数据包含 1984 年至 1991 年美国钢铁出货量的每月总量。我将使用专业建模菜单中的时间序列平台对此进行探索。 |
| |
“钢材出货量”列是我的时间序列。“日期”列是我的时间 ID。假设我感兴趣的是预测未来两年的钢材出货量。由于这是月度数据,因此我需要 24 个预测期。点击“确定”,即可启动我的时间序列报告。 |
| |
您可以看到我在时间序列上绘制了一些该序列的基本统计数据,以及一些基本的时间序列诊断。 |
| |
我想用 ARIMA 模型拟合这个序列,在拟合 ARIMA 模型时,我需要决定是否需要进行任何类型的变换或差分。因此,我将使用“时间序列”菜单中的“差分”选项来探索这个问题。 |
| |
我将从一阶非季节性差分开始,然后单击估计。 |
| |
现在我得到了差分序列的图。它看起来更平稳一些,但仍然有一些季节性。我可以通过查看诊断信息来判断这一点。我向下移动到滞后12位。 |
| |
我可以看到自相关值很高,并且对于滞后 12,偏自相关性也有点高。所以,这表明我应该拟合一个具有非季节性和季节性差分的季节性 ARIMA 模型。 |
| |
为了保持报告的简洁,我将结束这份差异报告。接下来,我将探索如何使用 ARIMA 模型组选项来拟合一些不同的 ARIMA 模型。 |
| |
所以我决定拟合一个季节性 ARIMA 模型,非季节性差分阶数为 1,季节性差分阶数也为 1。但是,对于自回归和移动平均阶数,我打算将它们设置为 0 或 1。 |
| |
因此,当我点击“估算”时,JMP 将拟合这 16 个不同的季节性 ARIMA 模型。我可以向下滚动到模型比较窗口并查看这些模型。这些模型按 AIC 降序排列,因此我将选择最小化 AIC 的模型。 |
| |
我可以向下滚动查看模型和报告。我可以看到它是稳定的和可逆的。我可以浏览参数估计表。查看预测值和预测区间。 |
| |
假设我已经查看了所有这些诊断,并且我对这个季节性 ARIMA 模型作为预测候选模型感到满意。 |
| |
因此,我将从报告中删除这些其他季节性 ARIMA 模型。 |
| |
并且说,我还想考虑使用状态空间平滑模型来创建预测,我可以使用时间序列菜单中的状态空间平滑选项来做到这一点。 |
| |
我需要说周期是 12,因为这是月度数据,我将适合该时间序列的所有推荐的状态空间平滑模型。 |
| |
因此,我点击“确定”运行该程序。如果我向下滚动到模型比较报告,我可以看到 JMP 已拟合所有推荐的状态空间平滑模型。它们再次按 AIC 降序排列。 |
| |
因此,最小化 AIC 的模型是一个乘性误差模型,没有趋势和乘性季节性。因此,我将选择这个模型 |
| |
在模型比较大纲中向下滚动以查看模型拟合度。 |
| |
因此我可以浏览模型摘要,可以查看参数估计表。 |
| |
您可以查看预测结果和预测区间。假设我已经查看了所有这些诊断结果,并且我很乐意将状态空间平滑模型作为预测的候选模型。 |
| |
因此,我将从我的模型和模型比较窗口中删除其他状态空间平滑模型。 |
| |
所以现在的问题是,我该如何在考虑的 ARIMA 模型和考虑用于预测的状态空间平滑模型之间进行选择。 |
| |
您可以看到,我有此阅读文本警告,它告诉我基于可能性的标准在不同的模型类别之间是不可比的。 |
| |
这意味着我不能简单地滚动查看 AIC 并说,由于 AIC 较低,因此对于 ARIMA 模型我将使用它进行预测。 |
| |
这不是一个有效的决定。那么,我该怎么办呢?嗯,JMP 中已经有一个选项可用。如果你的数据足够长的话。 |
| |
要设置保留,您可以在启动时间序列平台时使用保留预测选项。 |
| |
这样做的目的是,它会将你使用的所有时间序列模型拟合到训练集。并且在模型比较窗口中,不再按 AIC 对模型进行排序, |
| |
它将根据保留集的均方根误差或 RMSE 对模型进行排序,然后您可以选择最小化保留集的 RMSE 的模型。 |
| |
但是,如果您的数据不够长而无法使用保留集,那么我们就无法使用保留选项的预测,并且我们需要另一种方法来帮助我们在 ARIMA 模型或状态空间平滑模型之间进行选择。 |
| |
并做到这一点。 |
| |
这就是我制作这个插件的原因。它使用一种叫做时间序列交叉验证的方法帮助你选择。 |
| |
时间序列交叉验证本质上将您的时间序列分解为多个训练和测试集,其中任何连续的组都可以将训练集扩展一行。 |
| |
我稍后会给出一个时间序列交叉验证的详细示例,但我想指出的是,我并没有发明这种方法。如果你想了解更多信息, |
| |
看完这次演讲后,我推荐 Rob Hyndman 博士的预测原则和实践资源。 |
| |
但让我们看一个时间序列交叉验证的例子。 |
| |
假设我有 2021 年 1 月至 7 月北美票房数据,因为我是一名电影迷。 |
| |
我想用 ARIMA 模型或状态空间平滑模型来预测未来六周的票房。为了决定使用哪种预测方法,我想使用时间序列交叉验证。 |
| |
正如我所提到的,时间序列交叉验证将把你的数据分成训练集和测试集组,其中你将训练集扩展一行和每个连续的组。 |
| |
所以我需要决定我的初始训练集需要多少行。 |
| |
默认情况下,我的插件会为你设置六个时间序列交叉验证组。因此,这将为你提供初始训练集建议的默认行数,但如果你愿意,也可以更改它。 |
| |
对于此示例,我将保留训练集中默认的 17 个初始行。 |
| |
启动时间序列交叉验证插件后,它会生成一份标准的时间序列报告。此外,它还会在报告底部添加一个大纲框,用于显示时间序列交叉验证控件。 |
| |
因此,在这里,您必须指定初始行数,即第一个训练集中的行数、您感兴趣的预测长度以及要拟合季节性模型的周期。 |
| |
因此,我将保留训练集中 17 行的默认值,这将允许我拥有六个不同的时间序列交叉验证组。 |
| |
我的预测长度为六周,因为我想预测未来六周的票房。这里我将保留缺失值,因为我不打算针对这些特定数据拟合季节性模型。 |
| |
因此,让我们探索第一个时间序列交叉验证组。 |
| |
您可以看到我的第一个训练集中有 17 行,接下来的 6 行是我的测试集。 |
| |
我的插件会将我要求的任何 ARIMA 模型拟合到训练集,并将推荐的状态空间平滑模型拟合到训练集。 |
| |
它将通过 AIC 选择每个类别的最佳模型,并将所选模型的预测带入测试集并评估预测误差。 |
| |
第二个时间序列交叉验证组将把训练集扩大一行,所以现在我的训练集是 |
| |
由第1行到第18行组成,接下来的6行是我的测试集。然后我重复在第一个时间序列交叉验证组中进行的操作。 |
| |
我根据用户要求拟合了所有 ARIMA 模型,并拟合了推荐的状态空间平滑模型。根据 AIC 预测结果,选择最佳模型放入测试集,并存储预测误差。 |
| |
我会一直这样做,直到用完所有数据。所以,本例中最后一个时间序列交叉验证组会使用第1到22行作为训练集,然后使用剩余的数据,也就是最后6行作为测试集。 |
| |
所以我提到我正在存储每个时间序列交叉验证组的预测误差。 |
| |
该插件的作用是报告两个模型类的总体 RMSE、MAE 和 MAPE,并为每个时间序列交叉验证组提供 RMSE 的图。 |
| |
您可以使用此表和此图来帮助您决定是否适合每个预测模型或状态空间平滑模型预测。 |
| |
让我们通过这些数据来看一下插件的运行情况。 |
| |
因此,我将打开从票房魔力中获得的票房数据,然后运行此脚本,该脚本将启动此数据的时间序列平台,因为我只想查看时间序列。 |
| |
我正在预测每周票房的平均票房收入,我可以看到,随着时间的推移,差异和平均票房收入会越来越大,所以我想进行对数变换 |
| |
到平均总收入。我可以通过为平均总收入创建一个对数公式列来实现,但是 |
| |
这并非必需,该插件允许您进行 Box Cox 变换,就像标准时间序列平台一样。因此,我将启动我的插件,点击免责声明。我想预测未来六周每周的平均票房收入。 |
| |
我想要对平均总额进行对数变换,因此我将使用 Lambda 等于零的 Box Cox 变换。 |
| |
然后我会点击“确定”。 |
| |
这样就能生成 Box-Cox 变换响应的标准时间序列报表。我可以拟合任何我想要的时间序列模型,这些模型在 JMP 中可以通过这个红色三角形菜单找到。 |
| |
但相反,我将深入报告的底部并使用时间序列交叉验证来获得关于我是否应该适合 ARIMA 模型或状态空间平滑模型的建议。 |
| |
我将初始行保留为 17,因为这将为我提供我在上一个示例中展示的六个时间序列交叉验证组。 |
| |
我将保持预测长度为六,因为我想预测未来六周的票房情况,并且在此示例中,我将保持该时间段等于缺失值。 |
| |
所以我点击“运行”,现在我必须指定每个时间序列交叉验证组要拟合哪些 ARIMA 模型。因此,我决定使用非季节性差分,但我会将自回归和移动平均的阶数设置为零或一。 |
| |
因此,当我单击估计时,每个时间序列交叉验证组都会适合这四个 ARIMA 模型和推荐的状态空间平滑模型。 |
| |
因此我单击估计,插件所做的就是将这个数据集扩展为我的六个时间序列交叉验证组,将请求的模型拟合到训练集,将预测结果放入测试集中并存储预测误差。 |
| |
所以我向下滚动查看结果。从表中可以看出,总体而言,ARIMA 模型的 RMSE、MAE 和 MAPE 低于状态空间平滑模型。如果我看一下图表 |
| |
我可以看到 ARIMA 模型为每个时间序列交叉验证组产生了较低的 RMSE。 |
| |
所以这个插件会建议使用 ARIMA 模型来创建这些数据的预测,而不是状态空间平滑模型。所以我可以进入红色三角形菜单,使用 ARIMA 模型组选项来拟合 ARIMA 模型。 |
| |
让我们看一下插件的另一个示例,为了完成下一个示例,我将使用 MC3 Quarterly 样本数据的子集。 |
| |
MC3 季度样本数据包含 MC3 建模竞赛中 100 多个不同时间序列的数据。这些序列均为季度数据。 |
| |
我认为这是一个有趣的数据集,因为它包含了许多不同的时间序列。不过,由于时间原因,本次演讲中我只从表中随机选取了三个时间序列的子集。 |
| |
因此我将启动我的插件。 |
| |
设置启动器,Y 列代表时间序列,time 代表时间 ID。由于我有多个序列的数据,因此需要对序列列使用“by”选项。假设我要预测未来两年,因此我将输入 8 个预测期,然后点击“确定”。 |
| |
正如您所料,这会显示我表格中每个不同序列的时间序列报告。此外,我还为表格中的每个序列提供了时间序列交叉验证控件。 |
| |
因此,我可以对每个序列使用时间序列交叉验证,以获得使用 ARIMA 模型或状态空间平滑模型进行预测的建议。 |
| |
为了节省时间,我只对第一个系列进行操作。我将使用四个周期,因为我想为这个系列拟合季节性模型。点击“运行”。 |
| |
因此,我将使用非季节性差分阶数为 1,但所有其他自回归移动平均阶数和季节性差分阶数的范围为零或一。 |
| |
将观察期设置为四,因为这是季度数据。所以当我点击“估算”时,它会拟合这 32 个 ARIMA 模型 |
| |
在每个时间序列交叉验证组中。因此,插件将定位到序列 N 691 的位置。 |
| |
它正在将其扩展为六个不同的时间序列交叉验证组。它正在将我请求的 ARIMA 模型拟合到训练集。推荐的状态空间平滑模型也已应用于训练集。 |
| |
通过AIC选择最佳模型。预测到测试集并存储预测误差。 |
| |
我会花一点时间来完成它。 |
| |
开始了。 |
| |
我可以滚动查看结果。正如您在表格中看到的,ARIMA 模型的 RMSE、MAE 和 MAPE 均低于状态空间平滑模型。 |
| |
从图中可以看出,除了最后一个时间序列交叉验证组外,ARIMA 模型的 RMSE 都较低 |
| |
比状态空间平滑模型更佳,最后一组也差不多。 |
| |
因此,再次进行时间序列交叉验证,并建议使用 ARIMA 模型为 N 691 系列创建预测。并且,您可以转到其他不同的系列并重复该过程,对于这些系列,它可能会推荐状态空间平滑模型。 |
| |
因此,我将通过展示插件的另一个功能来结束演示,该功能实际上与时间序列交叉验证无关。 |
| |
我还提供了使用测试集来评估插件预测的功能,我将再次使用“钢铁出货量”示例数据进行演示。接下来我将启动插件。好的,我想按日期预测钢铁出货量。 |
| |
假设我要预测未来两年,所以需要 24 个预测期,正如我之前提到的,如果你的序列足够长,对于保留集,你可以使用保留预测选项 |
| |
选择模型。既然我这样做了,我实际上不需要使用时间序列交叉验证。所以我可以使用训练测试集选项 |
| |
建立一个独立的测试集来评估我选择的模型。我决定将测试集的长度设为 12。 |
| |
这意味着它会提取我最后12行数据,并将其完全排除在分析范围之外,以便我可以用它来评估我的预测效果。所以我点击“确定”。 |
| |
你可以看到,我给表格添加了一列。这只是一个测试集的指示列,如果该行包含在测试集中,则值为 1;如果不包含在测试集中,则值为 0。 |
| |
而且它只会将这些时间序列模型拟合到测试集等于零的行。这样可以保持测试集的独立性。 |
| |
那么,让我们用 ARIMA 模型来拟合这些数据。我使用与本次演讲开始时相同的控制参数,季节性和非季节性差分阶数均为 1,但其他阶数的范围从 0 到 1。 |
| |
因此,我单击“估计”来运行这 16 种不同的季节性 ARIMA 模型,并且我还将拟合推荐的状态空间平滑模型。 |
| |
因此,我将向下滚动到模型比较窗口,我可以看到,最小化保留集中的均方根误差的模型是具有加性误差、无趋势和加性季节性的状态空间平滑模型。 |
| |
假设我也只想知道性能最佳的 ARIMA 模型在测试集上的表现。我也可以选择它。 |
| |
我将删除不再考虑用于预测的其他模型。 |
| |
因此,我再次使用了保留预测选项,因此我会选择这个状态空间平滑模型来用于预测,但我只是好奇 ARIMA 模型在测试集中的表现如何。 |
| |
我可以向下滚动到我的测试集分析框。由于我使用了保留预测选项,它会将这两个选定的模型重新拟合到组合的训练数据和保留数据中,以获得更新的参数。 |
| |
然后它将预测到测试集并评估预测与实际测试集数据相比的表现。 |
| |
因此,我将点击“运行”来执行该分析。然后,我可以看到一个包含测试集 RMSE、MAE 和 MAPE 的表格,以及一张测试集与预测值的对比图。 |
| |
我可以看到,状态空间平滑模型不仅在保留集上表现更好,在测试集中也表现更好。所以,这个测试集分析选项只是为你提供了一个评估模型拟合效果的工具。 |
| |
总而言之,该插件允许您执行时间序列交叉验证。 |
| |
我认为如果您的时间序列数据不够长,无法使用 JMP 中的保留预测选项,但您仍想考虑使用不同的模型类,那么这个插件可能对您有用。 |
| |
该插件还允许您使用测试集来评估预测。此外,需要声明的是,与所有针对时间序列数据的模型选择方法一样,该插件并不能保证更准确的预测。 |
| |
非常感谢您抽出时间。希望您能试用一下这个插件,也希望您能享受 Discovery 的后续功能。非常感谢! |