- 問題
- 答え
- 解説
Python コード:
import pandas as pd import numpy as np from statsmodels.tsa.statespace.sarimax import SARIMAX np.random.seed(0) data = np.random.randn(100).cumsum() model = SARIMAX( data, order=(1,1,1), seasonal_order=(1,1,1,12)) results = model.fit() print(results.summary())
回答の選択肢:
(A) 単純移動平均モデル
(B) 調整移動平均モデル
(C) 自己回帰移動平均モデル
(D) 状態空間モデル
SARIMAX Results ========================================================================================== Dep. Variable: y No. Observations: 100 Model: SARIMAX(1, 1, 1)x(1, 1, 1, 12) Log Likelihood -132.907 Date: Mon, 08 Jul 2024 AIC 275.813 Time: 09:43:55 BIC 288.143 Sample: 0 HQIC 280.778 - 100 Covariance Type: opg ============================================================================== coef std err z P>|z| [0.025 0.975] ------------------------------------------------------------------------------ ar.L1 0.9830 0.129 7.645 0.000 0.731 1.235 ma.L1 -0.9136 0.109 -8.350 0.000 -1.128 -0.699 ar.S.L12 0.1951 0.212 0.919 0.358 -0.221 0.611 ma.S.L12 -0.9992 70.641 -0.014 0.989 -139.452 137.454 sigma2 0.9865 69.503 0.014 0.989 -135.236 137.209 =================================================================================== Ljung-Box (L1) (Q): 0.12 Jarque-Bera (JB): 0.39 Prob(Q): 0.73 Prob(JB): 0.82 Heteroskedasticity (H): 0.67 Skew: -0.15 Prob(H) (two-sided): 0.29 Kurtosis: 2.85 ===================================================================================
正解: (D)
回答の選択肢:
(A) 単純移動平均モデル
(B) 調整移動平均モデル
(C) 自己回帰移動平均モデル
(D) 状態空間モデル
- コードの解説
-
このコードは、状態空間モデルの1つである SARIMAX(Seasonal AutoRegressive Integrated Moving Average with eXogenous regressors)モデルを使用して時系列データを分析する方法を示しています。
import pandas as pd import numpy as np from statsmodels.tsa.statespace.sarimax import SARIMAX np.random.seed(0) data = np.random.randn(100).cumsum() model = SARIMAX( data, order=(1,1,1), seasonal_order=(1,1,1,12)) results = model.fit() print(results.summary())
詳しく説明します。
データを生成し
data
に格納します。ランダムな値の累積和を持つ時系列データです。np.random.seed(0) data = np.random.randn(100).cumsum()
SARIMAXモデルを構築します。結果は、
results
に格納します。model = SARIMAX( data, order=(1,1,1), seasonal_order=(1,1,1,12)) results = model.fit()
モデルのサマリーを表示します。これには、係数の推定値、標準誤差、z値、p値などが含まれます。
print(results.summary())
SARIMAX Results ========================================================================================== Dep. Variable: y No. Observations: 100 Model: SARIMAX(1, 1, 1)x(1, 1, 1, 12) Log Likelihood -132.907 Date: Mon, 08 Jul 2024 AIC 275.813 Time: 09:43:55 BIC 288.143 Sample: 0 HQIC 280.778 - 100 Covariance Type: opg ============================================================================== coef std err z P>|z| [0.025 0.975] ------------------------------------------------------------------------------ ar.L1 0.9830 0.129 7.645 0.000 0.731 1.235 ma.L1 -0.9136 0.109 -8.350 0.000 -1.128 -0.699 ar.S.L12 0.1951 0.212 0.919 0.358 -0.221 0.611 ma.S.L12 -0.9992 70.641 -0.014 0.989 -139.452 137.454 sigma2 0.9865 69.503 0.014 0.989 -135.236 137.209 =================================================================================== Ljung-Box (L1) (Q): 0.12 Jarque-Bera (JB): 0.39 Prob(Q): 0.73 Prob(JB): 0.82 Heteroskedasticity (H): 0.67 Skew: -0.15 Prob(H) (two-sided): 0.29 Kurtosis: 2.85 ===================================================================================
- 状態空間モデルとは?
-
状態空間モデルは、観測データとその背後にある潜在的な状態(状態変数)をモデル化するためのフレームワークです。
状態空間モデルは、以下の2つの方程式で構成されます。
状態方程式 (State Equation)
\displaystyle x_t = F x_{t-1} + G u_t + w_t
状態変数の時間的な進化を記述します。ここで、x_t は時刻 t の状態変数、F は状態遷移行列、G は制御行列、u_t は制御入力、w_t はプロセスノイズです。
観測方程式 (Observation Equation)
\displaystyle y_t = H x_t + v_t
観測データと状態変数の関係を記述します。ここで、y_t は時刻 t の観測データ、H は観測行列、v_t は観測ノイズです。
状態空間モデルは、カルマンフィルターや粒子フィルターなどのアルゴリズムを使用して、状態変数の推定や予測を行います。
- SARIMAXモデルとは?
-
SARIMAXモデル (Seasonal AutoRegressive Integrated Moving Average with eXogenous regressors)は、時系列データのトレンド、季節性、自己相関、および外生変数を考慮したモデルです。
SARIMAXモデルは、以下の要素で構成されます。
自己回帰 (AR) 成分
過去の値が現在の値に与える影響をモデル化します。AR成分の次数を \(p\) とします。差分 (I) 成分
データの非定常性を除去するために差分を取ります。差分の次数を \(d\) とします。移動平均 (MA) 成分
過去の誤差が現在の値に与える影響をモデル化します。MA成分の次数を \(q\) とします。季節成分
季節性を考慮するために、季節自己回帰 (SAR)、季節差分 (SI)、季節移動平均 (SMA) の成分を追加します。これらの次数をそれぞれ P、D、Q とし、季節周期を s とします。外生変数 (X)
モデルに含める外部の説明変数です。SARIMAXモデルの一般的な形式は次の通りです。
\displaystyle SARIMAX(p, d, q) \times (P, D, Q, s)このモデルは、季節性やトレンドを持つ複雑な時系列データの分析や予測に適しています。
SARIMAXモデルは、状態空間モデルの一種として実装されることが多く、状態空間表現を使用して効率的に推定や予測を行います。
- SARIMAXの状態空間モデル表現
-
SARIMAXモデルを状態空間モデルとして表現する場合、以下のような数式で表現されます。
状態方程式 (State Equation)
状態方程式は、状態変数の時間的な進化を記述します。SARIMAXモデルの場合、状態方程式は次のようになります。
\displaystyle \mathbf{x}_t = \mathbf{F} \mathbf{x}_{t-1} + \mathbf{G} \mathbf{u}_t + \mathbf{w}_tここで、
- \mathbf{x}_t は時刻 t の状態変数ベクトル
- \mathbf{F} は状態遷移行列
- \mathbf{G} は制御行列
- \mathbf{u}_t は制御入力(外生変数)
- \mathbf{w}_t はプロセスノイズ
観測方程式 (Observation Equation)
\displaystyle y_t = \mathbf{H} \mathbf{x}_t + \mathbf{v}_t
観測方程式は、観測データと状態変数の関係を記述します。SARIMAXモデルの場合、観測方程式は次のようになります。ここで、
- y_t は時刻 t の観測データ
- \mathbf{H} は観測行列
- \mathbf{v}_t は観測ノイズ
SARIMAXモデルは、自己回帰 (AR) 成分、差分 (I) 成分、移動平均 (MA) 成分、および季節成分を含む複雑な構造を持ちます。
より具体的に表現すると、次のようになります。
状態方程式
\displaystyle \begin{pmatrix}x_{t,1} \\x_{t,2} \\\vdots \\x_{t,n}\end{pmatrix}=\begin{pmatrix}\phi_1 & 1 & 0 & \cdots & 0 \\\phi_2 & 0 & 1 & \cdots & 0 \\\vdots & \vdots & \vdots & \ddots & \vdots \\\phi_n & 0 & 0 & \cdots & 1\end{pmatrix}\begin{pmatrix}x_{t-1,1} \\x_{t-1,2} \\\vdots \\x_{t-1,n}\end{pmatrix}+\begin{pmatrix}\theta_1 \\\theta_2 \\\vdots \\\theta_n\end{pmatrix}\epsilon_t+\mathbf{w}_t観測方程式
\displaystyle y_t = \begin{pmatrix}1 & 0 & \cdots & 0\end{pmatrix}\begin{pmatrix}x_{t,1} \\x_{t,2} \\\vdots \\x_{t,n}\end{pmatrix}+ \mathbf{v}_tここで、
- \phi_i は自己回帰係数
- \theta_i は移動平均係数
- \epsilon_t はホワイトノイズ
このように、SARIMAXモデルは状態空間モデルとして表現され、カルマンフィルターなどのアルゴリズムを使用して状態変数の推定や予測を行います。