自動取引に使えそうな深層学習による時系列データ予測の手法まとめ (RNN, CNN, Transformer, ……)

いわゆる time series forecasting の手法って世の中にめちゃくちゃ一杯ありますよね。歴史も長く、タスクも幅広く、最近の進化も大きく、かなり色々な手法が一長一短で混在してると思います。

かなり色々あって頭が混乱してきたので、一度自分用に整理しようかと思ってまとめてます。1つ1つを解説する気はゼロで、どちらかというと全体的な地図を作ろうとしてます。キーワードは置いとくつもりなので、じゃんじゃんググって下さい。

ここでは、OHLCV 的な系列から今後の上下やリターンを予測するためのモデルとして使えそうな手法を扱います。


まず深層学習以外①:計量時系列分析

なんて呼べば良いのかわからない。ARIMA とかそういう統計っぽいやつ。これ系を「機械学習ではない」と言い切るのも宗教論争になりそうだが、一般には機械学習ではない手法とみなされてる気がする。これだけで勝てるイメージはなく、界隈でもこれ系の手法の話はほとんどされてない気がする。

これ系の手法で今一番強いのは多分 Prophet とか?


まず深層学習以外②:特徴量抽出+テーブルデータ機械学習

時系列から特徴量を抽出して、あとは普通にテーブルデータとして機械学習を適用する。特徴量としては pandas の rolling とか使って色々計算したり、TA-Lib とか tsfresh とか使ったり、なんでも。機械学習の手法も、線形モデルでも LightGBM でも、なんでも。(なんなら NN (MLP) でも良いので、「深層学習以外」はちょっとおかしいんだけど……)

時系列に対する inductive bias を人手の特徴量として組み込める点、機械学習側で使える手法の幅が広い点などが利点かな。このアプローチで戦ってる人はかなり多い印象。


深層学習系 基礎①:RNN, LSTM, GRU

昔は時系列で深層学習と言ったら基本 RNN 系しか考えられないような状況だったと思う。RNN は内部状態を時系列方向に渡す NN の総称で、内部状態の計算をイカしたやり方でやる RNN の一種が LSTM や GRU という関係。

いろんな亜種も提案されてきたけど、結局普通の LSTM, GRU が普通によく使われる印象。とある激ツヨ botter は LSTM, GRU でめっちゃ勝ってるっぽい……凄い。けど、かなりノウハウがある様子なので、普通に OHLCV を突っ込むだけで勝てるかは謎。


深層学習系 基礎②:CNN, Dilated CNN

CNN は主に画像分類等で圧倒的な性能を発揮してきたが、時系列予測でも利用できる。画像では縦横方向の二次元の畳み込みを行うが、時系列データでは時間方向の一次元の畳み込みを利用する。

CNN の課題は、receptive field の小ささである。左右数フレームとの情報のやり取りを何度か繰り返すだけでは、遠い時間のことを考慮するモデルを作れない。そういうこともあって RNN が first choice という状況が長かったのかなと思う。

一方、WaveNet が発表されてから少し状況は変わった印象がある。WaveNet では非常に大きな dilation を使った畳み込みの利用を成功させており、そのアイディアを時系列予測に適用することで、receptive field の大きな CNN を使った時系列予測が行われるようになってきた。

⬆ WaveNet の元論文

⬆ WaveNet で時系列予測をする論文


深層学習系 基礎③:Transformer

今、深層学習で最も注目すべき変化の 1 つは、間違いなく self attention の台頭だと思う……みたいな話はみんなしてるから今更まあ良いか。まあそういう最近大流行のやつ。self attention は機構の名前で、それを使ったモデルのことを Transformer と呼んでる気がする。

attention では、時系列的な意味での場所に全くかかわらず自由に情報をやり取りできるので、LSTM や CNN より更に長距離の情報の受け渡しを容易に実現できるのが強み。

⬆ Transformer の元論文

⬆ Transformer による時系列予測の論文の例

⬆ Transformer による時系列予測の実装の例


深層学習系 応用①:計量時系列分析 ✕ 深層学習

発展的な研究は当然無数にあるので全部は紹介出来ないですが、個人的なお気に入りを気まぐれに紹介してみます。

1 つ目は、古典的な計量時系列分析系の手法に NN を組み合わせるアプローチ。ES-RNN や N-Beats(-I) が恐らく代表。計量時系列分析の式を当てはめつつ一部に NN を使うイメージ。inductive bias を上手く活用していると思う。ES-RNN はこれまで計量時系列分析系の手法が勝ってきた M4 competition というコンテストで勝ったらしい。

⬆ ES-RNN の Uber の記事。Uber ではサービスで使っているらしい。

⬆ N-Beats の論文。ES-RNN より強いと主張している。


深層学習系 応用②:Dilation ✕ RNN

CNN で dilation が効くなら RNN で dilation 入れたらどうよという、ぶっちゃけ安直なアイディアだが、効果が有るようだ。上の ES-RNN でも dilated LSTM が使われている。LSTM 使うなら dilation も試してみたら良いのかもしれない。

⬆ ソースコード


深層学習系 応用③:Transformer ✕ LSTM

これまた一見小学生並みの悪魔合体アイディアに思えてしまうかもしれないが、LSTM でまず比較的局所的な特徴抽出を行い、その後で Transformer で大局的な特徴抽出を行うというアイディアのようだ。

Google Cloud AI チームの Temporal Fusion Transformers という論文で使われている他、Kaggle の Riiid! Answer Correctness Prediction Competition の 2 位解法でもこのアイディアが使われていた様子。

⬆ Google Cloud AI チームの論文

⬆ Kaggle Riiid! Answer Correctness Prediction Competition の 2 位解法


終わりに

で、一番気になるのは「どれ使えば良いんですか?」「どれが強いんですか?」……だと思いますが、それはまさに僕が聞きたいです!w 

自動取引に取り組まれてる方で、お気に入りのアイディア抜けてるとかあったら、是非教えて下さい。特に「これ使って勝ってるよ」というのが有れば、是非こっそり教えて下さいw


この記事が気に入ったらサポートをしてみませんか?