MicroAd Developers Blog

マイクロアドのエンジニアブログです。インフラ、開発、分析について発信していきます。

Direct Reinforcement Learningによる金融取引の紹介

はじめに

こんにちは. マイクロアドで機械学習エンジニアをしている福島です. 主にReal-Time-Bidding (RTB)におけるClick Through Rate/Conversion Rate(CTR/CVR)予測や入札最適化の研究・開発を担当しています.

アドテク企業というイメージが強いマイクロアドですが, 現在様々な事業を展開しており, 特に金融×データ分析領域に力を入れています. 最近ではオルタナティブデータ1に基づく金融事業を開始しました.

rtbsquare.work

そこで今回は, いつもの技術ブログとは趣向を変えて, 金融領域での機械学習活用の論文を1本紹介と実験の追試をしてみようと思います.

論文紹介

今回はこちらの論文を紹介します.
Deep Direct Reinforcement Learning for Financial Signal Representation and Trading
(Yue Deng, et al., 2016)

先物取引において, 深層学習と強化学習を組み合わせたDeep direct reinforcement (DDR)取引システムを提案する論文です.

概要

先物取引のプロセスは, 大別すると以下の2ステップのオンライン意思決定問題として考えることができます.

  • Step1 : 市場状況の要約
  • Step2 : 最適な行動の実行

上記の2ステップにはいずれも課題があります.
市場状況の要約の課題
一般的には移動平均などの様々なテクニカル指標を用いて市場状況を要約することが多いですが, 金融データにはノイズやジャンプなどを大量に含んでおり, 予め定義されたテクニカル指標では一般化能力に欠け要約に限界があります.

最適な行動の実行の課題
取引コストなど様々な要因も考慮する必要があり, 市場状況に対応する行動を明示的にモデル化するのは非常に複雑で困難です.

関連研究

強化学習は大別すると, Critic-baseActor-baseに分けることができます.
(※ 分類の考え方は様々ですが, あくまでこの論文ではこの2つに大別しています)

Critic-base

  • 価値関数に基づく手法
  • TD法やQ学習のように, 離散空間で定義された問題を解くために適用
  • 動的計画法などで価値関数を更新

Actor-base

  • Direct reinforcement learning (DRL)と呼ばれるパラメータ化された方策群から直接行動を学習する手法 [J. Moody, et al., 2001]

金融取引では, 環境が複雑すぎて離散空間での近似が難しい点と, 将来の状態がわからないため価値関数の定義が難しい点からActor-baseの手法が適しています.

Direct Reinforcement Trading

まずは一般的なDRLのフレームワークを導入します.

  •  p_1, p_2, \ldots, p_t : 取引所から発表される価格列
  •  z_t = p_t - p_{t-1} : 時刻 tにおけるリターン

各時刻において, 方策 \delta_t = \{{\rm long}, {\rm neutral}, {\rm short}\} = \{-1, 0, 1\} を選択します.
以上より, 時刻 tにおける取引モデルの報酬は以下で定義できます.


R_t = \underbrace{\delta_{t-1}z_t}_{\text{相場変動による損益}} -\underbrace{c |\delta_t - \delta_{t-1}|}_{\text{取引コスト}}

学習期間全体 [1, T]での報酬を報酬関数 U\{\cdot \}を使って U\{R_1, \ldots, R_t \}と表します.
報酬関数としては, 総利得 U_{\rm TP}\{\cdot \}やsharpe ratio U_{\rm SR}\{\cdot \} [O. Ledoit, et al., 2008]が挙げられます.


\begin{aligned}
U_{\rm TP}\{R_1, \ldots, R_t \} &=  \sum_{1}^{T} R_t\\
U_{\rm SR}\{R_1, \ldots, R_t \} &= \frac{{\rm mean}(R_1, \ldots, R_t)}{{\rm std}(R_1, \ldots, R_t)}
\end{aligned}

方策をパラメータ化するために, 以下のように非線形変換で近似します.


\delta_t = \tanh(\langle \boldsymbol{w}, \boldsymbol{f}_t\rangle + b + u\delta_{t-1})
  •  \langle\cdot, \cdot\rangle : 内積
  •  \boldsymbol{f}_t : 時刻 tの市場の特徴ベクトル
    •  \boldsymbol{f}_t = [z_{t-m+1},\ldots, z_t] \in \mathbb{R}^m
  •  \Theta = \{\boldsymbol{w}, b, u\} : 回帰係数

DRLの学習をまとめると以下のようになります.


\begin{aligned}
&\arg\max_{\Theta}U\{R_1, \ldots, R_T\}\\
&s.t \quad R_t = \delta_{t-1}z_t - c|\delta_t - \delta_{t-1}| \\
&\quad \quad \delta_t = \tanh(\langle \boldsymbol{w}, \boldsymbol{f}_t\rangle + b + u\delta_{t-1} )\\
\end{aligned}

以降から本論文の提案部分です.

DDR
シンプルなDRLでは, ノイズの多い市場環境をロバストに要約した特徴量ベクトルを得るための学習部分がないため, 特徴抽出部分を多層化します.


\delta_t = {\rm tanh}[\langle \boldsymbol{w}, g_d(\boldsymbol{f}_t) \rangle + b + u\delta_{t-1} ]

左 : DRL 右 : DDR (論文から引用)

FDDR (ファジィ拡張)
金融取引は, 背後にあるランダムなギャンブル性のため, 予測不可能な不確実性が多く含まれます. 金融信号マイニングの頑健性を高めるとの仮説のもと, ファジィ学習を導入し不確実性を低減します.

ファジィ集合 [Lotfi Asker Zadeh, 1965] ファジィ集合は曖昧な集合を定量的に扱うために集合を拡張した概念 .
ひとつのファジィ集合は, ひとつのメンバシップ関数で特徴付けられる.
メンバシップ関数 : 全体集合の各要素がそのファジィ集合にどの程度帰属しているかを示す.

「増加傾向」, 「減少傾向」, 「無傾向」のグループに対してファジィ集合を定義し, 入力特徴ベクトル  \boldsymbol{f}_tの各次元に3個の異なるファジィ度を割り当てます.
 i番目のファジィ集合のメンバシップ関数には, 平均 m_i, 分散 \sigma_i^{2}のガウスメンバシップ関数 v_i(\cdot)を用い,  l次元目の入力 f^{l}を以下のように写像します.


o_i^l = v_i(f^l) = e^{\frac{f^l - m_i}{\sigma_i^2}}

FDDR (論文から引用)

メンバシップ関数のパラメータに関しては, 学習サンプルをk=3のk-meansクラスタリングによって3クラスタに分類し, 各クラスタにおいて平均と分散を計算して求めます.

以下は論文に記載されている実験結果になります.

実験結果 (論文から引用)
DDL, FDDR共にDRLより安定しており, 特徴抽出機構の工夫が寄与してそうですね.

実験の追試

上記論文を自作データセットで追試してみます.

実験データの準備
実際の株式データを複数つないで人工データを作成して実験します.

実験設定
1000ステップずつパラメータを引き継いで再学習をしながら取引していきます.

  • Round 1: 学習[1001,7000], 検証[7001,10000], 取引[10001, 11000]
  • Round 2: 学習[2001,8000], 検証[8001,11000], 取引[11001, 12000]
  • ...

各ラウンドでの学習方法は以下のとおりです.

  • 1 iterあたり, 1000ステップの入力ベクトルを用いる.
  • 1ステップずつずらしながら学習する.
    • 1 iter目 : 1001 ~ 2000ステップの方策を学習
    • 2 iter目 : 1002 ~ 2001ステップの方策を学習
    • n iter目 : 6001 ~ 7000ステップの方策を学習
  • 50epoch学習. 1epochごとに検証ステップの方策を報酬関数で評価
    • 報酬関数は総利得とsharpe ratioの2パターン
    • 検証ステップでの報酬が最大のパラメータを用いて取引

実験結果
今回は人工データ実験なので, 取引コストは無視して評価しています.

TP: 総利得 SR: sharpe ratio
DDRに対し, 報酬関数にsharpe ratioを用いた結果も最も高パフォーマンスの結果となりました. 今回の人工データではファジィ機構による特徴変換の恩恵はあまり見られませんでした. データセットにも依存するのかもしれないです. 報酬関数はDDR, FDDR共にsharpe ratioの方が高性能でした.

DDR + sharpe ratioが汎用的かどうかを確認するため, 複数の系列に対してシミュレーションした結果が以下になります. ある程度どんな形の系列でも安定して報酬を獲得する結果を確認できました.

終わりに

今回は強化学習による金融取引のシミュレーションをしてみました. 結果的にはある程度安定したパフォーマンスが確認できました. 実際に運用するとなると, 取引介入による変動や急なトレンド変化・暴落など様々な問題が発生すると思うので, 他の要素との組み合わせが重要になってくると思いますが, 取り組みとしては面白いですね.

金融領域では株価予測やポートフォリオ最適化など, 他にもデータ分析を活用した様々な取り組みがされており, オルタナティブデータの活用など新たな研究分野も盛り上がっています.
引き続き色々調べたいと思います.

機械学習エンジニア絶賛採用中

マイクロアドでは, 問題設定からサーベイ, 開発・運用まで裁量を持ってチャレンジしたいという仲間を募集しています!また, 機械学習エンジニアだけでなく, サーバサイド, フロント, インフラエンジニアなど幅広く募集しています!
気になった方は以下からご応募ください! recruit.microad.co.jp

参考文献
Learning to trade via direct reinforcement
Robust performance hypothesis testing with the Sharpe ratio


  1. 機関投資家によって投資判断のために使われるデータのうち, 伝統的に用いられてきた決算開示等, 一般的な公開情報以外のデータ群の総称