Equal Risk Contribution Portfolios
Equal risk contribution (ERC) portfolios allocate capital so each asset contributes the same amount to total portfolio volatility. This is the core mathematical form of asset-level risk parity. It avoids expected-return forecasts, but it does not avoid assumptions: correlation estimates, long-only constraints, leverage policy, and asset universe selection all remain decisive.
For covariance Σ, portfolio volatility is σp = sqrt(w'Σw). Marginal contribution is (Σw)i / σ_p; component contribution is:
RC_i = w_i (Σw)_i / σ_p
Σ RC_i = σ_p
ERC seeks RCi = σp/N for all assets. See risk parity explained for the broader portfolio-level intuition.
Inverse volatility is only a special case
If assets are uncorrelated, equal weights in risk imply wi ∝ 1/σi. With correlations, inverse-vol weights do not equalize contributions. Highly correlated assets can each appear modest independently while jointly dominate portfolio risk.
| Method | Inputs | Correlations handled? |
|---|---|---|
| equal weight | none | no |
| inverse volatility | diagonal variances | no |
| ERC | full covariance | yes |
| factor risk budget | factor model | yes, by factor |
Convex long-only formulation
For positive risk budgets b_i, solve:
min_w ½ w'Σw − τ Σ b_i log(w_i)
s.t. w_i > 0
The solution has component risks proportional to bi; then rescale to the desired volatility. A log barrier both enforces positive holdings and produces the risk-budget condition. For equal contribution, use bi = 1/N.
import cvxpy as cp
import numpy as np
def erc_direction(cov, tau=1.0):
n = cov.shape[0]
w = cp.Variable(n, pos=True)
objective = 0.5 * cp.quad_form(w, cov) - tau * cp.sum(cp.log(w)) / n
cp.Problem(cp.Minimize(objective)).solve()
direction = w.value
return direction / direction.sum()
def risk_contributions(w, cov):
vol = np.sqrt(w @ cov @ w)
return w * (cov @ w) / vol
Check that cov is positive semidefinite. A noisy empirical covariance can make contributions unstable; use covariance shrinkage or a factor model before treating tiny differences as meaningful.
Asset versus factor parity
Asset-level ERC can still load heavily on one economic risk. Four equity ETFs in different wrappers can each receive equal risk while the portfolio is almost entirely equity beta. For multi-asset books, inspect factor contributions: equity, duration, credit, inflation, liquidity, and currency. Constrain or budget those factors directly when the mandate demands it.
| Implementation question | Practical response |
|---|---|
| volatile asset gets tiny capital | use leverage only with explicit financing limits |
| correlations jump | target conservative volatility and stress correlations |
| asset is illiquid | impose capacity and turnover constraints |
| cash is available | decide whether it is a sleeve or financing residual |
ERC has a natural pro-cyclical tendency: it reduces capital after volatility rises and adds after volatility falls. Volatility estimators should be responsive enough for risk control but not so reactive that they force trading in temporary noise. Apply cost-aware optimization or rebalance bands.
Evaluation
Evaluate risk contributions through time, not only on the rebalance date. Report realized risk, factor exposure, drawdown, leverage, and turnover. Compare against inverse-volatility, equal-weight, and hierarchical risk parity on the same investable universe. ERC is a disciplined allocation rule, not proof that all asset premia are equally attractive.
When risk budgets are deliberately unequal, disclose them as active views. A 40/20/20/20 factor allocation may be sensible, but calling it neutral risk parity conceals the mandate's economic preference and makes later performance attribution less useful.
Use the same return horizon for covariance estimation, leverage scaling, and the rebalancing decision. Mixing daily covariance with monthly implementation can create risk-contribution precision that cannot exist at the actual trade frequency.
Align all risk measurements to the holding period.
Key takeaways
- ERC equalizes component volatility contributions using the full covariance matrix.
- Inverse-volatility weighting is ERC only when correlations are zero.
- Stable covariance estimates and factor-level diagnostics are essential.
- Leverage, liquidity, and turnover policy determine the live portfolio as much as the ERC solver.
