説明変数のある時系列予測(状態空間モデル)
概要
時系列データは実務で取り扱う機会が多い。その際、予測対象の時系列データ(目的変数)と似たような変動をする他の時系列データ(説明変数)を手がかりに予測したい場合がある。
説明変数を用いて目的変数を予測する最も単純な方法として、線形回帰がある。ただ、線形回帰では時系列データの特徴を捉えきれないという問題があり、高い精度は期待できない。
この記事では時系列分析の1手法である状態空間モデルによる予測を行い、線形回帰に比べて何が優れているかを説明する。
データ
ここでは、下図のように変動するX, Yという2つの変数を考える。 Yが予測対象の変数、Xは説明変数である。 Xを利用して、Yをリアルタイムに予測したい。つまり、t時点のYを予測する際には、t-1時点までのYの値とt時点までのXの値が利用可能とする。
XとYの散布図は下図のようになる。
XとYにははっきりと相関があり、XはYの予測に役立ちそうである。
線形回帰
ここで単純な予測モデル、すなわち線形回帰することを考える。
これはt-1時点までのX, Yを用いて回帰直線を作成し(切片αと傾きβを求め)、t時点のXの値を代入することでYの予測値を算出する。
下図は、t=10までのデータ(グレー)を用いて、回帰直線を作成し、t=11のYを予測している。
全時点の予測結果をプロットすると下図の通り。
そこまで悪い予測ではないが、途中に連続して予測を大きく外してしまうケースが見られる。一期先予測誤差(MAE)は2.38程度となった。
これは線形回帰では、過去のデータ点をすべて同等に扱っており、直近のデータは類似しているというデータからはっきり読み取れる傾向を無視しているからである。
この直近のデータは類似している、という性質こそ時系列データの特徴であり、予測の際に考慮すべき情報なのだ。
状態空間モデル
時系列予測の1手法として、状態空間モデルがある。
特に今回扱うのは、一般的に「回帰成分を含むローカルレベルモデル」、と呼ばれるモデルで、式で表すと下記の通り。
線形回帰と違うのは、回帰直線の傾きと切片が、1つ前の時点の傾き、切片にノイズが加わって得られる、としている点である。
回帰直線の切片と傾きが「状態」と呼ばれる潜在変数である。各時点の状態は1時点前の状態によって決まる。
つまり予測の際は直近のデータの影響が大きくなる。
状態の推定にはカルマンフィルタと呼ばれる手法が用いられる。詳しくはこちらの記事を参照。 logics-of-blue.com
カルマンフィルタの要点としては、観測値が得られるたびに状態の推定値が補正され、補正された状態を用いて次の時点における状態と観測値の予測が行われる、ということになる。
状態空間モデルによる一期先予測の結果は下図の通り。
一期先予測誤差(MAE)は1.81程度となり、線形回帰よりはっきり改善している。
予測結果の比較
2つのモデルの違いを見るため、t=47, 48における予測結果を比べてみる。
まず、線形回帰の場合。この場合は過去の全ての観測値を同等に扱って予測を行う。結果、t=47, 48のいずれでも実際の観測値より大幅に小さい値を予測してしまっている。
次に、状態空間モデルの場合。t=47では予測誤差が大きいのは同じだが、t=48の予測誤差は比較的小さくなっている。 これは、t=47の観測値を用いた状態の補正が行われているためである。つまり、直近の観測値は予測値よりだいぶ大きかった、という情報をモデルに与えることで、次の時点の予測値を大きくするように補正が働く。
アニメーションも載せておく。
まとめ
時系列データの分析には状態空間モデルなど時系列モデリングの適用をしましょう。