Skip to content

Commit

Permalink
add CVaR, long time no writing
Browse files Browse the repository at this point in the history
  • Loading branch information
Ye Yuan committed Oct 15, 2023
1 parent b7b576e commit 381032f
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 1 deletion.
113 changes: 113 additions & 0 deletions docs/trading/portfolio/CVaR.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Portfolio Optimization with CVaR

我们已经在上一篇文章中介绍了 Markowitz 经典的用 variance 作为风险测度的不足:

1. 使用 variance 同时惩罚了下跌和上涨,但是我们实际只需要惩罚下跌的情况
2. 对参数( 预期收益 $r$ 以及 risk matrix $\Sigma$ ) 非常敏感

因此,JP Morgan 提出了 VaR (Value at Risk),定义为 __maximum loss with a specified confidence level__,在指定概率 $\alpha$ (say, 0.95) 下损失 $\xi$ 的最大值:

$$ \text{VaR}_{\alpha} = \inf \{ \xi_0 : P(\xi \leq \xi_0) \leq \alpha \} $$

($\inf$ 指下界)。

这个衡量标准并未考虑当损失大于 $\xi_0$ 时的情况,并且,它是一个非凸函数,数学上不方便求解。作为其改进,CVaR 考虑了 $\xi$ 大于 VaR 的情况,并且是一个凸优化问题。

![CVaR and VaR](images/CVaR.png)

理论上,CVaR 是一个更理想的风险衡量标准。

## 1 Minimize CVaR Approach

我们以最小化 CVaR 为例讲解如何求这个优化问题:

$$\begin{align}
\mathop{\arg \min}_{\mathbf{w}} & & \text{CVaR}_{\alpha} (\mathbf{w}^T \mathbf{r}) \\
\text{s.t.} & & \mathbf{1}^T \mathbf{w} = 1 \\
\end{align}$$

其中:

$$ \text{CVaR}_{\alpha} (\mathbf{w}^T \mathbf{r}) =
E[\mathbf{w}^T \mathbf{r} | \mathbf{w}^T \mathbf{r} \leq \text{VaR}_{\alpha} (\mathbf{w}^T \mathbf{r})] $$

当然,我们也可以简单将其扩展为其他形式,例如将目标函数改成:

$$ \mathop{\arg \max}_{\mathbf{w}} ~~~~ \mathbf{w}^T \mathbf{r} - \lambda \text{CVaR}_{\alpha} (\mathbf{w}^T \mathbf{r}) $$

这样可以通过调节参数 $\lambda$ 控制风险偏好,不过这里暂时先讲最小化 CVaR 场景。

### 1.1 Auxiliary Function

首先我们引入辅助函数:

$$ \begin{align}
F_{\alpha} (\mathbf{w}, \zeta) &= \zeta + \frac{1}{1 - \alpha} E[(-\mathbf{w}^T \mathbf{r} - \zeta)]^{+} \\
&= \zeta + \frac{1}{1 - \alpha} \int\limits_{-\mathbf{w}^T \mathbf{r} > \zeta} (-\mathbf{w}^T \mathbf{r} - \zeta) P(\mathbf{r}) d\mathbf{r}
\end{align} $$

这是一个 __连续可导的凸函数__,其中 $[x]^{+} = \max(x, 0)$。

对 $\zeta$ 求导,并另导数为 0 以获得极值:

$$ \begin{align}
0 &= \frac{\partial F}{\partial \zeta} \\
&= 1 - \frac{1}{1 - \alpha} \int\limits_{-\mathbf{w}^T \mathbf{r} > \zeta} P(\mathbf{r}) d\mathbf{r} \\
&= 1 - \frac{1}{1 - \alpha} \text{CDF}(\mathbf{r})
\end{align} $$

即:

$$ \text{CDF}(\mathbf{r}) = P(-\mathbf{w}^T \mathbf{r} > \zeta) = 1 - \alpha $$

那么显然有在辅助函数取极值时,$\zeta = \text{VaR}_{\alpha} (-\mathbf{w}^T \mathbf{r})$。

这个辅助函数的妙处在于:

1. 它是一个连续可导的凸函数,求解方便。
2. 在它取得极值时, VaR 和 CVaR 也自然得出:

$$ \text{VaR}_{\alpha} (-\mathbf{w}^T \mathbf{r}) = \zeta^{*} $$

$$ \text{CVaR}_{\alpha} (-\mathbf{w}^T \mathbf{r}) = \min_{\zeta} F_{\alpha} (\mathbf{w}, \zeta) $$

因此,原本的 minimize CVaR 的问题转化为 minimize 这个辅助函数的问题。

### 1.2 Optimize The Auxiliary Function

由于这个“期望”的存在,优化该辅助函数是一个随机优化问题。我们可以通过采样获取其期望的估计。值得注意的是,这里的采样是对于历史回报率的采样。

假设我们对回报率 $r$ 采样了 T 个样本:

$$\begin{align}
F_{\alpha} (\mathbf{w}, \zeta) &= \zeta + + \frac{1}{1 - \alpha} E[(-\mathbf{w}^T \mathbf{r} - \zeta)]^{+} \\
&\approx \zeta + \frac{1}{1 - \alpha} \sum_{t=1}^T [(-\mathbf{w}^T \mathbf{r}_t - \zeta)]^{+}
\end{align}$$

引入辅助变量:

$$ z_t \geq [-\mathbf{w}^T \mathbf{r}_t - \zeta]^{+} $$

优化问题转化为:

$$\begin{align}
\mathop{\arg \min}_{\mathbf{w}, z_t, \zeta } & & \zeta + \frac{1}{T(1-\alpha)} \sum_{t=1}^T z_t \\
\text{s.t.} & & \mathbf{1}^T \mathbf{w} = 1 \\
& & z_t \geq 0 \\
& & z_t \geq -\mathbf{w}^T \mathbf{r}_t - \zeta
\end{align}$$

这是一个典型的线性优化问题,可以通过工具包求解。肉眼可以看出,这个优化问题的 __约束条件与采样个数成正比__。因此,计算量可能是一个不可忽略的隐患,在实际生产中值得注意。

### 1.3 Application Example

Mosek 是一款专业的商用优化求解器。它提供了一个 CVaR 优化的[例子](https://github.com/MOSEK/PortfolioOptimization/blob/main/python/notebooks/ch8_cvar_risk_measure.ipynb)

该例子中值得注意的部分是:

1. 我们首先用历史数据拟合出多个股票的回报率均值和协方差矩阵,再用这个两个值随机生成 T 个样本,而非直接使用历史数据作为样本。
2. 在实际交易中,我们一般有一个预测的回报率 r,它并不作为样本的一部分。

## Reference

1. [CVaR Portfolio Slides](https://palomar.home.ece.ust.hk/MAFS6010R_lectures/slides_CVaR_portfolio.html)
2 changes: 1 addition & 1 deletion docs/trading/portfolio/MarkowitzPO.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ $$\mathbf{w}_{\text{SR}} = \dfrac{\mathbf{\Sigma}^{-1}(\mathbf{\mu} - r_f \mathb

CVaR 是 VaR 的 __条件期望值__,即加权平均值。如下图所示:

![VaR and CVaR](images/VaR_and_CVaR.png)
![VaR and CVaR](images/CVaR.png)

VaR 并不是一个 coherent risk measure,但是 CVaR 是,并且还能转化为凸优化问题。因此,得益于其良好的数学特性,CVaR 得到了广泛的实际应用。

Expand Down
Binary file added docs/trading/portfolio/images/CVaR.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/trading/portfolio/images/VaR_and_CVaR.png
Binary file not shown.

0 comments on commit 381032f

Please sign in to comment.