用機器學習進行時間序列預測該如何避免那些常見“陷阱”?

點擊上放關注,All in AI中國

在我的其他帖子中,我談過很多主題,例如:如何將機器學習和物理結合起來,以及機器學習如何用於生產優化以及異常檢測和狀態監測。但在這篇文章中,我將討論時間序列預測中機器學習的一些常見缺陷。

用機器學習進行時間序列預測該如何避免那些常見“陷阱”?

時間序列預測是機器學習的一個重要領域。這很重要,因為有很多涉及時間成分的預測問題。然而,雖然時間組件添加了額外的信息,但與許多其他預測任務相比,它還使得時間序列問題更難以處理。

這篇文章將介紹使用機器學習進行時間序列預測的任務,以及如何避免一些常見的陷阱。通過一個具體的例子,我將展示如何擁有一個好的模型並把它投入生產,而實際上,該模型可能沒有任何預測能力,更具體地說,我將專注於如何評估你的模型精度,並顯示如果簡單地依賴常見的錯誤指標,如平均百分比誤差,R2得分等。

時間序列預測的機器學習模型

有幾種類型的模型可用於時間序列預測。在這個具體的例子中,我使用了長短時記憶網絡,或者簡稱LSTM網絡,這是一種特殊的神經網絡,可以根據以前的數據進行預測。它廣泛應用於語音識別、時間序列分析等領域。但是,根據我的經驗,在許多情況下,更簡單的模型類型實際上提供了準確的預測。使用諸如隨機森林、梯度增強迴歸和時間延遲神經網絡等模型,可以通過一組時延加入到輸入中,從而在不同的時間點表示數據。由於TDNN的序列特性,它被認為是前饋神經網絡,而不是遞歸神經網絡。

如何使用開源軟件庫實現模型

我通常使用Keras來定義我的神經網絡模型類型,Keras是一個高級神經網絡API,用Python編寫並且能夠在TensorFlow、CNTK或Theano之上運行。對於其他類型的模型,我通常使用Scikit-Learn,這是一個免費的軟件機器學習庫,它具有各種分類、迴歸和聚類算法,包括支持向量機、隨機森林、梯度增強、k均值和DBSCAN,並設計與Python數值和科學庫NumPy和SciPy互操作。

但是,本文的主要內容不是如何實現時間序列預測模型,而是如何評估模型預測。因此,我不會詳細介紹模型構建等,因為還有很多其他博客文章和文章涵蓋這些主題。

示例案例:時間序列數據的預測

在這種情況下使用的示例數據如下圖所示。稍後我將更詳細地回到數據,但是現在,我們假設這些數據代表股票指數的年度演變。數據被分成訓練和測試集,其中前250天用作模型的訓練數據,然後我們嘗試在數據集的最後部分預測股票指數。

用機器學習進行時間序列預測該如何避免那些常見“陷阱”?

由於我不關注模型實現,因此我們直接進入評估模型準確性的過程。僅通過對上圖的直接觀察,模型預測似乎與實際指標非常接近,表明了良好的準確性。但是,為了更加精確,我們可以通過繪製如下圖所示的散點圖中的實際值與預測值來評估模型精度,並計算常見誤差度量R2得分。

用機器學習進行時間序列預測該如何避免那些常見“陷阱”?

從模型預測中,我們獲得了0.89的R2得分,並且看似真實值和預測值之間匹配良好。但是,正如我現在將更詳細地討論的那樣,這種度量和模型評估可能會產生誤導。

這是完全錯誤的......

從上面的數字和計算的誤差指標來看,該模型顯然給出了準確的預測。然而,實際情況並非如此,這只是一個例子,說明在評估模型性能時,選擇錯誤的準確度度量可能非常具有誤導性。在該示例中,為了便於說明,明確地選擇數據以表示實際上不能預測的數據。更具體地說,我稱之為“股票指數”的數據實際上是使用隨機遊走過程建模的。顧名思義,隨機遊走是一個完全隨機的過程。因此,使用歷史數據作為訓練集以學習行為和預測未來結果的想法是不可能的。鑑於此,這個模型怎麼可能給我們如此準確的預測呢?我將更詳細地回顧一下,最終發現,這一切都歸結為(錯誤的)精確度度量選擇。

時間延遲預測和自相關

顧名思義,時間序列數據不同於其他類型的數據,因為時間方面很重要。從積極的方面來說,這為我們在構建我們的機器學習模型提供了額外的信息,不僅輸入特性包含有用信息,而且輸入/輸出隨時間變化。然而,雖然時間組件添加了額外的信息,但與許多其他預測任務相比,它還使得時間序列問題更難以處理。

在這個具體的例子中,我使用了一個LSTM網絡,它根據以前的數據進行預測。但是,當稍微放大模型預測時,如下圖所示,我們開始看到模型實際上在做什麼。

用機器學習進行時間序列預測該如何避免那些常見“陷阱”?

時間序列數據往往具有時間相關性,並且表現出顯著的自相關性。在這種情況下,這意味著時間“t + 1”處的索引很可能接近t時刻的索引。如右圖所示,模型實際上在做的是,當在時間“t + 1”預測值時,它只是簡單使用時間“t”的值作為預測(通常稱為持久性)模型)。繪製預測值與實際值之間的互相關(下圖),我們可以看到,在滯後1天的時間處有一個明顯的峰值,表明該模型僅使用先前的值作為對未來的預測。

用機器學習進行時間序列預測該如何避免那些常見“陷阱”?

如果使用不當,準確度指標可能會非常具有誤導性

這意味著,在根據其直接預測值的能力評估模型時,常見的誤差度量(例如平均百分比誤差和R2分數)都表明高預測準確性。但是,由於示例數據是通過隨機遊走過程生成的,因此該模型無法預測未來結果。這突出了一個重要的事實,即通過直接計算常見錯誤度量來簡單地評估模型預測能力可能會產生誤導,並且很容易被人誤解為對模型準確性過於自信。

平穩性和差分時間序列數據

靜止時間序列是其統計特性(例如均值、方差、自相關等)隨時間變化的常數。大多數統計預測方法基於這樣的假設:通過使用數學變換可以使時間序列近似靜止(即,“固定”)。一個這樣的基本轉換就是數據的時差,如下圖所示。

用機器學習進行時間序列預測該如何避免那些常見“陷阱”?

這種轉變的作用是,我們不是直接考慮指標,而是計算連續時間步長之間的差值。

定義模型以預測時間步長之間的值的差異而不是值本身,是對模型預測能力的更強的測試。在這種情況下,不能簡單地使用數據具有強自相關性,並使用時間“t”的值作為“t + 1”的預測。因此,它提供了對模型的更好測試,以及它是否從訓練階段學到了任何有用的東西,以及分析歷史數據是否實際上可以幫助模型預測未來的變化。

時差數據的預測模型

由於能夠預測時差數據而不是直接預測數據,是模型的預測能力的一個更強的指標,讓我們嘗試使用我們的模型來試試。該測試的結果如下圖所示,顯示了實際值與預測值的散點圖。

用機器學習進行時間序列預測該如何避免那些常見“陷阱”?

該圖表明該模型不能基於歷史事件預測未來的變化,這是這種情況下的預期結果,因為數據是使用完全隨機隨機遊走過程生成的。根據定義,能夠預測隨機過程的未來結果是不可能的,如果有人聲稱這樣做,那麼我們應該要保持懷疑

你的時間序列是隨機遊走嗎?

您的時間序列實際上可能是隨機遊走,有些方法可以檢查如下:

  • 時間序列顯示強烈的時間依賴性(自相關),其線性衰減或以類似的模式衰減。
  • 時間序列是非平穩的並且使其靜止,在數據中沒有明顯可學習的結構。
  • 持久性模型(使用前一時間步驟中的觀察結果,作為下一個時間步驟中將要發生的事情)提供了可靠預測的最佳來源。

最後一點是時間序列預測的關鍵。使用持久性模型的基線預測可以快速表明您是否可以做得更好。如果你不能,則可能是在處理隨機遊走(或接近它)。人類的大腦天生就會到處尋找模式,我們必須保持警惕,不要通過為隨機遊走過程開發複雜的模型來浪費時間。

總結

我想通過本文強調的主要觀點是,在評估模型性能的預測精度時要非常小心。通過上面的例子可以看出,即使是完全隨機的過程,根據定義預測未來結果也是不可能的,人們很容易被愚弄。通過簡單地定義模型,進行一些預測並計算常見的準確度指標,人們似乎可以擁有一個好的模型並決定將其投入生產。然而,實際上,該模型可能沒有任何預測能力。

如果您正在進行時間序列預測,並且可能認為自己是一名數據科學家,我建議您也將重點放在科學家方面。始終對數據所告訴你的內容持懷疑態度,提出關鍵問題並且從不得出任何輕率的結論。科學方法應該像應用於任何其他科學一樣應用於數據科學。

用機器學習進行時間序列預測該如何避免那些常見“陷阱”?

編譯出品


相關推薦

推薦中...