時間序列平穩性、白噪聲、隨機遊走
作者:東哥起飛,來源: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=(15, 8))
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=(12, 6))
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=(12, 6))
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=(12, 6))
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 隨機過程(高斯隨機過程、譜分析、白噪聲)隨機
- 【時間序列分析】01. 時間序列·平穩序列
- Shader 中的隨機與噪聲隨機
- 計量經濟學導論08:平穩時間序列
- 隨機不只是 Math.random —— 前端噪聲應用隨機random前端
- Book of Shaders 03 - 學習隨機與噪聲生成演算法隨機演算法
- FredNormer: 非平穩時間序列預測的頻域正則化方法ORM
- 基於圖論的時間序列資料平穩性與連通性分析:利用圖形、數學和 Python 揭示時間序列資料中的隱藏模式圖論Python模式
- 「PKUWC2018」隨機遊走 題解隨機
- 頻率域濾波去除週期性噪聲
- 高斯噪聲模擬
- 感測器噪聲
- 時間序列分析 | 相似性度量基本方法
- 隨時間漂流的足球手遊
- 遊戲設計思考:隨機性遊戲設計隨機
- 時間序列分析
- python 時間序列Python
- matlab 生成隨機數序列Matlab隨機
- 基於量子隨機遊走的影像加密演算法隨機加密演算法
- 時間序列分析基本思想及時間序列建模步驟
- Python 時間序列分析Python
- java獲取時間戳和隨機數Java時間戳隨機
- 將VAE用於時間序列:生成時間序列的合成資料
- 影像噪聲學習記錄(1)
- 卡牌遊戲中的隨機性(上)遊戲隨機
- 時間序列乾貨大全
- 時間序列分段法
- 時間序列|全景介紹
- 論文---時間序列----TimeLLM
- 論文---時間序列--DLinear
- 時間序列交叉驗證
- 使用InfluxDB時間序列資料功能構建可觀察性UX
- ZROJ#398. 【18提高7】隨機遊走(期望dp 樹形dp)隨機
- 洛谷 P8989 [北大集訓 2021] 隨機遊走 題解隨機
- 下篇 | 使用 ? Transformers 進行機率時間序列預測ORM
- 上篇 | 使用 ? Transformers 進行機率時間序列預測ORM
- Book of Shaders 04 - 網格噪聲:Worley Noise
- matlab生成0,1隨機序列Matlab隨機