扬声器
|
成绩单
|
| |
您好,感谢您抽出宝贵时间查看此内容。 我叫雅各布·莱恩。 我是 JMP 的软件测试员。 今天我将与您分享我编写的一个加载项,帮助您在 JMP 的时间序列平台中选择 ARIMA 模型或状态空间平滑模型。 |
| |
因此,我首先简要概述在时间序列平台中拟合 ARIMA 和状态空间平滑模型。 |
| |
我将介绍需要一个加载项来帮助在这两个模型类之间进行选择。 并概述时间序列交叉验证,这是加载项的主要工具。 然后我将结束使用 JMP 16.1 的插件演示。 |
| |
JMP 中的时间序列平台允许用户拟合许多不同的时间序列模型。 此演示文稿的重点将是 ARIMA 和状态空间平滑模型,我将展示如何使用此 Steel Shipments 示例数据来拟合这两种模型。 |
| |
钢铁出货量样本数据包含 1984 年至 1991 年美国钢铁出货量的月度总数。 而且,我将使用“专业建模”菜单中的“时间序列”平台对此进行探讨。 |
| |
Steel Shipments 列是我的时间序列。 日期列是我的时间 ID。 假设我有兴趣预测未来两年的钢铁出货量。 因此,由于这是月度数据,我需要 24 个预测期。 我将单击“确定”以启动我的时间序列报告。 |
| |
您可以看到我在时间序列上绘制了该序列的一些基本统计数据,以及一些基本的时间序列诊断信息。 |
| |
我想为这个系列拟合一个 ARIMA 模型,当我拟合一个 ARIMA 模型时,我需要决定,我是否需要进行任何类型的转换或差分。 所以我将使用时间序列菜单中的差异选项来探索这个。 |
| |
我将从一个订单的非季节性差异开始,然后单击估计。 |
| |
现在我有一个差异系列的情节。 就更平稳而言,它看起来更好,但我在这里仍然有一些季节性。 而且,我可以通过查看诊断来说明这一点。 我下降到滞后 12 号。 |
| |
我可以看到自相关值很高,滞后 12 的部分自相关也有点高。 因此,这表明我应该使用具有非季节性和季节性差异的季节性 ARIMA 模型。 |
| |
我将关闭这份差异报告,以保持我的报告干净。 而且,我将探索使用 ARIMA 模型组选项拟合一些不同的 ARIMA 模型。 |
| |
所以我决定我想拟合一个季节性 ARIMA 模型,其非季节性差分顺序为 1,季节性差分顺序为 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 行的默认值,这将允许我有六个不同的时间序列交叉验证组。 |
| |
我的预测长度为 6,因为我想预测未来 6 周的票房。 而且,在这里我将保持周期等于缺失,因为我不会为这个特定数据拟合季节性模型。 |
| |
所以,让我们探索第一个时间序列交叉验证组。 |
| |
你可以看到我的第一个训练集中有 17 行,接下来的六行是我的测试集。 |
| |
我的加载项要做的是将我要求它的任何 ARIMA 模型适合训练集。 它将使推荐的状态空间平滑模型适合训练集。 |
| |
它将通过 AIC 选择每个类的最佳模型,并将我对所选模型的预测带入测试集并评估预测误差。 |
| |
第二个时间序列交叉验证组将把训练集扩大一行,所以现在我的训练集是 |
| |
由第 1 行到第 18 行组成,接下来的六行是我的测试集。 然后我重复我在第一个时间序列交叉验证组中所做的过程。 |
| |
我适合用户要求的任何请求的 ARIMA 模型,并适合推荐的状态空间平滑模型。 通过 AIC 预测选择最佳模型放入测试集并存储预测误差。 |
| |
我会继续这样做,直到我用完所有数据。 因此,此示例的最终时间序列交叉验证组将使用第 1 行到第 22 行作为训练集,然后使用其余数据,即最后六行作为测试集。 |
| |
所以我提到我正在存储每个时间序列交叉验证组的预测误差。 |
| |
插件的作用是报告两个模型类的总体 RMSE、MAE 和 MAPE,并为您提供每个时间序列交叉验证组的 RMSE 图。 |
| |
您可以使用此表和此图来帮助您决定,是否适合每个模型进行预测或状态空间平滑模型预测。 |
| |
让我们看一下使用此数据运行的加载项。 |
| |
所以我将打开我从 box office mojo 获得的票房数据,我将运行这个脚本,它只是为这些数据启动时间序列平台,因为我只想看一下时间序列。 |
| |
我正在预测,每周的票房平均总收入,我可以看到随着周数的变化,平均总收入越来越大,所以我想进行对数转换 |
| |
到平均毛额。 我可以通过为平均毛额创建一个日志公式列来做到这一点,但是 |
| |
这不是必需的,加载项使您能够进行 Box Cox 转换,就像标准时间序列平台一样。 所以,我将启动我的加载项,点击免责声明。 我想预测在接下来的六周内每周平均关闭的票房。 |
| |
并且我想对平均毛额进行对数转换,因此我将使用 Lambda 为零的 Box Cox 转换。 |
| |
我会点击确定。 |
| |
因此,这将启动 Box Cox 转换响应的标准时间序列报告。 我可以适合任何类型的时间序列模型,我希望在 JMP 中可以使用这个红色小三角菜单。 |
| |
但相反,我将深入到报告的底部并使用时间序列交叉验证来获得关于我是否应该拟合 ARIMA 模型或状态空间平滑模型的建议。 |
| |
我将保持初始行为 17,因为这将得到我在前一个示例中显示的六个时间序列交叉验证组。 |
| |
我将保持 6 的预测长度,因为我想预测未来 6 周的票房,并且我将在此示例中保持周期等于缺失。 |
| |
所以我将单击运行,现在我必须说明我希望在每个时间序列交叉验证组中适合哪些 ARIMA 模型。 因此,我决定使用 1 的非季节性差分,但我会让自回归和移动平均订单为零或一。 |
| |
因此,当我单击估计将发生的情况是每个时间序列交叉验证组都将适合这四个 ARIMA 模型和推荐的状态空间平滑模型。 |
| |
所以我点击估计,插件正在做的是将这个数据集扩展到我的六个时间序列交叉验证组中,将请求的模型拟合到训练集预测到测试集并存储预测误差。 |
| |
所以我会向下滚动并查看结果。 从表中可以看出,总体而言,ARIMA 模型产生的 RMSE、MAE 和 MAPE 低于状态空间平滑模型。 而且,如果我看情节 |
| |
我可以看到 ARIMA 模型为每个时间序列交叉验证组产生了较低的 RMSE。 |
| |
因此,此加载项将建议使用 ARIMA 模型来为这些数据创建预测,而不是使用状态空间平滑模型。 所以我可以转到红色小三角菜单并继续使用 ARIMA 模型组选项拟合 ARIMA 模型。 |
| |
让我们看一下加载项的另一个示例,在下一个示例中,我将使用 MC3 Quarterly 示例数据的一个子集。 |
| |
MC3 Quarterly 样本数据包含来自 MC3 建模竞赛的 100 多个不同时间序列的数据。 该系列都是季刊。 |
| |
我认为这是一个有趣的数据集,因为它有很多不同的时间序列。 然而,在本次演讲中,出于时间原因,我只是从表格中随机抽取了三个系列的子集。 |
| |
所以我将启动我的加载项。 |
| |
并设置启动器我的 Y 列是我的时间序列,时间是时间 ID。 而且,由于我有多个系列的数据,因此我需要对系列列使用 by 选项。 再次假设我要预测未来两年,因此我将输入八个预测期,然后单击“确定”。 |
| |
正如您所期望的那样,这为我的表格中的每个不同系列提供了时间序列报告。 而且我还有一个针对表中每个系列的时间序列交叉验证控件。 |
| |
所以我可以对这些系列中的每一个使用时间序列交叉验证来获得关于使用 ARIMA 模型或状态空间平滑模型进行预测的建议。 |
| |
为了节省时间,我只会在第一个系列中这样做。 我将使用四个周期,因为我想为这个系列拟合季节性模型。 我会点击运行。 |
| |
因此,我将使用非季节性差分阶数为 1,但所有其他自回归移动平均阶数和季节性差分阶数的范围为 0 或 1。 |
| |
将观察期设置为四个,因为这也是季度数据。 所以当我点击估计时会发生什么 它将适合这 32 个 ARIMA 模型 |
| |
在每个时间序列交叉验证组中。 因此,加载项将转到系列为 N 691 的位置。 |
| |
它正在将其扩展为六个不同的时间序列交叉验证组。 它将我请求的 ARIMA 模型拟合到训练集。 对训练集推荐的状态空间平滑模型。 |
| |
由 AIC 选择最佳模型。 预测到测试集并存储预测误差。 |
| |
我给它一秒钟完成。 |
| |
开始了。 |
| |
我可以滚动并查看结果。 因此,从表中可以看出,ARIMA 模型产生的 RMSE、MAE 和 MAPE 低于状态空间平滑模型。 |
| |
从图中,我可以看到除了最后一个时间序列交叉验证组之外,ARIMA 模型的 RMSE 较低 |
| |
与状态空间平滑模型相比,它在最后一组中几乎相同。 |
| |
所以再次是时间序列交叉验证,并建议使用 ARIMA 模型为系列 N 691 创建预测。 而且,您可以转到其他不同的系列并重复该过程,对于那些可能会推荐状态空间平滑模型的系列。 |
| |
因此,我将通过展示加载项的另一个功能实际上与时间序列交叉验证无关来结束演示。 |
| |
我还为您提供了使用测试集来评估加载项的预测的能力,我将再次使用 Steel Shipments 示例数据展示这一点。 所以我将启动我的加载项。 好的,我想按日期预测钢铁出货量。 |
| |
假设我想预测未来两年,所以需要 24 个预测期,正如我之前提到的,如果您的系列足够长,对于保留集,您可以使用保留选项的预测 |
| |
选择模型。 所以,既然我这样做了,我真的不需要使用时间序列交叉验证。 所以,我可以使用训练测试集选项 |
| |
有一个独立的测试集来评估我选择的模型。 我会决定我希望我的测试集的长度是 12。 |
| |
这意味着它将获取我数据的最后 12 行,并将其完全排除在我的分析之外,以便我可以使用它来评估我的预测执行情况。 所以我会点击确定。 |
| |
你可以看到发生的事情是我在表格中添加了另一列。 它只是测试集的一个指标列,如果该行包含在测试集中,则它等于 1,否则为零。 |
| |
它只会将这些时间序列模型拟合到测试集为零的行。 这允许我保持测试集的独立性。 |
| |
因此,让我们将一些 ARIMA 模型拟合到这些数据中。 我使用与本次演讲开始时相同的控件,季节性和非季节性差分阶数为 1,但让其他所有阶数的范围从 0 到 1。 |
| |
因此,我单击估计来运行这 16 个不同的季节性 ARIMA 模型,我还将拟合推荐的状态空间平滑模型。 |
| |
所以,我将向下滚动到模型比较窗口,我可以看到最小化抑制集中均方根误差的模型是状态空间平滑模型,具有附加误差没有趋势和附加季节性。 |
| |
假设我也只对性能最佳的 ARIMA 模型在测试集中的表现感兴趣。 我也可以选择它。 |
| |
我将删除我不再考虑进行预测的其他模型。 |
| |
所以,我再次使用了对保留选项的预测,所以我会选择这个状态空间平滑模型来进行预测,但我只是好奇 ARIMA 模型在测试集中的表现。 |
| |
所以我可以向下滚动到我的测试集分析框。 而且,这将要做的是,因为我使用了保留选项的预测,它将把这两个选定的模型重新拟合到组合的训练和保留数据中,以获得更新的参数。 |
| |
然后它将预测到测试集并评估与实际测试集数据相比预测的执行情况。 |
| |
因此,我将单击运行来执行该分析。 而且,我可以看到我有一个测试集 RMSE、MAE 和 MAPE 的表格,以及一个测试集与预测相比的图。 |
| |
我可以看到状态空间平滑模型不仅在抑制集中表现更好,而且在测试集中表现也更好。 所以这个测试集分析选项只是给你一个工具来评估你的模型拟合的表现。 |
| |
所以,总结一下。 该插件允许您执行时间序列交叉验证。 |
| |
如果您的时间序列数据不够长,无法使用 JMP 中的预测保留选项,但您仍想考虑使用不同的模型类,我认为此插件可能对您有用。 |
| |
该加载项还使您能够使用测试集来评估预测。 而且,作为免责声明,与时间序列数据的所有模型选择措施一样,加载项不保证更准确的预测。 |
| |
非常感谢您的宝贵时间。 我希望您试用该加载项,并希望您喜欢 Discovery 的其余部分。 非常感谢。 |