私はPythonとStatsmodelsを使ってARIMAの予測を頭の中に入れようとしています。具体的には、ARIMAアルゴリズムを機能させるには、データを差分(または類似の方法)を介して静止させる必要があります。問題は、差異化された傾向と季節性を含む予測に戻るために残余予測が行われた後、どのように差異を逆転させるのか?Pythonの統計モデルで差分を逆にする方法ARIMA予測?
(私は同様の質問hereを見ましたが、残念ながら、何も答えが掲示されていません。)
はここで、私はマスタリングPythonのデータ分析の最後の章で例に基づいて、(これまでにやったものですマグヌス・ヴィルヘルム・ペルソン;ルイス・フェリペ・マーティンズ)。データはDataMarketからのものです。
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels import tsa
from statsmodels.tsa import stattools as stt
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.arima_model import ARIMA
def is_stationary(df, maxlag=15, autolag=None, regression='ct'):
"""Test if df is stationary using Augmented
Dickey Fuller"""
adf_test = stt.adfuller(df,maxlag=maxlag, autolag=autolag, regression=regression)
adf = adf_test[0]
cv_5 = adf_test[4]["5%"]
result = adf < cv_5
return result
def d_param(df, max_lag=12):
d = 0
for i in range(1, max_lag):
if is_stationary(df.diff(i).dropna()):
d = i
break;
return d
def ARMA_params(df):
p, q = tsa.stattools.arma_order_select_ic(df.dropna(),ic='aic').aic_min_order
return p, q
# read data
carsales = pd.read_csv('data/monthly-car-sales-in-quebec-1960.csv',
parse_dates=['Month'],
index_col='Month',
date_parser=lambda d:pd.datetime.strptime(d, '%Y-%m'))
carsales = carsales.iloc[:,0]
# get components
carsales_decomp = seasonal_decompose(carsales, freq=12)
residuals = carsales - carsales_decomp.seasonal - carsales_decomp.trend
residuals = residuals.dropna()
# fit model
d = d_param(carsales, max_lag=12)
p, q = ARMA_params(residuals)
model = ARIMA(residuals, order=(p, d, q))
model_fit = model.fit()
# plot prediction
model_fit.plot_predict(start='1961-12-01', end='1970-01-01', alpha=0.10)
plt.legend(loc='upper left')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.title('Residuals 1960-1970')
print(arimares.aic, arimares.bic)
結果のプロットは満足ですが、傾向、季節情報は含まれません。傾向/季節性を取り戻すために差分をどのように逆転させるのですか? Residual plot
'predict'は' typ = 'level''キーワードを持っています。海のデータについてはSARIMAXがより適切です。 – user333700