Table of Contents
機械学習・深層学習では、モデル構造だけでなく、損失関数(Loss Function)の設計もモデル性能を左右する重要な要素です。
損失関数は、モデルが何を重視して学習するかを決め、目標とする予測へ導く役割 を持っています。
損失関数は学習の目的を決める
回帰問題でよく使われる損失関数には、次のようなものがあります。
| 損失関数 | 特徴 | Expected Pips予測との相性 |
|---|---|---|
| MSE | 大きな誤差を強く罰する | △ 外れ値の影響を受けやすい |
| MAE | 外れ値には強い | △ 勾配が一定で学習効率がやや低い |
| Huber Loss | MSEとMAEの中間 | ◎ 金融データと相性が良い |
| Quantile Loss | 分位点を予測する | △ 平均期待値を学習したい今回の目的とは異なる |
| Ranking Loss | 順位を最適化する | ○ 順位問題では有効 |
どの損失関数が優れているかではなく、何を学習したいかによって適切な損失関数は変わります。
Huber Lossを採用した理由
Expected Pipsには、大きく利益が出るケースや急激な損失になるケースなど、外れ値が多く含まれます。
MSEでは、そのようなサンプルの誤差が二乗されるため、一部の外れ値が学習全体を支配しやすくなります。
一方、Huber Lossは、
- 小さな誤差はMSEのように細かく学習する
- 大きな誤差はMAEのように緩やかに扱う
という特徴があります。
そのため、ノイズや外れ値が多い金融データでも安定した学習が期待できます。
実運用では高期待値シグナルしか使わない
ここが今回の設計で最も重視した点です。
実際のシステムトレードでは、ニューラルネットワークが予測したシグナルをすべてエントリーするわけではありません。
Expected Pipsが高いシグナルだけを選び、閾値(Threshold)を超えたものだけを売買します。
つまり、モデルにとって重要なのは、
- Expected Pips = 0.02
- Expected Pips = 0.05
- Expected Pips = 0.20
を同じ精度で予測することではありません。
実運用で利益に直結するのは、Expected Pipsが高いシグナルを正確に予測できることです。
そこで、通常のHuber Lossに重み付けを追加した Weighted Huber Loss を採用しました。
Expected Pipsが大きいサンプルほど、損失関数の重みを少しだけ大きくしています。
これにより、
- 利益が小さいサンプル
- 利益が大きいサンプル
を同じ重要度で学習するのではなく、利益に直結するサンプルを優先して学習できるようになります。
学習データ全体の平均誤差を最小化するのではなく、実運用で重要になる領域へ学習能力を集中させることが目的です。
Ranking Lossも試した
Expected Pipsを予測すると、シグナルには自然と順位が付きます。
| Expected Pips | 優先順位 |
|---|---|
| 0.18 | 高い |
| 0.12 | 高い |
| 0.05 | 普通 |
| -0.02 | 低い |
このため、検索エンジンや推薦システムで使われる Ranking Loss の適用も検討しました。
しかし実験では、大きな改善は確認できませんでした。
その理由は、Weighted Huber Lossによって、高期待値サンプルの誤差をより重視して学習した結果、期待値の高いシグナルが自然と上位へ並ぶようになった ためだと考えています。
Ranking Lossは順位そのものを最適化する問題では非常に有効ですが、Expected Pipsを回帰する今回の問題では、回帰損失だけで十分に目的を達成できました。
Quantile Lossも試した
Quantile Lossは、中央値や90%点など、平均値ではなく分位点を予測したい場合に有効な損失関数です。
例えば、「利益の下限を知りたい」「最悪ケースを重視したい」といった問題では適しています。
一方、今回の目的は、そのシグナルで平均的にどれくらい利益が期待できるか(Expected Pips) を予測することです。
そのため、平均値を直接学習するHuber Lossの方が、目的に適していると判断しました。
最適な損失関数は試して確かめるしかない
損失関数に絶対的な正解はありません。
どの損失関数が最も高いパフォーマンスを発揮するかは、実際に学習・検証を繰り返して評価するしかありません。
今回も、Weighted Huber Lossだけでなく、
- Huber Loss + 他のLoss関数
- 重み付けの係数
- Huber LossとRanking Lossの混合比率
など、さまざまな組み合わせを試しました。
例えば、Huber Loss 70% + Ranking Loss 30% といった複合損失も検証しましたが、最終的にはWeighted Huber Loss単体が最も安定した結果となりました。
まとめ
今回採用したWeighted Huber Lossは、単に回帰誤差を小さくするためのものではありません。
実運用で利益に直結する高期待値シグナルを、より正確に予測することを目的として設計しています。
実際のシステムトレードでは、Expected Pipsが高いシグナルだけを採用します。そのため、すべてのサンプルを同じ重要度で学習するよりも、高期待値のサンプルを重点的に学習した方が合理的です。
損失関数は、モデルが どのような予測を目指して学習するか を決める重要な要素です。
モデル構造を工夫するだけでなく、実運用で何を重視するのか という視点で損失関数を設計することも、モデル性能を左右する重要なポイントだと考えています。