skip to content

損失関数の設計がモデル性能を決める

/ 9 min read

Table of Contents

機械学習・深層学習では、モデル構造だけでなく、損失関数(Loss Function)の設計もモデル性能を左右する重要な要素です。

損失関数は、モデルが何を重視して学習するかを決め、目標とする予測へ導く役割 を持っています。

損失関数は学習の目的を決める

回帰問題でよく使われる損失関数には、次のようなものがあります。

損失関数特徴Expected Pips予測との相性
MSE大きな誤差を強く罰する△ 外れ値の影響を受けやすい
MAE外れ値には強い△ 勾配が一定で学習効率がやや低い
Huber LossMSEと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が高いシグナルだけを採用します。そのため、すべてのサンプルを同じ重要度で学習するよりも、高期待値のサンプルを重点的に学習した方が合理的です。

損失関数は、モデルが どのような予測を目指して学習するか を決める重要な要素です。

モデル構造を工夫するだけでなく、実運用で何を重視するのか という視点で損失関数を設計することも、モデル性能を左右する重要なポイントだと考えています。