時間序列平穩性、白噪聲、隨機遊走

張哥說技術發表於2023-01-31

作者:東哥起飛,來源:Python資料科學

本文開啟時間序列系列的相關介紹,從零梳理時序概念、相關技術、和實戰案例,歡迎訂閱 ?時間序列專欄 跟蹤全部內容。

本篇介紹時間序列的平穩性的相關概念。很多傳統時序方法比如ARMA、ARIMA都需要時序具備平穩性,那什麼是時序的平穩性?為什麼需要平穩性,平穩性有什麼作用?

什麼是平穩性?

時間序列平穩性是指一組時間序列資料看起來平坦,各階統計特徵不隨時間的變化而變化。平穩性分為寬平穩和嚴平穩,我們分別給出定義:

嚴平穩

嚴平穩是一種條件很苛刻的定義,時間序列的所有統計性質(如均值、方差、協方差...N階矩)都不會隨時間推移而發生變化,才能被認為是平穩的。因為隨機變數族統計性質完全由聯合機率分佈族決定,所以嚴平穩定義為:

為時間序列,對於任意正整數,任取 和任意整數,當時,有

時間序列有相同的聯合分佈函式, 即

但現實中獲取隨機序列的聯合分佈非常難,所以一般不適用嚴平穩,而使用條件不算苛刻的寬平穩。

寬平穩

寬平穩,也叫弱平穩、二階平穩,或者協方差平穩。寬平穩時間序列的統計性質主要由低階矩(二階矩以內)決定,所以只需保證二階以內統計特性不隨時間變化而變化即可。它的定義如下:

對於時間序列,如果滿足以下三個條件:

  • 均值是常數,與時間 無關,即

  • 方差是常數,與時間 無關,即

  • 自協方差只與時間間隔 有關,與時間的起始位置 無關,即

則該時間序列是寬平穩的,該隨機過程是平穩隨機過程。

均值是一階矩,描述符合某種分佈的隨機變數的取值,總是在某個值周圍波動。

方差是二階矩,描述了這種波動的大小程度或者離散程度。

自協方差也是二階矩,是一種特殊的協方差,是時間和時間本身的特殊協方差。普通的協方差是,自協方差是,本質是一樣的。

協方差描述兩個變數之間的變動關係,關於協方差的理解可以參考這篇文章:如何通俗的理解協方差、相關係數?

平穩時間序列

白噪聲

白噪聲是最簡單的平穩過程(純隨機過程)記作 ,定義如下:

也就是均值為0,方差為,協方差為0(無自相關性)的序列

用Python程式碼能生成一個白噪聲序列:

import numpy as np
from matplotlib import pyplot as plt

white_noise = np.random.standard_normal(size=500)
plt.figure(figsize=(158))
plt.plot(white_noise)
plt.show()
時間序列平穩性、白噪聲、隨機遊走

上圖可以看到時序前後沒有任何聯絡(白噪聲的自協方差是0,取值是完全隨機的),因此對於我們想要透過歷史時序資料預測未來是行不通的,不具有分析的價值。只有當序列平穩且非白噪聲時,應用分析方法才有意義。

非白噪聲

另一種就是非白噪聲平穩時間序列,雖然現實中平穩序列不常見,但經過一些處理後也可以變成平穩的非白噪聲序列。

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

df=pd.read_excel('data.xlsx',engine='openpyxl')
plt.figure(figsize=(126))
plt.show()
時間序列平穩性、白噪聲、隨機遊走

上圖來自真實資料,雖然波動不完全相同,但從均值、方差大體來看是平穩的。當然關於時間序列平穩性檢測除肉眼觀察還有一些量化的方法,會在後續介紹。

非平穩時間序列

現實世界大多數時間序列都是非平穩的,但可以透過差分、取對數等方法轉化成平穩時間序列,但如果不能轉化也就意味著不能使用平穩時間序列分析方法了。

大部分股票的收盤價資料就是非平穩的,以A股上某一隻股票2020-2022年的收盤價資料為例,肉眼看上去走勢無明顯規律,且不同時段波動很大,基本可以認為是一個非平穩的時間序列。

import pandas as pd
import akshare as ak
from matplotlib import pyplot as plt

df = ak.stock_zh_a_hist(symbol="601800", start_date="20200101", end_date='20221231')
df = df.set_index('日期')
df.index = pd.to_datetime(df.index)

close = df['收盤'].astype(float)
close = close[::-1]

plt.figure(figsize=(126))
plt.plot(close)
plt.show()
時間序列平穩性、白噪聲、隨機遊走

隨機遊走

非平穩時序中有一種特殊的時序叫隨機遊走,定義為:

,其中的 是均值為0的白噪聲。

透過公式我們能看出,隨機遊走是時序資料的不斷累加形成的,累加的是白噪聲,即一階差分 ,而白噪聲是純隨機的,因此隨機遊走和白噪聲一樣,其未來趨勢也是無法預測的。

下面用Python生成的兩個隨機遊走圖形感受下。

import numpy as np
from matplotlib import pyplot as plt

np.random.seed(6)

def random_walk():
    steps = np.random.standard_normal(size=500)
    steps[0] = 0
    walk = np.cumsum(steps)
    return walk
    
plt.figure(figsize=(126))
plt.plot(random_walk())
plt.plot(random_walk())
plt.show()
時間序列平穩性、白噪聲、隨機遊走

上圖兩個隨機遊走曲線都是純隨機生成的,因為固定了seed所以再執行程式碼會保持這個圖形,但如果把seed註釋掉再執行圖形又是一個新的隨機曲線了。為了增加對隨機遊走的理解,下面用一個經典的賭徒輸光例子來解釋下。

賭徒輸光是說如果一個賭徒去賭,大機率會輸光,有什麼依據嗎?假設一個專案的勝率是50%,現在我們將每一次的輸贏作為一個隨機變數,兜裡的錢會隨著每次輸贏而變化,此時兜裡的錢就服從隨機遊走模型。我們來模擬幾種不同的結果,最差的情況是如果運氣不好10賭8輸,隨機遊走曲線會很快下降到賭徒底線,兜裡的錢全輸光;如果此時運氣好10賭8贏,隨機遊走曲線向上,莊家給錢賭徒小賺,此刻及時止盈還是賺的;但賭徒不會止盈還會繼續玩下去,出於隨機性的輸贏結果,曲線遲早會到賭徒底線;如果曲線上升到莊家的上線,莊家給錢關門倒閉,但這種情況幾乎不會發生,因為莊家的錢是無限多的,至少比玩家多得多。所以按照50%的勝率下,賭徒是不可能贏錢的,因為隨機遊走曲線會以更大的機率先到達賭徒的底線。

為什麼需要平穩性?

預測更容易更可靠

如前面寬平穩定義,滿足三個條件,均值、方差都是常數,自協方差不隨時間變化只與時間間隔k有關。如果一個時序是寬平穩的,那麼時序本身肯定是存在某種分佈規律的,前後具有一定自相關性且能夠延續下去,利用這些資訊預測未來資料才更可靠

平穩時序預測相對非平穩預測方法更容易。這就是為什麼即使時序是不平穩的,一般也要先透過差分、取對數等方法轉化成平穩時間序列再進行分析。

極大降低分析難度

上篇文章 時間序列基本概念、任務、預測方法 提到,時間序列中每個時刻 都可以認為是一個隨機變數,它們都有自己的分佈。但時間不能倒流,因而每個隨機變數 就只有一個觀測值。

這樣就會造成一個問題,由於每個分佈只有一個觀測值,資料過少導致無法研究分佈的性質。但是透過平穩性,從不同時刻的分佈之間發現內在關聯,可以緩解由於樣本容量少導致的估計精度低的問題。

時間序列平穩性、白噪聲、隨機遊走

現在有一組時間序列 5個時序點,每個時點都只有一個觀測值,按數理統計分析來講,此時樣本很少是無法進行分析的。

如果現在判斷出該時序是滿足寬平穩的時間序列,可知該時序均值 是個常數,即每個時點隨機變數均值都為 。此時就可以認為這5個觀測值都變成了常數 的樣本觀測值,即 ,於是透過以上5個樣本觀測值可估算出均值

上面的一行觀測樣本現在轉變成以下形式,每個時點的觀測值互為補充其他時點的觀測值,或者可以理解為 合併為一個均值為 的隨機變數了。

時間序列平穩性、白噪聲、隨機遊走

這樣做就可以極大的減少了隨機變數的個數,同時增加了待估變數的樣本容量,降低了分析的難度,二階矩方差和協方差也同理,感興趣可以參考[1]

參考連結

[1].《應用時間序列分析》-王燕
[2].https://mp.weixin.qq.com/s/ZnQA-wUndDLKfM08Y6ZlEA [3].https://mp.weixin.qq.com/s/-WAnD9ZXEDezy0Adrw11xw [4].

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2933400/,如需轉載,請註明出處,否則將追究法律責任。

相關文章