自己回帰プロセスを使用した時系列予測

elena koychevaによる写真unsplash

この実践的なチュートリアルでは、自己回帰プロセスを使用した時系列モデリングのトピックをカバーします。

この記事では、時系列分析における次の重要な要素について説明します:

  • 自己回帰プロセス
  • Yule-Walker方程式
  • 定常性
  • 拡張Dicker-Fullerテスト

Jupyter notebookをフォローする準備ができていることを確 コードとデータセットはここで入手できます。

始めましょう!

始めましょう!

SARIMAX、VARMAXなどのより複雑なモデルを操作し、深層学習モデル(LSTM、CNN、ResNet、自己回帰LSTM)をPythonで適用された時系列分析で時系列分析に適用する方法を学びます。

自己回帰プロセス

自己回帰モデルは、予測を行うためにターゲットの過去の値の線形結合を使用します。 もちろん、回帰はターゲット自体に対して行われます。 数学的には、AR(p)モデルは次のように表されます。

自己回帰モデル
自己回帰モデル
自己回帰モデル
ここで、

  • p:は順序です
  • c:は定数です
  • イプシロン: ノイズ

AR(p)モデルは非常に柔軟であり、それは時系列パターンの多くの異なるタイプをモデル化することができます。 これは自己回帰過程をシミュレートするときに容易に視覚化される。

通常、自己回帰モデルは定常時系列にのみ適用されます。 これにより、パラメータphiの範囲が制限されます。たとえば、AR(1)モデルはphiを-1と1の間に制約します。 これらの制約は、モデルの順序が大きくなるにつれてより複雑になりますが、Pythonでモデル化するときに自動的に考慮されます。

AR(2)プロセスのシミュレーション

PythonでAR(2)プロセスをシミュレートしましょう。

まず、いくつかのライブラリをインポートします。 すべてがシミュレーションに使用されるわけではありませんが、このチュートリアルの残りの部分では必要になります。

from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.tsa.arima_process import ArmaProcess
from statsmodels.tsa.stattools import pacf
from statsmodels.regression.linear_model import yule_walker
from statsmodels.tsa.stattools import adfuller
import matplotlib.pyplot as plt
import numpy as np%matplotlib inline

ArmaProcessライブラリを使用して時系列をシミュレートします。 それは私達に私達の変数を定義するように要求する。

私たちは、次のプロセスをシミュレートします:DIV>

次数2の自己回帰モデルを扱っているので、ラグ0、1、および2で係数を定義する必要があります。また、移動平均プロセスの影響をキャンセルします。

また、移動平均プロセスの影響をキャンセルします。

また、移動平均プロセス

最後に、10,000のデータポイントを生成します。

コードで:

ar2 = np.array()
ma = np.array()simulated_AR2_data = ArmaProcess(ar2, ma).generate_sample(nsample=10000)

時系列をプロットできます:

plt.figure(figsize=); # Set dimensions for figure
plt.plot(simulated_AR2_data)
plt.title("Simulated AR(2) Process")
plt.show()

And you should get something similar to this:

Plot of the simulated AR(2) process

Now, let’s take a look at the autocorrelation plot (correlogram):

plot_acf(simulated_AR2_data);

ARのコレログラム(2)プロセス

係数がゆっくりと減衰していることがわかります。 これは、移動平均プロセスではない可能性が高いことを意味し、時系列はおそらく自己回帰プロセスでモデル化できることを示唆しています(これは

これが正しいことを確認するには、部分自己相関プロットをプロットしましょう:p>

部分自己相関プロットar(2)process

あなたが見ることができるように、係数はラグ2の後に有意ではありません。 したがって、部分自己相関プロットは、AR(p)プロセスの次数を決定するのに役立ちます。

次を実行して、各係数の値を確認することもできます:ここで、実際のプロジェクト設定では、AR(p)プロセスの順序を簡単に見つけることができますが、係数phiを推定する方法を見つける必要があります。これを行うには、Yule-Walker方程式を使用します。 この方程式は、次数がわかっていると仮定して、AR(p)モデルの係数を推定することを可能にします。div>

ご覧のように、Yule-Walker方程式は係数を推定するのに適切な仕事をし、0.33と0.5に非常に近くなりました。

AR(3)プロセスのシミュレーション

さて、AR(3)プロセスをシミュレーションしましょう。 具体的には、次のようにシミュレーションを行います:div>

以前に行われたことと同様に、係数を定義し、10 000のデータポイントを生成しましょう。

ar3 = np.array()
ma = np.array()simulated_AR3_data = ArmaProcess(ar3,ma).generate_sample(nsample=10000)

次に、時系列を視覚化できます。

plt.figure(figsize=); # Set dimensions for figure
plt.plot(simulated_AR3_data)
plt.title("Simulated AR(3) Process")
plt.show()

:

Simulated AR(3) process

Now, looking at the PACF and ACF:

plot_pacf(simulated_AR3_data);
plot_acf(simulated_AR3_data);

PACF and ACF for an AR(3) process

You see that the coefficients are not significant after lag 3 for the PACF function as expected.

Finally, let’s use the Yule-Walker equation to estimate the coefficients:div>

ユール-ウォーカー係数推定値

ここでも、推定値は実際の値にかなり近いです。

プロジェクト—Johnsonの四半期EPSの予測&Johnson

さて、プロジェクト設定で自己回帰プロセスの知識を適用しましょう。

目的は、Johnson社の一株当たり四半期利益(EPS)をモデル化することです&Johnson1960年から1980年の間。

まず、データセットを読みましょう:

import pandas as pddata = pd.read_csv('jj.csv')
data.head()

データセットの最初の五行

今、最初の五行は私たちのために非常に有用ではありません。 より良い視覚的表現を得るために、データセット全体をプロットしてみましょう。/div>

figcaption>ジョンソンのためのquaterly eps&1960年から1980年の間のジョンソン

素晴らしい! 今、私たちはデータに明確な上向きの傾向があることができます。 これは会社にとっては良い兆候かもしれませんが、時系列が静止していないことを意味するため、時系列モデリングの面では良くありません。前述のように、AR(p)プロセスは定常級数に対してのみ機能します。

したがって、データを静止させるためにいくつかの変換を適用する必要があります。

この場合、ログの差を取ります。 これは、各値のログを取得し、前の値を減算することと同じです。p>

# Take the log difference to make data stationarydata = np.log(data)
data = data.diff()
data = data.drop(data.index)
data.head()

変換された時系列のプロット:div>

ジョンソンの四半期epsのログ差&ジョンソン

今、それは我々が傾向を削除したようです。 しかし、AR(p)プロセスでモデル化する前に、系列が静止していることを確認する必要があります。したがって、拡張されたDicker-Fuller検定を使用します。 これは、私たちの時系列が実際に静止しているという統計的な自信を与えます。DIV>

ADFテストの結果

大きな負のadf統計量とp値が0.05より小さいので、帰無仮説を棄却し、時系列が静止していると言うことができます。p>

ここで、PACFをプロットしてプロセスの順序を見つけてみましょう。

次に、PACFをプロットしてプロセスの順序を見つけます:div>

コメントを残す

メールアドレスが公開されることはありません。