pandas時間序列與自迴歸ARIMA模型

知識點梳理

AR:
在這裏插入圖片描述
MA:
在這裏插入圖片描述
ARIMA:
在這裏插入圖片描述
因此需要指定 p , q , i 的 值:

i的值由圖像確定,而使用ACF與PACF確定p與q的值:
在這裏插入圖片描述
在這裏插入圖片描述

1 時間預處理

1.1 創造時間序列

  1. 從指定日期開始
time_df = pd.date_range('2020-01-01', periods = 10, freq = 'D')
# periods:週期,即生成的時間序列個數
# freq:步長,可指定2D:兩天;H:小時;M:月
  1. 獲得起始與終止時間之間
time_df = pd.date_range('2020-01-01','2021-01-01',freq='M')
# 得到起始日期至終止日期之間的所有時間

1.2 選擇時間序列

# 選擇 2020-01-01 之後的日期
time_df.truncate(before='2020-01-01')

# 選擇 2021-01-01 之後的日期
time_df.truncate(after='2021-01-01')

# 選擇從 2020-01-01 到 2021-01-01 的日期
time_df['2020-01-01':'2021-01-01']

1.3 重採樣

resample(‘計算時間頻率’).觀察指標()

升採樣:

# 重採樣爲按月計數,觀察總和
time_df = time_df.resample('M').sum()

# 以三天計數,觀察均值
time_df = time_df.resample('3D').mean()

降採樣:

# 以小時計數,空值填充爲 NaN
time_df = time_df.resample('H').asfreq()

# 填充出現空缺的num個值,參考 NaN 上面的數值填充
time_df = time_df.resample('H').ffill(num)

# 填充出現空缺的num個值,參考 NaN 下面的數值填充
time_df = time_df.resample('H').bfill(num)

# 線性填充所有缺失值
time_df = time_df.resample('H').interplate('linear')

1.4 滑動窗口

# 以 20 爲單位做滑動窗口
roll_windows = time_df.rolling(window=20)
# 不能直接使用roll_windows,還需要明確觀察指標
roll_windows.mean() # 均值
roll_windows.std() # 方差
roll_windows.max() # 最大
roll_windows.min() # 最小
roll_windows.median() # 中位數
roll_windows.var() # 方差
roll_windows.skew() # 偏度

1.5 差分

# 一階差分
dataframe['列名'] = dataframe['列名'].diff(1)
# 二階差分:在一階差分的基礎上再做差分

2.自迴歸ARIMA模型

1.平穩性(差分)

data = data.diff() # 一階差分
data = data.dropna() # 去除NaN

2. ACF與PACF

import statsmodels.tsa.api as smt
import seaborn as sns

sns.set(style='ticks', context='poster')
# ACF 曲線
smt.graphics.plot_acf(train_data, lags=20)
# PACF 曲線
smt.graphics.plot_pacf(train_data, lags=20)

3. ARIMA建模

import statsmodels.api as sm

arima_model = sm.tsa.SARIMAX(train_data, order=(4, 1, 2))
arima_result = model.fit()

4. 模型預測

arima_predict = arima_result.predict('起始時間', '終止時間',dynamic=True, typ='levels')

5. 模型評估

# ARIMA各種指標
arima_result.summary()
# AIC:赤池信息準則,衡量數據與參數之間的關係,越小越好
aic = arima_result.aic
# BIC:貝葉斯信息準則,同上,都是判斷模型的簡易性
bic = arima_result.bic
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章