richmanbtcさんチュートリアルの学習モデルの作成
注意 学習モデルの作成だけ扱います。
データの前処理やバックテストについては扱いません。
botter必読書
- 日給300万円のSS級トレーダーが明かすbotterのリアル
ぼんやりと仮想通貨のトレードで儲けたいと考えていた僕を、
botterの道へ明確に導くキッカケになった本。
botterになろうと考えている人は、botterのメリット、
狙い目などの概略的な部分が知れて良いと思います。
- Kaggleで勝つ技術
僕はデータの前処理や学習モデルを作っているとき、「???」となることがあった。
そのとき読んでクリアできた。
過去の僕の記事
文系で機械学習未経験の僕が、richmanBTCさんのチュートリアルをやってbotterになるまでの流れ
richmanbtcさんのForce Entry Priceがよく分からなかったので、自分なりにまとめてみた
richmanbtcさんチュートリアル 正解データ作成までの流れ
運用のイメージ
「y_buy, y_sellを予測し、 予測値がプラスのときのみトレードすれば勝てるだろう」というもの。
y_buy, y_sellそれぞれの予測モデルが必要。
ちなみに、y_buy, y_sellの作成は以下の記事に詳しく書きました。
本番に使うモデルとの違い
本番用モデルはデータ全体で学習させる。
一方、このチュートリアルではテストデータとの兼ね合いで全てのデータを学習させた本番用モデルは使えない。
そのため、ある期間だけを除いて学習させたチュートリアル用のモデルを作り、それを使う。
OOS(Out-of-sample)予測値について
OOSはテストデータのこと。このチュートリアルでは学習データとテストデータは期間で分けられている。
OOS予測値はテストデータの予測値のこと。
OOSで計算する理由は、条件をなるべく本番と同じにするため。
本番稼働時は、学習に使っていないデータ(未来のデータ)に対処しないといけません。
Cross Validation(交差検証)を使う。
交差検証は、学習データとテストデータを分割し、学習データで作ったモデルをテストデータで評価すること。
分割のやり方はいろいろあり、使い分けが必要になる。
リッチマンさんはK-分割交差検証(KFold)を使っている。
cv_indicies = list(KFold().split(df))
#dfの数だけ分割している。
そして、OOS予測値を計算する
リッチマンさんは、my_cross_val_predictを自作して使っている。
sklearnのcross_val_predictとほぼ同じ処理だが、入力と出力のサイズが同じでないと使えないので、 入力と出力のサイズが異なっていても使えるように、自作している。
# OOS予測値を計算
def my_cross_val_predict(estimator, X, y=None, cv=None):
y_pred = y.copy()
y_pred[:] = np.nan
for train_idx, val_idx in cv:
estimator.fit(X[train_idx], y[train_idx])
y_pred[val_idx] = estimator.predict(X[val_idx])
return y_pred
ここから呼び出す
df['y_pred_buy'] = my_cross_val_predict(model, df[features].values, df['y_buy'].values, cv=cv_indicies)
df['y_pred_sell'] = my_cross_val_predict(model, df[features].values, df['y_sell'].values, cv=cv_indicies)
cv = cv_indiciesを使って、KFoldの値を入れている。
出典
richmanbtcさんのgithub「https://github.com/richmanbtc/mlbot_tutorial」
Discussion