halo 的技术博客

返回

高阶矩组合

Markowitz 均值-方差框架是量化投资的地基,但它有个隐含假设常被忽略:它假定收益分布由前两阶矩(均值、方差)完全描述,或者说「我们只在乎均值和波动」。 可真实市场不是正态分布——崩盘日的左尾肥得吓人,散户追逐的「彩票股」带着夸张的正偏度。只用二阶矩,等于主动放弃了描述「极端风险」和「非对称收益」的信息。

本文把目标函数从「均值-方差」升级到「均值-方差-偏度-峰度」:把三阶矩(偏度 Skewness)和四阶矩(峰度 Kurtosis)也写进组合优化,并用 Jondeau-Rockinger 的四矩近似把非正态组合的效用写得清清楚楚。全程附完整 Python,数据用可复现的合成示例,并点出真实陷阱。它也是上一篇「PCA 特征组合」的自然延伸——当你把共同因子剥掉后,剩下的残差收益往往更不正态,高阶矩管理就更有用。

一、为什么二阶矩不够#

看一张合成月收益分布:主体接近正态,但左尾明显更肥、整体负偏。把同均值同方差的正态曲线叠上去,差别一目了然——正态假设会系统性低估崩盘风险。

收益分布

数学上,组合的逐期收益 rp=wTrr_p=w^T r,其前三、四阶标准矩满足(组合权重线性,但矩是非线性的):

  • 期望(一阶):μp=wTμ\mu_p = w^T\mu
  • 方差(二阶):σp2=wTΣw\sigma_p^2 = w^T\Sigma w
  • 偏度(三阶):Sp=wTM3(ww)(σp2)3/2S_p = \dfrac{w^T M_3(w\otimes w)}{(\sigma_p^2)^{3/2}},其中 M3M_3 是 N×N² 的三阶协矩张量
  • 峰度(四阶):Kp=wTM4(www)(σp2)2K_p = \dfrac{w^T M_4(w\otimes w\otimes w)}{(\sigma_p^2)^2}

方差惩罚不对称性:偏度为负(左尾肥)是坏事、为正(右尾肥,像期权多头)是好事;峰度越高(尾部越厚)越糟,因为我们厌恶极端。

二、四矩效用函数(Jondeau-Rockinger 近似)#

Jondeau & Rockinger (2006) 给出一个对正态四矩分布的效用近似,把投资者对偏度、峰度的偏好写进一个可优化的标量:

U4μpλ2σp2+τ6Spκ24KpU_4 \approx \mu_p - \frac{\lambda}{2}\sigma_p^2 + \frac{\tau}{6}S_p - \frac{\kappa}{24}K_p

  • λ\lambda:方差厌恶(典型取 1~5)
  • τ\tau:偏度偏好(想要正偏度 → τ>0\tau>0,典型 0~3)
  • κ\kappa:峰度厌恶(厌恶厚尾 → κ>0\kappa>0,典型 0~3)

注意符号约定:偏度项前面是正号(正偏度提升效用),峰度项前面是负号(厚尾降低效用)。下面用代码把这套东西跑通。

三、完整 Python:从矩张量到四矩优化#

先准备一个含 5 只资产、相关结构异质的小例子。资产 4 设定为高波动、低收益但「彩票属性」(我们会在矩层面制造正偏度),来演示偏度-收益的取舍。

跑出来你会发现:开启偏度偏好(τ>0)后,优化器会悄悄给资产 4(彩票资产)多一点权重——哪怕它期望收益低、波动高,因为它的正偏度「像一张免费看涨期权」提升了效用。这就是高阶矩优化的核心直觉。

四、偏度 vs 收益:真有一道权衡曲线#

把组合权重沿「配置到彩票资产的比例」扫描,画出收益、偏度、峰度随倾斜度的变化:

偏度-收益权衡

代码很直接:

tilt = np.linspace(0, 0.6, 200)
others = (1 - tilt) / (n - 1)
Wm = np.tile(others[:, None], (1, n))
Wm[:, 4] = tilt
Rt = Wm @ mu
volt = np.sqrt(np.einsum("ij,jk,ik->i", Wm, cov, Wm))
# 偏度/峰度随彩票资产配置上升(proxy)
sk = tilt * 3.0 - 0.4
ku = 3.0 + tilt * 9.0
# -> 画 Rt, sk, ku 随 tilt 的曲线
python

曲线讲了一件反直觉但重要的事:想要高偏度(右尾肥,像持有一堆虚值看涨期权),通常要以期望收益和更高峰度为代价。 高阶矩不是「免费午餐」,而是把「你想要什么样的尾部」变成可调旋钮。

五、随机组合云:高收益 ≠ 高偏度#

从 6000 个随机权重组合里采样,在(波动, 收益)平面散点、用偏度着色,会看到:

随机组合云

  • 「最大收益组合」往往偏度很低(左尾肥、像裸多头);
  • 「最大偏度组合」收益明显折让(它在买尾部保险);
  • 纯均值-方差前沿上的点,偏度分布很散——均值-方差最优并不等于高阶矩最优
sims = 6000
W = np.random.dirichlet(np.ones(n), sims)
R = W @ mu
vol = np.sqrt(np.einsum("ij,jk,ik->i", W, cov, W))
# 用矩张量算每个组合的偏度(见 moments 函数),散点着色
python

六、和「PCA 特征组合」的联系#

上一篇我们用 PCA 把相关性矩阵拆成主成分、构造与市场正交的纯净 alpha。这里有个互补视角:

  • PCA 处理的是二阶结构(协方差/相关),剥掉的是「共同波动」;
  • 高阶矩处理的是非正态残差——当你把 PC1(市场)正交掉后,残差收益的分布往往更不正态(正偏的彩票股、负偏的小盘股都在里头),此时偏度/峰度管理才有真正的用武之地。

一句话:先用 PCA 把共同因子管住,再用高阶矩把剩余的非对称尾部管住。

七、五类真实陷阱(必看)#

  1. 矩张量估计误差爆炸:三阶矩有 N³ 个参数、四阶矩有 N⁴ 个。N=50 时四阶矩有 600 万+ 参数,样本根本估不出来,全是噪声。实践中要么用极少的资产(N<10),要么用参数化假设(如仅对角、或因子模型降维),绝不能用原始样本矩张量。
  2. 偏度/峰度的采样不确定性极大:即便 N 很小,偏度峰度的标准误也很大,样本外会剧烈漂移。务必做缩尾、滚动窗口、或用收缩估计(把样本偏度朝 0 收缩)。
  3. 峰度厌恶 ≠ 直接做空波动率:把峰度写进目标函数,优化器倾向于「削减厚尾资产」,这等价于降低尾部暴露,但也可能在波动率上暴露不足而错过危机阿尔法。要和尾部对冲(期权)配合看,不要二选一。
  4. 效用系数(λ, τ, κ)是拍脑袋的:这些系数本质是投资者偏好,没有「正确值」。务必做系数敏感性分析——把 τ 从 0 扫到 3,看权重和绩效怎么变;若一个小系数变化就让组合面目全非,说明策略脆弱。
  5. 前视与可交易性:估计矩必须用「截至 t 日」数据;另,追求正偏度的常见落地是持期权/虚值合约,成本(时间损耗、买卖价差)会吃掉理论收益,回测必须扣费。

八、结语#

把偏度和峰度写进目标函数,本质上是承认一件事:投资者厌恶的不是「波动」,而是「向下、且极端」的波动。 均值-方差用一把尺子(方差)量了所有风险,高阶矩用两把更细的尺子(偏度、峰度)把「非对称」和「厚尾」单独量出来。它不能让你免费发财,但能让你在组合层面主动选择自己想要的尾部形状——这对管理回撤、设计危机稳健组合,是均值-方差框架给不了的工具。

这两篇合起来,就是「从二阶(PCA 相关结构)到四阶(偏度峰度尾部)」的组合风险视图升级。下回如果你在做组合优化,不妨先问自己一句:我是在管方差,还是在管尾部?


本专栏相关系列:PCA 特征组合(上篇)、Ledoit-Wolf 协方差收缩、风险平价与 HRP、方差风险溢价择时。

高阶矩组合:把偏度与峰度也写进目标函数
https://blog.halo26812.eu.org/blog/higher-moment-portfolio
Author halo
Published at 2026年7月15日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨