如何用Python檢查時間序列資料是否平穩?
時間序列是一組資料點,這些資料點以固定的時間間隔記錄。它用於研究模式趨勢,以及在定義的時間內變數之間的關係。時間序列的常見例子包括股票價格、天氣模式和經濟指標。
它透過統計和數學技術分析時間序列資料。時間序列的主要目的是識別先前資料的模式和趨勢,以預測未來的值。
如果資料不隨時間變化,則稱資料為平穩的。有必要檢查資料是否平穩。有多種方法可以檢查時間序列資料是否平穩,讓我們一一來看。
增強型Dickey-Fuller檢驗(ADF)
增強型Dickey-Fuller檢驗(ADF)是一種統計檢驗,用於檢查時間序列資料中是否存在單位根。單位根是非平穩的資料。它返回檢驗統計量和p值作為輸出。
在輸出中,如果p值低於0.05,則表示時間序列資料不平穩。以下是ADF平穩資料的示例。我們在python中有一個名為adfuller()的函式,它在statsmodel包中可用,用於檢查時間序列資料是否平穩。
示例
在這個例子中,我們使用python的statsmodel包中的adfuller()函式來查詢增強型Dickey-Fuller檢驗的ADF統計量和p值。
from statsmodels.tsa.stattools import adfuller
import pandas as pd
data = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv',parse_dates=['date'], index_col='date')
t_data = data.loc[:, 'value'].values
result = adfuller(t_data)
print("The result of adfuller function:",result)
print('ADF Statistic:', result[0])
print('p-value:', result[1])
輸出
以下是執行上述程式後生成的輸出:
The result of adfuller function: (3.145185689306744, 1.0, 15, 188, {'1%': -3.465620397124192, '5%': -2.8770397560752436, '10%': -2.5750324547306476}, 549.6705685364172)
ADF Statistic: 3.145185689306744
p-value: 1.0
KPSS檢驗
另一個檢查單位根的檢驗是KPSS檢驗。它的縮寫是Kwiatkowski-Phillips-Schmidt-Shin。我們在statsmodels包中有一個名為kpss()的函式,用於檢查時間序列資料中的單位根。
示例
以下是查詢時間序列資料中單位根的示例。
from statsmodels.tsa.stattools import kpss
import pandas as pd
data = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv',parse_dates=['date'], index_col='date')
t_data = data.loc[:, 'value'].values
from statsmodels.tsa.stattools import kpss
result = kpss(data)
print("The result of kpss function:",result)
print('KPSS Statistic:', result[0])
print('p-value:', result[1])
輸出
以下是statsmodels包中kpss()函式的輸出。
The result of kpss function: (2.0131256386303322, 0.01, 9, {'10%': 0.347, '5%': 0.463, '2.5%': 0.574, '1%': 0.739})
KPSS Statistic: 2.0131256386303322
p-value: 0.01
滾動統計
檢查時間序列資料平穩性的另一種方法是繪製給定時間序列資料的移動平均數和移動標準差,並檢查資料是否保持不變。如果圖中的資料隨時間變化,則時間序列資料是非平穩的。
示例
以下是如何使用matplotlib庫的plot()函式繪製移動平均數和移動標準差來檢查資料變化的示例。
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv',parse_dates=['date'], index_col='date')
t_data = data.loc[:, 'value'].values
moving_avg = t_data.mean()
moving_std = t_data.std()
plt.plot(data, color='green', label='Original')
plt.plot(moving_avg, color='red', label='moving average')
plt.plot(moving_std, color='black', label='moving Standard deviation')
plt.legend(loc='best')
plt.title('Moving Average & Moving Standard Deviation')
plt.show()
輸出
以下是透過繪製移動平均數和移動標準差來標準化時間序列資料的輸出。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP