1. 程式人生 > 其它 >時間序列資料分析 tsfresh 平穩性

時間序列資料分析 tsfresh 平穩性

參考文章:點這裡

平穩性:

  通常來說,一個平穩的時間序列指的是這個時間序列在一段時間內=具有穩定的統計值,如均值、方差。由於我們對於一個數據是否平穩是有自己的直覺的,所以在實踐的過程中要謹防過於依賴直覺而被直覺所欺騙。

  驗證方法:

    Augmented Dickey Fuller Test(ADF Test) 是最常使用的一種方法,ADF Test也是單位根驗證(unit root test)的一種。單位根是一個使得時間序列非平穩的一個特徵,從技術上說,在下面的公式中如果alpha = 1,那麼我們說存在單位根。

    

    其中Yt,Yt-1分別是 t 時刻和 t-1 時刻的時間序列值,Xe表示外生變數,E表示誤差項。

    

    從直覺上我們可以理解為,只有當alpha<1時,整個時間序列的趨勢才是有可能出現逆轉的。而ADF test就是對alpha值的假設檢驗,它的原假設是alpha =1,即原假設成立,則時間序列非平穩。

  但是我們需要記住,ADF test不是一個永遠行之有效的方法,它存在一些不足:

  • 對於區分近似單位根(near unit roots)和單位根不是很有效
  • 當資料點很少時,容易出現假陽性的問題
  • 大多數測試不會檢測所有導致非平穩的因素,例如有些測試只是檢驗均值或方差兩者之一是否平穩,有些測試只是檢驗總體分佈。因此在使用任何假設檢驗時都要先充分理解資料的特點和檢驗的限制因素。

  此外還有一種Kwiatkowski-Phillips-Schmidt-Shin (KPSS) test也是常用的時間序列平穩性假設檢驗,它和ADF的區別是KPSS的原假設是關於平穩過程,而ADF的原假設是關於單位根。

時間序列平穩性的重要性在於:

  1. 大量的統計學模型基於平穩性的假設
  2. 對於一個應用於非平穩時間序列的模型,它的準確性和模型指標會隨著時間序列本身變化而變化,從而造成模型本身不穩定。

而對於一個非平穩的時間序列,其實是可以通過一些簡單的變換使之變成平穩性的。log變換和平方根變換是兩個常用的方式,其適用於非等方差的場景。另外可以通過差分的方式消除時間序列趨勢。

平穩性驗證Demo

import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
import pandas as pd
import numpy as np

x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 4, 9, 12, 17, 20, 27]
s = pd.Series(y, index=x)

result = adfuller(s, autolag='AIC')
print(f'ADF Statistic: {result[0]}')
print(f'p_value: {result[1]}')

series1 = np.random.randn(100)
plt.plot(series1)
plt.show()

result1 = adfuller(series1,autolag='AIC')
print(f'ADF Statistic:{result1[0]}')
print(f'p-value:{result1[1]}')