| 揚聲器 |
抄本 |
| |
您好,感謝您抽空閱讀這篇文章。我叫 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 的後續功能。非常感謝! |