🎓 レベル:標準 | 重要度:A(必須)
📎 前提:ETSモデルと状態空間表現(SSOE の状態空間) | 数理:確率過程(マルコフ連鎖・ポアソン過程)(統計)・関連:ARMA・ARIMAモデル
要点(BLUF)
- 状態空間モデル=「見えない状態 が時間発展し、観測 はその状態にノイズを乗せたもの」を、観測方程式と状態方程式のペアで書く枠組み。
- 一般形は (観測)と (状態)。行列 を入れ替えるだけで ARIMA も ETS も AR も同じ箱に収まる統一フレームです。
- ETSモデルと状態空間表現 の ETS は誤差が1つ(SSOE)でしたが、ここでは観測ノイズ と状態ノイズ を別々に持つ「複数誤差源」。この隠れ状態を次の カルマンフィルタ が推定します。
1. 状態空間モデルの一般形
中心アイデアは「観測は、見えない状態にノイズが乗ったもの」。これを2本の式で表します。
各記号の役割は次の通りです( は 次元の状態ベクトル、 は 次元の観測)。
| 記号 | 名前 | 役割 |
|---|---|---|
| 状態ベクトル | 直接は見えない「真の」量(水準・傾き・季節など) | |
| 観測(デザイン)行列 | 状態を観測へ写す。どの状態成分が観測に現れるか | |
| 観測ノイズ共分散 | 測定の不確実性(観測方程式の の分散) | |
| 遷移行列 | 状態の時間発展の規則(前の状態→今の状態) | |
| 状態ノイズ選択行列 | どの状態成分にショック が入るか | |
| 状態ノイズ共分散 | 状態自体の揺らぎ(状態方程式の の分散) |
と は互いに独立な正規ノイズ。添字 は行列が時変でもよいことを示しますが、本章のモデルは時不変( が定数)です。
ローカルレベルモデル:最小の状態空間
一番簡単な例は、状態がスカラーの水準 だけのローカルレベルモデルです。 とおくと、
水準 はランダムウォーク(ランダムウォークと単位根)で漂い、観測 はそれに測定ノイズが乗ったもの。(状態ノイズ÷観測ノイズ=信号対雑音比)が大きいほど水準は素早く動き、小さいほど滑らかになります(次ノート ローカルレベルとローカルトレンドモデル で深掘り)。
2. なぜ「統一フレーム」なのか
状態空間の威力は、多くのモデルが行列の中身を変えるだけでこの形に書けることです。
- AR(1) :状態 、、、、。
- ARMA()(ARMA・ARIMAモデル):状態に過去のショックを並べたコンパニオン形で表現。
- ETS / 構造時系列(ETSモデルと状態空間表現):水準・トレンド・季節を状態成分として持つ。
つまり状態空間は「個別モデルの上位言語」。一度この形に翻訳すれば、推定(カルマンフィルタ)・予測・平滑化・欠測処理が全部同じアルゴリズムで回ります(第4章の残りで順に扱います)。
flowchart LR
eta["状態ノイズ η_t ~ N(0,Q)"] --> A["状態 α_t = T α_{t-1} + R η_t"]
A --> Anext["次時点の状態 α_{t+1} へ"]
A --> Y["観測 y_t = Z α_t + ε_t"]
eps["観測ノイズ ε_t ~ N(0,H)"] --> Y
SSOE(単一誤差源)との違い
ETSモデルと状態空間表現 の ETS も状態空間でしたが、誤差項が ただ1つで、それが観測にも状態更新にも同じく入りました(single source of error, SSOE)。本章の状態空間は観測ノイズ と状態ノイズ が別物(複数誤差源)。
- SSOE(ETS):誤差が1本なので 期先予測の分布が漸化的に解析計算でき、予測区間が閉じた式で出る。
- 複数誤差源(本章):観測の不確実性と状態の揺らぎを分けてモデル化できる柔軟さがある代わりに、状態の推定にカルマンフィルタという逐次アルゴリズムを使う。
どちらも「状態空間で予測の不確実性を出す」点は共通ですが、定式化が別系統です。
コード①:隠れ状態と観測を生成して「見える/見えない」を可視化
真の隠れ水準 (ランダムウォーク)と、それに観測ノイズを乗せた を生成します。私たちが手にできるのは灰色の だけで、赤の真の水準 は本来見えません。この「隠れた構造を観測から復元する」のが次ノートの課題だ、と視覚的に掴むのが狙いです。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib # 日本語ラベル用
# 真の構造:隠れた水準 alpha がランダムウォーク、観測はそれにノイズが乗る
# alpha_t = alpha_{t-1} + eta_t, eta_t ~ N(0, Q) (状態方程式:Q=状態ノイズ分散)
# y_t = alpha_t + eps_t, eps_t ~ N(0, H) (観測方程式:H=観測ノイズ分散)
np.random.seed(0)
n = 120
Q_true, H_true = 0.25, 4.0 # 状態ノイズ < 観測ノイズ(水準はゆっくり動く)
alpha = np.zeros(n); alpha[0] = 10.0
for t in range(1, n):
alpha[t] = alpha[t-1] + np.random.normal(0, np.sqrt(Q_true))
y = alpha + np.random.normal(0, np.sqrt(H_true), n)
print(f"状態ノイズ分散 Q = {Q_true}, 観測ノイズ分散 H = {H_true}")
print(f"信号対雑音比 Q/H = {Q_true/H_true:.3f}(小さいほど水準は滑らか)")
print(f"隠れ水準 alpha の範囲 = [{alpha.min():.2f}, {alpha.max():.2f}]")
print(f"観測 y の標準偏差 = {y.std():.2f}(水準の動き+観測ノイズ)")
fig, ax = plt.subplots(figsize=(9, 4.5))
ax.plot(y, color="0.6", lw=1, marker="o", ms=3, label="観測 y_t(これだけ見える)")
ax.plot(alpha, color="C3", lw=2, label="隠れ水準 alpha_t(真の状態・本来は見えない)")
ax.set_xlabel("時点 t"); ax.set_ylabel("値"); ax.legend()
ax.set_title("ローカルレベルモデル:観測の裏に隠れた水準")
plt.tight_layout(); plt.show()
出力:
状態ノイズ分散 Q = 0.25, 観測ノイズ分散 H = 4.0
信号対雑音比 Q/H = 0.062(小さいほど水準は滑らか)
隠れ水準 alpha の範囲 = [8.11, 17.50]
観測 y の標準偏差 = 3.05(水準の動き+観測ノイズ)
出力の意味:状態ノイズ に対し観測ノイズ と、観測の方がずっとノイジー(信号対雑音比 )。だから図の灰色の観測 はギザギザに散らばり、赤の真の水準 は 〜 を滑らかに漂います。観測 の標準偏差 には「水準が動いた分」と「観測ノイズ」の両方が混ざっています。この赤線(隠れ状態)を、灰色の点(観測)だけから推定したい——それが カルマンフィルタ の仕事です。カルマンフィルタは観測のギザギザを適度に均し、真の滑らかな水準を追いかけます。
3. 数式の直観
- 2本立ての分業:状態方程式は「世界が裏でどう動くか」(ダイナミクス)、観測方程式は「その世界をどう覗くか」(測定)。両者を分けることで、測定のノイズと本物の変化を切り分けて推定できます。
- 行列はモデルの設計図: がダイナミクス、 が観測の仕方、 と が2種のノイズの大きさ。これらを差し替えれば AR・ARIMA・ETS・季節モデルが同じ箱に入る——だから「状態空間=時系列モデルの共通語」。
- ガウス+線形なら閉じる:ノイズが正規・式が線形なら、状態の事後分布が常に正規に保たれ、平均と共分散だけ更新すればよい。これがカルマンフィルタが軽量で厳密な理由です(カルマンフィルタ)。
⚠️ よくある誤解
- 「状態=観測」ではない:状態 は隠れた量、観測 はそれにノイズが乗ったもの。両者を混同すると「観測のノイズまで真の信号だ」と誤解し、過剰に振り回された推定になります。
- 「状態空間=カルマンと同じ」ではない:状態空間はモデルの書き方、カルマンフィルタはその状態を推定するアルゴリズム。同じ状態空間でも推定法は他にもあります(ベイズMCMCなど、第7章 ベイズ時系列で扱う予定)。
- 「ETS とカルマンは同一」ではない:ETS は単一誤差源(SSOE)、本章は複数誤差源。書き換えで橋渡しはできますが、 と を分けるか否かで定式化が異なります(ETSモデルと状態空間表現)。
- 「 は推定で決まる」ではない: の構造はモデルとして人が指定するもの(ローカルレベルなら全部1)。データから推定するのは普通ノイズ分散 など少数のパラメータです(ローカルレベルとローカルトレンドモデル)。
関連ノート
- カルマンフィルタ(この隠れ状態を推定する逐次アルゴリズム)
- ローカルレベルとローカルトレンドモデル(代表的な状態空間モデルと分散の復元・予測)
- 平滑化と欠測補間(全データで状態を改善・欠測を埋める)
- ETSモデルと状態空間表現(SSOE の状態空間・ETS)
- ARMA・ARIMAモデル(ARIMA も状態空間に書ける)
- ランダムウォークと単位根(水準のランダムウォーク)
- 確率過程(マルコフ連鎖・ポアソン過程)(統計・確率過程の土台)
- 第4章 状態空間とカルマン 目次
- 時系列分析・予測テキスト 全体目次