参考文献ファイナンス機械学習
本記事のモチベーション
金融データを予測する時に、予測の対象を定義する必要があり、何を予測したいかでアプローチが全然違います。
皆さんが一番馴染みがあるのは、株価$T+1$が上がるのか下がるのかを、価格変化率ないし価格変化率の符号で定義したことがあるのではないだろうか?
しかし、場合によっては、それでは予測が難しかったり、正答率が高くても、平均収益率やシャープレシオは酷かったりと色々な弊害があると思います。
そういったことはラベリングだけで解決出来る問題ではありませんが、ラベリングは軽視されがちでありながら、実はかなり深い意味を持っています。
時系列データにおけるラベリングの例とその解釈
例えば、日経平均株価の日足のOHLCデータがあるとしよう。
それぞれの終値を$X_1, X_2, ..., X_T$として、翌営業日の日経平均株価の終値を予測したい場合は、予測ラベルを$$Y_n = \frac{X_{n+1}-X_n}{X_n} (1 \leq n \leq n)$$とするだろう。
このとき、このラベルを予測するということは、戦略として今日の引値で日経平均株価を原資産とした商品を成行で新規でロング(ショート)し、翌営業日の引けで成行で決済する戦略であろう。
例えば、このラベルの予測に成功し、55%の正答率を出すことに成功した場合、実はそれは必ずしも運用に成功するとは限らない。ここでコストは一旦無視する。
成功する確率を$p$,成功した時の利益を$\mu_+$、失敗した時の損失を$\mu_-$とすると、期待値は$\mu = p\mu_+ - (1-p)\mu_-$となり、$\mu > 0$という条件では、$p > \frac{\mu_-}{\mu_+ + \mu_-}$になる必要がある。ここで$\mu_- = 1$としても一般性は失わないので、$p > \frac{1}{\mu_+ + 1}$となる。ここで、仮に$p = 0.55$であるならば、$\mu_+ > 0.8181...$とならなければならない。
このように、目的に応じて何を見るべきか判断する必要がある。
つまり、「予測ラベルとは、投資戦略である」と私は解釈している。
ラベリングの応用例
上記の例から派生するが、予測ラベルの正答率50%以上出すだけで良い例はあるのだろうか?
例えば、こういう戦略はどうだろうか?
資産の価格の仲直で取引でき、流動性が抜群である(ジャンプしない)という強い仮定を置く。$T=0$で資産を新規で保有し、仲直が上に+1bpsもしくは、-1bps動いたら、決済する。これは、金融で紹介される最もシンプルな二項モデルである。
この場合であれば、予測ラベルで50%以上は正の期待値を持つことになる。
では、どのようにラベル付をしたら良いだろうか?
データは、板情報(mid)のtickデータとする。
Pythonコードを用いて解説したい。
labels = df["mid"].diff().shift(-1).replace(0, np.nan).bfill()
labels = labels / abs(labels)
- 1bpsの変化なので、diffで見る。
- 次に、$X_{T}$と$X_{T+1}$の差分を見たいので、インデックスを1つ左にずらす。
- 差分が0においては取引をしないので、0をNullにしておく。
- 差分が0でない時に初めて決済するので、停止時刻を$t$とおくと、時刻$T=0$の戦略の収益は$X_t-X_0$となる。
- 最後は、ラベルを2つ(1か-1)にしたいので、符号だけ見る。
その他
本書では、その他にもTriple Barrier method、Trend-Scanning method等が紹介されていたので、是非参考にしてみてはいかがだろうか?