第 16 課:ポートフォリオ構築とリスク・エクスポージャー管理

複数戦略の組み合わせがリスク低減を意味するわけではない。相関がリスクの本質である。


典型的なシナリオ(例示)

注:以下は一般的な現象を説明するための合成例です。数字は例示的なものであり、特定の個人やアカウントには対応していません。

2022年初頭、ある投資家が「分散ポートフォリオ」を見せてくれました:

StrategyTypeHistorical SharpeHistorical Max DDAllocation
Strategy AUS Stock Momentum1.518%30%
Strategy BTech Stock Trend1.822%25%
Strategy CGrowth Factor1.315%25%
Strategy DLong Rotation1.420%20%

彼は私に尋ねました:「これら4つの戦略はすべて優れており、組み合わせればより安定するはずですよね?」

私は簡単な相関分析を行いました:

Strategy AStrategy BStrategy CStrategy D
Strategy A1.000.850.780.82
Strategy B0.851.000.880.80
Strategy C0.780.881.000.75
Strategy D0.820.800.751.00

発見: すべての戦略相関が0.75以上。

結果: 2022年、この「分散ポートフォリオ」は35%のドローダウンを記録 - 単一戦略よりも悪化。

なぜ?

これら4つの戦略は異なって見えますが、実際には同じことをしています:米国テクノロジー株のロング。テクノロジー株がグループとして下落したとき、すべてが同時に損失を出し、相関は1に近づき、分散効果は消失しました。

これがPortfolioレイヤー欠如のコスト - リスクを分散していると思っているが、実際には同じベットを積み重ねている。


16.1 Portfolioレイヤーの必要性

16.1.1 標準的なQuantフロー

完全なQuantシステムは以下のようになります:

Signals -> Portfolio Optimization -> Risk Control -> Execution
 |              |                      |              |
 +--          +-- 統一               +-- 二次      +-- 実際の
    Strategy       Allocation             Review         Trading
    Signal

多くのシステムは「Portfolio Optimization」レイヤーが欠けています:

Signals -> [欠落] -> Risk Control -> Execution
 |                          |              |
 +-- シグナルから            +-- パッシブ    +-- 爆発する
    直接取引                   チェック       可能性

16.1.2 Portfolioレイヤーが解決する問題

ProblemPortfolioレイヤーなしPortfolioレイヤーあり
ウェイト配分直感、均等配分リスク寄与、最適化目標に基づく
相関戦略の関係がわからない明示的にモデル化され制御される
Factor露出隠れた露出が見えない監視され制約される
レバレッジ制御隠れたレバレッジの可能性真のレバレッジを明示的に計算
リバランスランダム、パッシブルールベース、プロアクティブ

16.1.3 シグナル品質はPortfolio品質と等しくない

これは多くの人が見落とす重要な区別です:

単一Strategy視点:
  強いシグナル -> 大きなポジション -> 高リターン

Portfolio視点:
  強いシグナル + 高相関 -> 大きなポジション -> 集中リスク -> 大損の可能性
  強いシグナル + 低相関 -> 大きなポジション -> 分散リスク -> より頑健

16.2 ポジションサイジング手法

16.2.1 4つの一般的な手法の比較

MethodFormulaProsConsUse Case
Equal Weightw_i = 1/Nシンプルリスクの違いを無視類似したStrategy risks
Equal Volatilityw_i は 1/sigma_i に比例ボラティリティを考慮相関を無視独立したStrategies
Equal Risk ContributionRC_i = RC_jリスク均衡計算が複雑長期配分
Mean-Variancemax(return/risk)理論的に最適推定誤差が大きい期待値が信頼できる場合

16.2.2 Equal Weight vs Equal Risk Contribution

紙上演習:

2つの戦略があります:

  • Strategy A: 年率10%ボラティリティ
  • Strategy B: 年率30%ボラティリティ
MethodStrategy A WeightStrategy B WeightPortfolio Volatility
Equal Weight50%50%?
Equal Volatility75%25%?
クリックして解答を表示

相関 = 0 (独立) と仮定

Equal Weight Allocation:

  • A ボラティリティ寄与 = 50% x 10% = 5%
  • B ボラティリティ寄与 = 50% x 30% = 15%
  • Portfolio ボラティリティ = sqrt(5%^2 + 15%^2) = sqrt(0.25% + 2.25%) = 15.8%
  • Bがリスクの90%を寄与

Equal Volatility Allocation:

  • w_A = (1/10%) / (1/10% + 1/30%) = 0.1 / 0.133 = 75%
  • w_B = (1/30%) / (1/10% + 1/30%) = 0.033 / 0.133 = 25%
  • A ボラティリティ寄与 = 75% x 10% = 7.5%
  • B ボラティリティ寄与 = 25% x 30% = 7.5%
  • Portfolio ボラティリティ = sqrt(7.5%^2 + 7.5%^2) = 10.6%
  • 両方が等しいリスクを寄与

結論: Equal weight配分は高ボラティリティ戦略がPortfolioリスクを支配することを許す。

16.2.3 PortfolioレベルでのKelly

単一Strategy Kelly:

f* = (p x b - q) / b

複数Strategy Kelly (相関を考慮):

f* = Sigma^(-1) x mu

Where:
- f* = 最適ウェイトベクトル
- Sigma = 共分散行列
- mu = 期待リターンベクトル

Key:
- 高相関戦略は重みを下げる
- 負相関戦略は重みを上げる

実用的な推奨:

  • 1/2 Kelly または 1/4 Kelly を使用
  • 共分散行列にはロバストな推定を使用(次セクション参照)
  • 単一戦略のウェイト上限を設定

16.3 共分散推定とShrinkage

16.3.1 サンプル共分散の問題

Mean-variance最適化には共分散行列Sigmaが必要です。自然なアプローチは履歴データから推定することです:

サンプル共分散行列:
Sigma_hat = (1/T) x Sum((r_t - mu_hat)(r_t - mu_hat)')

Where:
  r_t = 時刻tのリターンベクトル
  mu_hat = サンプル平均ベクトル
  T = サンプル数

問題: 資産数Nがサンプル数Tに近づくと、サンプル共分散行列は極めて不安定になります。

紙上演習:

ScenarioAssets NSamples TProblem
30銘柄、1年間日次30252OK、T/N ~ 8
100銘柄、1年間日次100252危険、T/N ~ 2.5
500銘柄、1年間日次500252災害、T/N < 1

なぜ小さいT/Nが問題を引き起こすか:

1. 推定ノイズが高い
   - 共分散行列はN x (N+1)/2 パラメータを持つ
   - 100銘柄 = 5,050 パラメータ
   - 252サンプルで5,050パラメータを推定 -> 極めて信頼性が低い

2. 行列が特異になる可能性
   - N > T の場合、Sigma_hat は特異 (行列式 = 0)
   - 逆行列が取れない -> Portfolio最適化ができない

3. 極端なウェイト
   - 推定誤差がオプティマイザーによって増幅される
   - 不合理な大きなウェイトやショートポジションを生成

16.3.2 Ledoit-Wolf Shrinkage推定

コアアイデア: 不安定なサンプル共分散行列を安定したターゲット行列に向けて「収縮」させる。

Shrinkage推定:
Sigma_shrunk = delta x F + (1-delta) x Sigma_hat

Where:
  F = ターゲット行列 (構造化され安定)
  Sigma_hat = サンプル共分散行列 (不偏だがノイジー)
  delta = Shrinkage強度 (0 &lt;= delta &lt;=1)

delta -> 1の場合: ターゲット行列に近づく (安定だが偏りあり)
delta -> 0の場合: サンプル行列に近づく (不偏だがノイジー)

一般的なターゲット行列:

Target TypeDefinitionUse Case
Single factor modelF = beta x beta' x sigma_m^2 + D株式Portfolio
Constant correlationすべての資産が同じ相関を持つ同じ資産クラス
Diagonal matrix分散のみを保持、相関 = 0弱い相関の資産

16.3.3 コード実装

import numpy as np
from sklearn.covariance import LedoitWolf, OAS

def get_shrunk_covariance(returns: np.ndarray, method: str = 'ledoit_wolf') -> dict:
    """
    Shrinkage共分散行列を計算

    Parameters:
    -----------
    returns : リターン行列 (T x N)、各行は期間、各列は資産
    method : 'ledoit_wolf' または 'oas' (Oracle Approximating Shrinkage)

    Returns:
    --------
    dict : Shrinkage共分散行列とShrinkage強度を含む
    """
    if method == 'ledoit_wolf':
        estimator = LedoitWolf()
    elif method == 'oas':
        estimator = OAS()
    else:
        raise ValueError(f"Unknown method: {method}")

    estimator.fit(returns)

    return {
        'covariance': estimator.covariance_,
        'shrinkage': estimator.shrinkage_,
        'sample_cov': np.cov(returns, rowvar=False)
    }


def compare_covariance_stability(returns: np.ndarray, n_splits: int = 5) -> dict:
    """
    サンプル共分散とShrinkage共分散の安定性を比較

    データを分割して、両方の手法のサブサンプル間の一貫性を比較
    """
    T, N = returns.shape
    split_size = T // n_splits

    sample_covs = []
    shrunk_covs = []

    for i in range(n_splits):
        start = i * split_size
        end = start + split_size
        subset = returns[start:end]

        sample_covs.append(np.cov(subset, rowvar=False))

        lw = LedoitWolf()
        lw.fit(subset)
        shrunk_covs.append(lw.covariance_)

    # サブサンプル間の差を計算 (Frobenius norm)
    sample_diffs = []
    shrunk_diffs = []

    for i in range(n_splits):
        for j in range(i+1, n_splits):
            sample_diffs.append(np.linalg.norm(sample_covs[i] - sample_covs[j], 'fro'))
            shrunk_diffs.append(np.linalg.norm(shrunk_covs[i] - shrunk_covs[j], 'fro'))

    return {
        'sample_cov_variation': np.mean(sample_diffs),
        'shrunk_cov_variation': np.mean(shrunk_diffs),
        'stability_improvement': np.mean(sample_diffs) / np.mean(shrunk_diffs)
    }

16.3.4 使用例

import numpy as np
from sklearn.covariance import LedoitWolf

# 50銘柄、1年間日次データをシミュレート
np.random.seed(42)
n_assets = 50
n_days = 252

# Factor構造を持つリターンを生成 (より現実的)
factor_returns = np.random.normal(0.0005, 0.015, n_days)
betas = np.random.uniform(0.5, 1.5, n_assets)
idio_returns = np.random.normal(0, 0.02, (n_days, n_assets))
returns = np.outer(factor_returns, betas) + idio_returns

# サンプル共分散
sample_cov = np.cov(returns, rowvar=False)

# Ledoit-Wolf Shrinkage共分散
lw = LedoitWolf()
lw.fit(returns)
shrunk_cov = lw.covariance_

print(f"資産数: {n_assets}")
print(f"サンプル数: {n_days}")
print(f"T/N比: {n_days/n_assets:.2f}")
print(f"Shrinkage強度 delta: {lw.shrinkage_:.3f}")
print(f"サンプル共分散の条件数: {np.linalg.cond(sample_cov):.0f}")
print(f"Shrunk共分散の条件数: {np.linalg.cond(shrunk_cov):.0f}")

# 出力例:
# 資産数: 50
# サンプル数: 252
# T/N比: 5.04
# Shrinkage強度 delta: 0.234
# サンプル共分散の条件数: 847
# Shrunk共分散の条件数: 142

解釈:

  • Shrinkage強度 delta = 0.234 は、23.4%がターゲット行列から、76.6%がサンプル行列からであることを意味
  • 条件数が847から142に低下、より安定した行列、より信頼性の高い逆行列

16.3.5 Shrinkage推定を使用すべき時

ScenarioT/N比推奨
T/N > 10快適サンプル共分散で許容可能、Shrinkage改善は限定的
5 < T/N <=10境界線Shrinkage推奨、顕著な改善
2 < T/N <=5危険Shrinkage必須
T/N <=2災害Shrinkage + 次元削減 (Factorモデル)

実用的な推奨:

1. デフォルトでShrinkage推定を使用
   - 高いT/Nでも、Shrinkageは害にならない
   - sklearnが自動的に最適なShrinkage強度を計算

2. ローリングウィンドウではさらにShrinkageが必要
   - ローリングウィンドウ = サンプル数が少ない
   - Shrinkageは共分散の変化を滑らかにする

3. Factorモデルと組み合わせる
   - 大規模Portfolio (>100資産) はFactorモデルで次元削減
   - 残差共分散にShrinkageを適用

16.4 Factor Exposure Management

16.4.1 Factor Exposureとは何か?

Factorsは資産リターンを駆動する共通のソースです。一般的なFactors:

Factor TypeFactor NameMeaning
Market FactorBeta全体市場への感応度
Style FactorsSize大型株 vs 小型株
Valueバリュー株 vs グロース株
Momentum過去の勝者 vs 敗者
Quality高品質 vs 低品質
Volatility低ボラティリティ vs 高ボラティリティ
Industry FactorsSector産業露出

16.4.2 隠れたFactor Exposure

問題: 自分がどのFactorに賭けているかわからない可能性があります。

ケース: 4つの「異なる」Strategies

Strategy A: 高ROE銘柄を買う
Strategy B: 低PE銘柄を買う
Strategy C: 財務健全な銘柄を買う
Strategy D: 高配当銘柄を買う

見た目: 4つの異なる銘柄選択方法
実際: すべて「Quality + Value」Factorをロング

結果: Value Factorが失敗したとき (: 2019-2020)、4つすべての戦略が同時に損失

16.4.3 Factor Exposure計算

紙上演習:

あなたのPortfolioは以下を保有しています:

StockWeightSize BetaValue BetaMomentum Beta
AAPL30%0.8 (large)-0.5 (growth)0.6
MSFT25%0.7 (large)-0.3 (growth)0.4
JPM25%0.9 (large)0.8 (value)-0.2
XOM20%1.0 (large)1.2 (value)-0.5

Portfolio Factor露出を計算:

クリックして解答を表示

Size Exposure: = 30% x 0.8 + 25% x 0.7 + 25% x 0.9 + 20% x 1.0 = 0.24 + 0.175 + 0.225 + 0.2 = 0.84 (大型株に傾斜)

Value Exposure: = 30% x (-0.5) + 25% x (-0.3) + 25% x 0.8 + 20% x 1.2 = -0.15 - 0.075 + 0.2 + 0.24 = 0.215 (わずかにValue傾斜)

Momentum Exposure: = 30% x 0.6 + 25% x 0.4 + 25% x (-0.2) + 20% x (-0.5) = 0.18 + 0.1 - 0.05 - 0.1 = 0.13 (わずかにMomentum傾斜)

解釈:

  • Portfolioは大型株に傾斜 (パッシブに市場を追従する可能性)
  • Portfolioはわずかに Value Factorに傾斜 (ただし強くない)
  • Portfolioはわずかに Momentum露出がある

16.4.4 Factor Neutralization

Factor中立Portfolioが必要な場合:

目標: Factor露出 ~ 0

方法1: 制約付き最適化
  max  期待リターン
  s.t. Factor露出 = 0
       ウェイトの合計 = 1
       ウェイト >= 0

方法2: ヘッジング
  Portfolioが0.5のValue露出を持つ場合
  0.5単位のValue Factor ETFをショート

方法3: Pair Trading
  各Value株を買うごとに
  グロース株も買う (等しいValue Betaで)

16.5 隠れたレバレッジ

16.5.1 隠れたレバレッジとは何か?

明示的なレバレッジ: お金を借りて株を買う、$1M資本 + $1M借入 = 2倍レバレッジ

隠れたレバレッジ: 借入はないが、Portfolioリスク露出が資本を超える

ケース: Futures Portfolio

資本: $1M
保有:
  - 株価指数先物ロング: $2Mのノーショナル (20%証拠金)
  - 債券先物ロング: $3Mのノーショナル (15%証拠金)
  - 商品先物ロング: $1.5Mのノーショナル (15%証拠金)

使用証拠金: $500K
遊休現金: $500K

見た目: 資本の50%のみ使用
実際: $6.5Mのノーショナル露出 = 6.5倍レバレッジ!

16.5.2 真のレバレッジの計算

真のレバレッジ = Sum(|ノーショナル露出|) / 資本

またはリスク観点から:

リスクレバレッジ = Portfolioボラティリティ / ベンチマークボラティリティ

:
  Portfolio年率ボラティリティ: 30%
  S&P 500ボラティリティ: 15%
  リスクレバレッジ = 30% / 15% = 2倍

16.5.3 レバレッジの罠

TrapManifestationConsequence
低証拠金の錯覚「20%証拠金のみ使用」実際のレバレッジは5倍の可能性
クロスアセット積み重ね複数資産クラスのFutures隠れたレバレッジの積み重ね
相関過小評価「異なる資産、分散リスク」危機時に相関が急上昇
ボラティリティ過小評価通常のボラティリティでレバレッジ計算危機時にボラティリティが2倍

16.5.4 レバレッジ制御フレームワーク

Leverage Control Framework

16.6 Multi-Strategy Portfolioの落とし穴

16.6.1 相関の2つの顔

通常期: Strategy相関 = 0.3 (分散が機能)

危機期: Strategy相関 -> 0.9 (分散が失敗)

なぜ危機時に相関が急上昇するのか?

1. 流動性逼迫
   みんなが売る -> すべての資産が下落

2. リスク選好の反転
   「リスクオフ」 -> 国債のみ買い、他はすべて売り

3. レバレッジ清算
   証拠金請求 -> 強制売却 -> 価格下落 -> さらに証拠金請求

4. パニック伝染
   1つの市場が暴落 -> 投資家がパニック -> すべてのリスク資産を売却

16.6.2 Drawdown同期問題

紙上演習:

3つの戦略があり、それぞれ15%の過去最大Drawdownを持っています。

AssumptionPortfolio Max DrawdownCalculation
完全に独立 (相関 = 0)?同時にDrawdownしない
部分的に相関 (相関 = 0.5)?部分的に同期する可能性
高相関 (相関 = 0.9)?ほぼ完全に同期
クリックして解答を表示

簡略化された推定 (均等ウェイト):

  1. 完全に独立:

    • 同時最大Drawdownの確率は非常に低い
    • Portfolio最大Drawdown ~ 8-10% (単一戦略が~15%/3 = 5%を寄与、プラス多少の同期)
  2. 部分的に相関:

    • いくらか同期したDrawdownがある
    • Portfolio最大Drawdown ~ 12-13%
  3. 高相関:

    • ほぼ完全に同期
    • Portfolio最大Drawdown ~ 14-15% (単一戦略に近づく)

重要な洞察: 高相関では、「分散」は幻想である。

16.6.3 Strategy容量制約

Strategy Type典型的な容量理由
HFTマーケットメイキング$10-100M流動性制約
Statistical arbitrage$100M-1BAlpha減衰
Momentum戦略$1-10BMarket impact
パッシブインデックス無制限トラッキングエラー許容

問題: Strategy容量が不十分な場合、資本を追加し続けると:

  • スリッページ増加
  • Alpha減衰
  • 限界収益の減少

16.7 Multi-Agent視点

16.7.1 Portfolio Agentの責任

Portfolio Agent Responsibilities

16.7.2 Risk Agentとの分業

DimensionPortfolio AgentRisk Agent
焦点最適な配分方法制限超過の有無
タイミングトレード前 (計画段階)トレード中・後 (実行と監視)
権限ウェイトを推奨拒否権
ツールOptimizer、Factorモデル閾値、サーキットブレーカー

協力フロー:

Signal Agents --> Portfolio Agent --> Risk Agent --> Execution Agent
                       |                   |
                       v                   v
                  最適ウェイト         レビュー/削減/拒否
                  Factor露出           レバレッジチェック
                  相関                 Drawdownチェック

16.7.3 Portfolio最適化頻度

FrequencyUse CaseCost
IntradayHFT戦略取引コスト高
Dailyアクティブ戦略中程度のコスト
Weekly戦術的配分低コスト
Monthly戦略的配分最低コスト

推奨:

  • ウェイト変更が閾値を超えた場合のみリバランス (例: 5%)
  • 過度な取引コストを避ける

合格基準

このレッスンを完了した後、以下の基準で学習を検証してください:

CheckpointStandardSelf-Test Method
Portfolioレイヤーの必要性を理解シグナル品質 != Portfolio品質を説明できる反例を挙げる
ウェイト配分を計算Equal weightとEqual risk手法でウェイトを計算できる紙上演習を完了
Factor露出を分析Portfolio Factor betaを計算できるFactor演習を完了
隠れたレバレッジを特定Futures portfolioの真のレバレッジを計算できる例を挙げる
相関の罠を理解なぜ危機時相関が急上昇するか説明できるケースを分析

レッスン成果物

このレッスンを完了すると、以下が得られます:

  1. ポジションサイジング手法の比較 - Equal weight、Equal volatility、Equal risk contribution
  2. Factor露出計算フレームワーク - Portfolioの隠れたリスク露出を特定
  3. レバレッジ制御ルール - ノーショナルおよびリスクレバレッジ制約
  4. Portfolio Agent設計テンプレート - Portfolio最適化の責任とワークフロー

レッスンまとめ

  • 複数戦略は分散を意味しない、相関が分散効果を決定
  • Equal weight配分は高ボラティリティ戦略がPortfolioリスクを支配することを許す
  • Factor露出は隠れている可能性があり、明示的な監視が必要
  • 隠れたレバレッジはノーショナル露出が資本を超えることから生じる
  • 危機時相関が急上昇、分散効果が失敗

さらなる読書


次のレッスンプレビュー

Lesson 17: Online Learning and Strategy Evolution

Portfolioが構築された後、市場は変化し、戦略は進化しなければなりません。大きな損失の後に問題を発見するのを待つのではなく、システムが継続的に学習し自己更新できるようにする方法は?次のレッスンではOnline learning手法を探ります。

この章を引用する
Zhang, Wayland (2026). 第 16 課:ポートフォリオ構築とリスク・エクスポージャー管理. In AIクオンツ取引:ゼロからイチへ. https://waylandz.com/quant-book-ja/Lesson-16-Portfolio-Construction-and-Exposure-Management
@incollection{zhang2026quant_Lesson_16_Portfolio_Construction_and_Exposure_Management,
  author = {Zhang, Wayland},
  title = {第 16 課:ポートフォリオ構築とリスク・エクスポージャー管理},
  booktitle = {AIクオンツ取引:ゼロからイチへ},
  year = {2026},
  url = {https://waylandz.com/quant-book-ja/Lesson-16-Portfolio-Construction-and-Exposure-Management}
}