2021年07月21日
カーブフィッティングはバックテストを行う際、注意すべき項目です。
カーブフィッティングとは一体何なのか?そして、具体的な対応策まで解説します。
この記事を読んでバックテストの罠”カーブフィッティング”に陥らないようにしましょう!
FXにおけるカーブフィッティングとは、過去のデータへの過度な調整を意味します。
過度に調整を行うとバックテストでは結果が良くても、実際の運用では利益が出ない場合があるため、
『カーブフィッティングには注意しよう』と言われています。
なお、データ分析においてはカーブフィッティングは日本語で曲線当てはめを意味します。データに当てはまるような曲線を求めることを意味しており、過度な調整という意味を含みません。
データ分析では過度な調整を過学習と呼びます。これも過去データに過度に調整(学習)しすぎて、将来のデータに適用できないことを指します。
ニューラルネットワークでもこの過学習を防ぐためにさまざまな手法が考えられています。
以降ではカーブフィッティング≒過学習として説明を行っていきます。
バックテストは過去のデータから良いパラメータを探索し良い手法を探すツールです。つまりこれはパラメータ最適化を行います。
一方、過去のデータに沿って調整しすぎると過学習(カーブフィッティング)を起こします。
最適性と過学習はトレードオフという表裏一体の関係です。
つまり最適化を重視すると過学習に陥りやすく、過学習に気をつけると最適性が失われるという関係です。
過学習しすぎない範囲内でパラメータを最適化する必要があるということです。
そこで、機械学習でよく用いられる『汎化性能』の概念を借りてきましょう。
過学習は過去のデータに過度に特化してしまい、未来のデータに対応できないことが問題でした。
つまり、未来のデータへの対応力があれば良いということです。
この未来のデータへの対応力を汎化性能と言います。
厳密には未来のデータではなく、未知のデータに対応できればOKです。
未知というのはパラメータを調整している時には与えていないデータのことを指します。
下の具体例は未知データでのチェックを行う例です。
バックテストで過学習を回避する方法を説明します。
上記の例のように汎化性能があるかどうか確認しましょう。
汎化性能があれば実際の運用時でもバックテストと同等のパフォーマンスが期待できます。
どの検証期間であっても同じように良いパフォーマンスがあるのかチェックしましょう。
ある年で検証したらとても良い結果であったとしても、それはその年の相場が有利であっただけの可能性もあります。
他の年でも有効性があるか確認しましょう。
用いているインディケータのパラメータをすこしずらした場合でも良い結果が出るか確認しましょう。
こちらの図はRSIの期間と%のパラメータを変化させた場合の結果です。
エリアで利益が出ている場合はパラメータを少しずらしても良い性能であるということになります。
USDJPYで良い手法をEURJPYでも上手くいくか検証する方法です。
また15分足での手法を60分足で検証して良い結果が出れば汎化性能が高いと判断できます。
しかし、通貨ごと、ましては分足ごとの特性もあるため、
前述した検証期間の変更やパラメータの変更によるチェックより重要度は低いです。
もちろん通貨や分足に依存しない手法を見つけられば、素晴らしい手法です。
バックテストでの過学習対策を確認してきましたが、汎化性能チェックに一番良いのはフォワードテストでしょう。
正真正銘の未知のデータでの結果で確認することでカーブフィッティングしていないか確認できます。
Contraではバックテストだけではなく、フォワードテストへのサービス展開も行う予定です。
時折見られる収益率+150%といった結果を宣伝しているサービスも
ある特定の検証期間での成績です。
ある特定の通貨での結果です。
といった特定の条件の注意書きがある場合がほとんどです。
確かにその期間や、その通貨で高い収益率を出すことができたのかもしれませんが、汎化性能があるかどうかは不明です。
なので自分で検証することが何よりも重要です。
コントラは最高のFXアプリを
目指して誠意開発を続けております。
機能の要望や、不具合などありましたらご遠慮なくヘッダーの問い合わせ、フィードバックからご連絡ください。またツイッターからでも大丈夫です!
皆様のFXトレードのお力になるFXアプリを目指しますので、これからもよろしくお願いいたします。