Risk budget allocation.#
Suppose an amount \(x_i>0\) is invested in \(n\) assets, labeled \(i=1,..., n\), with asset return covariance matrix \(\Sigma \in \mathcal{S}_{++}^n\). We define the risk of the investments as the standard deviation of the total return, \(R(x) = (x^T\Sigma x)^{1/2}\).
We define the (relative) risk contribution of asset \(i\) (in the portfolio \(x\)) as
Thus \(\rho_i\) gives the fractional increase in risk per fractional increase in investment \(i\). We can express the risk contributions as
from which we see that \(\sum_{i=1}^n \rho_i = 1\). For general \(x\), we can have \(\rho_i <0\), which means that a small increase in investment \(i\) decreases the risk. Desirable investment choices have \(\rho_i>0\), in which case we can interpret \(\rho_i\) as the fraction of the total risk contributed by the investment in asset \(i\). Note that the risk contributions are homogeneous of degree zero, i.e., scaling \(x\) by a positive constant does not affect \(\rho_i\).
In the risk budget allocation problem, we are given \(\Sigma\) and a set of desired risk contributions \(\rho_i^\mathrm{des}>0\) with \(\bf{1}^T \rho^\mathrm{des}=1\); the goal is to find an investment mix \(x\succ 0\), \(\bf{1}^Tx =1\), with these risk contributions. When \(\rho^\mathrm{des} = (1/n)\bf{1}\), the problem is to find an investment mix that achieves so-called risk parity.
(a)#
Explain how to solve the risk budget allocation problem using convex optimization.
Hint. Minimize \((1/2)x^T\Sigma x - \sum_{i=1}^n \rho_i^\mathrm{des} \log x_i\).
(b)#
Find the investment mix that achieves risk parity for the return covariance matrix \(\Sigma\) below.
import numpy as np
import cvxpy as cp
Sigma = np.array(
np.matrix(
"""6.1 2.9 -0.8 0.1;
2.9 4.3 -0.3 0.9;
-0.8 -0.3 1.2 -0.7;
0.1 0.9 -0.7 2.3"""
)
)
rho = np.ones(4) / 4
# TODO: your code here