最初の機械学習モデル作り (1)
まずは特徴量抽出の前のステップとして、特徴量の元となるデータをどれをどこまで使うかを考えてみる。引き続き、ultraistterさんのTwitterをめちゃくちゃ参考にさせてもらいます。 m(_ _)m
強化学習だけど深層ではない(2層MLP)。自身の状態も持っていない(入出きっちり合わせる単発トレード並走)。入力はbFの約定履歴のみ。5分より前の情報は見ない。とてもシンプルなので800年間勝手に生きて欲しい。
— id:ultraist (@ultraistter) December 31, 2018
これを鵜呑みにして、まずは約定履歴のみ、5分程度の情報を使うという形で考えてみようか。
5分について
まず、「5分しか見なくていいのか!」という印象を最初は持ったが、よくよく考えると、5分というのは結構長いですね。当たり前なんだけど、1日って1440分しかなくて、重複しない5分の区間は288個しかない。重複して作ればもっと作れるんだけど、重複したサンプルで水増ししたところで本質的な情報量はどんなもんだろうか。これは、学習データはもっと結構長期間必要かもしれない……。
数日前から約定配信を貯めてるので2週間後から使える(長い)。複数取引所を見る場合に取引所ごとの配信遅延の違いなどで届く順番が前後するのがオフラインで再現できない。約定時間でソートしていると機械学習が幻のアルファを拾う厄介なやつになりそうなので、重い腰上げた。今は平均遅延分ズラしてる
— id:ultraist (@ultraistter) August 18, 2019
これを見ると、2週間分を使ってらっしゃるのかな?1日分ぐらいで行けるかとなんとなく思ってたけど、甘かったですね。
とりあえず適当にrolling windowを作ってみるか
一番遅いのが一定期間(時間窓, 期間内のデータ件数は時刻毎に異なる)のrolling mean/stdを計算するところで、meanはO(1)で計算できるけど、stdが計算できそうで窓が可変なところが自信なくてできてない。テストはできるから試してればできる気はするけど..
— id:ultraist (@ultraistter) February 3, 2019
この感じだと、重複する感じでデータ点を作ってそうです。僕もそういう感じでやってみます。
脳内でVolume軸の妥当性がやばかったので全部volume clockに変えてみたけど、何かが変わった気しないし、200枚成行でぶっ壊れる不安が残った。
— id:ultraist (@ultraistter) October 6, 2019
初めてなのに張り切りすぎな気もしますが、僕もvolume clockでやってみます。
5分ぐらいの間に何が起きてるんだろう?
適当にvolumeの閾値を探した。4分ぐらいになっちゃったけどまーこのぐらいでいいかな。4分の間には5000件ぐらい約定が入ってるらしい。多いな。
duration n_execs
count 100000 100000.000000
mean 0 days 00:04:03.603638 5354.341190
std 0 days 00:01:30.659351 929.493499
min 0 days 00:00:00 1.000000
25% 0 days 00:02:45.413388 4989.000000
50% 0 days 00:04:05.390796 5579.000000
75% 0 days 00:05:12.768240 5950.000000
max 0 days 00:07:03.553073 6515.000000
さて、5000件ぐらいの約定をどうやってエンコードしたもんですかね……。
……と言いつつ、特徴量はとりあえず平均と分散ぐらいの軽いの最低限を出すだけ出すことにして、ラベル作りの方を進めて、学習が回せる状態を作りますかね。そうしてからじゃないと結局特徴量とか作っても評価できないですし。
この記事が気に入ったらサポートをしてみませんか?