2017-08-09 10 views
1

私は、一連の値を予測するために、(Statsmodels)ARIMAを使用します)((予測)と予測使用して異なる結果:私は、私は同じ結果になるだろうと推測Statsmodels ARIMA -

plt.plot(ind, final_results.predict(start=0 ,end=26)) 
plt.plot(ind, forecast.values) 
plt.show() 

これら二つのプロットから、代わりに私はこれを取得: enter image description here

をするかどうか問題点

を予測し予測する場合、私は知っているだろう

答えて

0

forecast()でサンプル外予言を行っているかのように見えますが、予期したビット内サンプル予測があります。 ARIMA方程式の性質に基づいて、サンプル外の予測は長い予測期間のサンプル平均に収束する傾向があります。

forecast()predict()が異なるシナリオでどのように機能するかを調べるために、ARIMA_resultsクラスのさまざまなモデルを系統的に比較しました。比較をstatsmodels_arima_comparison.pyin this repositoryと自由に再現してください。私はorder=(p,d,q)の各組み合わせを調べ、p, d, qを0または1に制限しました。たとえば、単純な自己回帰モデルはorder=(1,0,0)で取得できます。 一言で言えば、次のような3つのオプションを検討しました。(stationary) time series

A.反復サンプル内予測の履歴。履歴は、時系列の最初の80%で形成され、テストセットは最後の20%によって形成された。次に、テストセットの最初のポイントを予測し、そのヒストリに真の値を追加し、2番目のポイントなどを予測しました。これにより、モデルの予測品質の評価が行われます。

for t in range(len(test)): 
    model = ARIMA(history, order=order) 
    model_fit = model.fit(disp=-1) 
    yhat_f = model_fit.forecast()[0][0] 
    yhat_p = model_fit.predict(start=len(history), end=len(history))[0] 
    predictions_f.append(yhat_f) 
    predictions_p.append(yhat_p) 
    history.append(test[t]) 

B.次に、私は反復テストシリーズの次のポイントを予測し、そして履歴にこの予測を付加することにより、アウトオブサンプル予測に見えました。

for t in range(len(test)): 
    model_f = ARIMA(history_f, order=order) 
    model_p = ARIMA(history_p, order=order) 
    model_fit_f = model_f.fit(disp=-1) 
    model_fit_p = model_p.fit(disp=-1) 
    yhat_f = model_fit_f.forecast()[0][0] 
    yhat_p = model_fit_p.predict(start=len(history_p), end=len(history_p))[0] 
    predictions_f.append(yhat_f) 
    predictions_p.append(yhat_p) 
    history_f.append(yhat_f) 
    history_f.append(yhat_p) 

C.私は、これらの方法で内部マルチステップ予測を行うためにforecast(step=n)パラメータとpredict(start, end)パラメータを用います。

model = ARIMA(history, order=order) 
    model_fit = model.fit(disp=-1) 
    predictions_f_ms = model_fit.forecast(steps=len(test))[0] 
    predictions_p_ms = model_fit.predict(start=len(history), end=len(history)+len(test)-1) 

それが判明:

A.予測および収率ARのための同一の結果が、ARMAに異なる結果を予測:test time series chart

B.見積りを、両方のARに対して異なる結果をもたらす予測しARMA:ARMAためtest time series chart

C.予測およびARのための収量同一の結果を予測するが、異なる結果:test time series chart

さらに、BとCの外見上同一のアプローチを比較すると、結果に微妙ではっきりとした差があることがわかりました。

forecast()predict()の「元の内在変数のレベルで予測が行われている」という主な違いが、レベル差の予測をもたらすことが主な原因です(compare the API reference)。

さらに、statsmodels関数の内部機能を私の単純な反復予測ループ(これは主観的)よりも信頼しているので、私はforecast(step)またはpredict(start, end)をお勧めします。