【MT4&MT5】AIを使って過剰最適化を検出する

みなさん、こんにちは、AIオタクです!
まだこの方法の実績はないので、一応案として書いておきます('Д')
機械学習をある程度知ってる方向けの記事になります!

■過剰最適化って何?

過剰最適化は、EAが過去のデータに過剰にフィットしすぎて、未来のデータではうまく動かないことを言います。

■検出方法

パラメータを特徴量、利益(Profit)を目的変数にした予測モデルを作ります。
このモデルで予測したProfitを「予想された利益」と見なし、実際のバックテスト結果と比較します。
ここで、予想と実際の結果に大きな乖離があれば、そのパラメータは過剰最適化を起こしているかもしれないという説です。

■手順

MT5を使っている人は、フォワードテストの結果を1/2にして最適化を行ってください。MT4の場合は、通常の最適化でOKです。

最適化が終わったら、結果をエクセルで保存し、それをCSVに変換します(名前をつけて保存する際に変換できます)。

Pythonを使って、このCSVをデータフレームに読み込みます。パラメータを特徴量として、Profitを目的変数とする学習用データセットを作成。ランダムフォレストなど任意の方法で学習させます。

すべてのパラメータに対してProfitを予測し、その結果をデータフレームに「Predict」として追加します。実際のProfitとPredictの値が±10%以上違う場合、過剰最適化と判断します。

その結果を「Overfitting」列としてデータフレームに保存します。

最後に、このデータフレームをもとのCSVファイルに上書き保存して終了です。

■評価

作成されたCSVを開き、Overfitting列でフィルターをかけて「No」のみを表示します。Predictは降順に並べ変えてください。これで、過剰最適化されていないと思われるパラメータの中で最高のパフォーマンスが出るデータが抽出できるはずです('ω')

バックテストとフォワードテストの結果の乖離も見てみると良いでしょう。

以下は
Overfitting - No
Predict - 降順
ForwardとBackResultの結果が同等の結果を黄色でマークしています

■検証※追記2024/9/15

 あれから数日間、最適化結果をAIにかけてフォワードテストを実行したりしていましたが、カーブフィッティングをある程度避けることができていることを実感しました。

🔴部分のような場所はカーブフィッティングの賜物なので避けるべき領域ですが、パラメーター数が多いと目視判定の限界がきます。


 そこで、このパラメーターの結果(Profit)と予測値(Predict)を比較したグラフを作成しました。このグラフでは、カーブフィッティングによるギザギザの動きが回避され、ある程度滑らかなカーブを描いており、予測モデルが一般化できている事がわかります。
 この実験では、一つのパラメーターを使用していますが、実際には複数のパラメーターでの予測値を作成しますので、このようなグラフが多次元にわたって複雑に絡み合うことになります。

バージョン1の予測グラフ

バージョン1の予測値を可視化したことで、さらに一般化する必要があると感じました。そのため、予想曲線を作成するパラメーターを追加し、こちらをバージョン2としました。バージョン2ではこの一般化能力を任意に調整することが可能で、よりカーブフィッティングを捉えやすくなっています。またランダムフォレストのツリー形状を可視化できるようにし、予測モデルの透明性と解釈性を向上させました。

バージョン2の予測グラフ

■AI搭載EA研究所について

今回紹介したコードも含めてAI研究所では日々FXとAIの融合について知見を深めています。
FXとAIの融合に興味ある方は是非私たちのコミュニティに参加してみてください。
この有料記事も入会特典として読めちゃいます('ω')
詳しくはこちらをご覧ください。

■ソースコードとファイル

AI研究所非会員でもこちらのファイルの使用方法はサポートしますので安心して購入してください。

ここから先は

3,382字 / 2ファイル

¥ 29,800

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