2017-06-07 7 views
2

私は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

+0

'predict'は' typ = 'level''キーワードを持っています。海のデータについてはSARIMAXがより適切です。 – user333700

答えて

0

時間トレンド(または複数)がより良い戦略である場合に差分を利用することができます。期間33は外れ値であり、それを無視すると結果が失われます。

PACFは強い季節成分を示さない。 enter image description here

3月、4月、5月、6月に強い相関性を持つ弱い季節のARです。

enter image description here

関連する問題