🎓 レベル:発展 | 重要度:B(標準)・要最新確認
📎 前提:ブラックショールズ公式と解釈・ランダムウォークと効率的市場仮説 | 関連:汎化理論(機械学習)
要点(BLUF)
- 機械学習の金融応用は広い:価格マップの学習(高速な代替プライサー・ディープヘッジ)、ボラ予測、ポートフォリオ最適化、不正検知など。
- 決定論的な関数(BS の価格マップなど)は ML でよく学習できます。一方リターン予測は信号対雑音比が極端に低く、過学習しやすい。
- 金融 ML の最大の罠は非定常性と低い信号対雑音比。訓練データで好成績でも、テスト(将来)で崩れる——「うまくいったように見える」を疑う規律が要ります(要最新確認)。
1. ML×ファイナンスの全体像
機械学習は金融のあらゆる場面に入り込んでいますが、タスクの性質で成否が大きく分かれます。
- 学習しやすいタスク(決定論的な写像):オプション価格や感応度の高速近似(代替プライサー)、ヘッジ戦略の学習(ディープヘッジ)、ドキュメント分類。入力から出力への関係が安定していて、データを増やせば精度が上がります。
- 学習が難しいタスク(予測):将来リターンの予測。効率的市場(ランダムウォークと効率的市場仮説)に近いほど信号は薄く、ノイズに埋もれます。
この違いを2つのコードで体感します。
2. うまくいく例:BS価格マップの学習
ブラック–ショールズ価格は から価格への決定論的でなめらかな関数。これは ML(ここでは単純な多項式回帰)でよく近似できます。
import numpy as np
from scipy.stats import norm
def bs_call(S, K, r, sigma, T):
d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T)/(sigma*np.sqrt(T)); d2 = d1 - sigma*np.sqrt(T)
return S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
rng = np.random.default_rng(0)
def feats(S, sig): # (S, σ) の多項式特徴(3次まで)
return np.column_stack([np.ones_like(S), S, sig, S**2, S*sig, sig**2,
S**3, S**2*sig, S*sig**2, sig**3])
# 学習データ:ランダムな (S, σ) → BS価格
n = 5000
S = rng.uniform(70, 130, n); sig = rng.uniform(0.1, 0.4, n)
y = bs_call(S, 100.0, 0.05, sig, 1.0)
coef, *_ = np.linalg.lstsq(feats(S, sig), y, rcond=None) # 最小二乗で学習
# 別のテストデータで評価
St = rng.uniform(70, 130, 2000); sigt = rng.uniform(0.1, 0.4, 2000)
yt = bs_call(St, 100.0, 0.05, sigt, 1.0)
rmse = np.sqrt(np.mean((feats(St, sigt) @ coef - yt)**2))
print(f"BS価格の多項式近似 テストRMSE = {rmse:.4f}(価格レンジ {yt.min():.1f}〜{yt.max():.1f})")
出力:
BS価格の多項式近似 テストRMSE = 0.1883(価格レンジ 0.0〜39.3)
出力の意味:価格が 0〜39 の範囲に対し、テスト RMSE は 0.19(相対誤差 1% 未満)。たった10個の多項式特徴で、BS の価格マップをほぼ再現できました。これが ML 代替プライサーの発想——計算の重いモデル(モンテカルロや Heston)を一度大量に評価して教師データを作り、ニューラルネットに学習させれば、本番では桁違いに高速に価格・グリークスを返せます。**入力と出力の関係が安定している(決定論的)**から、ML が威力を発揮するのです。
3. 難しい例:リターン予測と過学習
対照的に、将来リターンの予測は危険です。リターンがほぼノイズ(ランダムウォークと効率的市場仮説)のとき、特徴量を増やすと訓練データには当てはまるがテストで崩れる——過学習の典型を再現します。
import numpy as np
rng = np.random.default_rng(2)
n, p = 200, 50 # 200サンプル・50個のランダムな特徴量
X = rng.normal(size=(n, p))
y = rng.normal(size=n) # 「リターン」は予測不能なノイズ(真の関係なし)
coef, *_ = np.linalg.lstsq(X, y, rcond=None) # 訓練データに当てはめ
r2_in = 1 - np.sum((y - X@coef)**2)/np.sum((y - y.mean())**2)
Xt = rng.normal(size=(n, p)); yt = rng.normal(size=n) # 別のテストデータ
r2_out = 1 - np.sum((yt - Xt@coef)**2)/np.sum((yt - yt.mean())**2)
print(f"ノイズ予測: 訓練R^2 = {r2_in:.3f}, テストR^2 = {r2_out:.3f}")
出力:
ノイズ予測: 訓練R^2 = 0.235, テストR^2 = -0.355
出力の意味:特徴量とターゲットの間に真の関係は一切ない(どちらも独立なノイズ)のに、訓練データでは と「23%説明できた」ように見えます。50個の特徴が200サンプルの偶然のパターンを拾っただけ。テストデータでは とベースライン(平均予測)より悪化します。これが過学習の正体で、金融では特に危険——リターンの信号対雑音比が低いため、バックテストで輝いた戦略が本番で無価値になる事故が後を絶ちません。汎化の理論(汎化理論(機械学習))が教えるとおり、サンプルに対して特徴が多すぎると、ノイズを学習してしまうのです。
4. 金融MLの落とし穴
金融データには、一般的な ML と違う固有の難しさがあります(要最新確認)。
- 低い信号対雑音比:リターンの予測可能成分は極小。少しの過学習が致命傷になります。
- 非定常性:市場の構造は変わり続けます(レジーム転換)。過去で学んだ関係が将来も成り立つ保証がありません。
- 時系列のリーク:データをシャッフルして交差検証すると未来情報が漏れます。時間順を守った検証が必須です。
- 少ないサンプル:「日次×数十年」でも実質的な独立サンプルは多くありません。
- バックテスト過剰適合:多数の戦略を試して良いものを選ぶと、選択バイアスで見せかけの好成績が出ます。
ML が効くのは「価格マップの近似」「執行最適化」「代替データの構造化」など関係が安定したタスク。「リターン予測で楽に勝てる」という期待は、効率的市場と過学習の二重の壁にぶつかります。
⚠️ よくある誤解
- 「訓練の精度が高い=良いモデル」ではない:金融では特に、訓練の好成績はほぼ過学習を疑うべき。判断は必ず時間順を守ったテスト(アウト・オブ・サンプル)で。
- 「ML だから市場に勝てる」ではない:効率的市場に近いほど予測可能な信号は薄い。ML の優位は予測より「写像の近似・最適化・大量データの処理」にあります。
- 複雑なモデルほど良いとは限らない:信号が薄い金融では、単純なモデル+強い正則化(正則化の理論(機械学習))のほうが頑健なことが多い。複雑さはノイズを学ぶ余地を増やします。
関連ノート
- 第9章 発展トピック 目次
- ランダムウォークと効率的市場仮説 — 前提:リターンの予測不能性
- ブラックショールズ公式と解釈 — 学習対象の価格マップ
- 汎化理論(機械学習)— 過学習と汎化の理論
- 金融工学テキスト 全体目次 — 全9章 完結