時系列データを解析するための様々なモデル

 2019/09/23    時系列分析    

この記事では、時系列データを解析するためのSARIMAモデル以外の様々なモデルについて説明します。分析したいデータに適用できそうなモデルがあれば、他の文献をあたるなどして理解を深めるとよいでしょう。

平均・分散、正規分布などの統計学の初歩の知識を前提とした初心者向け入門記事です。Pythonで時系列解析・分析に興味がある方は、後学のために参考にしてみてください。

ボラティリティ変動モデル

こちらの記事で説明したARモデルからSARIMAモデルで、誤差項 \(εt\) は独立かつ同一の分布に従うとしていました。 しかし、特に金融分野の時系列では、大きな変動が局所的に現れる現象(ボラティリティ・クラスタリング)がしばしば観測されます。 たとえば、ある銘柄の価格にショックが起こった後に売り買いが激しくなり大きな変動が続く、という現象は想像に易いでしょう。 このような現象を説明するために、誤差項 \(εt\) の分散 \(σ2ε\) に時系列構造を導入するモデルがボラティリティ変動モデルです。

もっとも単純なARCH( \(m\) )モデル (AR Conditional Heteroscedasticity model) は次式で表されます。
$$
y_t = \mu_t + u_t = \mu_t + \sqrt{\sigma_t^2}\varepsilon_t, ~ \varepsilon_t\sim N(0, 1),\\
\sigma_t^2 = \gamma_0+\sum_{i=1}^m\gamma_iu_{t-i}^2.
$$
つまり、ARCH( \(m\) )モデルは誤差項の二乗 \(u2t\) が自己回帰するモデルと解釈することができます。 ARCH型モデルは平均について何も記述していないので、予測という観点ではメリットを感じないかもしれません。 しかし、誤差の分散をモデリングしているため、区間予測をより正確に行うことができることや、金融分野では分散そのものがリスクとして重要視されていることなど、様々な利点があります。

ARCHモデルの他にも、より少ないパラメータで長期的なボラティリティの持続を表現するGARCHモデル (Generalized ARCH model) や、 \(σ2t\) そのものが確率的ショックを受ける確率的ボラティリティモデル、正のショックよりも負のショックがより大きな影響をもつことを表現したGJRモデルなど、様々なモデリングが提案されています。 ARCHモデルやGARCHモデルはarchモジュールで実装されています。

多変量時系列モデル

ベクトルAR (Vector AR: VAR) モデルはARモデルを多変量に拡張したモデルで、複数の定常時系列の関係を説明することができます。 最も単純な二変量VAR( \(p=1\) )モデルは次式で表されます。
$$
\begin{cases}
y_{1,t} = c_1 + \phi_{1,1}y_{1,t-1} + \phi_{1,2}y_{2,t-1} + \varepsilon_{1,t}\\
y_{2,t} = c_2 + \phi_{2,1}y_{1,t-1} + \phi_{2,2}y_{2,t-1} + \varepsilon_{2,t}
\end{cases}
$$
系列 \(y1\) と \(y2\) は1時点前の自身でだけでなく、1時点前のお互いでも回帰されていることがわかるでしょう。 このように、VARモデルは複数の時系列間の関係性を表現することができます。 ARモデルがARMAモデル・ARIMAモデルへと拡張されるように、VARモデルもVARMAモデルやVARIMAモデルへと拡張することができますが、推定が難しいことなどからVARモデルが使われることが多いようです。

また、VARモデルを利用するメリットの一つに、時系列間の関係を見ることがあります。 ある時系列が他の時系列に与える影響を見る枠組みの一つにグレンジャー因果 (Granger causality) があります。 VAR( \(p=1\) )モデルで説明すると、「 \(y1,t−1\) だけに基づいた \(y1,t\) の予測」と「 \(y1,t−1,y2,t−1 \)に基づいた \(y1,t\) の予測」とを比較し、後者の精度が有意に良い場合には「 \(y1\) から \(y2\) へのグレンジャー因果性がある」といいます。 さらに影響を定量化する手法にインパルス応答 (Impulse response) があります。インパルス応答では、ある変数にショックがあるとき、その変数や他の変数に及ぼす影響をみています。

Pythonでは、statsmodelsのvector_ar()でVARモデルが実装されています。

レジームスイッチングモデル (Regime switching model)

時系列の裏側に離散的な状態が存在し、その状態(レジーム)によってモデルが変化するようなモデルをレジームスイッチングモデルといいます。 たとえば株価の値動きを考えたとき、好景気時は時系列があるモデルに従っているが、不況時には別のモデルに従っている、というような現象を考えます。 実際には状態は観測できないので値動きのデータしか手に入りませんが、レジームスイッチングモデルを利用すればどの状態が背後にあるのかの推定ができるだけでなく、それぞれの状態がどのような特徴を持っているのかを知ることができます。

状態がある一定の確率に従って遷移する2状態レジームスイッチングモデルを例に考えてみましょう。 それぞれの状態を (\(r1,r2\)) とし、 \(r1\) から \(r2\) に移る確率を \(p1,2\) とすると、 \(r1\) に留まり続ける確率は \(1−p1,2\) となります。 \(r2\) から \(r1\) への推移確率 \(p2,1\) についても同様に考えることができます。 \(r1\) でも \(r2\) でも時系列がAR( \(p\) )モデルに従うことを仮定すると、そのようなモデルは2状態レジームスイッチングAR( \(p\) )モデルとよばれます。 ARモデルに対してだけでなく、MA, ARMA, ARIMA, ARCHなどをベースとするモデルも考えることができます

Pythonでは、レジームスイッチングARモデルがstatsmodelsのMarkovAutoregression()で実装されています。

時系列クラスタリング

クラスタリングとは、似たものをグループとしてまとめるタスクです。 ここでは、たくさんの時系列データを複数のグループに分けることを考えます。 売上の時系列をもとにたくさんの店舗をグループ分けしたり、値動きをもとに市場の株式をグループ分けするような状況です。

時系列クラスタリングの最も単純なアプローチは、時系列どうしがどのぐらい似ていないか(距離・非類似度)をもとに、k-means法や階層的クラスタリングなど、通常のクラスタリングの手法を適用することです。 非類似度の計算は大きく次の二つに分けられます。

  • 同時点を比較する非類似度
  • 時系列に特化した非類似度

同時点を比較する非類似度

最もよく使われるユークリッド距離 (Euclidean distance) など、通常の距離尺度も時系列に対して考えることができます。 ユークリッド距離は全要素についての差の二乗を足し合わせ、その平方根をとるものです。 時系列 \(x,y\) のユークリッド距離\( deuclid(x,y) \)は次で与えられます。
$$
d_{euclid}(x, y) = \sqrt{\sum_{t=1}^T (x_t - y_t)^2}
$$

時系列に特化した非類似度

時系列に特化した非類似度にDynamic Time Warping (DTW) があります。 長さの異なる時系列間の非類似度は、どの時点どうしで差をとれば良いかわからないため、ユークリッド距離などで求めることができません。 その代わりに、長さの違う要素から最適なマッピングを見つけることができる、より柔軟な方法が必要になります。 ユークリッド距離は同時点どうしの差を求めているので、対角線のマッピングをしていることになります。

一方DTWでは次図のようなマッピングを許し、それが最小になるようなマッピングにおける距離が非類似度として出力されます。

長さの違う系列どうしを比較できるだけでなく、波形が似ているがそのタイミングが若干異なるような場合にも有用です。たとえば、1日を通した売上の推移が非常によく似ているのに、そのピーク時間が若干異なる場合などが考えられます。

Pythonでは、DTWの算出はfastdtwモジュールで実装されています。

まとめ

時系列データを解析するためのSARIMAモデル以外の様々なモデルについて説明しました。

分析したいデータに応じて、使い分けてみてください。

  • 人気の投稿とページ

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です