Skip to content

Portfolio Optimization with CVaR

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

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

因此,JP Morgan 提出了 VaR (Value at Risk),定义为 maximum loss with a specified confidence level,在指定概率 α (say, 0.95) 下损失 ξ 的最大值:

VaRα=inf{ξ0:P(ξξ0)α}

(inf 指下界)。

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

CVaR and VaR

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

1 Minimize CVaR Approach

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

argminwCVaRα(wTr)s.t.1Tw=1

其中:

CVaRα(wTr)=E[wTr|wTrVaRα(wTr)]

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

argmaxw    wTrλCVaRα(wTr)

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

1.1 Auxiliary Function

首先我们引入辅助函数:

Fα(w,ζ)=ζ+11αE[(wTrζ)]+=ζ+11αwTr>ζ(wTrζ)P(r)dr

这是一个 连续可导的凸函数,其中 [x]+=max(x,0)

ζ 求导,并另导数为 0 以获得极值:

0=Fζ=111αwTr>ζP(r)dr=111αCDF(r)

即:

CDF(r)=P(wTr>ζ)=1α

那么显然有在辅助函数取极值时,ζ=VaRα(wTr)

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

  1. 它是一个连续可导的凸函数,求解方便。
  2. 在它取得极值时, VaR 和 CVaR 也自然得出:
VaRα(wTr)=ζ
CVaRα(wTr)=minζFα(w,ζ)

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

1.2 Optimize The Auxiliary Function

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

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

Fα(w,ζ)=ζ++11αE[(wTrζ)]+ζ+11αt=1T[(wTrtζ)]+

引入辅助变量:

zt[wTrtζ]+

优化问题转化为:

argminw,z,ζζ+1T(1α)t=1Tzts.t.1Tw=1zt0ztwTrtζ,  for    t=1,2,,T

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

1.3 Application Example

Mosek 是一款专业的商用优化求解器。它提供了一个 CVaR 优化的例子

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

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

Reference

  1. CVaR Portfolio Slides