酷播亮新聞
最棒的知識補給站

如何使用 Python 進行時間序列預測?

譯者:Hi胡瀚@雲+社區翻譯社

原文作者:Jason Brownlee

建立基線對於任何時間序列預測問題都是至關重要的。

性能基準讓您了解所有其他模型如何在您的問題上實際執行。

在本教程中,您將了解如何開發持久性預測,以便用Python計算時間序列數據集的性能基準級別。

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

計算時間序列預測問題的性能基線的重要性。

如何在Python中從頭開發一個持久化模型。

如何評估來自持久性模型的預測,並用它來建立性能基準。

讓我們開始吧。

此配圖與本文無關

預測基準性能(Forecast Performance Baseline)

預測基準性能給我們提供了一個比較點。

這是您的問題的所有其他建模技術的參考點。如果一個模型達到或低於基線的性能,該技術應該被固定或放棄。

用於生成預測以計算基線性能的技術必須易於實施,並且針對特定問題的細節尚未實現。

在為預測問題建立性能基準之前,您必須開發一個測試工具。這包括:

您打算用來訓練和評估模型的數據集

您打算用來估計技術性能的重採樣技術(如,訓練/測試分離)。

您打算用於評估預測的性能指標(例如均方誤差)。

準備好之後,您需要選擇一個樸素的方法,您可以使用此方法進行預測並計算基準性能。

目標是儘可能快地獲得時間序列預測問題的基線性能,以便您更好地了解數據集並開發更高級的模型。

制定基線預測的好技術的三個屬性是:

簡單:只需要很少或根本不需要訓練和智力的方法。

快速:一種快速執行的方法,在計算上可以做出預測。

可重複:一種確定性的方法,意味著它在給定相同的輸入的情況下產生預期的輸出。

用於建立基準性能的常用演算法是持久性演算法。

持久性演算法(”樸素”預測)

監督機器學習最常見的基線方法是零規則演算法。

該演算法在分類時可以預測大多數類別,或者在回歸時可以預測平均結果。這可以用於時間序列,但不可以用於時間序列數據集中與序列相關的結構。

與時間序列數據集一起使用的等效技術是持久性演算法。

持久性演算法使用前一時間步(t-1)的值來預測下一時間步(t + 1)的預期結果。

這滿足了上述三個基準線預測的條件。

為了做到這一點,我們將研究如何開發一個持久性模型,並用它來建立一個簡單的單變數時間序列問題的基線性能。首先,我們來回顧一下洗髮水銷售的數據集。

洗髮水銷售數據集

該數據集描述了3年期間洗髮劑銷售的每月數量。

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

以下是前5行數據的示例,包括標題行。

以下是從Data Market獲取的整個數據集的圖表,您可以下載數據集並了解更多信息。

洗髮水銷售數據集

數據集呈現增長趨勢,當然可能還有一些季節性因素。

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

以下代碼片段將載入Shampoo Sales數據集並繪製時間序列。

運行程序可以繪製時間序列,如下所示:

洗髮水銷售數據集情況

持久性演算法

持久模型可以在Python中輕鬆實現。

我們將這個部分分成4個步驟:

將單變數數據集轉換為監督學習問題。

建立測試設備的訓練和測試數據集。

定義持久性模型。

進行預測並建立基準性能。

查看完整的示例並繪製輸出。

讓我們來具體實施下把

第一步:定義監督學習問題

第一步是載入數據集並創建一個滯後表示。也就是說,給定t-1的數據值,預測t + 1的數據值。

這段代碼創建數據集並列印新數據集的前5行。

我們可以看到,第一行(索引0)的數據將被剔除,因為在第一個數據點之前沒有用於進行預測的數據點。

從監督學習的角度來看,t-1列是輸入變數或稱為x變數,而t + 1列是輸出變數或稱為y變數。

第2步:訓練集和測試集

下一步是將數據集分成訓練集和測試集。

我們將保留”訓練集”的前66%的數據點,其餘的34%的數據用於評估。在劃分過程中,我們要注意剔除掉第一行數據(值為NaN)。

在這種情況下不需要訓練了; 因為訓練只是我們習慣做的,並不是必須的。每個訓練集和測試集然後被分成輸入和輸出變數。

第3步:持久性演算法

我們可以將我們的持久性模型定義為直接返回輸入值的函數。

例如,如果提供的t-1值為266.0,則將其作為預測返回,而實際的實際值或期望值恰好為145.9(取自滯後數據集的第一個可用行)。

步驟4:制定和評估預測

現在我們可以在測試數據集上評估這個模型。

我們使用前向驗證方法來做到這一點。

不需要進行模型訓練或再訓練,所以本質上,我們按照時間序列逐步完成測試數據集並得到預測。

一旦完成對訓練數據集中的每個時間點進預測,就將其與預期值進行比較,並計算均方差(MSE)。

在這種情況下,測試數據集的均方差超過17730。

第5步:完成示例

最後,在同一個圖中繪製測試數據集合的預期值曲線、訓練數據集的數據曲線和不一致的預測圖。

從持久性模型預測的情節來看,這個模型顯然是落後於現實的一步。銷售數字有上升的趨勢並且會受累月的干擾數據影響,凸顯了持久性技術的局限性。

洗髮水銷售持久性模型

完整的例子如下所示。

我們已經學習了從頭開發一個針對洗髮水銷售問題的持久性模型的例子。

持久性演算法是樸素的。它通常被稱為樸素的預測(naive forecast)。

它並不假定它所適用的時間序列問題的具體情況。這使得理解變得容易,實施和評估也變得很快。

作為一名機器學習的,也可以進行大量的改進。

請吧這些改進的想法都記下來。這是非常有用的,因為這些想法可以成為特徵工程工作中的輸入特徵,或者可以在後來的合成工作中組合成簡單的模型。

結論

在本教程中,您了解到了如何建立Python時間序列預測問題的基準性能。

具體來說,你了解到:

建立一個基線和你可以使用的持久化演算法的重要性。

如何從頭開始在Python中實現持久化演算法。

如何評估持久化演算法的預測並將其用作基準。

題圖:pexels,CC0 授權。


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

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


請您繼續閱讀更多來自 編程派 的精彩文章:
如有侵權請來信告知:酷播亮新聞 » 如何使用 Python 進行時間序列預測?