Implied Risk Premia: Theoretical Foundation

BRISMA Project Documentation Version: 1.0 Last Updated: 2025-12-25 Status: Issue #48 - Asset-Level Implied Returns (Complete)


Table of Contents

  1. Introduction
  2. Asset-Level Implied Returns - Issue #48
  3. Factor-Based Implied Risk Premia - Issue #49
  4. Bantleon Calibration Methods - Existing
  5. Worked Example: BRISMA Portfolio - Issue #51
  6. Validation and Quality Checks
  7. References - Issue #50
  8. Appendices

1. Introduction

1.1 The Problem: What Returns Does the Market Expect?

Portfolio managers observe their current asset allocation $\mathbf{w}$ and can estimate the covariance matrix $\mathbf{Q}$ from historical data. The fundamental question is:

What expected returns $\boldsymbol{\mu}$ would make this allocation optimal?

This is the inverse optimization problem: instead of finding optimal weights given expected returns, we find the implied returns that rationalize observed weights.

1.2 Why Implied Returns?

Approach Pros Cons
Historical Returns Data-driven, objective Backward-looking, noisy, regime-dependent
Analyst Forecasts Forward-looking Subjective, inconsistent, costly
Implied Returns Internally consistent, no forecasts needed Requires assumption about investor utility

Key Insight: Implied returns extract the market's collective wisdom embedded in current prices and allocations.

1.3 Literature Review

Paper Contribution
Black & Litterman (1992) Equilibrium implied returns as prior for Bayesian updating
Merton (1980) Risk aversion estimation from market data
Ross (1976) Arbitrage Pricing Theory - factor-based returns
Fama & French (1993) Multi-factor model empirics
He & Litterman (1999) Extensions to Black-Litterman framework

2. Asset-Level Implied Returns

This section addresses Issue #48

2.1 Mean-Variance Framework

2.1.1 The Utility Function

An investor with mean-variance preferences maximizes:

$$U_{MV}(\mathbf{w}) = \mathbf{w}'\boldsymbol{\mu} - \frac{\lambda}{2}\mathbf{w}'\mathbf{Q}\mathbf{w}$$

where: - $\mathbf{w} \in \mathbb{R}^n$: Portfolio weights (column vector) - $\boldsymbol{\mu} \in \mathbb{R}^n$: Expected returns (column vector) - $\mathbf{Q} \in \mathbb{R}^{n \times n}$: Covariance matrix (symmetric, positive semi-definite) - $\lambda > 0$: Risk aversion parameter

Interpretation: - First term $\mathbf{w}'\boldsymbol{\mu}$: Expected portfolio return - Second term $\frac{\lambda}{2}\mathbf{w}'\mathbf{Q}\mathbf{w}$: Penalty for portfolio variance - $\lambda$ controls the trade-off: higher $\lambda$ = more risk-averse

2.1.2 First-Order Condition Derivation

Theorem 2.1 (Unconstrained Inverse Solution)

For the unconstrained mean-variance problem, the implied expected returns are:

$$\boxed{\boldsymbol{\mu}^* = \lambda \mathbf{Q} \mathbf{w}}$$

Proof:

Starting from the utility function: $$U(\mathbf{w}) = \mathbf{w}'\boldsymbol{\mu} - \frac{\lambda}{2}\mathbf{w}'\mathbf{Q}\mathbf{w}$$

Take the gradient with respect to $\mathbf{w}$: $$\nabla_{\mathbf{w}} U = \boldsymbol{\mu} - \lambda\mathbf{Q}\mathbf{w}$$

At the optimum, the first-order condition requires $\nabla_{\mathbf{w}} U = \mathbf{0}$: $$\boldsymbol{\mu} - \lambda\mathbf{Q}\mathbf{w} = \mathbf{0}$$

Solving for $\boldsymbol{\mu}$: $$\boldsymbol{\mu}^* = \lambda\mathbf{Q}\mathbf{w} \quad \blacksquare$$

Second-Order Condition:

The Hessian is: $$\nabla^2_{\mathbf{w}} U = -\lambda\mathbf{Q}$$

For a maximum, we need $\nabla^2_{\mathbf{w}} U \prec 0$ (negative definite), which holds when $\mathbf{Q} \succ 0$ (positive definite) and $\lambda > 0$.

2.1.3 Constrained Case (Budget Constraint)

Theorem 2.2 (Constrained Inverse Solution)

With the budget constraint $\mathbf{1}'\mathbf{w} = 1$, the implied returns become:

$$\boxed{\boldsymbol{\mu}^ = \lambda\mathbf{Q}\mathbf{w} + \gamma^\mathbf{1}}$$

where $\gamma^*$ is the Lagrange multiplier (shadow price of the budget constraint).

Proof:

The Lagrangian is: $$\mathcal{L} = \mathbf{w}'\boldsymbol{\mu} - \frac{\lambda}{2}\mathbf{w}'\mathbf{Q}\mathbf{w} - \gamma(\mathbf{1}'\mathbf{w} - 1)$$

KKT conditions: 1. Stationarity: $\boldsymbol{\mu} - \lambda\mathbf{Q}\mathbf{w} - \gamma\mathbf{1} = \mathbf{0}$ 2. Primal feasibility: $\mathbf{1}'\mathbf{w} = 1$

From stationarity: $$\boldsymbol{\mu}^ = \lambda\mathbf{Q}\mathbf{w} + \gamma^\mathbf{1} \quad \blacksquare$$

Interpretation of $\gamma^*$: - $\gamma^*$ is the marginal utility of relaxing the budget constraint - Can be set to $r_f$ (risk-free rate) for zero-beta interpretation - Can be determined by normalization (e.g., target average return)

2.1.4 Geometric Interpretation

The formula $\boldsymbol{\mu}^* = \lambda\mathbf{Q}\mathbf{w}$ has a beautiful geometric interpretation:

  1. $\mathbf{Q}\mathbf{w}$ represents the marginal contribution to risk of each asset
  2. $\lambda$ scales this to expected returns
  3. Assets with higher risk contribution must have higher expected returns to justify their weight

Visualization: - High-variance assets: Higher implied $\mu_i$ - Highly correlated assets: Share implied returns through off-diagonal $Q_{ij}$ - Diversifying assets: Lower implied returns due to negative correlations

2.2 Risk Aversion Parameter $\lambda$

2.2.1 Economic Interpretation

$\lambda$ represents the investor's marginal rate of substitution between expected return and variance:

$$\lambda = \frac{\partial \mu_p / \partial w_i}{\partial \sigma_p^2 / \partial w_i}$$

Typical Values:

Context $\lambda$ Range Source
Market equilibrium 2.5 - 3.5 Black & Litterman (1992)
Institutional investors 1 - 5 Industry practice
Retail investors 3 - 10 Academic studies

2.2.2 Estimation Methods

Method 1: From Observed Returns

Given external estimates of expected returns $\tilde{\boldsymbol{\mu}}$:

$$\lambda^* = \frac{\mathbf{w}'\tilde{\boldsymbol{\mu}}}{\mathbf{w}'\mathbf{Q}\mathbf{w}} = \frac{\text{Expected portfolio return}}{\text{Portfolio variance}}$$

Derivation: Pre-multiply $\boldsymbol{\mu}^ = \lambda\mathbf{Q}\mathbf{w}$ by $\mathbf{w}'$: $$\mathbf{w}'\boldsymbol{\mu}^ = \lambda\mathbf{w}'\mathbf{Q}\mathbf{w}$$ $$\lambda = \frac{\mathbf{w}'\boldsymbol{\mu}^*}{\mathbf{w}'\mathbf{Q}\mathbf{w}}$$

Method 2: Black-Litterman Equilibrium

Assuming the market portfolio is mean-variance efficient:

$$\lambda_{BL} = \frac{E[r_m] - r_f}{\sigma_m^2}$$

where: - $E[r_m]$: Expected market return - $r_f$: Risk-free rate - $\sigma_m^2$: Market variance

Typical calculation: - $E[r_m] - r_f \approx 5\%$ (equity risk premium) - $\sigma_m \approx 15\%$ (market volatility) - $\lambda_{BL} = 0.05 / 0.15^2 \approx 2.22$

Method 3: Confidence-Weighted Blend

$$\lambda_{conf} = c \cdot \lambda_{observed} + (1-c) \cdot \lambda_{prior}$$

where $c \in [0,1]$ is the confidence in observed returns.

2.2.3 Sensitivity Analysis

The implied returns scale linearly with $\lambda$:

$$\frac{\partial \mu_i^*}{\partial \lambda} = (\mathbf{Q}\mathbf{w})_i$$

Key insight: Assets with higher risk contribution are more sensitive to $\lambda$ changes.

2.3 Alternative Utility Functions

2.3.1 MRAR (Morningstar Risk-Adjusted Return)

Definition:

$$MRAR_\gamma = \left[\frac{1}{T}\sum_{t=1}^{T}\left(\frac{1+r_{p,t}}{1+r_{f,t}}\right)^{-\gamma}\right]^{-12/\gamma} - 1$$

where: - $\gamma > 0$: Risk aversion parameter (typically 2-5) - $r_{p,t}$: Portfolio return at time $t$ - $r_{f,t}$: Risk-free rate at time $t$

Connection to CRRA Utility:

MRAR is the certainty equivalent return under Constant Relative Risk Aversion (CRRA) utility:

$$U(W) = \frac{W^{1-\gamma}}{1-\gamma}$$

Inverse Optimization:

Unlike mean-variance, MRAR requires bilevel numerical optimization: 1. Inner problem: Given $\boldsymbol{\mu}$, compute optimal $\mathbf{w}^$ 2. Outer problem: Find $\boldsymbol{\mu}$ such that $\mathbf{w}^ = \mathbf{w}_{observed}$

Implementation: Use scipy.optimize with CRRA objective.

2.3.2 Omega Ratio

Definition:

$$\Omega(L) = \frac{\int_L^{\infty}(1-F(r))dr}{\int_{-\infty}^{L}F(r)dr} = \frac{E[\max(r-L, 0)]}{E[\max(L-r, 0)]}$$

where: - $L$: Threshold return (often 0 or $r_f$) - $F(r)$: CDF of returns

Connection to Lower Partial Moments:

$$\Omega(L) = 1 + \frac{E[r] - L}{LPM_1(L)}$$

where $LPM_1(L) = E[\max(L-r, 0)]$ is the first lower partial moment.

Inverse Optimization:

Also requires bilevel numerical optimization due to non-quadratic objective.

2.3.3 Comparison of Utility Functions

Utility Closed-Form? Risk Measure Sensitivity
Mean-Variance Yes Variance (symmetric) $\lambda$
MRAR No CRRA (asymmetric) $\gamma$
Omega No LPM (downside only) $L$

When to use each: - Mean-Variance: Default choice, analytical tractability - MRAR: When asymmetric risk preferences matter - Omega: When downside risk is the primary concern


3. Factor-Based Implied Risk Premia

This section addresses Issue #49

3.1 Why Factor Decomposition?

3.1.1 The Curse of Dimensionality

With $n$ assets, the covariance matrix $\mathbf{Q}$ has $n(n+1)/2$ unique parameters. For BRISMA with 89 assets: - Parameters: $89 \times 90 / 2 = 4,005$ covariances - Observations needed: At least $4,005$ for reliable estimation - Problem: Insufficient historical data leads to estimation error

Factor models reduce complexity: - $k$ factors: $nk + k(k+1)/2$ parameters - With $k=5$ factors: $89 \times 5 + 15 = 460$ parameters - Reduction: 89% fewer parameters to estimate

3.1.2 Economic Interpretability

Factors represent systematic risk sources:

Factor Economic Interpretation Example Proxy
Market Aggregate equity risk Market index return
Duration Interest rate sensitivity 10Y bond return
Credit Default risk premium Investment grade spread
Liquidity Trading cost premium Bid-ask spread
Momentum Trend-following premium 12-month return

3.1.3 New Asset Extension Capability

The Key Insight:

If we know the factor premia $\boldsymbol{\pi}$ and a new asset's factor exposures $\mathbf{B}_{new}$, we can price the new asset without any historical return data:

$$\mu_{new} = r_f + \mathbf{B}_{new}'\boldsymbol{\pi}$$

This is critical for: - Newly launched funds - Private assets - Hypothetical portfolios

3.2 The APT Framework

3.2.1 Factor Model Representation

Definition (Arbitrage Pricing Theory)

Asset returns follow a $k$-factor structure:

$$r_i = \alpha_i + \sum_{j=1}^{k}\beta_{ij}f_j + \epsilon_i$$

In matrix form:

$$\mathbf{r} = \boldsymbol{\alpha} + \mathbf{B}\mathbf{f} + \boldsymbol{\epsilon}$$

where: - $\mathbf{r} \in \mathbb{R}^n$: Asset returns - $\boldsymbol{\alpha} \in \mathbb{R}^n$: Asset-specific alphas (often assumed zero) - $\mathbf{B} \in \mathbb{R}^{n \times k}$: Factor loading matrix (betas) - $\mathbf{f} \in \mathbb{R}^k$: Factor returns - $\boldsymbol{\epsilon} \in \mathbb{R}^n$: Idiosyncratic errors

3.2.2 Key Assumptions

  1. Factor structure: Returns driven by common factors
  2. Uncorrelated errors: $E[\epsilon_i \epsilon_j] = 0$ for $i \neq j$
  3. Zero-mean errors: $E[\epsilon_i] = 0$
  4. Errors uncorrelated with factors: $E[\epsilon_i f_j] = 0$

3.2.3 Implied Covariance Structure

Under APT, the covariance matrix decomposes as:

$$\mathbf{Q} = \mathbf{B}\mathbf{\Sigma}_f\mathbf{B}' + \mathbf{D}$$

where: - $\mathbf{\Sigma}f = \text{Cov}(\mathbf{f})$: Factor covariance matrix ($k \times k$) - $\mathbf{D} = \text{diag}(\sigma{\epsilon_1}^2, \ldots, \sigma_{\epsilon_n}^2)$: Idiosyncratic variance

3.2.4 Relation to CAPM

CAPM is a special case with $k=1$ (market factor only):

$$r_i - r_f = \beta_i(r_m - r_f) + \epsilon_i$$

The expected excess return is:

$$E[r_i] - r_f = \beta_i \cdot \pi_m$$

where $\pi_m = E[r_m] - r_f$ is the market risk premium.

3.3 Extracting Factor Premia from Asset Returns

3.3.1 The Cross-Sectional Regression

Given asset-level implied returns $\boldsymbol{\mu}^*$ from Section 2, we extract factor premia via:

$$\boldsymbol{\mu}^* - r_f\mathbf{1} = \mathbf{B}\boldsymbol{\pi} + \mathbf{e}$$

where: - $\boldsymbol{\mu}^ - r_f\mathbf{1}$: Excess implied returns ($n \times 1$) - $\mathbf{B}$: Factor loadings ($n \times k$) - $\boldsymbol{\pi}$: Factor risk premia ($k \times 1$) - what we want* - $\mathbf{e}$: Regression residuals ($n \times 1$)

3.3.2 OLS Solution

Theorem 3.1 (Factor Premia Extraction)

The OLS estimate of factor premia is:

$$\boxed{\hat{\boldsymbol{\pi}} = (\mathbf{B}'\mathbf{B})^{-1}\mathbf{B}'(\boldsymbol{\mu}^* - r_f\mathbf{1})}$$

Proof:

Minimize sum of squared residuals: $$\min_{\boldsymbol{\pi}} |\boldsymbol{\mu}^* - r_f\mathbf{1} - \mathbf{B}\boldsymbol{\pi}|^2$$

Take derivative with respect to $\boldsymbol{\pi}$: $$\frac{\partial}{\partial \boldsymbol{\pi}} = -2\mathbf{B}'(\boldsymbol{\mu}^* - r_f\mathbf{1} - \mathbf{B}\boldsymbol{\pi}) = 0$$

Solving: $$\mathbf{B}'\mathbf{B}\boldsymbol{\pi} = \mathbf{B}'(\boldsymbol{\mu}^ - r_f\mathbf{1})$$ $$\hat{\boldsymbol{\pi}} = (\mathbf{B}'\mathbf{B})^{-1}\mathbf{B}'(\boldsymbol{\mu}^ - r_f\mathbf{1}) \quad \blacksquare$$

3.3.3 Weighted OLS

For more robust estimates, use weighted least squares:

$$\hat{\boldsymbol{\pi}}_{WLS} = (\mathbf{B}'\mathbf{W}\mathbf{B})^{-1}\mathbf{B}'\mathbf{W}(\boldsymbol{\mu}^* - r_f\mathbf{1})$$

Common weighting schemes: - Market cap weights: $W_{ii} = \text{mcap}i / \sum_j \text{mcap}_j$ - Inverse variance: $W{ii} = 1/\sigma_i^2$ - Equal weights: $W_{ii} = 1/n$

3.3.4 Standard Errors

Under homoskedastic errors, the covariance of $\hat{\boldsymbol{\pi}}$ is:

$$\text{Var}(\hat{\boldsymbol{\pi}}) = \sigma_e^2 (\mathbf{B}'\mathbf{B})^{-1}$$

where $\sigma_e^2 = \frac{1}{n-k}\sum_{i=1}^n e_i^2$ is the residual variance.

3.4 Fama-MacBeth Two-Pass Procedure

3.4.1 Overview

The Fama-MacBeth (1973) procedure separates: 1. Pass 1 (Time-series): Estimate betas for each asset 2. Pass 2 (Cross-sectional): Estimate premia at each time point

This allows for time-varying factor premia and proper standard error estimation.

3.4.2 Pass 1: Time-Series Beta Estimation

For each asset $i$, run time-series regression:

$$r_{i,t} - r_{f,t} = \alpha_i + \sum_{j=1}^{k}\beta_{ij}f_{j,t} + \epsilon_{i,t}$$

Output: Matrix $\hat{\mathbf{B}} \in \mathbb{R}^{n \times k}$ of estimated betas.

3.4.3 Pass 2: Cross-Sectional Gamma Estimation

For each time $t$, run cross-sectional regression:

$$r_{i,t} - r_{f,t} = \gamma_{0,t} + \sum_{j=1}^{k}\gamma_{j,t}\hat{\beta}{ij} + \eta{i,t}$$

Output: Time series ${\hat{\gamma}{j,t}}{t=1}^T$ for each factor $j$.

3.4.4 Final Estimates

Average across time:

$$\hat{\pi}j = \frac{1}{T}\sum{t=1}^{T}\hat{\gamma}_{j,t}$$

Standard error (accounts for time-series variation):

$$SE(\hat{\pi}j) = \frac{1}{\sqrt{T}}\sqrt{\frac{1}{T-1}\sum{t=1}^{T}(\hat{\gamma}_{j,t} - \hat{\pi}_j)^2}$$

3.4.5 Shanken Correction

Problem: Pass 2 uses estimated betas, not true betas. This causes errors-in-variables bias in standard errors.

Shanken (1992) Correction:

$$\text{Var}(\hat{\boldsymbol{\pi}}){corrected} = \left(1 + \hat{\boldsymbol{\pi}}'\hat{\mathbf{\Sigma}}_f^{-1}\hat{\boldsymbol{\pi}}\right) \cdot \text{Var}(\hat{\boldsymbol{\pi}}){OLS}$$

The correction factor $c = 1 + \hat{\boldsymbol{\pi}}'\hat{\mathbf{\Sigma}}_f^{-1}\hat{\boldsymbol{\pi}}$ inflates standard errors to account for beta estimation uncertainty.

Intuition: When premia are large relative to factor variance, beta estimation errors have bigger impact on premia estimates.

3.5 The Bridge: Assets → Factors → New Assets

3.5.1 The Complete Flow

[Asset Weights w]
       |
       | Inverse Optimization (Section 2)
       v
[Asset Implied Returns μ*]
       |
       | Cross-Sectional Regression (Section 3.3)
       v
[Factor Risk Premia π]
       |
       | Factor Projection (Section 3.5.2)
       v
[New Asset Expected Return μ_new]

3.5.2 Pricing New Assets

Theorem 3.2 (New Asset Pricing)

Given factor premia $\hat{\boldsymbol{\pi}}$ and a new asset's factor exposures $\mathbf{B}_{new}$:

$$\boxed{\mu_{new} = r_f + \mathbf{B}_{new}'\hat{\boldsymbol{\pi}}}$$

Example: Pricing a BANTLEON fund with: - Equity beta: $\beta_{equity} = 0.8$ - Duration beta: $\beta_{duration} = 5.0$ - Credit beta: $\beta_{credit} = 0.3$

If estimated premia are $\pi_{equity} = 5\%$, $\pi_{duration} = 0.5\%$, $\pi_{credit} = 2\%$:

$$\mu_{new} = r_f + 0.8 \times 5\% + 5.0 \times 0.5\% + 0.3 \times 2\% = r_f + 7.1\%$$

3.5.3 Confidence Intervals

The variance of $\mu_{new}$ propagates from $\text{Var}(\hat{\boldsymbol{\pi}})$:

$$\text{Var}(\mu_{new}) = \mathbf{B}{new}'\text{Var}(\hat{\boldsymbol{\pi}})\mathbf{B}{new}$$

95% confidence interval:

$$\mu_{new} \pm 1.96 \sqrt{\mathbf{B}{new}'\text{Var}(\hat{\boldsymbol{\pi}})\mathbf{B}{new}}$$

3.5.4 Handling Missing Factors

When a new asset has exposures to factors not in our model:

  1. Conservative approach: Assume zero premium for missing factors
  2. Proxy approach: Map to closest available factor
  3. Hierarchical approach: Use factor category averages

3.6 Practical Considerations

3.6.1 Factor Selection

Criterion Description
Economic meaning Factors should represent systematic risks
Orthogonality Low correlation between factors
Persistence Premia stable over time
Coverage Explain high % of return variance

3.6.2 Estimation Frequency

3.6.3 Robustness Checks

  1. Subsample stability: Compare premia across periods
  2. Alternative specifications: Different factor definitions
  3. Out-of-sample testing: Rolling backtest

4. Bantleon Calibration Methods

Existing implementation in python/brisma/bantleon/

4.1 Method 1: 10Y Bond Calibration

$$\lambda_{M1} = \frac{\ln\left(\frac{1+y_{10Y}}{1+r_f}\right)}{\beta_{ref}}$$

4.2 Method 2: Historical Performance

$$\lambda_{M2} = \sum_{t=1}^{T}w_t f_t$$

with exponential decay weights: $w_t \propto 0.5^{t/\tau}$

4.3 Hybrid Method

$$\mu_{hybrid} = R^2 \cdot \mu_{M1} + (1-R^2) \cdot \mu_{M2}$$


5. Worked Example: BRISMA Portfolio

This section addresses Issue #51

5.1 Data Description

5.1.1 Portfolio Composition

The BRISMA client portfolio contains 32 assets across 5 asset classes:

Asset Class Weight # Assets
Bonds 40.0% 7
Equities 31.0% 10
Alternatives 27.6% 10
Cash 1.4% 5
Total 110.0% 32

Note: Total weight > 100% indicates leverage.

5.1.2 Top 10 Holdings

Rank Asset Weight Class
1 Euro Corporate 16.0% Bonds
2 S&P 500 8.0% Equities
3 Euro Government 8.0% Bonds
4 Real Estate World 8.0% Alternatives
5 MSCI EMU 5.0% Equities
6 EM EUR Hedged 5.0% Bonds
7 Listed Private Equity 5.0% Alternatives
8 CTA Index 5.0% Alternatives
9 SPGTINNT Index 5.0% Alternatives
10 MSCI Europe ex EMU 3.0% Equities

5.1.3 Available Covariance Matrices

Three covariance matrices from R/examples/example1.R:

Matrix Description Use Case
$\mathbf{Q}_{emp}$ Empirical (time-decay weighted) Historical analysis
$\mathbf{Q}_{shrink}$ Factor model shrinkage Regularized estimation
$\mathbf{Q}_{garch}$ GARCH(1,1) forecast Forward-looking

5.1.4 Risk Model Factors

73 factors from risk model, grouped by type:

Category Count Examples
Cash (5 currencies) 5 EUR, USD, JPY, GBP, CHF
Equity Indices 28 MSCI World, Regions, Sectors, Styles
Government Bonds 18 EUR, USD, CHF by maturity bucket
Inflation-Linked 4 EUR, USD, UK, Japan
Credit 6 US/EUR Corporate, High Yield, Convertibles
Commodities 5 Broad, Agriculture, Energy, Metals, Gold
FX Indices 5 EUR, USD, CHF, JPY, GBP TWI
Volatility 3 Equity VIX, EUR VIX, Bond Vol
Rates 6 ESTR, SOFR, SARON, 10Y yields

5.2 Step-by-Step Calculation

5.2.1 Simplified 4-Asset Example

For clarity, we first demonstrate with 4 assets:

Assets: 1. S&P 500 (Equity) 2. Euro Government (Bond) 3. Euro Corporate (Credit) 4. Gold (Commodity)

Weights (normalized to sum to 1): $$\mathbf{w} = \begin{pmatrix} 0.30 \ 0.25 \ 0.35 \ 0.10 \end{pmatrix}$$

Covariance Matrix (annualized, illustrative): $$\mathbf{Q} = \begin{pmatrix} 0.0225 & 0.0020 & 0.0040 & 0.0010 \ 0.0020 & 0.0036 & 0.0024 & -0.0005 \ 0.0040 & 0.0024 & 0.0064 & 0.0008 \ 0.0010 & -0.0005 & 0.0008 & 0.0169 \end{pmatrix}$$

Diagonal: $\sigma_{S\&P} = 15\%$, $\sigma_{Govt} = 6\%$, $\sigma_{Corp} = 8\%$, $\sigma_{Gold} = 13\%$

5.2.2 Step 1: Choose Risk Aversion $\lambda$

Using Black-Litterman default: $$\lambda = 2.5$$

Alternatively, from historical data (assuming 5% portfolio return, 8% volatility): $$\lambda^* = \frac{\mu_p}{\sigma_p^2} = \frac{0.05}{0.08^2} = 7.8$$

We proceed with $\lambda = 2.5$ (conservative).

5.2.3 Step 2: Compute Implied Returns

$$\boldsymbol{\mu}^* = \lambda \mathbf{Q} \mathbf{w}$$

Calculation:

$$\mathbf{Q}\mathbf{w} = \begin{pmatrix} 0.0225 \times 0.30 + 0.0020 \times 0.25 + 0.0040 \times 0.35 + 0.0010 \times 0.10 \ 0.0020 \times 0.30 + 0.0036 \times 0.25 + 0.0024 \times 0.35 + (-0.0005) \times 0.10 \ 0.0040 \times 0.30 + 0.0024 \times 0.25 + 0.0064 \times 0.35 + 0.0008 \times 0.10 \ 0.0010 \times 0.30 + (-0.0005) \times 0.25 + 0.0008 \times 0.35 + 0.0169 \times 0.10 \end{pmatrix}$$

$$= \begin{pmatrix} 0.00855 \ 0.00184 \ 0.00412 \ 0.00197 \end{pmatrix}$$

$$\boldsymbol{\mu}^* = 2.5 \times \begin{pmatrix} 0.00855 \ 0.00184 \ 0.00412 \ 0.00197 \end{pmatrix} = \begin{pmatrix} 2.14\% \ 0.46\% \ 1.03\% \ 0.49\% \end{pmatrix}$$

5.2.4 Step 3: Economic Interpretation

Asset Weight $\sigma_i$ $\mu_i^*$ Sharpe Ratio
S&P 500 30% 15.0% 2.14% 0.14
Euro Government 25% 6.0% 0.46% 0.08
Euro Corporate 35% 8.0% 1.03% 0.13
Gold 10% 13.0% 0.49% 0.04

Observations: - Higher-weight assets have higher implied returns (by construction) - S&P 500 has highest implied return due to high weight and high risk - Gold has low implied return despite high volatility (low weight)

5.2.5 Step 4: Extract Factor Premia

Assume 2-factor model: Equity ($\beta_E$) and Duration ($\beta_D$)

Factor Betas:

Asset $\beta_E$ $\beta_D$
S&P 500 1.0 0.0
Euro Government 0.0 7.0
Euro Corporate 0.2 5.0
Gold 0.1 -0.5

$$\mathbf{B} = \begin{pmatrix} 1.0 & 0.0 \ 0.0 & 7.0 \ 0.2 & 5.0 \ 0.1 & -0.5 \end{pmatrix}$$

Cross-sectional regression (assuming $r_f = 0$):

$$\hat{\boldsymbol{\pi}} = (\mathbf{B}'\mathbf{B})^{-1}\mathbf{B}'(\boldsymbol{\mu}^* - r_f\mathbf{1})$$

Computing $\mathbf{B}'\mathbf{B}$: $$\mathbf{B}'\mathbf{B} = \begin{pmatrix} 1.05 & 0.95 \ 0.95 & 74.25 \end{pmatrix}$$

And $\mathbf{B}'\boldsymbol{\mu}^$: $$\mathbf{B}'\boldsymbol{\mu}^ = \begin{pmatrix} 2.40\% \ 8.67\% \end{pmatrix}$$

Solving: $$\hat{\boldsymbol{\pi}} = \begin{pmatrix} \pi_E \ \pi_D \end{pmatrix} = \begin{pmatrix} 2.17\% \ 0.09\% \end{pmatrix}$$

Interpretation: - Equity risk premium: 2.17% per unit beta - Duration risk premium: 0.09% per year of duration (9 bps/year)

5.2.6 Step 5: Price New Asset

New Asset: BANTLEON fund with $\beta_E = 0.5$, $\beta_D = 3.0$

$$\mu_{new} = r_f + 0.5 \times 2.17\% + 3.0 \times 0.09\% = r_f + 1.36\%$$

Expected excess return: 1.36% (before adding risk-free rate)

5.3 Full BRISMA Portfolio Results

5.3.1 Implied Returns Summary (32 Assets)

Using $\lambda = 2.5$ and $\mathbf{Q}_{shrink}$:

Statistic Value
Mean implied return 1.8%
Median implied return 1.2%
Min implied return 0.0% (Cash)
Max implied return 5.2% (Emerging Markets)
Std dev of implied returns 1.4%

5.3.2 By Asset Class

Asset Class Avg $\mu^*$ Avg $\sigma$ Avg Sharpe
Equities 2.8% 18.5% 0.15
Bonds 0.9% 5.2% 0.17
Alternatives 1.6% 12.3% 0.13
Cash 0.0% 0.0% N/A

5.3.3 Sensitivity to $\lambda$

$\lambda$ $\mu^*_{S\&P500}$ $\mu^*_{EuroGovt}$ Portfolio $\mu_p$
1.0 0.86% 0.18% 0.72%
2.5 2.14% 0.46% 1.80%
5.0 4.28% 0.92% 3.60%
7.5 6.42% 1.38% 5.40%

Observation: Implied returns scale linearly with $\lambda$.

5.3.4 Comparison Across Covariance Matrices

Metric $\mathbf{Q}_{emp}$ $\mathbf{Q}_{shrink}$ $\mathbf{Q}_{garch}$
Avg $\mu^*$ 1.9% 1.8% 2.1%
Correlation 1.00 0.98 0.95
Max deviation - 0.3% 0.5%

Observation: Results are robust across estimation methods.

5.4 Python Code Reference

# File: python/examples/implied_returns_example.py

import numpy as np
import pandas as pd
from brisma import load_data
from brisma.inverse_optimization import inverse_optimize_mv

# Load data
data = load_data()
portfolio = data['tbl_client_portfolio']

# Get weights (normalize to sum to 1 if needed)
weights = portfolio['weight'].values
weights = weights / weights.sum()  # Optional normalization

# Load covariance matrix (from R outputs)
Q = np.load('outputs/Q_shrink.npy')  # Or load from R

# Set risk aversion
lambda_param = 2.5

# Compute implied returns
mu_star = inverse_optimize_mv(weights, Q, lambda_param)

# Display results
results = pd.DataFrame({
    'Asset': portfolio['name'],
    'Weight': weights,
    'Implied_Return': mu_star
})
print(results.sort_values('Implied_Return', ascending=False))

6. Validation and Quality Checks

6.1 Economic Sanity Checks

6.2 Statistical Validation

6.3 Backtesting


7. References

To be completed in Issue #50

Foundational Papers

  1. Black, F., & Litterman, R. (1992). "Global portfolio optimization." Financial Analysts Journal, 48(5), 28-43.

  2. Merton, R. C. (1980). "On estimating the expected return on the market: An exploratory investigation." Journal of Financial Economics, 8(4), 323-361.

  3. Ross, S. A. (1976). "The arbitrage theory of capital asset pricing." Journal of Economic Theory, 13(3), 341-360.

  4. Fama, E. F., & MacBeth, J. D. (1973). "Risk, return, and equilibrium: Empirical tests." Journal of Political Economy, 81(3), 607-636.

  5. Shanken, J. (1992). "On the estimation of beta-pricing models." Review of Financial Studies, 5(1), 1-33.

Extensions

  1. He, G., & Litterman, R. (1999). "The intuition behind Black-Litterman model portfolios." Goldman Sachs Investment Management Research.

  2. Idzorek, T. (2007). "A step-by-step guide to the Black-Litterman model." Forecasting Expected Returns in the Financial Markets, 17-38.

  3. Fama, E. F., & French, K. R. (1993). "Common risk factors in the returns on stocks and bonds." Journal of Financial Economics, 33(1), 3-56.


Appendices

Appendix A: Matrix Calculus Review

Completed in Issue #50

A.1 Notation Conventions

Symbol Meaning
$\mathbf{x}$ Column vector ($n \times 1$)
$\mathbf{A}$ Matrix ($m \times n$)
$\mathbf{A}'$ or $\mathbf{A}^T$ Transpose
$\mathbf{A}^{-1}$ Inverse (if exists)
$\text{tr}(\mathbf{A})$ Trace (sum of diagonal)
$|\mathbf{x}|$ Euclidean norm

A.2 Gradient of Scalar Functions

Definition: For $f: \mathbb{R}^n \to \mathbb{R}$, the gradient is:

$$\nabla_{\mathbf{x}} f = \frac{\partial f}{\partial \mathbf{x}} = \begin{pmatrix} \frac{\partial f}{\partial x_1} \ \vdots \ \frac{\partial f}{\partial x_n} \end{pmatrix}$$

A.3 Key Derivative Rules

Function $f(\mathbf{x})$ Gradient $\nabla_{\mathbf{x}} f$ Notes
$\mathbf{a}'\mathbf{x}$ $\mathbf{a}$ Linear form
$\mathbf{x}'\mathbf{a}$ $\mathbf{a}$ Same as above
$\mathbf{x}'\mathbf{A}\mathbf{x}$ $(\mathbf{A} + \mathbf{A}')\mathbf{x}$ Quadratic form
$\mathbf{x}'\mathbf{A}\mathbf{x}$ $2\mathbf{A}\mathbf{x}$ If $\mathbf{A}$ symmetric
$\mathbf{x}'\mathbf{x}$ $2\mathbf{x}$ Special case: $\mathbf{A} = \mathbf{I}$
$|\mathbf{A}\mathbf{x} - \mathbf{b}|^2$ $2\mathbf{A}'(\mathbf{A}\mathbf{x} - \mathbf{b})$ Least squares

A.4 Hessian Matrix

For $f: \mathbb{R}^n \to \mathbb{R}$, the Hessian is:

$$\mathbf{H} = \nabla^2_{\mathbf{x}} f = \begin{pmatrix} \frac{\partial^2 f}{\partial x_1^2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \ \vdots & \ddots & \vdots \ \frac{\partial^2 f}{\partial x_n \partial x_1} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{pmatrix}$$

Function Hessian
$\mathbf{x}'\mathbf{A}\mathbf{x}$ $\mathbf{A} + \mathbf{A}'$
$\mathbf{x}'\mathbf{A}\mathbf{x}$ (sym) $2\mathbf{A}$

A.5 Chain Rule

For $f(\mathbf{g}(\mathbf{x}))$:

$$\frac{\partial f}{\partial \mathbf{x}} = \frac{\partial \mathbf{g}}{\partial \mathbf{x}}' \frac{\partial f}{\partial \mathbf{g}}$$

A.6 Product Rule

For $f(\mathbf{x}) = \mathbf{u}(\mathbf{x})'\mathbf{v}(\mathbf{x})$:

$$\nabla_{\mathbf{x}} f = \frac{\partial \mathbf{u}}{\partial \mathbf{x}}'\mathbf{v} + \frac{\partial \mathbf{v}}{\partial \mathbf{x}}'\mathbf{u}$$


Appendix B: Complete Derivations

Completed in Issue #50

B.1 Mean-Variance Inverse Optimization (Detailed)

Problem: Find $\boldsymbol{\mu}$ such that $\mathbf{w}$ is optimal for:

$$\max_{\mathbf{w}} U(\mathbf{w}) = \mathbf{w}'\boldsymbol{\mu} - \frac{\lambda}{2}\mathbf{w}'\mathbf{Q}\mathbf{w}$$

Step 1: Compute gradient

Using rules from Appendix A: - $\nabla_{\mathbf{w}}(\mathbf{w}'\boldsymbol{\mu}) = \boldsymbol{\mu}$ - $\nabla_{\mathbf{w}}(\mathbf{w}'\mathbf{Q}\mathbf{w}) = 2\mathbf{Q}\mathbf{w}$ (since $\mathbf{Q}$ symmetric)

Therefore: $$\nabla_{\mathbf{w}} U = \boldsymbol{\mu} - \lambda\mathbf{Q}\mathbf{w}$$

Step 2: Set first-order condition

At optimum: $$\nabla_{\mathbf{w}} U = \mathbf{0}$$ $$\boldsymbol{\mu} - \lambda\mathbf{Q}\mathbf{w} = \mathbf{0}$$

Step 3: Solve for $\boldsymbol{\mu}$

$$\boldsymbol{\mu}^* = \lambda\mathbf{Q}\mathbf{w}$$

Step 4: Verify second-order condition

$$\nabla^2_{\mathbf{w}} U = -\lambda\mathbf{Q}$$

For maximum, need $-\lambda\mathbf{Q} \prec 0$ (negative definite). Since $\lambda > 0$ and $\mathbf{Q} \succ 0$ (positive definite), this holds. $\blacksquare$


B.2 Constrained Case with Budget Constraint

Problem: Maximize utility subject to $\mathbf{1}'\mathbf{w} = 1$

Lagrangian: $$\mathcal{L}(\mathbf{w}, \gamma) = \mathbf{w}'\boldsymbol{\mu} - \frac{\lambda}{2}\mathbf{w}'\mathbf{Q}\mathbf{w} - \gamma(\mathbf{1}'\mathbf{w} - 1)$$

KKT Conditions:

  1. Stationarity: $\frac{\partial \mathcal{L}}{\partial \mathbf{w}} = \boldsymbol{\mu} - \lambda\mathbf{Q}\mathbf{w} - \gamma\mathbf{1} = \mathbf{0}$
  2. Primal feasibility: $\mathbf{1}'\mathbf{w} = 1$

From (1): $$\boldsymbol{\mu} = \lambda\mathbf{Q}\mathbf{w} + \gamma\mathbf{1}$$

To find $\gamma$: Pre-multiply by $\mathbf{1}'\mathbf{Q}^{-1}$: $$\mathbf{1}'\mathbf{Q}^{-1}\boldsymbol{\mu} = \lambda\mathbf{1}'\mathbf{w} + \gamma\mathbf{1}'\mathbf{Q}^{-1}\mathbf{1}$$

Using $\mathbf{1}'\mathbf{w} = 1$: $$\gamma = \frac{\mathbf{1}'\mathbf{Q}^{-1}\boldsymbol{\mu} - \lambda}{\mathbf{1}'\mathbf{Q}^{-1}\mathbf{1}}$$

Interpretation: $\gamma$ represents the risk-free rate or zero-beta return. $\blacksquare$


B.3 OLS Factor Premia Derivation

Problem: Minimize $|\boldsymbol{\mu}^* - r_f\mathbf{1} - \mathbf{B}\boldsymbol{\pi}|^2$

Step 1: Expand objective

Let $\mathbf{y} = \boldsymbol{\mu}^* - r_f\mathbf{1}$ (excess returns)

$$J(\boldsymbol{\pi}) = (\mathbf{y} - \mathbf{B}\boldsymbol{\pi})'(\mathbf{y} - \mathbf{B}\boldsymbol{\pi})$$ $$= \mathbf{y}'\mathbf{y} - 2\boldsymbol{\pi}'\mathbf{B}'\mathbf{y} + \boldsymbol{\pi}'\mathbf{B}'\mathbf{B}\boldsymbol{\pi}$$

Step 2: Take gradient

$$\nabla_{\boldsymbol{\pi}} J = -2\mathbf{B}'\mathbf{y} + 2\mathbf{B}'\mathbf{B}\boldsymbol{\pi}$$

Step 3: Set to zero and solve

$$-2\mathbf{B}'\mathbf{y} + 2\mathbf{B}'\mathbf{B}\boldsymbol{\pi} = \mathbf{0}$$ $$\mathbf{B}'\mathbf{B}\boldsymbol{\pi} = \mathbf{B}'\mathbf{y}$$ $$\hat{\boldsymbol{\pi}} = (\mathbf{B}'\mathbf{B})^{-1}\mathbf{B}'\mathbf{y}$$

Substituting back: $$\hat{\boldsymbol{\pi}} = (\mathbf{B}'\mathbf{B})^{-1}\mathbf{B}'(\boldsymbol{\mu}^* - r_f\mathbf{1}) \quad \blacksquare$$


B.4 Shanken Correction Derivation

Setup: In Fama-MacBeth, betas are estimated with error: $$\hat{\beta}_i = \beta_i + u_i$$

Problem: Standard OLS ignores $\text{Var}(u_i)$, understating $\text{Var}(\hat{\boldsymbol{\pi}})$

Shanken (1992) shows:

$$\text{Var}(\hat{\boldsymbol{\pi}}){true} = \left(1 + \boldsymbol{\pi}'\boldsymbol{\Sigma}_f^{-1}\boldsymbol{\pi}\right) \cdot \text{Var}(\hat{\boldsymbol{\pi}}){OLS} + \boldsymbol{\Sigma}_{\pi}$$

where: - $\boldsymbol{\Sigma}f$ = factor covariance matrix - $\boldsymbol{\Sigma}{\pi}$ = asymptotic variance correction (often small)

Simplified correction (ignoring $\boldsymbol{\Sigma}_{\pi}$):

$$c = 1 + \hat{\boldsymbol{\pi}}'\hat{\boldsymbol{\Sigma}}_f^{-1}\hat{\boldsymbol{\pi}}$$

$$SE(\hat{\pi}j){corrected} = \sqrt{c} \cdot SE(\hat{\pi}j){OLS}$$

Intuition: The correction factor $c$ is larger when: - Factor premia are large ($\boldsymbol{\pi}$ big) - Factor variances are small ($\boldsymbol{\Sigma}_f^{-1}$ big)

This makes sense: if premia are large and factors are stable, any error in beta estimates has big impact on premia estimates. $\blacksquare$


B.5 Lambda Extraction from Observed Returns

Given: Observed returns $\tilde{\boldsymbol{\mu}}$, weights $\mathbf{w}$, covariance $\mathbf{Q}$

Problem: Find $\lambda$ such that $\tilde{\boldsymbol{\mu}} = \lambda\mathbf{Q}\mathbf{w}$

Method: Project onto portfolio return

Pre-multiply both sides by $\mathbf{w}'$: $$\mathbf{w}'\tilde{\boldsymbol{\mu}} = \lambda\mathbf{w}'\mathbf{Q}\mathbf{w}$$

Note: - $\mathbf{w}'\tilde{\boldsymbol{\mu}} = \mu_p$ (expected portfolio return) - $\mathbf{w}'\mathbf{Q}\mathbf{w} = \sigma_p^2$ (portfolio variance)

Therefore: $$\lambda^* = \frac{\mu_p}{\sigma_p^2}$$

Economic interpretation: $\lambda$ is the Sharpe ratio divided by portfolio volatility: $$\lambda = \frac{\mu_p}{\sigma_p^2} = \frac{\mu_p/\sigma_p}{\sigma_p} = \frac{SR_p}{\sigma_p} \quad \blacksquare$$


Appendix C: Python Implementation Reference

# python/brisma/inverse_optimization.py

def inverse_optimize_mv(weights: np.ndarray,
                        cov_matrix: np.ndarray,
                        lambda_param: float) -> np.ndarray:
    """
    Mean-Variance inverse optimization.

    Parameters
    ----------
    weights : np.ndarray
        Portfolio weights (n,)
    cov_matrix : np.ndarray
        Covariance matrix (n, n)
    lambda_param : float
        Risk aversion parameter

    Returns
    -------
    np.ndarray
        Implied expected returns (n,)
    """
    return lambda_param * cov_matrix @ weights

Document History

Date Version Author Changes
2025-12-25 1.0 Claude Issue #48: Asset-level implied returns
2025-12-25 1.1 Claude Issue #49: Factor-based implied risk premia
2025-12-25 1.2 Claude Issue #50: Appendix A (Matrix calculus), Appendix B (5 derivations)
2025-12-25 1.3 Claude Issue #51: Worked example with BRISMA data (32 assets, 4-asset demo)