見出し画像

年末年始休暇の間勉強する

しばらくの間bot開発から離れていましたが、
「仮想通貨botter Advent Calendar 2021」
を見て、再びやる気が出てきました。

冬期休暇で時間があるので、勉強をします!
ただ、時間が有り余っているわけでもないので、やりたいことのリストアップと優先順位付けをしていきます。

やりたいこと・優先度

  1. 基礎知識強化(機械学習)

  2. 基礎知識強化(プログラミング)

  3. richimanbtcさんのチュートリアルを理解

  4. 機械学習bot作成

  5. アドベントカレンダー全部読む

  6. noteやtwitterで有用な情報を集め、まとめる

  7. Dexを利用したBot作成(やるとしたら最初はアビトラ?)

  8. AxieInfinity支払い自動化コードの作成
    (公開されているものはあるけど、自分で作ってみたい)

4.機械学習Bot作成がメイン目標です。
リストを作成して思ったけど、1~4/5,6/7,8で分類できるな。
1~4を進めながら、5,6は同時進行、7,8はその後かな。

いかに1~3を効率よくこなせるかが大事そうです。
ちなみに、機械学習botに興味を持ったきっかけは、richmanbtcさんの書籍です。
公開されているチュートリアルを理解して使いこなすことができれば,
強力な機械学習botを作ることができるだろうと考えています。
21年9月頃にもチュートリアルを軽く覗いていたのですが、理解不能すぎて見なかったことにしていました()

1.基礎知識強化(機械学習)

黒枝さんがrichmanさんのチュートリアルを詳しく読み解いているnoteを公開されています。非常に詳しく解説されており勉強になるのですが、機械学習に関する知見が一切ない自分にはまだ難しかったです。
そこで、「機械学習とは何か、どういうことをするのか、どうやって学習し予測するのか」という基礎を学びながら、機械学習の知見を少しづつ広げていこうと思います。

最初に選んだ教材は書籍ではなく、動画です。
Umedyという学習教材を提供するサイトでセールになっていたので購入しましたが、非常に丁寧に解説されていて分かりやすいです。
購入したのは【キカガク流】:初級編・中級編・アルゴリズム論前編です。


単回帰分析編

21/12/30
・1つの入力変数xが出力変数yに対してどの程度相関があるかを確認できる
・ICの計算は単回帰分析でやるっぽい
 さきやまさんのnoteを解読してみた


重回帰分析編

22/1/1
・複数の入力変数xnが出力変数yに対してどの程度相関があるかを確認できる
・正規分布や中央値などを用いてデータの外れ値を対処し、予測精度を上げる
・データの標準化(StandardScaling)
 スケールを統一し、各入力変数の重要度が分かるようにする

from sklearn.preprocessing import StandardScaler
# scalerの宣言
# 入力変数群:X
scaler = StandardScaler()
Xs = pd.DataFrame(scaler.fit_transform(X_train),columns=X_train.columns)

アルゴリズム編


2.基礎知識強化(プログラミング)

プログラミングに関する基礎知識強化というのは、”何を対象にするか”を決めるのが非常に難しいです(まだ定まっていない

まず大事だと思ったのはコーディング環境です。
”botの大工事を行ったらバグが出たけど、保存してしまって元のコードを蘇生できなくなった”
みたいなアホ丸出しなことをよくやっていたので、バージョン管理ができるようにgitを使うようにしました。
最初はリポジトリとかブランチとかコミットとか、わけわかめ状態でしたが、なんとかなりました。プライベートリポジトリ便利です。

あとはJupyterを使うようにしました。
最近知ったんですが、jupyterってチェックポイントという機能があって、プログラムの実行を途中保存できるんですね。。。
大変感動したのですがコーディングはしづらかったので、VScodeからjupyterを使うようにしました。

コーディングに関しては、人のコードをパクりながら頑張って上達していこうと思います。
asyncioの理解とかも進めないといけないな~

3.richimanbtcさんのチュートリアルを理解

このために、1.を実施しています。
手を動かしながら進めるのが一番効率が良いので、1.チュートリアルを読み進める ⇒ 2.分からないところを調べる のサイクルで進めます。

3-1.特徴量エンジニアリング

talibでローソク足からテクニカル指標を作成したり、OIやliquidationを特徴量にして試してみる。
⇒Liquidation使いたいけど、wsでデータ貯めないといけないのかな

3-2.richman non-stationarity score

21/12/29
キーワード

  • CV(CrossVaridation)
    ⇒交差検証。データをn個に分割して学習⇒検証を行う
    参考:https://www.varista.ai/knowledge/cross-validation/

  • KFold
    ⇒データをk個に分け,n個を訓練用,k-n個をテスト用として使う.
     分けられたn個のデータがテスト用として必ず1回使われるようにn回検定する.
    参考:https://qiita.com/chorome/items/54e99093050a9473a189

    CrossVaridationの方法の1つとしてKFoldがあるらしい

  • model.fit(df[features], np.arange(df.shape[0]))
    model.fitって何をやっている?

  • importance
    重要度が高い=特徴量分布の定常性の度合いが低い?

  • 定常性
    ⇒ランダムかどうか

  • 汎化性
    ⇒汎用性が高いか低いか

  • r2
    ⇒決定係数
    高いほど予測精度が高い
    (richman non-stationarity scoreでは高いほど汎化性能が低い)
    参考:https://aizine.ai/r2-score0411/#toc1

3-3.目的変数の計算

⇒コスト込みのリターンを目的変数とすることで、
 後からコスト削減について検討する必要がなくなるっぽい
 高頻度系ならN秒後、N分後の価格を予測するとかでもいいみたい

3-4.モデル学習とOOS予測値計算

⇒モデルにはlightGBMというものを使用している
 XGBoostの上位互換?計算が早くて良いらしい
 KFoldでデータを分割し、学習と予測値算出を行う

3-5.バックテストと検定


3-6.実運用

4.機械学習bot作成

がんばります

5.アドベントカレンダーの記事を読む

実施中

6.有用な情報をまとめる

※メモ コメントを追記する

6-1.環境構築

6-2.HFT(MMbot)関連

6-3.アービトラージ関連

6-4.ML関連

6-5.データ入手・成形関連

6-6.全般

6-7.APIドキュメント

おまけ


この記事が気に入ったらサポートをしてみませんか?