扬声器
|
成绩单
|
| |
您好,感谢您抽出时间查看此内容。 我叫雅各布·莱恩。 我是 JMP 的软件测试员。 今天,我将与您分享我编写的一个插件,可帮助您在 JMP 时间序列平台中选择 ARIMA 模型或状态空间平滑模型。 |
| |
因此,我首先简要概述在时间序列平台中拟合 ARIMA 和状态空间平滑模型。 |
| |
我将介绍对插件的需求,以帮助在这两个模型类之间进行选择。 并概述时间序列交叉验证,这是该插件的主要工具。 然后我将使用 JMP 16.1 演示该插件。 |
| |
JMP 中的时间序列平台允许用户拟合许多不同的时间序列模型。 本次演示的重点是 ARIMA 和状态空间平滑模型,我将展示如何使用钢铁发货示例数据来拟合这两个模型。 |
| |
钢铁出货量样本数据包含 1984 年至 1991 年美国钢铁出货量的月度总计。 而且,我将使用专业建模菜单中的时间序列平台来探索这一点。 |
| |
钢铁出货量列是我的时间序列。 日期列是我的时间 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 个不同的时间序列交叉验证组。 |
| |
我的预测长度为六,因为我想预测接下来六周的票房。 而且,在这里我将保持周期等于缺失,因为我不会为这个特定数据拟合季节性模型。 |
| |
那么,让我们探索第一个时间序列交叉验证组。 |
| |
您可以看到我的第一个训练集中有 17 行,接下来的 6 行是我的测试集。 |
| |
我的插件要做的就是将我要求的任何 ARIMA 模型拟合到训练集。 它将把推荐的状态空间平滑模型拟合到训练集。 |
| |
它将通过 AIC 选择每个类别的最佳模型,并将我对所选模型的预测放入测试集并评估预测误差。 |
| |
第二个时间序列交叉验证组将把训练集扩展一行,所以现在我的训练集是 |
| |
由第一行到第十八行组成,接下来的六行是我的测试集。 然后我重复我在第一个时间序列交叉验证组中所做的过程。 |
| |
我适合用户要求的任何 ARIMA 模型,并适合推荐的状态空间平滑模型。 通过AIC预测选择最佳模型放入测试集中并存储预测误差。 |
| |
我会继续这样做,直到用完所有数据为止。 因此,此示例的最终时间序列交叉验证组将使用第 1 行到第 22 行作为训练集,然后使用其余数据(最后 6 行)作为测试集。 |
| |
所以我提到我正在存储每个时间序列交叉验证组的预测误差。 |
| |
该插件的作用是报告两个模型类的总体 RMSE、MAE 和 MAPE,并为您提供每个时间序列交叉验证组的 RMSE 图。 |
| |
您可以使用此表和此图来帮助您决定是否适合每个模型进行预测或状态空间平滑模型预测。 |
| |
让我们看一下加载项如何使用这些数据。 |
| |
因此,我将打开从 Box Office mojo 获得的票房数据,然后运行此脚本,该脚本将启动此数据的时间序列平台,因为我只想查看时间序列。 |
| |
我正在预测每周的平均票房收入,我可以看到随着时间的推移,方差和平均总收入会变得更大,所以我想进行对数转换 |
| |
到平均毛额。 我可以通过为平均毛额创建一个对数公式列来做到这一点,但是 |
| |
这不是必需的,该插件使您能够进行 Box Cox 转换,就像标准时间序列平台一样。 因此,我将启动我的加载项,单击免责声明。 我想预测未来六周内每周的平均收盘票房。 |
| |
我想对平均总量进行对数变换,因此我将使用 Lambda 等于 0 的 Box Cox 变换。 |
| |
我将单击“确定”。 |
| |
因此,这将启动 Box Cox 转换响应的标准时间序列报告。 我可以拟合任何类型的时间序列模型,我希望 JMP 中可以通过这个红色三角形菜单提供这些模型。 |
| |
但相反,我将深入到报告的底部,并使用时间序列交叉验证来获取关于我是否应该拟合 ARIMA 模型或状态空间平滑模型的建议。 |
| |
我将把初始行保留在 17 行,因为这将为我提供六个时间序列交叉验证组,正如我在前面的示例中所示的那样。 |
| |
我将预测长度保持为六,因为我想预测未来六周的票房,并且在此示例中我将保持该时间段等于缺失。 |
| |
因此,我将单击“运行”,现在我必须说出我希望将哪些 ARIMA 模型放入每个时间序列交叉验证组中。 因此,我决定使用非季节性差分 1,但我会让自回归和移动平均阶数为零或 1。 |
| |
因此,当我单击“估计”时,每个时间序列交叉验证组都会发生什么,它将适合这四个 ARIMA 模型和推荐的状态空间平滑模型。 |
| |
因此,我单击“估计”,该加载项所做的是将这个数据集扩展为我的六个时间序列交叉验证组,将请求的模型拟合到训练集预测到测试集并存储预测误差。 |
| |
所以我将向下滚动并查看结果。 从表中您可以看到,总体而言,ARIMA 模型产生的 RMSE、MAE 和 MAPE 低于状态空间平滑模型。 而且,如果我看一下情节 |
| |
我可以看到 ARIMA 模型为每个时间序列交叉验证组产生了较低的 RMSE。 |
| |
因此,此加载项建议使用 ARIMA 模型来创建此数据的预测,而不是状态空间平滑模型。 因此,我可以转到红色小三角菜单,然后继续使用 ARIMA 模型组选项拟合 ARIMA 模型。 |
| |
让我们看一下加载项的另一个示例,为了执行下一个示例,我将使用 MC3 Quarterly 示例数据的子集。 |
| |
MC3 季度样本数据包含来自 MC3 建模竞赛的 100 多个不同时间序列的数据。 该系列均为季刊。 |
| |
我认为这是一个有趣的数据集,因为它有很多不同的时间序列。 然而,出于时间原因,在本次演讲中,我只是从表中随机选取了该系列中的三个子集。 |
| |
所以我将启动我的加载项。 |
| |
并设置启动器我的Y列是我的时间序列,时间是时间ID。 而且,由于我有多个系列的数据,我需要对系列列使用 by 选项。 再次假设我要预测未来两年,因此我将输入八个预测期并单击“确定”。 |
| |
正如您所期望的,这为我的表格中的每个不同系列提供了时间序列报告。 我还为表中的每个系列提供了时间序列交叉验证控件。 |
| |
因此,我可以对每个系列使用时间序列交叉验证,以获得使用 ARIMA 模型或状态空间平滑模型进行预测的建议。 |
| |
由于时间关系,我只会在第一个系列中这样做。 我将使用四个周期,因为我想为该系列拟合季节性模型。 我将点击运行。 |
| |
因此,我将使用非季节性差分阶数为 1,但所有其他自回归移动平均阶数和季节性差分阶数的范围为 0 或 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 的其余部分。 非常感谢。 |