時系列-ARIMAのバリエーション
前の章では、ARIMAモデルがどのように機能するか、および季節データや多変量時系列を処理できないという制限について説明しました。そのため、これらの機能を含む新しいモデルが導入されました。
これらの新しいモデルを垣間見ることができます-
ベクトル自己回帰(VAR)
これは、多変量定常時系列の自己回帰モデルの一般化されたバージョンです。'p'パラメータが特徴です。
ベクトル移動平均(VMA)
これは、多変量定常時系列の移動平均モデルの一般化されたバージョンです。'q'パラメータが特徴です。
ベクトル自己回帰移動平均(VARMA)
これは、VARとVMAの組み合わせであり、多変量定常時系列のARMAモデルの一般化バージョンです。これは、「p」および「q」パラメーターによって特徴付けられます。同様に、ARMAは「q」パラメータを0に設定することでARモデルのように動作し、「p」パラメータを0に設定することでMAモデルのように動作できます。VARMAも「q」パラメータを設定することでVARモデルのように動作できます。 'p'パラメータを0に設定することにより、0およびVMAモデルとして。
[209]で:
df_multi = df[['T', 'C6H6(GT)']]
split = len(df) - int(0.2*len(df))
train_multi, test_multi = df_multi[0:split], df_multi[split:]
[211]:
from statsmodels.tsa.statespace.varmax import VARMAX
model = VARMAX(train_multi, order = (2,1))
model_fit = model.fit()
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\statespace\varmax.py:152:
EstimationWarning: Estimation of VARMA(p,q) models is not generically robust,
due especially to identification issues.
EstimationWarning)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\base\tsa_model.py:171:
ValueWarning: No frequency information was provided, so inferred frequency H will be used.
% freq, ValueWarning)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\base\model.py:508:
ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
"Check mle_retvals", ConvergenceWarning)
[213]で:
predictions_multi = model_fit.forecast( steps=len(test_multi))
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\base\tsa_model.py:320:
FutureWarning: Creating a DatetimeIndex by passing range endpoints is deprecated. Use `pandas.date_range` instead.
freq = base_index.freq)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\statespace\varmax.py:152:
EstimationWarning: Estimation of VARMA(p,q) models is not generically robust, due especially to identification issues.
EstimationWarning)
[231]で:
plt.plot(train_multi['T'])
plt.plot(test_multi['T'])
plt.plot(predictions_multi.iloc[:,0:1], '--')
plt.show()
plt.plot(train_multi['C6H6(GT)'])
plt.plot(test_multi['C6H6(GT)'])
plt.plot(predictions_multi.iloc[:,1:2], '--')
plt.show()
上記のコードは、VARMAモデルを使用して多変量時系列をモデル化する方法を示していますが、このモデルはデータに最適ではない可能性があります。
外因性変数を使用したVARMA(VARMAX)
これはVARMAモデルの拡張であり、共変量と呼ばれる追加の変数を使用して、関心のある一次変数をモデル化します。
季節的自己回帰和分移動平均(SARIMA)
これは、季節データを処理するためのARIMAモデルの拡張です。データを季節成分と非季節成分に分割し、同様の方法でモデル化します。これは、ARIMAモデルと同じ非季節部分(p、d、q)パラメーターと季節部分(P、D、Q、m)パラメーターの7つのパラメーターによって特徴付けられます。ここで、「m」は季節期間の数であり、 P、D、QはARIMAモデルのパラメーターに似ています。これらのパラメータは、グリッド検索または遺伝的アルゴリズムを使用して調整できます。
外因性変数を使用したSARIMA(SARIMAX)
これは、SARIMAモデルを拡張して、関心のある変数をモデル化するのに役立つ外因性変数を含めることです。
変数を外生変数として配置する前に、変数の相互関係分析を行うと便利な場合があります。
[251]で:
from scipy.stats.stats import pearsonr
x = train_multi['T'].values
y = train_multi['C6H6(GT)'].values
corr , p = pearsonr(x,y)
print ('Corelation Coefficient =', corr,'\nP-Value =',p)
Corelation Coefficient = 0.9701173437269858
P-Value = 0.0
ピアソンの相関は、2つの変数間の線形関係を示しています。結果を解釈するには、最初にp値を調べます。0.05未満の場合は係数の値が有意であり、そうでない場合は係数の値は有意ではありません。有意なp値の場合、相関係数の正の値は正の相関を示し、負の値は負の相関を示します。
したがって、私たちのデータでは、「温度」と「C6H6」は非常に正の相関関係があるようです。したがって、
[297]で:
from statsmodels.tsa.statespace.sarimax import SARIMAX
model = SARIMAX(x, exog = y, order = (2, 0, 2), seasonal_order = (2, 0, 1, 1), enforce_stationarity=False, enforce_invertibility = False)
model_fit = model.fit(disp = False)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\base\model.py:508:
ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
"Check mle_retvals", ConvergenceWarning)
[298]で:
y_ = test_multi['C6H6(GT)'].values
predicted = model_fit.predict(exog=y_)
test_multi_ = pandas.DataFrame(test)
test_multi_['predictions'] = predicted[0:1871]
[299]で:
plt.plot(train_multi['T'])
plt.plot(test_multi_['T'])
plt.plot(test_multi_.predictions, '--')
アウト[299]:
[<matplotlib.lines.Line2D at 0x1eab0191c18>]
ここでの予測は、単変量ARIMAモデリングとは対照的に、より大きな変動をとるように見えます。
言うまでもなく、SARIMAXは、対応するパラメーターのみをゼロ以外の値に設定することにより、ARX、MAX、ARMAX、またはARIMAXモデルとして使用できます。
フラクショナル自己回帰和分移動平均(FARIMA)
時々、私たちのシリーズが定常ではないことが起こるかもしれません、それでも値1をとる 'd'パラメータとの違いはそれを過大に違います。したがって、小数値を使用して時系列を区別する必要があります。
データサイエンスの世界では、優れたモデルは1つもありません。データを処理するモデルは、データセットに大きく依存します。さまざまなモデルの知識により、データを処理するモデルを選択し、そのモデルを試して最良の結果を得ることができます。また、結果はエラーメトリックと同様にプロットとして表示する必要があります。小さなエラーも悪い場合があるため、結果をプロットして視覚化することが不可欠です。
次の章では、別の統計モデルである指数平滑法について見ていきます。