Bot

仮想通貨botの開発記録#49(2024/1/27)「機械学習(ML)をトレードシステムに取り入れる方法(Python)&論文『ほとんどの機械学習資金が失敗に終わる10の理由』まとめ」

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

今回は「機械学習をトレードシステム開発に取り入れる方法」の基礎を学習しました。

参考した動画は「Machine Learning Trading System Development」です。

また、並行して「ほとんどの機械学習資金が失敗に終わる10の理由(原題:THE 10 REASONSMOST MACHINE LEARNING FUNDS FAIL)」も読んだので、内容のまとめ雑感を書いておきます。

Yodaka

大元の情報ソースはこちら。「投資機械学習関連コンテンツまとめ

動画からの学び

【概要】

・教師あり学習が基本
・主なツールはpython,numpy,scipy,pandas,matplotlib,scikit-learn
・ツールを駆使しても完全に完璧なデータ分析を行うのは難しい
→一部のデータを見逃すコストも考慮する
・機械学習は従来のトレーディングシステムの代替手段

【ざっくり感想】

・動画内で関連情報ソースが多数紹介されているので有益
・内容の一部はかなり難しかったため、他の学習コンテンツも併用して別の側面からもじっくり理解する
・動画内では「フルコミットで4年かかる」と言っていたため、今よりももっと時間を投下して一気に学習を進めたい。

【宿題】

紹介されていた論文を1つ以上翻訳して読む(済)
関連ツールの使い方を覚える。現代の使用環境に寄せた最新のコンテンツで実践的に学ぶ
学んだことを実践の場(仮想通貨市場)で使う
同様の学習コンテンツはAIで要約して学習効率を上げることができないかを試す(済)
機械学習関連の書籍を読む

「ほとんどの機械学習資金が失敗に終わる10の理由」まとめと学び

Yodaka

宿題の実行も兼ねて、論文「THE 10 REASONS MOST MACHINE LEARNING FUNDS FAIL」を読んで内容をまとめました。難解な部分はChatGPTに要約させながらまとめました。

【まとめの手順】

  • 論文をダウンロード
  • PDFデータをGoogle翻訳にかける
  • 「訳がおかしいところ」や「読んでいて分からない部分・違和感を覚えた部分」はChatGPTに原文を渡してまとめを書かせる

【1.自分の判断や直感による失敗】

開発規模を無計画に大きくすると諸々の開発コストやリスクが膨れ上がる可能性がある。

【対策メタ戦略パラダイム

構成要員の役割を明確にしてパフォーマンスを最大化する。特定の箇所に責任や弱点が集中しないシステムを構築して全体の構造を頑丈にする。

【2.バックテストの望ましくない繰り返し】

見栄えの良いバックテストが表示されるまで調査を実行すると擬似発見が溢れかえることになる。バックテストは調査ツールではないことを理解する。

【対策:特徴量の重要性の分析】

その要素がパフォーマンスにどの程度影響を与えているのかを理解する。

【3.時系列サンプリング】

機械学習アルゴリズムを非構造化データに適用するためには、データを解析し、有益な情報を抽出し、それを規則的な形式で保存する必要がある。しかし、時間バー(time bars)は避けるべき。

市場は情報を一定の時間間隔で処理しないため、時間バーは低アクティビティの期間に情報を過剰にサンプリングし、高アクティビティの期間に情報を過小にサンプリングする。また、時系列サンプリングは統計的な性質が悪くなる傾向がある。

【対策:ボリュームクロック】

これらの問題を避けるために、取引活動の副次的なプロセスとしてバーを形成するアプローチがある。これは、ボリュームクロックと呼ばれることがある。例えば、ドルバーはある市場価値が交換されるたびに観測値をサンプリングして形成される。これは、取引される実際の価値に基づいてバーをサンプリングすることが意味があるため。

【ドルバーの利点】

ドルバーは価格の大幅な変動がある場合に特に有益である。 発行済み株式数が変動する場合でも、ドルバーは頑健である。 バーのサイズは時間によって一定でなくてもよく、企業の自由浮動市場価値(株式の場合)や発行済み債務額(債券の場合)の関数として動的に調整できる。

【4.整数微分】

データの持つ性質の矛盾。定常性とメモリの間にあるトレードオフ。微分を通じて系列を定常化することで一部のメモリが消去される。これにより機械学習アルゴリズムの予測目的が損なわれる。

【対策: 分数微分】

非正数(正の実数)の差に対するリターンの概念を一般化できる。

【5.固定時間枠のラベリング】

「 3.時系列サンプリング」と関連。タイムバーは良好な統計的特性を示さない。観測されたボラティリティに関係なく同じ閾値が適用される。また、ポジションがファンド、取引所(証拠金コール)、または投資家によって停止されたケースから収益を得る戦略を実現するのは難しい。

【対策: トリプルバリア法】

利益確定および損失制限に対応する2つの水平バリアと、ポジションが取られてからの経過したバーの数に基づく垂直バリアを設定する。 利食い制限、ストップロス制限、アクティビティベースの有効期限を設ける。観測値のラベル付けは実際の戦略執行にておいて検討する。

【6.サイドとサイズを同時に学習する】

サイドとサイズの概念を同時に学習する必要はない。複雑すぎるモデルの構築は予測の精度を下げる。プライマリモデルで予測して、セカンダリモデルで予測の精度を予測するという構造にする方が良い。

【対策:メタラベリング】

①精度は高くないが再現率は高いモデルを構築する。
②結果に応じて①で作ったモデルのベットにラベルをつけることで精度の低さを補正する。

プライマリモデルとセカンダリモデルの段階的な利用で取引機会を見つける。

メタラベリングが強力である4つの理由

①経済理論に基づいた基本モデルの上に機械学習のシステムを構築できる(システムのブラックボックス化を予防できる)
②サイズのみを決定するため、過剰的適合の影響が制限される
③洗練された戦略構築が可能になる(例えばロングとショートの予測は別々に組む)
④取引機会の適切なサイジングができる。

【7.非独立分布サンプルの重み付け】

多くの金融以外の機械学習研究では、観測が非独立同分布(IID)プロセスから抽出されると仮定するが、金融の機械学習では、ラベルが結果によって決定され、結果が複数の観測で決定され、ラベルが時間的に重複するため、どの特徴が効果を引き起こしたかは確定できない。

つまり、金融の機械学習では、ラベルが結果に依存し、結果が複数の観測にわたり、ラベルが時間的に重複するため、特定の観測が効果を引き起こすかどうかはわからない、ということが問題になる。

【対策: 独自性の重み付けとシーケンシャルブートストラッピング】

観測を独自な絶対対数リターンの関数として重み付けることで、サンプルの平均独自性を増加させ、モデルにより多くの情報を提供し、時間的な重複による影響を軽減する。

①同時に発生する2つのラベルは、少なくとも1つの共通のリターンに依存している場合、観測が同時に発生していると見なす。
②各観測に対して、そのアウトカムがリターンにまたがるかどうかを示すバイナリ配列を作成する。
③各観測の独自性を計算し、ラベルの寿命全体での平均独自性を求める
④サンプルの重みは、観測に独自に帰属できる絶対対数リターンの合計に基づいて定義される。
⑤シーケンシャルブートストラッピングを使用して、サンプルを順次引き出し、各ステップで独自な観測の引き出し確率を増加させ、低い独自性の観測の引き出し確率を減少させる。

補足

"シーケンシャルブートストラッピング"は、統計学や機械学習の文脈で使われる用語で、ブートストラッピングと呼ばれる手法の一種。ブートストラッピングは、ランダムにリサンプリングすることで統計的な不確実性を評価する手法。シーケンシャルブートストラッピングはこの手法を時間の経過に合わせて行う。具体的には、データセットの中から観測を順番に選んでリサンプリングを行う。これにより、時間的に依存するデータや観測に対して、統計的な不確実性をより適切に評価できるようになる。

金融の機械学習においては、特に時間的なパターンや依存関係を考慮する必要があるため、シーケンシャルブートストラッピングが有用。これにより、過去のデータに基づいて未来の予測を行う際に、時間的な構造を考慮した統計的な信頼性のある評価が可能になる。

【8.不要な特徴をもたらす虚偽の発見】

k-fold CV(k分割交差検証)が金融分野で失敗する理由の一つは、観測が独立同一分布(IID)から抽出されると仮定できないこと。トレーニングセットにテストセットの情報が含まれている場合、モデルのトレーニングとテストの過程で情報が不適切に漏れ出ることがある。

特に時系列データにおいて、トレーニングセットとテストセットの間で時間的な依存関係が存在する場合に発生する。 これにより、モデルが未知のデータに対して適切に汎化できず、予測の信頼性が損なわれる可能性がある。

金融データでは直列相関や時間的なパターンが一般的であり、これらの特性を無視してモデルを構築するとリーク(モデルのトレーニングとテストの過程で情報が不適切に漏れ出ること)が発生しやすくなる。そのため、トレーニングセットとテストセットの間で時間的な重複を避ける手法が必要となる。

【対策:purgingとembargo】

①「purging」。トレーニングセットからテストセットに含まれるラベルと時間的に重複する観測をすべて排除する。
②「embargo」。禁輸期間を設定し、その期間内のデータに対してラベルを定義することで、未知のデータに対してもより正確に対応できるようなモデルにする。

【9.ウォークフォワードバックテスト】

ウォークフォワードバックテスト(過去のサンプルデータに基づいたテスト)には3つの大きな欠点がある。

①過剰適合(オーバーフィッティング)が発生する可能性がある
②特定のデータポイントの順序にバイアスがかかる可能性がある
③初期の決定がサンプルの一部に基づいて行われる。ウォームアップ期間が設定されていても、情報の大部分はほんの一部の決定によってのみ使用される。

【対策:組み合わせパージ相互検証(COMBINATORIAL PURGED CROSS-VALIDATION)】

数千のシナリオをシミュレートし、各シナリオがバックテストパスを提供することで、過剰適合を回避する。 多くの異なる組み合わせを生成し、将来のさまざまなシナリオを考慮することで、より代表的な結果を得る。

数千のトレイン/テスト分割を生成し、各シリーズの異なる部分が複数回テストされることで、データの最大活用を実現する。トレーニングセットとテストセットの組み合わせをすべて考慮し、それに基づいて数千のバックテストパスを生成し複数のシナリオからなる分布を得ることが可能。

【10.バックテストのオーバーフィッティング】

多数のストラテジーをテストすると、偶然によるものではない、見かけ上の高いシャープレシオのストラテジーが1つは必ず見つかる可能性がある。これは、バックテストが過去のデータに基づいており、適切に制御されていない場合に発生しやすい。特に、ウォークフォワードバックテストでは、意図せず過去の情報が未来のテストセットに漏れ込むことがあり、これがオーバーフィッティングを引き起こす可能性がある。

【対策:デフレートされたシャープレシオ】

デフレートされたシャープレシオ(DSR)は、バックテストにおいて実際のシャープレシオを過大に見積もる問題に対処するための調整手法。バックテストの結果が実際のパフォーマンスを適切に反映するように、バックテストのシャープレシオに補正をかける。確率的シャープレシオ(PSR)を使用して、バックテストのシャープレシオが過大評価される確率を評価し、その影響を取り除く。これにより、バックテストの結果が未知のデータに対してもより正確に対応できるようになる。DSRは、統計的な厳密さを向上させるために導入されている。

【結論】

成功したヘッジファンドの多くはML技術を活用しているが、MLは万能ではなく、MLを活用しようとした多くのファンドが失敗しています。その理由は、金融データセットがMLアプリケーションの標準的な仮定を破る特性を持っているためである。これらの特性を無視してML技術を金融データセットに適用すると、誤った結果が生じる。投資の文脈では、ほとんどのMLファンドが期待されるパフォーマンスを提供できないという結果につながる。

Yodaka

ML(機械学習)の専門家が金融データセットにML技術を適用しようとする際によく見られる普遍的なエラーについて知ることができたのは良かったです。特定の視点から解釈することで特定のリスクが見えてくるため、リスク分析においてはまず視点を定めることが重要ですね。特定領域の勉強を続けてその視点を増やしていきます。

まとめ

Yodaka

今回は学習以外にも、以下の流れを実践することを意識しました。

  • 学ぶ
  • 内容をまとめる
  • 宿題・課題を設定する
  • その場でできる宿題は済ませてしまう

その場で次のことをやってしまえば、完了したことを増やせるのではないかという仮説に基づいた試みでした。

学びのアウトプットした時にはすでに発展系の課題も終わっている

Yodaka

このような流れが平準化すれば、常に学び続けて改善サイクルを回せるようになり、勝ちパターンに入ることができます。

この調子でできること・分かることをひとつずつ積み重ねていきます。

-Bot