當前位置:
首頁 > 最新 > 如何使用Python超參數的網格搜索ARIMA模型

如何使用Python超參數的網格搜索ARIMA模型

更多騰訊海量技術文章,請關注云+社區:https://cloud.tencent.com/developer

我們都知道用於時序分析和預測的ARIMA模型可能很難配置。

需要通過反覆地審查診斷圖和已經使用了40多年的啟發式策略中訓練並修正三個參數的錯誤。

我們可以通過使用網格搜索過程來自動化評估ARIMA模型的大量超參數的過程。

在本教程中,您將了解如何使用Python中的超參數網格搜索來調整ARIMA模型。

完成本教程後,您將知道:

您可以使用一般程序來調整ARIMA的超參數以進行滾動式一步預測(rolling one-step forecast)。

如何在標準單變數時間序列數據上應用ARIMA超參數優化。

擴展更精細和強大的模型程序的思路。

讓我們開始吧。

時間序列的診斷圖可以與啟發式策略一起使用以確定ARIMA模型的超參數。

他們可以大多數都可以確定ARIMA模型的參數,但有的時候不能確定。

我們可以使用不同的模型超參數的組合來自動化訓練和評估ARIMA模型。在機器學習中,這被稱為網格搜索或模型調整。

在本教程中,我們將開發一種網格搜索ARIMA超參數的單步滾動預測方法。

該方法分為兩部分:

評估一個ARIMA模型。

評估一組ARIMA參數。

本教程中的代碼使用Python庫是scikit-learn,Pandas和statsmodels。

1.評估ARIMA模型

我們可以通過在訓練數據集上準備ARIMA模型並評估測試數據集的預測來評估ARIMA模型。

這種方法涉及以下步驟:

將數據集分解為訓練集和測試集。

按測試數據集中的時間序列進行預測。

訓練一個ARIMA模型。

做一個一步的預測。

存儲預測結果; 獲取並存儲實際觀察結果。

計算與預期值的誤差。

我們可以在Python中將其實現為一個新的獨立函數,名為evaluate_arima_model(),它將時間序列數據集作為輸入,以及具有p,d和q參數的元組作為輸入。

數據集分為兩部分:初始訓練數據集為66%,測試數據集為剩餘的34%。

我們需要對測試集的數據進行迭代。只需要一次迭代就可以提供一個可以用來對新數據進行預測的模型。迭代方法允許每個時間步驟訓練新的ARIMA模型。

每次迭代都進行一次預測並存儲在一個列表中。這樣,在測試集結束時,所有預測都可以與期望值列表進行比較,並計算差值。所以我們就計算並返回均方誤差數。

下面列出了完整的功能。

現在我們已經知道如何評估一組ARIMA超參數,那接下來讓我們來看看如何重複調用這個函數來對參數網格進行評估。

2.迭代ARIMA參數

評估一套參數是相對比較簡單的。

用戶必須指定p,d和q ARIMA參數的網格來迭代計算。並為每個參數創建一個模型,通過調用前一節中提到的evaluate_arima_model()函數來評估其性能。

該函數必須跟蹤觀察到的最低誤差分數並記錄它的配置參數。我們可以在函數末尾加個列印功能將這些信息列印到標準輸出上(默認直接列印到屏幕)。

我們可以將這個名為evaluate_models()的函數實現這個功能,這個函數包含四個循環的。

還要考慮兩個額外的問題。首先是確保輸入數據是浮點值(而不是整數或字元串),如果不是浮點值這可能導致ARIMA過程失敗。

其次,統計模型ARIMA程序內部使用數值優化程序為模型找到一組係數。這些程序可能會失敗,還可能會引發異常。我們必須捕獲這些異常並跳過導致問題的配置。出現的異常次數可能遠遠超出你的想像。

此外,建議對此代碼忽略警告,以避免運行過程產生大量干擾信息。完成代碼如下:

最後,即使有了所有這些保護措施,底層的C和Fortran庫仍然會有警告輸出,例如:

為簡潔起見,這些告警內容已從本教程中報告的結果中刪除。下面列出了評估ARIMA超參數網格的完整過程。

現在我們就有一個網格搜索ARIMA超參數的程序,讓我們來測試兩個單變數時間序列問題的過程。

我們將從洗髮水銷售數據集開始。

洗髮水銷售數據集包括了3年內洗髮水的月銷售數量。

這些數據的單位是一個銷售計數,有36個數據點。原始數據集歸功於Makridakis,Wheelwright和Hyndman(1998)等人的收集工作。

從這裡了解關於數據集的更多信息:https://datamarket.com/data/set/22r0/sales-of-shampoo-over-a-three-year-period

下載數據集並將其放置到當前工作目錄中,文件名為 「 shampoo-sales.csv 」。

數據的時間軸並沒有給出年份。所以我們可以使用自定義的日期分析函數載入數據和基準年(從1900年開始),如下所示:

載入成功後,我們就可以指定一個p,d和q值的位置來搜索並傳遞給evaluate_models()函數。

我們將嘗試一套滯後值(p)和幾個差異迭代(d)和殘差滯後值(q)。

將這一切與上一節定義的通用函數聯合使用,我們可以在洗髮水銷售數據集中網格搜索ARIMA超參數。

完整的代碼示例如下所示。

運行該示例將列印每個成功完成評估的ARIMA參數和均方差(MSE)。

在運行結束時報告ARIMA(4,2,1)的最佳參數,均方誤差為4,694.873。

「每日女性出生」數據集是來自1959年加州每天的女性出生人數。

單位是計數單位,有365數據點。數據集的來源歸功於Newton(1988)。

在這裡了解關於數據集的更多信息:https://datamarket.com/data/set/235k/daily-total-female-births-in-california-1959

下載數據集並將其放在當前工作目錄中,文件名為 「 daily-total-female-births.csv 」。

這個數據集可以直接作為Pandas Series輕鬆讀取。

為了簡單起見,我們將探索與上一節中相同的ARIMA超參數網格。

我們將前面的函數聯合使用,我們就可以在「每日女性出生」數據集中網格搜索ARIMA參數。下面提供了完整的代碼。

運行該示例列印每個配置成功評估的ARIMA參數和均方根誤差。

最好的平均參數被報道為ARIMA(6,1,0),均方誤差為53.187。

本教程中使用的網格搜索方法很簡單,可以很容易地擴展。

本節列出了一些想法來擴展您可能希望探索的方法。

種子網格(Seed Grid)。ACF(Auto Correlation Function)和PACF圖的經典診斷工具仍然可以與用於搜索ARIMA參數網格的結果一起使用。

備用措施(Alternate Measures)。該搜索將通過優化樣本外均方誤差。這可以更改為另一個樣本外統計量,樣本統計量,如AIC(Akaike information criterion)或BIC(Bayesian Information Criterion),或兩者的組合。您可以選擇對您的項目最有意義的指標。

殘差診斷(Residual Diagnostics)。統計數據可以自動計算殘差,以提供合適的額外預測。例子包括殘差分布是否為高斯的統計檢驗,以及殘差是否存在自相關。

更新模型(Update Model)。ARIMA模型是從頭開始為每個單步預測創建的。通過仔細檢查API,可以用新的觀察值更新模型的內部數據,而不是從頭開始重新創建。

先決條件(Preconditions)。ARIMA模型可以對時間序列數據集進行假設,例如正態性和平穩性方面的假設。在給定的模型被訓練之前,可以對這些數據集進行檢查並給出警告。

在本教程中,您了解了如何使用Python超參數的網格搜索ARIMA模型。

具體來說,你了解到:

您可以使用網格搜索ARIMA超參數進行單步滾動預測的過程。

如何應用ARIMA超參數調整標準單變數時間序列數據集。

關於如何進一步改進ARIMA超參數網格搜索的思路。

現在就要你自己動手做實驗了。

翻譯人:Hi胡瀚,該成員來自雲+社區翻譯社

原文作者:Jason Brownlee


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python安裝篇
Python3 Python 常用內建模塊

TAG:Python |