Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

【ML Tech RPT. 】第17回 構造に関連する機械学習を学ぶ (3) ~時系列予測~

f:id:ssatsuki040508:20181210005017p:plain
DSOC研究員の吉村です. 最近, 調理器具を集めるのにハマっていて, 耐熱性のゴムベラを購入しました. 火にかけながら利用できるのが非常に使いやすく, 直近での一番いい買い物だったと感じています.

さて, 今回も引き続き構造に関する機械学習の話題です. 前回の最後に系列データの回帰の話について書くとしていましたが, 今回のタイトルを見てもらうとわかるように時系列予測についての話が今回の主題です. その中で, 比較的古典的な ARIMA 過程に関連する一連のモデルを見ていこうと思います. (この ARIMA 過程に関連するモデル群は, ネーミングから進化がわかりやすいので個人的にまとめやすくてよかったです.)

時系列予測とは

時点  t における状態  y_t を時点  t-1 以前の状態から予測する問題設定のことです. 系列が一つだけの場合が一番オーソドックスな問題設定ですが, 系列が複数ある場合も当然あり, そのときには全ての系列の時点  t の状態を予測することが目的になります. また, 時点  t に依存する外的要因 (例えば, 天候や曜日などの系列の状態に影響を与えうる情報) として, ベクトルの系列  \{\boldsymbol{x}_t\} が合わせて与えられる場合もあります.

時系列予測の前提

時系列予測を行う上では, 現在の時点の状態は過去の時点の状態に依存するという仮定は必要です. もちろん, 時系列が常にその仮定を満たすわけではないですが, 満たさないとすると予測という行為自体を行うことができないですし, 意味のあるモデリングもすることができません.

とはいえ , ただ過去の時点に依存しているという仮定だけではモデリングすることが非常に困難になります. そこで, モデリングを比較的に容易にするために重要視されている性質が定常性 (stationarity) です. 「経済・ファイナンスデータの計量次系列分析 *1」の中で, (弱) 定常性が下記のように定義されています.

定義 1.1 (弱定常性) 任意の  t k に対して,
 E(y_t)=\mu
 \text{Cov}(y_y, y_{t-k})=E[(y_t - \mu)(y_{t-k} - \mu)]=\gamma_k
が成立する場合,過程は弱定常 (weak stationary) といわれる.

ここで,  E(\cdot) は期待値を表し,  \text{Cov}(\cdot, \cdot) は自己共分散 (Autocovariance) を表しています. この弱定常性を簡単に説明すると, 系列の平均が  \mu となり, 自己共分散が時間差のみにしか依存しないような系列のことを(弱)定常であるというということになります. ここで, 「弱」という文字がついていることが気になる方もいらっしゃるかと思います. 弱定常性があるということは, 当然, 強定常性という性質もありますが, 時系列分析の場合には, ほとんどが弱定常性の過程だけで十分なことが多いようです. そのため, ここでは強定常性の定義は省略します. 気になる方は「経済・ファイナンスデータの計量次系列分析」 をご覧ください.

(弱)定常性を持てばモデリングが比較的容易になるのは, 弱定常のモデルは時間差  k のみに依存して, 時点  t に依存しないためです. こうして複雑さをできるだけ排除したモデルを基にして, 時系列予測の研究が積み上げられています.

さて, 分析がし易くなるための仮定として, 弱定常性を考えましたが実際の系列は必ずしも弱定常性を持つとは限りません. それにもかかわらず, 弱定常性を重要視するのは, 系列データに対して, 時点間の差分をとったり, 対数 ( \log) をとったり, 特定の外因を除いたりすることで, 弱定常性を仮定することができる場合が多くあるためです.

前置きはこのくらいにして, 各種 ARIMA モデル一族 (?) の紹介に入っていきます.

MA (Moving Average) モデル

 q 次 MA モデル, 移動平均モデル, は下記の式で表されます.

 y_t = \mu + \varepsilon_t + \sum_{k=1}^{q}\theta_{k}\varepsilon_{t-k}\tag{1}

ただし,  \mu \{\theta_k\}_{k=1}^q は学習パラメータです. 各  \varepsilon_t は何らかの分布 によりサンプルされ (例えばホワイトノイズなど), その値から  y_t が逐次的に計算されます. このモデルでは, 常に定常性を持つ特徴がありますが, 自己相関の絶対値の最大値が0.5であることから, それよりも絶対値が大きい実際の系列をこのモデルでモデリングすることができないことに注意する必要があります. また,  q次のMAモデルでは,  q次までの自己相関しかモデリングできない点も知っておく必要があります.

AR (AutoRegressive)モデル

 p 次 AR モデル,自己回帰モデル, は下記の式で表されます.

 y_t = c + \sum_{k=1}^p\phi_ky_{t-k} +  \varepsilon_t \tag{2}

ただし,  c \{\phi_k\}_{k=1}^q は学習パラメータです. こちらも, 各  \varepsilon_t は何らかの分布 によりサンプルされ, その値から  y_t が逐次的に計算されます.このモデルは常に定常性を持つわけでないので注意が必要です. 定常性を持つかどうかについては, AR特性方程式と呼ばれる方程式の全ての解の絶対値が1より大きいことを持って確認することができますが, 今回は深く立ち入りません. ARモデルでは, より過去の自己相関を考慮できますが, その相関の(絶対値の)大きさは減衰していく特徴があります. また,  c については平均の値ではないことは把握しておいた方が良いでしょう.

ARMA (AutoRegressive Moving Average) モデル

 (p,q) 次 ARMA モデル, 自己回帰移動平均モデル, は名前の通り p 次ARモデルと  q 次MAモデルを組み合わせたモデルで下記の式で表されます.

 y_t = c + \sum_{k=1}^p\phi_ky_{t-k} + \sum_{k=1}^{q}\theta_{k}\varepsilon_{t-k} +  \varepsilon_t\tag{3}

MAモデルは常に定常性を持つので, ARMAモデルが定常性を持つための条件はARモデルに関する項が定常であることになります. これは, ARモデルの節で述べた確認方法を持って, 調べることができます.

ここまでは, モデル化したい系列が定常性を持つ場合の話でした. ここからは, 非定常な系列をモデリングする手法の話になります.

ARIMA (AutoRegressive Integrated Moving Average) モデル

 (p, d, q) 次 ARIMA モデル, 自己回帰和分移動平均モデル, は非定常な系列の一部をモデリングできるモデルです. 具体的には, 非定常な系列の  d 階差分をとった系列が定常性を持つような場合をモデル化したものになります. ここで,  d 階差分の説明を簡単にしておきます. 例えば, 1階差分とは  y_t - y_{t-1} (=z_t) のことを表し, 2階差分とは  z_t - z_{t-1} のことを表します. 以降, 同様にして 3, 4,  \cdots 階差分が計算できます.

少し厳密に定義を説明しておくと,  d 階差分をとった系列が定常性をもち, 反転可能性を持つような (p,q) 次ARMAモデルに従うものを  (p, d, q) 次 ARIMA モデルと言います. したがって, 式で書くと次のようになります.

 z_t = c + \sum_{k=1}^p\phi_kz_{t-k} + \sum_{k=1}^{q}\theta_{k}\varepsilon_{t-k} +  \varepsilon_t\tag{4}

ただし,  z_t y_t d 階差分をとったものであり, 上記のモデルは定常性を持ち, 反転可能性を持つ条件を満たすものとします. 当然, 常に上記の式が定常性と反転可能性を持つわけではないので, そこは注意が必要です.

ここまでは, 季節変動は存在しないものとして扱ってきましたが, 時系列データを扱う上では季節変動を調整する必要がある場合もあります. そこで, 季節変動を考慮したモデルが次の SARIMA モデル[*2]になります.

SARIMA (Seasonal AutoRegressive Integrated Moving Average) モデル

SARIMA  (p, d, q)(P, D, Q)_m モデル, 季節自己回帰和分移動平均モデル, は季節変動についての差分系列を ARMA でモデリングしたものです.  m は季節の周期を表したものになり, 例えば, 一年で周期が来ると仮定して各月ごとにデータが得られる場合には  m=12 などとすることになります. このモデルの式は, 今までのものと見え方が少し異なりますが下記のようになります[*3].

 \phi(B)\Phi(B^m)(1-B)^d(1-B^m)^D(y_t - \mu)=\theta(B)\Theta(B^m)\varepsilon_t\tag{5}

ただし,
 \phi(B)= 1 -\sum_{k=1}^p\phi_kB^k\tag{6}
 \Phi(B)= 1 -\sum_{k=1}^P\Phi_kB^{km}\tag{7}
 \theta(B)= 1 +\sum_{k=1}^q\theta_kB^k\tag{8}
 \Theta(B)= 1 +\sum_{k=1}^Q\Theta_kB^{km}\tag{9}
とします.

ここで一番重要なのは  B です.  B は backshift operator (または lag operator) と呼ばれるもので, 単純にある時点  t の状態  y_t に作用させると, その一つ前の状態  y_{t-1} を返す演算子です. したがって, これを状態  y_t \varepsilon に適用させると,  B-iy_t = y_{t-i} や,  B^i\varepsilon_t = \varepsilon_{t-i} となります.

 \phi(B) \Phi(B) の中身を見ると, 元々右辺にあった ARMA モデルの AR に関する項を左項に移しただけであることがわかります. モデル式は複雑そうですが, 単純に季節周期  m ごとの  D 階差分に対して ARMA モデルを使っているだけになります.

ARIMAX (AutoRegressive Integrated Moving Average with eXogenous variables)

 (p, d, q) 次 ARIMAX モデルは外的要因 (外生変数; exogenous vriables) による非定常な系列の一部をモデリングできるモデルです. モデルの式は比較的簡単で下記のように表されます.

 z_t = c + \beta x_t +  \sum_{k=1}^p\phi_kz_{t-k} + \sum_{k=1}^{q}\theta_{k}\varepsilon_{t-k} +  \varepsilon_t\tag{10}

ただし,  z_t y_t d 階差分をとったものであり, 上記のモデルは定常性を持ち, 反転可能性を持つ条件を満たすものとします.  \beta は学習パラメータで,  x_t は時点  t に依存する外生変数です. 今回の式ではスカラ値としていますが, 複数の外生変数が考えられる場合には, ベクトル形式となり,  \beta もベクトルになり内積演算の形で式に反映されます. また, 一般化して過去の外生変数の状態も考慮するようなモデルにすることも可能です.

SARIMAX (Seasonal AutoRegressive Integrated Moving Average with eXogenous variables)

SARIMAX モデルは, Seasonal な ARIMAX モデルになります. したがって, 式は SARIMA のモデルに外生変数に関する項を追加した形になります.

FSARIMAX (Fuzzy Seasonal AutoRegressive Integrated Moving Average with eXogenous variables)

FSARIMAX は (S)ARIMA(X) モデルとファジー回帰モデル [*3]を組み合わせたものです. 詳細は書きませんが, このモデルでは将来の状態の分布も扱うことができ, 加えて, ファジー回帰モデルを追加していることで元の (S)ARIMA(X) よりも少ないデータ数で最良/最悪の場合の推定が可能になります.

まとめ

今回は時系列予測についてということで, ARIMA モデル一族 (?) について紹介しました. 見て分かる通り, 一つずつ課題に向き合うことで進化してきたモデルであるということが分かります.これらについては, RでもPythonでも便利なライブラリがありますので, 気軽に試してみて結果を追うと良いかもしれません.

現状の機械学習の文脈での時系列の扱いは, やはりDeepによるモデル開発の研究が活発な印象です (最近だと Deep Factor Model [*4] など). より複雑な時系列の問題設定に対する研究もまだまだ行われています. 性能を高めるだけであれば Deep を用いていくので良いと思いますが, モデルの解釈の面を考えると今回紹介したような古典的な統計手法もとても有用だと思います.

次回は格子構造に関する話題について書いていく予定ですので, 引き続きよろしくお願いします.



▼【ML Tech RPT. 】シリーズ
buildersbox.corp-sansan.com

*1:沖本竜義, "経済・ファイナンスデータの計量次系列分析", in 朝倉書店, 2010.

*2:R. J. Hyndman and G. Athanasopoulos, "Forecasting: Principles and Practice," in Otexts, 2013.

*3:F. M. Tseng, and G. H. Tzeng, "A fuzzy seasonal ARIMA model for forcasting," in ELSEVIER, 2001.

*4:Y. Wang, A. Smola, D. C. Maddix, J. Gasthaus, D. Foster, and T. Januschowski, "Deep Factors for Forecasting," in ICML, 2019.

© Sansan, Inc.