
Markowitz 均值-方差框架是量化投资的地基,但它有个隐含假设常被忽略:它假定收益分布由前两阶矩(均值、方差)完全描述,或者说「我们只在乎均值和波动」。 可真实市场不是正态分布——崩盘日的左尾肥得吓人,散户追逐的「彩票股」带着夸张的正偏度。只用二阶矩,等于主动放弃了描述「极端风险」和「非对称收益」的信息。
本文把目标函数从「均值-方差」升级到「均值-方差-偏度-峰度」:把三阶矩(偏度 Skewness)和四阶矩(峰度 Kurtosis)也写进组合优化,并用 Jondeau-Rockinger 的四矩近似把非正态组合的效用写得清清楚楚。全程附完整 Python,数据用可复现的合成示例,并点出真实陷阱。它也是上一篇「PCA 特征组合」的自然延伸——当你把共同因子剥掉后,剩下的残差收益往往更不正态,高阶矩管理就更有用。
一、为什么二阶矩不够#
看一张合成月收益分布:主体接近正态,但左尾明显更肥、整体负偏。把同均值同方差的正态曲线叠上去,差别一目了然——正态假设会系统性低估崩盘风险。

数学上,组合的逐期收益 ,其前三、四阶标准矩满足(组合权重线性,但矩是非线性的):
- 期望(一阶):
- 方差(二阶):
- 偏度(三阶):,其中 是 N×N² 的三阶协矩张量
- 峰度(四阶):
方差惩罚不对称性:偏度为负(左尾肥)是坏事、为正(右尾肥,像期权多头)是好事;峰度越高(尾部越厚)越糟,因为我们厌恶极端。
二、四矩效用函数(Jondeau-Rockinger 近似)#
Jondeau & Rockinger (2006) 给出一个对正态四矩分布的效用近似,把投资者对偏度、峰度的偏好写进一个可优化的标量:
- :方差厌恶(典型取 1~5)
- :偏度偏好(想要正偏度 → ,典型 0~3)
- :峰度厌恶(厌恶厚尾 → ,典型 0~3)
注意符号约定:偏度项前面是正号(正偏度提升效用),峰度项前面是负号(厚尾降低效用)。下面用代码把这套东西跑通。
三、完整 Python:从矩张量到四矩优化#
先准备一个含 5 只资产、相关结构异质的小例子。资产 4 设定为高波动、低收益但「彩票属性」(我们会在矩层面制造正偏度),来演示偏度-收益的取舍。
import numpy as np
from scipy.optimize import minimize
np.random.seed(42)
n = 5
mu = np.array([0.010, 0.012, 0.009, 0.014, 0.011]) # 月期望收益
sd = np.array([0.05, 0.07, 0.04, 0.10, 0.06]) # 月波动
corr = np.array([
[1.00, 0.55, 0.30, 0.10, 0.40],
[0.55, 1.00, 0.25, 0.15, 0.50],
[0.30, 0.25, 1.00, 0.05, 0.20],
[0.10, 0.15, 0.05, 1.00, 0.10],
[0.40, 0.50, 0.20, 0.10, 1.00],
])
cov = np.outer(sd, sd) * corr
# ---- 构造三阶 / 四阶协矩张量(合成,仅示意结构)----
# M3[i, j*k] : 资产 i 与 (j,k) 的三阶联合中心矩;这里用简化的「对角主导+彩票资产正偏」
M3 = np.zeros((n, n*n))
for i in range(n):
for j in range(n):
for k in range(n):
val = 0.0
if i == j == k:
val = sd[i]**3 * (0.6 if i == 4 else -0.3) # 彩票资产正偏,其余略负偏
M3[i, j*n + k] += val
M4 = np.zeros((n, n*n*n))
for i in range(n):
for j in range(n):
for k in range(n):
for l in range(n):
if i == j == k == l:
M4[i, (j*n + k)*n + l] += 3*sd[i]**4 # 基础峰度(正态=3) + 额外厚尾
M4[i, (j*n + k)*n + l] += sd[i]**4 * 1.5 # 额外厚尾
def moments(w):
mu_p = w @ mu
var_p = w @ cov @ w
std = np.sqrt(var_p)
# 三阶矩: w^T M3 (w⊗w)
wk = np.kron(w, w)
sk = (w @ M3 @ wk) / (std**3)
# 四阶矩: w^T M4 (w⊗w⊗w)
wkk = np.kron(wk, w)
ku = (w @ M4 @ wkk) / (var_p**2)
return mu_p, var_p, sk, ku
def utility(w, lam=3.0, tau=1.0, kap=1.0):
mu_p, var_p, sk, ku = moments(w)
return mu_p - lam/2*var_p + tau/6*sk - kap/24*ku
# 约束:权重和为1,无杠杆
cons = [{"type": "eq", "fun": lambda w: w.sum() - 1}]
bnds = [(0, 1)] * n
w0 = np.repeat(1/n, n)
res = minimize(lambda w: -utility(w), w0, method="SLSQP",
constraints=cons, bounds=bnds)
w_star = res.x
print("四矩最优权重:", np.round(w_star, 3))
print("效用 / 收益 / 波动 / 偏度 / 峰度:",
np.round([utility(w_star), *moments(w_star)], 4))python跑出来你会发现:开启偏度偏好(τ>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 把共同因子管住,再用高阶矩把剩余的非对称尾部管住。
七、五类真实陷阱(必看)#
- 矩张量估计误差爆炸:三阶矩有 N³ 个参数、四阶矩有 N⁴ 个。N=50 时四阶矩有 600 万+ 参数,样本根本估不出来,全是噪声。实践中要么用极少的资产(N<10),要么用参数化假设(如仅对角、或因子模型降维),绝不能用原始样本矩张量。
- 偏度/峰度的采样不确定性极大:即便 N 很小,偏度峰度的标准误也很大,样本外会剧烈漂移。务必做缩尾、滚动窗口、或用收缩估计(把样本偏度朝 0 收缩)。
- 峰度厌恶 ≠ 直接做空波动率:把峰度写进目标函数,优化器倾向于「削减厚尾资产」,这等价于降低尾部暴露,但也可能在波动率上暴露不足而错过危机阿尔法。要和尾部对冲(期权)配合看,不要二选一。
- 效用系数(λ, τ, κ)是拍脑袋的:这些系数本质是投资者偏好,没有「正确值」。务必做系数敏感性分析——把 τ 从 0 扫到 3,看权重和绩效怎么变;若一个小系数变化就让组合面目全非,说明策略脆弱。
- 前视与可交易性:估计矩必须用「截至 t 日」数据;另,追求正偏度的常见落地是持期权/虚值合约,成本(时间损耗、买卖价差)会吃掉理论收益,回测必须扣费。
八、结语#
把偏度和峰度写进目标函数,本质上是承认一件事:投资者厌恶的不是「波动」,而是「向下、且极端」的波动。 均值-方差用一把尺子(方差)量了所有风险,高阶矩用两把更细的尺子(偏度、峰度)把「非对称」和「厚尾」单独量出来。它不能让你免费发财,但能让你在组合层面主动选择自己想要的尾部形状——这对管理回撤、设计危机稳健组合,是均值-方差框架给不了的工具。
这两篇合起来,就是「从二阶(PCA 相关结构)到四阶(偏度峰度尾部)」的组合风险视图升级。下回如果你在做组合优化,不妨先问自己一句:我是在管方差,还是在管尾部?
本专栏相关系列:PCA 特征组合(上篇)、Ledoit-Wolf 协方差收缩、风险平价与 HRP、方差风险溢价择时。