【时间序列】时间序列基本概念总结
最近一直在接觸時間序列,所以打算寫一些有關時間序列的文章,預測部分會從規則開始、到傳統模型、到機器學習、再到深度學習,此外也會介紹一些時間序列的基本概念,包括自相關、平穩性、滯后性、季節性等。
1.基本概念
1.1 時間序列預測
預測是商業中的常見統計任務,它可以為生產、運輸和人員安排等決策提供信息,并為長期戰略規劃提供指導。預測是指在考慮到所有可用信息的前提下,包括歷史數據和可以影響預測的任何未來事件的知識,盡可能準確地預言。
而時間序列預測是指按照時間順序觀察事物的變換。通常會利用同一變量的歷史值預測未來值,或者也可以加入一些預測因子來預測未來值。前者稱為單變量時間序列預測,后者稱為多變量時間序列預測。
通常我們指的時間序列預測都是考慮定期觀察的時間序列(如每分、每小時、每天、每周等)。比較經典的案例有:降水量預測、銷售預測、流量預測等。
1.2 時間序列成分
時間序列包含很多特征中包含諸多成分,有:
趨勢:指時間序列在較長一段時間內呈現出來的持續向上或者持續向下的變動;
季節性:指時間序列在一年內重復出現的周期性波動,如氣候條件、生產條件、節假日等;
殘差:也稱為不規則波動,指除去趨勢、季節性、周期性外的隨機波動。不規則波動通常總是夾雜在時間序列中,致使時間序列產生一種波浪形或震蕩式的變動。只含有隨機波動的序列也稱為平穩序列。
下圖展示了一個時間序列被分解的過程,第一張圖是所觀察的時間序列,第二張圖是趨勢、第三張圖是季節性,第四張圖是殘差:
(以上序列并不存在周期性,這里只是舉個例子)
1.3 平穩性
1.3.1 類別
平穩性分為弱平穩和嚴平穩,我們分別給出定義:
「弱平穩」:若序列 存在有限二階矩。且滿足
則稱序列 為弱平穩序列。
與 t 無關;
與 t 無關;
與 t 無關;
「嚴平穩」:對于所有可能的 n,所有可能的 ,和所有可能的 k,當 的聯合分布與 的聯合分布相同時,則序列是強平穩。
值得注意的是,「兩種平穩過程并沒有包含關系」,即弱平穩不一定是嚴平穩,嚴平穩也不一定是弱平穩。(感興趣的可以自己查資料證明,這里不過多介紹)
由于嚴平穩的要求過于苛刻,所以我們所說的大部分時間序列預測都是弱平穩的時間序列。
1.3.2 為什么需要平穩性
那么我們為什么要關注序列的平穩性呢?
這是因為有些預測統計方法是以平穩序列為假設前提而進行設計的,比如自回歸模型。其假設是變量的歷史與現狀呈現出基本特性,并在未來階段的一個時間里會維持不變。
更具體的說,自回歸預測模型的本質是“利用序列的滯后階數(lags)作為自變量”的線性回歸模型,比如 lags=2 表示使用變量的 t-1 和 t-2 時刻的值作為自變量來預測 t 時刻的值。那么通過在歷史序列上訓練模型后,得到的這個線性回歸模型的各自變量的系數就代表了各滯后時刻的值與下一時刻值的相關性,如果時間序列接近平穩,這些相關性在未來一段時間內都不會有太大的變化,那么預測未來就成為了可能。
1.3.3 非平穩序列如何預測
對于非平穩時間序列的預測,我們需要將其變換為平穩時間序列,常用的方法有:
差分(一階/n 階);
取 log;
開根號;
時間序列分解。
一般來說,做個一階差分就可以得到接近平穩的時間序列了,如果方差隨時間變化較大,那么可以先取 log 再做一階差分。如下圖所示:上面兩張圖為非平穩的時間序列,經過一階差分后便得到了相對平穩的時間序列。當然,經過二階差分后,其效果會更好。
1.3.4 如何測試平穩性
判斷一個序列是否是平穩的,除了通過肉眼判斷和上面提到的定義外,還有兩種比較科學的基于單位根檢驗的方法:
Augmented Dickey Fuller test (ADF Test):其零假設為序列有單位根,是非平穩的,P-Value如果小于顯著級別(0.05),則可以拒絕零假設;
Kwiatkowski-Phillips-Schmidt-Shin – KPSS test (trend stationary):與 ADF 正好相反,零假設為序列是平穩的。另外,在 Python 中,可以通過指定 regression='ct' 參數來讓 kps 把“確定性趨勢(deterministic trend)”的序列認為是平穩的。
1.4 滯后算子
先給出定義:如果算子運算是將一個時間序列的前一期值轉化為當期值,則稱此算子為滯后算子,記做 L。即對任意時間序列 ,滯后算子滿足:。
類似也可以定義高階滯后算子,例如二階滯后算子為 。
高階滯后算子有:。
1.5 自相關函數
首先,我們先來介紹下相關系數,公式:
根據樣本的估計得到公式:
可以看到,相關系數其實就是計算了向量空間中兩個向量的夾角,而協方差是去均值后兩個向量的內積。
如果兩個向量平行,相關系數等于 1 或者 -1,垂直則為 0。
相關系數度量了兩個向量的線性相關性,而在平穩時間序列 中,我們有時候很想知道, 與它的過去值 的線性相關性。這時候我們便把相關系數的概念推廣到自相關系數。
與 的相關系數稱為 的間隔為 l 的自相關系數,通常記為 。具體的:
這里用到了弱平穩序列的性質:
對一個平穩的時間序列的樣本 ,1≤t≤T,則間隔為 l 的樣本自相關系數的估計為:
則函數 稱為 的樣本自相關函數(ACF)。
假設現在有這樣一個時間序列:
其自相關圖為:
自相關系數值隨著滯后階數增加而緩慢降低,是因為原時間序列中具有趨勢變化;
圖中的“圓齒狀”形狀是來源于原時間序列中的季節性變化;
藍色虛線之內的區域自相關性可近似看做0。
1.6 白噪聲
如果弱平穩序列額 滿足 稱 為白噪聲序列。
如果隨機變量序列 獨立且期望和方差不隨時間而變,則稱 為獨立白噪聲。
如果獨立白噪聲還是同分布的,稱為獨立同分布白噪聲。
簡單來說“白噪聲”是一個對所有時間其自相關系數為零的隨機過程。下圖展示了白噪聲的例子:
其自相關系數為:
對于白噪聲而言,我們期望它的自相關值接近 0。但是由于隨機擾動的存在,自相關值并不會精確地等于 0。對于一個長度為 T 的白噪聲序列而言,我們期望在 0.95 的置信度下,它的自相關值處于 之間。我們可以很容易的畫出 ACF 的邊界值(圖中藍色虛線)。如果一個序列中有較多的自相關值處于邊界之外,那么該序列很可能不是白噪聲序列。
在上例中,序列長度 T=50,邊界為 。所有的自相關值均落在邊界之內,證明序列是白噪聲。
2.規則
在介紹模型之前,我們可以先簡單了解一些時間序列的規則,一來可以快速上手作為 baseline,二來規則本身也可以作為模型的特征使用。
2.1 簡單預測方法
均值法:均值法很簡單,即字面意思,利用歷史的均值作為未來的預測值;
季節性均值法:利用歷史同期均值作為未來的預測值,一般效果會比均值法好很多;
樸素法:即將最后一次觀測值作為未來的預測值;
季節性樸素法:利用同期最后一次觀測值作為未來同期的預測值;
漂移法:在起始觀測值和最后一次觀測值之間畫一條連接線,延伸到預測時間點,作為預測值。
2.2 變換和調整
「日歷調整」:季節性數據中的某些變化可能是來自簡單的日歷效應。這種情況下,在擬合預測模型之前消除這些變化因素往往會使預測更簡單。如每個月的牛奶產量,產量會隨著季節性進行變化,但也會隨著天數發生變化:
可以看到,日均產量圖的季節性模式比月均產量圖更簡潔明了。日均產量圖有效消除了不同月份天數不同造成的影響。簡單的模式往往更易于建立模型并得出更精確的預測結果。對于交易天數隨著月份改變的銷售數據,我們可以做相似的調整。在這種情況下,可以用每個交易日的銷量而非每月的總銷量來建立模型。
「人口調整」:任何受人口數量影響的數據都可以調整為人均數據,換句話說,考慮每人(或每千人,或每百萬人)而非所有人。比如說研究醫院的床位數隨時間的變化,通過采用人均數據來消除人口數量變化的情況;
「通膨調整」:受貨幣價值影響的數據在建立模型之前經過最好經過通脹調整;
「數學變換」:數據波動范圍會隨著數據數值范圍的變換而變大或者變小,此時可以進行些數學變換。一個比較經典方法是取對數。對數變換之所以有用,是因為其數值的變化與原始值的變化成正比,且幅度更小;此外也可以用冪變換。Box-Cox 變換既包含對數變換,又包含冪變換的依賴于參數 的變換族,定義如下:
Box-cox 變換中的對數變換通常以自然對數 e 為底,因此如果 λ=0,則進行自然對數變換,否則會進行冪變換,然后簡單縮放。下圖為某一事件序列:
當 時,整個時間序列范圍內的周期性變化大小差不多相同,因此會讓預測更加簡單:
選擇好變換后,我們還需要利用逆變換得到原始測度上的預測值,逆 Box-Cox 變換如下表示:
「偏差調整」:使用 Box-Cox 變換來調整數據分布,其問題在于逆變換后得到的預測值不是預測分布的平均值,而是預測分布的中位數。很多情況下這可以接受,但有時的的確確需要預測均值。此時,就需要調整一下逆變換,以得到逆變換的均值:
是 h 步預測方差,預測方差越大,均值和中位數之間的差異越大。
簡單逆變換和逆變換的均值之間的差異,我們稱之為偏差(Bias)。當我們需要用均值而非中位數時,稱預測點是經過“偏差調整”(Bias-adjusted)的。下圖展示了兩者的區別:
其中,藍線表示預測值中位數,紅色線表示預測值均值,
2.3 周期因子法
這里主要想著重介紹一下周期因子法。
周期因子法很簡單,我們先來看一段數據:
可以看到起明顯具有周期性。而預測的核心任務便是盡可能準確的提取這種周期性。所以我們:
首先除以周均值得到一個比值;
然后按列去中位數,得到一組魯棒的周期因子。
做預測時只需要將周期因子乘以一個 base,便可作為下一周的預測。比如我們取最后一周的平均客流量 100 作為 base,那么我們直接乘上周期因子,就得到下一周的預測:
這里只拿了三周來舉例。實際應用當然要取更長的時段啦。具體取幾周以測試集的效果來確定。
按列提取中位數是一種簡單而有效的提取周期因子的方法。中位數十分魯棒,不受極端值的影響。但中位數損失了很多信息。實踐中,可以在此基礎上進一步優化。比如可以提取一個均值和一個中位數,然后將均值和中位數融合。融合的比例按照測試集的表現來確定。也可以根據與預測周的時間距離來賦予不同的權重。
除了對周期因子進行優化外,我們還可以針對 Base 進行優化。
直接用最后一周的平均客流量作為base并不一定是最好的方法。也許最后三天或最后五天的均值能更好的反映最新的情況。但是,我們不能直接對最后三天客流量取均值(最后三天是周末,這樣取的base就偏大了)。需要去掉周期性因素后,再取平均。具體做法,就是用客流量除以周期因子。
這樣我們就可以取最后三天的平均,(108+91.4+120)/3=106.5,作為 base。具體取多少天的,也要通過測試集的表現來確定。當然也可以按某些函數形式來給每天賦予不同的權重。
公眾號:AI蝸牛車
保持謙遜、保持自律、保持進步
總結
以上是生活随笔為你收集整理的【时间序列】时间序列基本概念总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GBK内码字符串转Unicode字符串
- 下一篇: 京东价格监控软件开发技术探讨八:如何获取