教師あり機械学習を使ってBTC価格を予想してみる⑤
こんにちは、alumiです。第5回です。日々迷走中。前回はこちら。
前回の嘘あらすじ
何度繰り返しても価格予測に失敗し絶望するalumi。そんなalumiにはレムはまた何度でも挑戦すればいいと諭すのだった。「一から、いいえ、ゼロから」と。
冗談は置いといて、前回大幅な方向転換がありました。もう一度整理しましょう。
今やっていることは
「過去のデータ(a1+a2+b)件取り出す」
→「a1件で学習しa2件でテストする」(繰り返す)
→「一番成績が良かったパラメータでb件をテストする」
このセットを繰り返し最後のテスト結果の平均や標準偏差を評価します。(a1,a2,bは時系列的にこの順です)
考える必要があるのは、①a1,a2,bの値や、②何をパラメータとするか(現在は「過去ロウソクデータk本分でl本先の価格の上下を予想」のk,lがパラメータ)、③識別器に何を用いるか(現在はロジスティック回帰)、そして④特徴量の工夫です。
方針転換したばかりでゼロからやっていくため問題は山積みです。重要度順に④>②>①,③かなと思います。ですので今回は④にフォーカスを当ててやっていこうと思います。
その前にまず現在の状況を把握するために適当なa1,a2,bの値で100回テストしてみます(過去のどの(a1+a2+b)件を選択するかはランダムです)。
すると、53.09+/-3.00%という結果が得られました(3000秒もかかりました・・・)。悪くはないですが私たちの目標は60%なので実験を続けます。
ちなみに第4回から新たな知見を得て、今はk,lのパラメータ調整をする際に「成績が良い」の定義を「0と1についてのF値の和が大きい」としています。
F値
予想ラベルと正解ラベルの組み合わせを下のような表に入れていって集計したものを混同行列(confusion matrix)といいます。対角成分が大きくなればなるほど成績が良いわけですが、これを表すことのできるF値という指標があります。F値の定義についても下を参照。
それでは実際にconfusion matrixの例を見てみます。
[[192 151]
[281 376]]
[[276 337]
[201 186]]
これは真のテストデータ1000件に対して認識率56.8%のときと認識率46.2%のときのconfusion matrixです。1つ目は対角成分が大きくなっていますが2つ目は全く逆ですね。当然2つ目の方が成績が悪いです。
さて、具体的にイメージが湧いたところで、考察していきます。実は上にあげた二つ目の例の場合でも、仮のテストデータに対してはある程度のF値が出ています。前回も言った通りいざ真のテストデータに挑む際に仮のテストデータ件数分の時間的な空白が精度のズレを産んでしまっているわけです。(下図参照)
しかし、かといって直接的なモデルに変更するとk,lの調整はできません。
難しいところではあるんですが、しばらくはk,lの調整ありきで良いF値を追求していこうかなと思います。計算時間の問題があるのでしばらくは仮のテストデータに対するF値を特徴量の点から追求していきます。(仮のテストデータに対するF値が上がればズレはあるにせよ自ずと真のテストのF値も上がるだろうという予測のもとです)
ここで当然抱く疑問として「学習データ内での仮のテスト方法は時系列を基準にした一意的なテストにせずクロスバリデーションにしたらどうなの?」というものがあると思います。実はそれも一度試してみたのですが成績悪くなったのでやめました(具体的には50.53+/-3.24%程度で完全にコイントス)。前回述べた通り連続したデータをテストと学習に分けるのはやはり良くないようです。
特徴量
さあやっと本題に入れます。まずは特徴量を追加しようかと思っている理由から。特徴量というのはつまりはベクトルを表しています。このベクトルが存在する高次元の空間を状態空間と仮に呼ぶとして、私は適切な次元軸が揃っていれば、この状態空間内で精度の高いクラス分けが可能だと思っています(下図参照)。
それでは今の状態から精度を高めるために、何の次元を追加すれば効果的でしょうか。今ある次元に強い相関や因果がある次元軸の導入はあまり意味がありません。
ぱっと考えてみたものを書いていきます。上から期待してる順です。
OHLCの差、変動率
いなごフライヤーで見るLS量
depthチャート
LS比
Volume
EMAの差
RSI
<<<<<<<壁>>>>>>>
その他のテクニカル指標
こんな感じです。私自身トレーダーとしての経験が浅くてあまり思いつかなかったんですが、これらを次から試していこうかなと思います。特にロングショート関連の値は直接価格に関わってくるわけですしかなり期待できると思うのですが、過去データをどうやって取ればいいのかわからないので途方にくれています。アイデアあれば是非教えてください。
疲れたので今回はここで切ります。特徴量にフォーカスを当てると言いながら現状の整理しかできなかった・・・。次回頑張ります。
余談ではありますが現状の精度のまま一旦botを作りました。基本的に挙動は安定しているようなので、あとは機械学習の精度up待ちです(こういうのなんていうか知ってますか?取らぬ狸の皮算用ですね!正解!)。
それでは、また次でお会いしましょう。
この記事が気に入ったらサポートをしてみませんか?