メタラベリングと2段階機械学習を使った株価変化の予測


1 この記事は?

ファイナンス機械学習(Advanced in Financial Machine Learning)の第3章には、Triple-Barrier Methodとメタラベルを導入した2段階機械学習手法を導入し、現時点の株価のデータが制限時間内までにTriple-Barrierスレッシュ上限を超えるか、またTriple-Barrierスレッシュ下限を超えるか、それともTriple-Barrierスレッシュ上下限内で収まるかを予測する手法を紹介している。この手法をビットコインに適用し、F1スコアを改善した事例がこちら(Financial Machine Learning Part 1: Labels)に書かれています。概念自体がやはり難しいので(Financial Machine Learning Part 1: Labels)をかみ砕いて解説をした記事を書きたいと思います。

参考記事
2段階学習モデルによるperformance metrixの改善
Financial Machine Learning Part 1: Labels

2 何がやりたいの?

現在の株価が、制限時間内に①スレッシュ上限を超えるか?  ②スレッシュ下限を下回るか? ③スレッシュ上下限内で推移するのか?を予測したい。将来の株価そのものを予測するわけではなく、①スレッシュ上限を超えるか?, ②スレッシュ下限を下回るか?, ③スレッシュ上下限内で推移するのか?の3つのケースのどれになるのかを予測したいわけです。

3 どのようにやるの?

3-1 2段階機械学習を使う

任意の時間を起点にTriple-Barrier内のビットコインの価格の動き(Triple-Barrierスレッシュ上限に達した。スレッシュ下限に達した。Triple-Barrier内に収まった)を記録した訓練データを1st機械学習モデル(ロジスティック回帰)に入力し、1st機械学習モデルを訓練する。1st機械学習モデルの出力と、訓練データを使い、2nd機械学習モデルを訓練する。

3-2 2段階機械学習をメリットは?

2段階機械学習モデルを使うとAccuracyを向上させることができる。

4 何ができたの?

2018年12月4日→2018年12月9日のビットコインの価格のデータを「2段階機械学習モデル」を適用することでAccuracyを向上させることができた。

●2018年12月4日→2018年12月9日のビットコイン価格

●「2段階機械学習モデル」を適用することでAccuracyとF1-scoreを向上できた。(予測精度が向上した。)
つまり、「2段階機械学習モデル」を適用することで

[TN] 価格がTriple-Barrier内で推移すると予測 → 実際にTriple-Barrier内で推移すると予測
[TP] 価格が上がると予測→実際に価格が上がった
[TP] 価格が下がると予測→実際に価格が下がった。
の頻度を向上させることができた。

訓練データ、テストデータを訓練された機械学習モデルに入力し、Confusion matrixを算出した。TP(True Positive)は利確パターン、逆にFP(False Positive)は損切パターン、TN(True Negative)、FN(False Negative)は何もしないパターンなので、TPの個数が増えて、FPの個数が減ることが好ましいといえます。

実際、2nd modelは1st modelに対し
・訓練データでは・・・TP向上、FP減少なので 利確確率が向上している。Accuracy,F1-scoreも向上している。
・テストデータでは・・・TP減少、FP減少。AccuracyとF1-scoreが向上しているので、機械学習モデルによる予測が当たる確率は上昇しているが、TP減少、FP減少となっているのでどちらが利益をだせるかは状況によりけり。(損切を行う確率は減少していることを評価すべきか)

5 まとめ

  • ビットコインの将来価格の動き予測に2段階機械学習モデルを適用した。
  • 「2段階機械学習モデル」を適用することでAccuracyとF1-scoreを向上できた。(予測精度が向上した。)
  • 「2段階機械学習モデル」は「1段階機械学習モデル」に対し、訓練データにおいては、利確確率が向上し、損切確率が減少するので好ましい
  • ただしテストデータに適用すると、「2段階機械学習モデル」は「1段階機械学習モデル」に対し、利確確率も損切確率も減少するので、「2段階機械学習モデル」と「1段階機械学習モデル」のどちらが利益を出せるかは状況によりけり。ただし損切を行う確率は減少している

6 コードの公開

上記を実施したJupyterコードは下記にアップロードしました。

6-1 日次収益標準偏差の算出(準備)

下記の図に示した流れに沿って日次収益標準偏差を算出します。

6-2 Label付与方法

時間$t_{i}$での日次収益標準偏差をvolstd($t_{i}$)とする。また時間$t_{i}$での株価を$c[t_{i}]$とします。
Triple-Barrierを定義します。(下記図では、上限閾値Vthu=volstd($t_{i}$),下限閾値Vthd=-volstd($t_{i}$)、,制限時間15分としています。)
$vol=c[t]/c[t_{i}]-1$を計算します。下記に従いLabel=0,-1,1を付与します。

\begin{eqnarray}
Label
=
\begin{cases}
1 & ( vol \geqq Vthu ) \\
0 & ( Vthd \lt b \lt Vthu ) \\
-1 & (vol \lt Vthd)
\end{cases}
\end{eqnarray}

6-3 Confusion matrixへの割り当ての定義

下記図に従いConfusion matrixへの割り当てを行います。

6-4 1st model,2nd modelの訓練

6-5 1st model,2nd modelにテストデータを適用し、Confusion matrixを評価する。