用python做時間序列預測一:初識概念

程式設計師一一滌生發表於2020-06-02

利用時間序列預測方法,我們可以基於歷史的情況來預測未來的情況。比如共享單車每日租車數,食堂每日就餐人數等等,都是基於各自歷史的情況來預測的。

什麼是時間序列?

  • 時間序列,是指同一個變數在連續且固定的時間間隔上的各個資料點的集合,比如每5分鐘記錄的收費口車流量,或者每年記錄的藥物銷量都是時間序列。

時間序列的型別

  • 根據時間間隔的不同,時間序列可以是按年度(Annual)、季度、月度、周、小時、分鐘、秒等頻率採集的序列。

時間序列的成分

  • 趨勢(Trend),比如長期上漲或長期下跌。
  • 季節性(Seasonal),比如羽絨服的銷量一般會在冬季更高,或者某家燒烤店的生意一般會在每週五和週六晚上更好。
  • 週期性(Cyclic),比如你時不時搞個大促,那麼銷量在那段時間就會比較好。
  • 誤差。

什麼是時間序列預測?

  • 就是用同一個變數的歷史值預測未來值,或者除了歷史值以外,還加入一些預測因子(又稱外生變數)來預測未來值。前者稱為單變數時間序列預測,後者稱為多變數時間序列預測。
  • 比如,我們要預測某海灘下個月的的遊客數量,除了用歷史遊客數量做預測外,還可以加入溫度這個因子。那麼只用歷史遊客數量做預測就是單變數時間預測,加入溫度這個因子就是多變數時間預測,當然還可以加入其它合理的預測因子,比如該海灘的每月廣告支出等。

一些簡單的預測方法

均值法

所有未來的預測值等於歷史資料的平均值。

樸素法

簡單的將最後一次觀測值作為未來的預測值。

季節性樸素法

相比樸素法,就是考慮了季節性,也就是說將同期的最後一次觀測值作為本期的預測值,比如預測本週的數值,那麼就將上週的週一觀測值作為本週的週一預測值,上週的週二觀測值作為本週的週二預測值,以此類推。

漂移法(drift )

在起始觀測值和最後一次觀測值之間畫一條連線線,延伸到預測時間點,作為預測值,公式如下:

下面的2副圖展示了上面四種方法的預測效果:

常用的時間序列預測法

  • Exponential smoothing 指數平滑
    簡單說就是用過去的觀測值的加權平均值來作為預測值,權重隨著與當前時刻的距離變遠而呈指數衰減。
  • ARIMA
    簡單說就是用變數的自迴歸(AR)與歷史預測誤差的自迴歸(MA)構成的時間序列預測模型。
  • 基於深度學習的方法
    簡單說就是利用神經網路強大的學習能力,從時間序列歷史資料中提取各種可能的特徵,從而對未來進行預測。這部分的模型比較多,比如LSTM,Seq2seq等。

注意,上述的方法並不能說誰一定比誰好,不同的預測場景下每個方法都有可能做出更好的預測,所以通常需要相互比較,以便做出更合理的預測。

本篇介紹了時間序列的相關概念,下一篇將介紹時間序列的一般資料格式和基於python的視覺化方法。

ok,本篇就這麼多內容啦~,感謝閱讀O(∩_∩)O。

相關文章