Makridakis, S., Spiliotis, E, Assimakopoulos, V. (2018) Statistical and Machine Learning forecasting methods: Concerns and ways forward. PLoS ONE, 13(3), e0194889.
都合によりあわてて読んだ奴。時系列予測における伝統的な統計手法と機械学習を比較するという論文。筆頭著者は予測研究で著名なマキリダキスさん。予測に関してなにか調べ物をしていると、Andersonさんとこの人に突き当たることが多い。キプロスの大学の先生なのね。
1. イントロダクション
機械学習(ML)の導入によって時系列予測の性能は上がったのか。上がったという主張は多いが、次の3つの限界を持つ。(1)どこまで一般化可能かわからない。(2)短期予測がほとんど。(3)ベンチマークがはっきりしない。
本論文を書くきっかけになったのはWang & Wang(2017 Neural Networks)である。この論文は株価予測を改善したという内容で、なるほどたしかに正確に予測できているんだけど、でも株価時系列というのはランダムウォークに近いもののはずだ。よしいっちょ追試したろうやないかと思って、著者らに連絡してみたが、全然返事がない。これじゃあ追試なんてできないじゃないですか。だいたいやね、MLをきちんとしたベンチマークと比べた研究自体みあたらんわけですよ。というのがきっかけで、この研究をはじめたのです。
[←ウケる… 名指しでディスられている方々は北京交通大の所属であった。邪推かもしれないけど、相手が外国の見知らぬ研究者だからこういう風に辛辣に書けるのであって、これが欧米の有名研究者だったらまた違う書き方になったりしませんかね?]
2. MLの正確性: レビューと考察
[古い話が紹介されているけど、ちょっと飛ばして…]
- Makridakis & Hibon (2000 Int.J.Forecasting): M3 Competition。MLの正確性についての最初の大規模研究であった。Automated Artificial NN (AANN)のsMAPE (後述)はBox-Jenkins法などの伝統的手法と大差なかった。
- Crone, Hibon, & Nikolopoulos (2011 Int.J.Forecasting): NNに特化したコンペティション(データはM3 Competitionから)。NNが特に優れているとはいえない。
3. ML予測手法の性能を伝統的な統計的手法と比較する
かつてAhmed, Atiya, Gayer & El-Shishiny (2010 Econ.Rev.)は次の8つのML手法を比較した。
- 多層パーセプトロン(MLP)
- ベイジアン・ニューラルネットワーク (BNN)
- 放射基底関数 (RBF)
- 一般化回帰ニューラルネットワーク(GRNN). いわゆるカーネル回帰のこと。
- K最近隣回帰(KNN)
- CART回帰木(CART)
- サポート・ベクター・マシン(SVR)
- ガウシアン過程(GP)
データはM3 Competitionから得た月次時系列。彼らの結果では、sMAPEが小さい順に、MLP, BNN, GP, GRNN, KNN, SVR, CART, RBFであった。[なんと… 多層パーセプトロンが勝ったとは…]
本論文はこの研究の拡張である。拡張点は:
- 8つのML手法に加え、8つの統計的手法についても調べます。
- ML手法として再帰ニューラルネットワーク(RNN)と長短期記憶ネットワーク(LTSM)を追加します。
- 正確性の指標としてMASEを加えます(後述)。
- 1期先予測だけでなく18期先予測も調べます。
- 計算の複雑さも調べます。
- モデル適合度も調べます。
本論文では個々の時系列の末尾18時点をテストデータ, 残りを学習データにする。
3.1 正確性の指標
次のふたつを用いる。
- 対称的平均絶対パーセンテージ誤差(sMAPE)。\(k\)を予測ホライズン(「k期先予測」のkのことね)、\(Y_t\)を観察値, \(\hat{Y}_t\)を予測値として、
$$ sMAPE = \frac{2}{k} \frac{|Y_t – \hat{Y}_t|}{|Y_t|+|\hat{Y}_t|} \times 100% $$ sMAPEは負の値より正の値をよりpenalizeすることになる[←よくわからん。Goodwin & Lawton (1999 Int.J.Forecasting)をみるとよいらしい]。 - 平均絶対スケールド誤差(MASE)。利用できるヒストリカルな観察の数を$n$, 時系列の周期を$m$として
$$ MASE = \frac{1}{k} \frac{\sum_{t=1}^{k} |Y_t – \hat{Y}_t|}{\frac{1}{n-m} \sum_{t=m+1}^{n} |Y_t – Y_{t-m}|}$$[つまりこういうことだ。k期先予測の場合, まずは(1期先予測誤差, …, k期先予測誤差)の平均を求める。これをある値で割るんだけど、その値とは、仮に月次データが3年分利用できるなら、2年目以降の24ヶ月について前年同期からの差の絶対値を平均した値だ。なるほど、前年同期の値をそのまま予測値にする場合をベンチマークとし、それよりもよかったら1を下回る指標だってわけね]
3.2 計算的複雑性とモデル適合
計算的複雑性(CC)の指標は、計算時間の平均をナイーブ手法の計算時間で割った値とする。[読み落としたのだと思うけど、ナイーブ手法ってなんのことだろう。後述のNaive 2かな?]
モデル適合度(MF)は、学習データに対するMSEを学習データの二乗和で割った値とする。すなわち$$MF = \frac{n \sum_{t=1}^{n}(Y_t – \hat{Y}_t)^2}{(\sum_{t=1}^{n} Y_t)^2} \times 100%$$
3.3 適用する手法
大変長らくお待たせいたしました。改めまして、選手入場です。[拍手]
まず伝統的手法から。[知らん手法が出てくる… Makridakis, Weelwright, & Hyndman (1998, 書籍)をみよとこと。おお、RのforecastパッケージのHyndmanさんじゃん! マキリダキスさんと共著があったのね! 世間狭いなあ]
- Naive 2. すなわち季節調整付きランダムウォークモデル。[えーっと… 過去の同期の平均を予測値にするってこと?]
- 単純指数スムージング(SES)。トレンド抜きの予測モデルである。
- Holt指数スムージング。トレンドつきの予測モデルである。
- Damped指数スムージング。これもトレンドつきの予測モデル。
- Combの手法。SES, Holt, Dampedの平均を予測値とする。
- Theta法。ちなみにこいつはM3 CompoetitionにおけるsMAPE優勝者である。
- ARIMAモデルの自動モデル選択 [Rのforecastパッケージのことらしい]
- 指数スムージング(ETS)の自動モデル選択 [これもHyndmanさんがreferされている]
さて、いよいよML手法でございます。[いちおう個々の手法について説明が提供されていたので、メモをとりかけたけど、途中で疲れて放棄してしまった。ヒドイ]
- MLP. RのRSNNS::mlp()を使った[←へー]。手順は次のとおり。データは下限0, 上限1にスケーリングしておく。
- 隠れ層が1層のNNを構築する。
- 入力ノードの最良の数(1から5までとする)$N$を10-fold CVで選ぶ。[入力ノード数が5ってのは、つまり$Y_{t-1}$から$Y_{t-5}$を入力にして$Y_{t}$を予測するってことね]
- 隠れ層のノード数を$2N+1$にする。[あれ?じゃ前のステップではどうしてたの?]
- ウェイトを推定する。標準的なバックプロパゲーションではなくてスケールド共役勾配法(Scaled Conjugate Gradient method)を使う[嗚呼… 理解が及ばなくなってきた…]
- 隠れ層の活性化関数はロジスティックなんだけど、出力ノードについては線型とする。そうしないとうまくいかないから[Zhang & Qi (2005 Euro.J.OR)をみよとのこと。へー]
- BNN. これはMLPと似た手法だけど、誤差について事前分布を想定する。[…中略…] Rのbrnn::brnn()を使った。[←ほへー。知らなかった]
- RBF. これもMLPと同じく、隠れ層ひとつのフィード・フォワードネットワークなんだけど、活性化関数がシグモイド関数じゃなくて$n$個の放射基底関数の線形結合になる。[そんなんしらんがな… 勉強せんとあきませんね…] RのRSNNS::rbf()を使った。
- GRNN. またの名をNadaraya-Watson推定量ないしカーネル回帰推定量。Rのgrnnパッケージを使った。
- KNN. Rのclass::KNN()を使った。
- CART. Rのrpart::rpart()を使った。
- SVR. Rのe1071::SVM()を使った。
- GP. Rのkernlab::gausspr()。
- RNN. Python上のKeras APIを使った。
- LTSM. これもPython上のKeras API。
3.4 データの前処理
データの前処理について。
洗練された時系列予測においてはですね、平均と分散の定常性に到達するということが鍵になると考えられているわけである。しかるにMLの文献は2つに分かれている。「どんなデータでもオッケーだぜ、オリジナルのデータで大丈夫だぜ」派と、「いやMLといえども前処理が大事よ」派である。[←はっはっは]
というわけで、以下の前処理を試す。
- Original. なにもしない。
- 対数変換.
- Box-Cox変換.
- Detrending. 線型トレンドを取り除くか一階階差をとる。どっちにするかはCox-Stuart検定で決める。
- Deseasonalisation. ラグ12の自己相関があったら古典的な乗算モデルで分解する。
- 上記の組み合わせ、4通り[メモ省略]
AhmedらのデータにあてはめてMLPで予測したところ、対数変換とBox-Cox変換はたいして効かなかった。季節調整はすごく効いた。階差をとるより線型トレンドを取った方がよかった。
[… ほかにもいろいろ書いてあるんだけど大幅に省略。あのー、こういうのって結局は個々の時系列の性質によるので、ある時系列ではある前処理がよくて別の時系列では別の前処理がよかったりすると思うんだけど…??? 比較すべきは、個々の前処理の間の優劣ではなく、個々の時系列に対してどういう前処理をすべきかを決めるメタ手続きの間の優劣なのではないかと思うのだけれど… なにか見落としているのだろうか]
[フガフガと読んでいたら、前処理の話をしていたはずが、いつのまに手法比較の話にすーっと移行してしまった。どういうことよ… 節見出しが抜けてるんじゃなかろうか…]
MLのなかではMLPとBNNの性能がよかった。残念ながらRNNとLSTMの性能は悪かった。研究が進んでも予想性能が上がるとは限らないということであろう。
3.5 二期より先の予測
次の3つの方法について考える。
- 反復予測。2期先予測の際には1期先予測値を使う。[それはわかるんだけど、モデルのパラメータは変えるの? それとも1期先予測を得たときと同じモデルを使うの? たぶん後者だろうな]
- 直接予測。NNでいえば出力ノードを18個にする。
- 複数のNN予測。モデルを18個つくっちゃう。
MLP, BNNについて調べたところ、反復予測が良かった。統計手法と比べると統計手法のほうがよかった。最良の手法は、sMAPEでいえばTheta, MASEでいえばARIMA。
4. 正確性、適合度、計算の複雑性
[なるほど、ここからまとめと考察なのね]
sMAPEでいうと、(1)7つの統計手法, (2)MLPとBNN, (3)Naive2, (4)他のML手法、の順に良かった。[はっはっは]
今後の課題:
- なぜML手法の性能は低いのか。重要な課題だ。
- ML手法に未知の未来について学習させるにはどうしたらよいか。つまり、利用可能なデータにモデルを適合させるのではなくて、未来の誤差を最小化させるにはどうしたらよいか。実務的には、訓練期間をさらに1/3と2/3にわけ…[訓練データをひとつづつ増やすsliding simulationの話が書いてある。メモ省略]
- いっぱい予測手法を用意しておき、どんなタイプの時系列でどの予測手法を使うのがよいかをMLで学習するというのはどうか。
- over-fittingを避けるためにはどうしたらよいか。
- 各ML手法においてどういう前処理が必要か。
4.1 over-fitting [略]
4.2 計算複雑性 [略]
5. 結論
[すごく大きな話であった。略]
… 途中で面倒くさくなって流し読みになってしまったけど、要するに、単一時系列の予測をたくさん試したが機械学習手法よりもシンプルな統計モデルのほうが当たった。なぜかはよくわからん。みなさん凝った手法を開発するだけじゃなくてちゃんと従来手法と比べましょう。という主旨の論文であったと思う。
そうっすね、なぜ凝った手法のほうが当たらないのか、というのが大事な問いですね。「やっぱりシンプルなのがいい」というありがちな経験則に飛びつくんじゃなくて。