今日、試みたことと反省を記していきたいと思います。
今日試みたこと
- 先人Botterの方がどのような指標を目的変数としているか
- 先人Botterの利益判定の手法
- BybitからBTC、ETH、XRPのヒストリカルデータ取得
- richmanbtcさんの手法の検証工程の理解
といった感じです。
先人Botterの方がどのような指標を目的変数としているか
どの目的変数を機械学習に用いるかは、各々の力量や工夫によるところが大きそうです。
ただ、よくあるものとしては前日終値との差分やその対数をとった数値でした。
1つ注意としては、翌日の終値など価格自体を目的変数に用いるのはよろしくないみたいです。
その理由は深くは理解できていませんが、機械学習では学習データにないものへの対応はそこまで良くなく、終値などの書かう事態を予測しようとすると、学習データに含まれていないものが実際の運用時に出てきてしまう可能性があり、良い予測精度を出すことができなくなるからだそうです。
例えば、翌日の終値を目的変数として予測するモデルを10年分の日足データで学習させ、そのデータの終値の最高値が$10,000で、最低値が$3,000だったとします。
その場合、テストデータまたは実運用時に$10,000を超えるものがあったり、$3,000を下回る終値が出てきた場合に、そのモデルはうまく予測することができなくなります。
勘の良い人は、MinMaxScalerなどで正規化すればよいのでは?と思われるかもしれませんが、それを用いた場合も同様の理由で、モデルの精度が落ちるようです。
なので、予測値は差分や対数を用いるなど、ある一定の範囲内で収まるような値にするのがベターなようです。
先人Botterの利益判定の手法
ここは割と単純で、目的変数をリターンとした場合に、買うと判定した場合の累積リターンで求めていることがほぼほぼです。
BybitからBTC、ETH、XRPのヒストリカルデータ取得
機械学習ではデータが命とされます。
つまり、良いデータを用いて学習させないと、たとえ良いモデルであったとしてもその精度は使えるものにはなりません。
良いデータの定義については、いろいろあるかと思いますが、特徴量であったり、テストデータに近い、もしくは再現するようなデータのことという理解をしています。
データの良し悪しを図る手法の一つとして、Adversarial validationというものがあります。以前少し考察しているので、そちらもご覧ください。
データ取得自体は簡単
取引所からのデータ取得はccxtを使えばかなり簡単に行えました。
自分が試した限りでは2020年3月ぐらいからのデータしかありませんでした。
取得するコードもまた汎用化して、きれいにしてから公開しようと思います。
richmanbtcさんの手法の検証工程の理解
これがかなり勉強になるかつ役に立ちそうですが、難解でした。
大まかな流れとしては
- 投資手法を考える+コードに落とし込む
- その取引を行なった場合の損益を計算
- その損益を目的変数とし、加工した特徴量と合わせて機械学習
- モデルの予測が正の場合に取引を行なうようにし、それでの損益を算出
- その損益がたまたまか否かの検証を行う
といった感じです。
まだ100%理解できているわけではないですが、この流れを踏襲して自分なりのアレンジを加えてひたすらトライ&エラーを繰り返していくしかなさそうです。
今日の反省
今日の目標としていた、先人Botterのモデル構築手法の理解はある程度進められ、方向性は見えたので良かったかな思います。
感じたこととしては、手法は無限大でそれぞれ検証が必要ですが、検証が無駄にならないように方向性や手法はある程度固めないといけなさそうと感じました。
明日以降そこを優先的に行ってから、検証作業に取り組んでいこうと思います。
また、まだまだ様々な知識が足りず理解速度も遅いので、そのあたりも同時並行的に進めていく必要がかなりありそうです。
特にrichmanbtcさんのチュートリアルに出てきたウォークフォワードやパージなど知らないがかなり重要そうな概念についても学習を進めていこうと思います。