バックテストにおけるインサンプルとアウトオブサンプルのテスト | Traseq ブログリサーチ手法バックテストにおけるインサンプルとアウトオブサンプルのテスト
暗号資産の過去データをインサンプルとアウトオブサンプルに分ける方法、インサンプルだけで良く見える戦略が過剰最適化である理由、そして Traseq でこの分割を実行する方法。
Traseq··1 分で読めます インサンプルとアウトオブサンプルのテストは、リサーチされた戦略と曲線当てはめにすぎない戦略を分ける、最もシンプルな規律です。過去の一部のデータ(インサンプル)でルールを構築・調整し、構築中には一度も見ていない後続のデータ(アウトオブサンプル)で検証します。調整に使ったデータでしか良く見えないなら、それはエッジを見つけたのではなく、過去を暗記しただけです。
ひとつのアイデアを検証可能なバージョンに変える。
ノーコードの暗号資産現物戦略から始め、バージョンを固定し、バックテストを実行し、比較のために結果を追跡可能に保ちます。
これは実践的な手法の記事です。BTC/USDT の過去データを使った分割の具体例、バージョンを確定して日付範囲を変えながら Traseq でその分割を実行する方法、そしてアウトオブサンプルのテストが何を証明し、何を証明しないかについての率直な注意点を扱います。
Traseq は研究ワークスペースであり、ライブトレードや取引所での執行プラットフォームではありません。注文を出したり、取引所アカウントに接続したり、パフォーマンスを保証したりはしません。
この2つの用語は、戦略を構築するあいだに過去データのどの部分をどう使ったかを表します。
- インサンプル(IS) は、構築・調整のあいだに見ることのできるデータです。移動平均の期間、
RSI のしきい値、ストップ幅など、調整するすべてのパラメータは、このデータを見ながら選ばれます。
- アウトオブサンプル(OOS) は、意図的に取り分けておき、ルールを固定するまで見ないデータです。ホールドアウト期間、つまり戦略がいずれトレードする「将来」の代役です。
この考え方は、あらゆる誠実なモデル評価から借りてきたものです。設計に使ったのと同じデータで戦略を採点すれば、その点数は水増しされています。すでにそのデータがあなたの選択を導いてしまっているからです。アウトオブサンプルは、戦略が暗黙のうちにも学習していない最初のテストになります。
これが防ぐ罠が過剰最適化です。過去のノイズに合わせてルールを締めすぎ、再現可能なパターンではなく、ある特定の過去期間だけを説明してしまうことです。この失敗様式については バックテストにおける過剰最適化 をご覧ください。
BTC/USDT の 1d 履歴が2年分、おおよそ 2024-01-01 から 2025-12-31 まであるとします。きれいな分割は次のようになります。
| 期間 | 日付範囲 | 役割 | ここで行ってよいこと |
|---|
| インサンプル | 2024-01-01 → 2025-06-30 | 構築・調整 | 移動平均の期間、ストップ幅、しきい値の調整。多数の反復を実行 |
| アウトオブサンプル | 2025-07-01 → 2025-12-31 | 検証のみ | 固定したバージョンを一度だけ実行。これに合わせて調整しない |
- インサンプル範囲だけを使って戦略を構築し、すべてのパラメータを調整します。
- 満足したら、ルールを固定します。これ以上の変更はしません。
- 触れていないアウトオブサンプル範囲で、その固定したバージョンを実行します。
- 比較します。インサンプルが強く見えたのにアウトオブサンプルで崩れるなら、インサンプルの結果はおそらく過剰最適化でした。
妥当な結果は、ある程度の劣化です。インサンプルの当てはまりの一部は運だったので、アウトオブサンプルはほぼ常にインサンプルより少し悪くなります。健全な結果とは、戦略が損失へ反転するのではなく、依然として見覚えのある振る舞い(同じ方向、同程度のドローダウンの形)を保っている状態です。
最も重要な規律がひとつあります。いったんアウトオブサンプルの結果を見たら、そのデータは「使い切った」ことになります。戻ってアウトオブサンプルの数字を直すために再調整すれば、そのホールアウトはもはやホールドアウトではなく、ひとつ層を隔てて再び過剰最適化しているだけです。
Traseq には専用の「分割」ボタンはありませんが、必要ありません。バージョンを追跡できるワークフローが、同じ規律を手作業で与えてくれます。
- Sentence モード、Canvas モード、テンプレート、または再利用可能な block で戦略を構築します。インサンプルの日付範囲を見ながら自由に反復します。
- 調整をやめたら、バージョンを確定します。確定したバージョンはロックされるので、ルールが知らないうちに変わることはありません。
- インサンプルの日付範囲でバックテストを実行します。これが基準となるランです。
- 同じ確定したバージョンを、アウトオブサンプルの日付範囲でもう一度実行します。同じペア、同じ時間軸、同じ手数料とスリッページで、変えるのは日付だけです。
- 両方のランを比較セットに追加し、並べて見ます。
両方のランが同じ確定バージョンを指しているので、両者が同一のロジックを使ったことを証明できます。違ったのは過去のどの範囲かだけです。この追跡可能性こそが目的です。確定バージョンがなぜこれを信頼できるものにするかは リサーチの追跡可能性と戦略のバージョン管理 をご覧ください。
比較セットでは、リターン、最大ドローダウン、勝率、プロフィットファクターが2つの期間でもちこたえるか、それとも戦略がインサンプル期間だけに支えられていたのかを見ます。比較の読み方については バックテスト結果を比較する方法 と 比較ガイド をご覧ください。
Learn の登録不要のデモは、3つのシステムテンプレートを、実際の BTC/USDT 1h 足(2024-11-03 から 2024-12-31)で実行します。これはラリーのあとの、短く荒れた横ばいから下落の局面です。この単一の期間で、SMA(200) トレンドフィルターは -6.89%、Donchian ブレイクアウトは -10.27% で、RSI 平均回帰だけがかろうじて +1.74% で損益分岐に近い結果でした。
この2か月の期間そのものが、ある種のアウトオブサンプルの教訓です。戦略はトレンド局面では問題なく見えても、荒れた局面では純損失になることがあります。このデモは構築と検証を分けたものではなく、単一の固定期間です。それでも、ひとつの見栄えのよい期間だけでは決して十分な証拠にならない理由を示しています。率直な結果はバックテストの目的であって、隠すべき恥ではありません。
単一の IS/OOS 分割には弱点がひとつあります。アウトオブサンプルの判定が1回しか得られず、たまたま選んだ期間に依存することです。ウォークフォワードテストはこの考え方を拡張し、分割を履歴に沿って前へ転がしていきます。期間1で調整し、期間2で検証し、次に両方の期間を前へずらして繰り返します。結果として、ひとつではなく一連のアウトオブサンプル結果が得られます。
Traseq でも今日、バージョンを確定し、それを連続するいくつかの日付範囲で実行して、すべてのランをひとつの比較セットで比較すれば、ウォークフォワードを近似できます。専用ツールよりは手作業になりますが、規律——ルールを固定してから、調整に使っていないデータでテストする——は同一です。
アウトオブサンプルのテストは、より強いテストであって保証ではありません。その限界について率直であってください。
- 将来を予測しません。 ホールドアウトもやはり過去データです。通過したということは、その期間にわたってルールが汎化したという意味であり、これからも機能し続けるという意味ではありません。
- 静かに汚染されることがあります。 ホールドアウトを覗いて再調整するたびに、それは損なわれます。一度きりのものとして扱ってください。
- 選んだ期間に敏感です。 トレンド相場での単一の OOS 期間は、レンジ相場についてほとんど何も教えてくれません。これこそがウォークフォワードが存在する理由です。
- 粗悪な入力を直しません。 アウトオブサンプルのテストは、クリーンで現実的なデータを前提とします。前視バイアスやサバイバーシップバイアスには何もしません。前視バイアスとサバイバーシップバイアス をご覧ください。
アウトオブサンプルが与えてくれるのは、戦略が良く見せるように設計されていない結果です。これはインサンプルの数字だけよりも明らかに高いハードルであり、戦略を少しでも信頼する前に、真剣なリサーチが越えるべきハードルです。
ご自分で分割を試してみませんか。インタラクティブデモを実行し、それからバージョンを作って確定し、Traseq で2つの期間にわたってテストしてみてください。
インサンプルとアウトオブサンプルのテストの違いは何ですか?
インサンプルは戦略を構築・調整するあいだに使う過去データで、アウトオブサンプルは取り分けておき、ルールを固定したあとにだけテストするデータです。アウトオブサンプルは将来の代役なので、そこで良い成績を出した戦略は、その期間に合わせて作られたものではないということです。
インサンプルだけのバックテストはなぜ誤解を招くのですか?
戦略を採点するのと同じデータに対してすべてのパラメータを調整すると、あなたの選択がすでにそのデータに導かれているため、結果は水増しされます。戦略はインサンプルで過去のノイズに完璧に当てはまっても、見たことのないデータでは崩れることがあり、これが過剰最適化の典型的な兆候です。
Traseq でアウトオブサンプルのバックテストを実行するには?
インサンプルの日付範囲で戦略を構築・調整し、ルールがロックされるようにバージョンを確定してから、その同じ確定バージョンを、後続の触れていないアウトオブサンプルの日付範囲で実行します。両方のランを比較セットに追加し、期間をまたいで結果がもちこたえるかを確認します。
ウォークフォワードテストとは何ですか?
ウォークフォワードテストは、イン/アウトオブサンプルの分割を履歴に沿って前へ転がします。ひとつの期間で調整し、次の期間で検証し、それから両方を前へずらして繰り返します。単一の判定ではなく一連のアウトオブサンプル結果を生み出すため、選んだひとつの期間への依存が減ります。
アウトオブサンプルのテストに通れば、戦略は機能するということですか?
いいえ。アウトオブサンプルのテストはより強いテストであって、保証ではありません。ホールドアウトもやはり過去データであり、選んだ期間に敏感で、前視バイアスやサバイバーシップバイアスを直しはしません。したがって、証明ではなく証拠として扱ってください。
バックテストにおける最大ドローダウン