稳健组合优化,Goldfarb-Iyengar 路线
Goldfarb & Iyengar (2003) 稳健组合优化。把输入视为不确定的,优化最坏情形。盒式与椭球不确定集。数学与实践。
我们已经花了四篇文章讨论处理 MVO 中估计误差的方法:收缩、重采样、稳健优化、Black-Litterman。本文专门讲稳健优化,即 max-min 框架,其中你把 视为不确定的并优化最坏情形。
稳健优化与其他方法有不同的味道。收缩把估计向结构化目标拉。重采样对 bootstrap 噪声取平均。Black-Litterman 通过贝叶斯推断更新估计。稳健优化的逻辑是:我不知道真实情况,但我知道哪些是合理的,我会为最坏合理情形做优化。
经典文献是 Goldfarb & Iyengar (2003) 的 “Robust Portfolio Selection Problems”。本文涵盖他们的框架: 的因子模型、盒式与椭球不确定集,以及相应的稳健 MVO 公式。
问题设定
标准 MVO 是:
其中 是已知输入。稳健 MVO 用不确定集 替换 :
这是一个 max-min 问题。你(投资者)希望最小化最坏情形方差。自然(在 上)希望最大化方差并在 上最小化收益(以违反你的收益约束)。
稳健对偶问题就是你要求解的问题。它仍然是凸规划(对合适的 选择),所以你得到全局最优和高效计算。
为什么因子模型有帮助
完整协方差矩阵 有 个自由参数。对 个资产,那是 5,050 个参数。从数据中估计它们基本无望。
因子模型大幅减少参数。标准 因子模型:
其中 是资产收益, 是因子载荷, 是因子收益, 是特异噪声。协方差为:
其中 是因子协方差矩阵, 是特异方差的对角矩阵。
这把参数从 减到 。对 个因子、,那是 525 个参数。可处理得多。
Goldfarb & Iyengar (2003) 以因子模型为出发点。他们假设你有估计 ,并围绕每个构建不确定集。
盒式不确定
最简单的方案:每个参数可以在一个盒内独立变化。
对因子载荷:
对因子协方差:
对特异方差:
这些都不简单。 是迹被常数约束的 PSD 矩阵集合。 允许特异方差大于估计(但不能更小)。
这些集合下的稳健 MVO 变成二阶锥规划(SOCP)。可以在多项式时间内求解。
椭球不确定
更结构化的方案:每个参数位于围绕其估计的椭球内。
对因子载荷:
这表示偏差的 Frobenius 范数被约束。在某些方向上比盒式更保守,在另一些方向上更宽松。
对因子协方差:
其中 是 对称矩阵空间中的椭球。椭球不确定下的稳健对偶问题仍是 SOCP。
稳健对偶问题
在所有参数的椭球不确定下,稳健 MVO 变为:
这是草图。精确形式取决于你选择哪个不确定集。但结构是:每个不确定集对应辅助变量 , 中的二次目标,以及 SOC 约束。
用任何 SOCP 求解器求解:cvxpy、Mosek、Gurobi。现代求解器对中等 在毫秒级处理完毕。
与收缩的关系
Tütüncü & Koenig (2004) 给出了一个漂亮的结果:对 的椭球不确定下的稳健 MVO 等价于对”稳健化”协方差矩阵的 MVO:
其中 取决于不确定集的大小。这正是向 的 Ledoit-Wolf 收缩。
所以对一种特定的不确定集,稳健优化在数学上等价于收缩。稳健框架的优势在于它给了你一个有原则的方式来选择 ,取决于你对 估计的不信任程度,而非某种不透明的 MSE 优化。
实践中,这意味着:如果你采用对椭球 不确定的稳健 MVO,你就在做接近 Ledoit-Wolf 收缩的事情。稳健框架帮助你校准收缩强度。
对更复杂的不确定集(盒式、混合),稳健优化能给出与收缩不同的组合。差异通常不大。
带椭球 不确定的稳健 MVO
具体设置。假设你有估计 和一个椭球不确定集:
稳健 MVO 是:
内层 max 是一个凸问题。其解为:
所以稳健对偶问题为:
这是带 L2 正则化的标准 MVO 问题。闭式解(无不允许做空):
漂亮。对椭球 不确定的稳健最优,就是对收缩后协方差 计算的标准 GMV 组合。
代码层面:
import numpy as np
Sigma = ... # Sample covariance
delta = 0.01 # Robustness parameter
Sigma_robust = Sigma + delta * np.eye(len(Sigma))
Sigma_inv = np.linalg.inv(Sigma_robust)
ones = np.ones(len(Sigma))
w_robust = Sigma_inv @ ones / (ones @ Sigma_inv @ ones)
相比标准 MVO,只是两行有意义的修改。加对角项,求逆,归一化。
带收益不确定的稳健 MVO
现在假设你还有 的不确定:
带收益和协方差双重不确定的稳健 MVO:
内层问题有闭式解。稳健对偶问题为:
等等,这给出了一个非凸目标(减去范数)。让我重新来。
带双重不确定的标准稳健公式:
这是 SOCP:二次目标,二阶锥约束。用标准工具可解。
如何选择不确定集
稳健优化最困难的部分是选择 (对 )和 (对 )。一些方法。
方法 1:统计估计。 把 设为 的置信界。这需要对 抽样分布的假设。在高斯收益和因子结构下,你可以推导解析置信界。
方法 2:敏感性分析。 把 设为这样的值:对 的 10% 扰动不会使最优组合变化超过 5%。这是经验性的,取决于具体问题。
方法 3:交叉验证。 对一组 值跑优化,选择样本外 Sharpe 最佳的。标准但数据饥渴。
方法 4:通过构造保证稳健。 选择 以达到目标最坏情形波动率。如果你想要组合在最坏情形 下最多 12% 波动率,就相应设置 。
这些都不完美。实践中,大多数从业者使用方法 2 或 3,在宽范围内取中间值。
实际问题
三个要了解的问题。
问题 1:保守性。 稳健优化产生的组合是保守的,因为它们对冲可能不会发生的最坏情形。这意味着预期收益更低。如果你的不确定集太大,稳健性的代价会很大。
问题 2:范数选择。 盒式不确定使用 L_infinity(每个参数最大偏差)。椭球不确定使用 L_2(Frobenius)。不同范数给出不同组合。理论上没有特权选择。
问题 3:计算成本。 带因子模型的稳健 MVO 仍是 SOCP。对 、,这可能很慢。现代求解器能处理,但并非免费。
尽管如此,稳健优化仍在几家大型资产管理人生产环境中使用。它的主要吸引力是有原则的不确定性处理:你说明你不知道什么,优化器对冲它。
稳健优化 vs. 重采样
两者都处理输入不确定,但方式不同。
重采样:采样多个输入,逐个优化,求平均。这给出一个在 bootstrap 样本上平均表现良好的组合。
稳健优化:在不确定集上优化最坏情形。这给出一个在最坏合理情景下也不出问题的组合。
两者给出不同组合。重采样偏好”中间”表现良好的组合。稳健优化偏好”不好情景下也不爆”的组合。
对多数机构应用,稳健优化比重采样更保守。一些机构同时跑两者并混合。
文献综述
- Goldfarb & Iyengar (2003). “Robust Portfolio Selection Problems.” Mathematics of Operations Research 28(1): 1-21. 经典文献。
- Tütüncü & Koenig (2004). “Robust Asset Allocation.” Annals of Operations Research 132(1-4): 157-187. 与收缩的等价性。
- Lobo, Vandenberghe, Boyd & Lebret (1998). “Applications of Second-Order Cone Programming.” Linear Algebra and its Applications 284(1-3): 193-228. SOCP 背景。
- Ben-Tal & Nemirovski (1998). “Robust Convex Optimization.” Mathematics of Operations Research 23(4): 769-805. 稳健优化基础。
- Bertsimas & Sim (2004). “The Price of Robustness.” Operations Research 52(1): 35-53. 稳健性的代价。
- El Ghaoui, Oks & Oustry (2003). “Worst-Case Value-At-Risk and Robust Portfolio Optimization: A Conic Programming Approach.” Operations Research 51(4): 543-556.
- Fabozzi, Huang & Zhou (2010). “Robust Portfolios: Recent Contributions from Operations Research and Finance.” Journal of Portfolio Management 36(3): 89-98. 综述。
SOCP 公式详解
对因子载荷的盒式不确定下的稳健 MVO,公式是一个二阶锥规划(SOCP)。让我们推导它。
设置:因子模型 , 在盒 内不确定, 固定, 固定。
稳健组合方差:
对固定的 ,关于 的内层 max 是在盒上对二次函数取最大。最大值在盒的顶点处取到(每个项取 )。
对每个项 ,它对 的贡献既通过 线性又通过 二次地依赖 。最大值一般不在顶点;它是 SOCP。
重述使用辅助变量和 SOC 约束。标准形式:
受 SOC 约束:
其中 由 、 和盒式约束构造。
实践中,你不会手工写这个。你会使用 cvxpy 或 yalmip 这样的建模语言。求解器处理 SOCP 结构。
因子模型的联系
稳健优化在结合因子模型时最为有用。完整 的参数太多无法估计。因子结构把参数减到 。
因子模型也使不确定建模可处理。你把不确定放在因子载荷( 矩阵)、因子协方差()和特异方差()上。每一项都比完整协方差小。
Goldfarb & Iyengar (2003) 为每种不确定集组合推导了 SOCP。结果是一个对所有三部分的估计误差都稳健的组合。
生产中:大多数稳健 MVO 实现使用因子模型。例如 Axioma 的风险模型就有带关联不确定估计的因子载荷。
保守性权衡
稳健优化产生保守组合。Bertsimas & Sim (2004) 形式化的”稳健性代价”量化了这一点。
对带不确定预算 的稳健组合,稳健性代价是名义最优(无不确定)与稳健最优之间的差距。对小 ,差距小。对大 ,差距可以很大。
经验上,带合理不确定集的稳健 MVO 相对名义 MVO 给出 20-50 个基点的年化收益拖累。这就是对冲最坏情形的代价。
这是否值得取决于应用。对有负债驱动授权的养老金,保守性有价值。对激进的對冲基金,太多了。
稳健 CVaR
一种自然的组合:以 CVaR 作为风险度量的稳健优化。公式:
CVaR 内部对 的 max 不简单。重述需要 SOC 约束和额外变量。
结果:一个同时对最坏情形输入和最坏情形尾部结果对冲的组合。最具防御性的可能配置。
这被一些保险公司和极度厌恶风险的配置人使用。大多数机构使用者不会走到这一步。
稳健优化与贝叶斯稳健性
一个值得注意的联系:带特定不确定集的稳健优化等价于带特定先验的贝叶斯优化。
例如:
- 带盒式 不确定的稳健 MVO ↔ 带 在盒内均匀先验的贝叶斯 MVO。
- 带椭球 不确定的稳健 MVO ↔ 带以 为中心的高斯先验的贝叶斯 MVO。
- 带 Frobenius 范数球的稳健 MVO ↔ 带各项高斯先验的贝叶斯 MVO。
等价并不精确(损失函数不同),但所得组合相似。
实践中,这意味着:如果你在做稳健优化,你就在隐式地做带特定先验的贝叶斯优化。不确定集的选择就是先验的选择。
数值问题
稳健 MVO 比标准 MVO 更难求解。三个问题:
问题 1:SOCP 求解器。 标准 QP 求解器(quadprog、OSQP)不能处理 SOC 约束。你需要 Mosek、Gurobi 或 ECOS。这些是商业的(ECOS 除外)。
问题 2:问题规模。 带 个资产、 个因子的稳健 MVO 有许多 SOC 约束。求解器可能很慢(数秒到分钟)。对高频再平衡,这太慢。
问题 3:数值条件。 当不确定集大时,稳健公式可能病态。加正则化有帮助。
实践中,多数生产系统使用简化的稳健公式(仅 版本)以避免这些问题。完整的 SOCP 版本仅在简化版本不足以捕获输入不确定时才使用。
不允许做空组合的稳健优化
带不允许做空约束的稳健 MVO:
这是带 上 Ledoit-Wolf 收缩的标准最小方差 QP。无不允许做空时闭式解,有则用 QP。
稳健解释:即使在最坏情形(不确定集中最大扰动)下,组合方差被 界定。所以不允许做空最小方差解隐式地是稳健的。
这是一个漂亮的统一:不允许做空最小方差就是稳健 MVO。不需要额外机制。
稳健优化与随机优化的选择
两种处理输入不确定的对立方法:
- 稳健优化:假设输入在集合 内,优化最坏情形。
- 随机优化:假设输入有分布,优化期望情形。
对有罕见但严重错误的高赌注应用(金融危机、模型误设),稳健优化更安全。对有频繁小错误的应用,随机优化给出更好的平均表现。
一些从业者把两者结合:随机优化处理平均情形,稳健约束处理最坏情形。这就是”机会约束”或”分布稳健”优化。
要点回顾
稳健优化把 视为不确定的,并在不确定集上优化最坏情形。结果是一个对合理输入扰动对冲的组合。
对椭球 不确定,稳健 MVO 等价于带 收缩的 MVO。这在数学上漂亮且有用:它给了你有原则的收缩强度。
完整 SOCP 公式处理盒式不确定、椭球不确定和因子结构。它更灵活但计算上更难。
对不允许做空组合,最小方差 QP就是稳健 MVO。 上的收缩就是稳健性。这种统一是该领域最干净的结果之一。
最难的部分是不确定集大小的选择。有几种启发式方法,没有一种完美。通过交叉验证或敏感性分析做校准是标准做法。
稳健优化比重采样或收缩更保守。稳健性代价通常为年化 20-50 个基点的收益拖累。这对风险厌恶型配置人可接受,对激进型则不然。
稳健优化可以与 CVaR、Black-Litterman 和随机规划组合获得额外稳健性。实践中,最简单的公式(不允许做空最小方差加收缩)是最常见的。
下一篇文章:多期组合优化——Li-Ng 动态规划方法。