risk_contributionΒΆ

Defined in fynance.portfolio.attribution

risk_contribution(w, sigma, pct=True)[source]

Risk contribution of each asset to portfolio variance.

Absolute risk contribution: \(RC_i = w_i \cdot MR_i\), where \(MR_i\) is the marginal risk. When \(pct=True\), normalize by portfolio volatility so contributions sum to 1 (percentage).

Parameters:
warray_like

Portfolio weights, shape (N,) or (N, 1).

sigmaarray_like

Symmetric (N, N) covariance matrix.

pctbool, optional

If True (default), return percentage contributions that sum to 1. If False, return absolute contributions that sum to portfolio volatility.

Returns:
np.ndarray

Risk contribution per asset, shape (N,). If portfolio volatility is zero, returns zeros.

Examples

>>> import numpy as np
>>> w = np.array([0.5, 0.5])
>>> sigma = np.array([[0.04, 0.0], [0.0, 0.01]])
>>> rc_pct = risk_contribution(w, sigma, pct=True)
>>> np.allclose(rc_pct, [0.8, 0.2])
True