4、多因子组合权重优化:等权配置、市值加权、波动率倒数加权、均值-方差优化

权重优化,说白了就是决定每个因子在组合里占多大分量。

我见过不少新手,辛辛苦苦挖了一堆因子,最后随便一拼就上线了。结果呢?回测漂亮,实盘拉胯。为什么?因为权重没搞对。

今天咱们就把四种最主流的权重方法掰开揉碎讲清楚。每种方法我都踩过坑,咱们边聊边避雷。

4.1 等权配置——最朴素的 baseline

等权配置,就是每个因子分同样的钱。比如你有5个因子,每个占20%。

这方法简单到令人发指,但千万别小看它。我个人的习惯是:任何新组合,先用等权跑一遍,当作基准。

核心逻辑:不偏不倚,完全依赖因子本身的选股能力。

优点很明显:

  • 实现零门槛,一行代码搞定
  • 不存在过拟合风险
  • 回测结果最「诚实」

缺点也致命:

  • 完全忽略因子之间的相关性
  • 差因子会拖累好因子
  • 波动率高的因子会主导组合风险
我的经验:等权配置最适合做「对照组」。你搞了个复杂的优化模型,如果连等权都跑不过,那趁早别上线。

4.2 市值加权——跟着大资金走

市值加权,就是按因子对应股票的市值大小来分配权重。大市值股票对应的因子权重高,小市值权重低。

这方法在机构里很常见。为什么?因为大资金进出方便啊。

具体做法:

# 市值加权示例
def market_cap_weight(factor_scores, market_caps):
    # 因子得分乘以市值
    weighted_scores = factor_scores * market_caps
    # 归一化
    weights = weighted_scores / weighted_scores.sum()
    return weights

我曾在某百亿私募见过一个案例:他们用市值加权做行业轮动,效果出奇的好。原因很简单——大市值股票流动性好,交易成本低,实盘损耗小。

注意:市值加权容易导致组合过度集中。前十大权重股可能占了半壁江山。一旦这些股票出问题,回撤会很大。

4.3 波动率倒数加权——让每个因子「音量」一致

这个思路很有意思。你想想看,有些因子天生波动大,比如动量因子,上蹿下跳。有些因子波动小,比如低波因子,稳如老狗。

如果等权配置,波动大的因子会主导组合的风险。波动率倒数加权就是解决这个问题的。

公式很简单:

权重 = (1 / 因子波动率) / sum(1 / 所有因子波动率)

波动率大的因子,权重自动变小。波动率小的因子,权重自动变大。

我做过一个实验:用等权和波动率倒数加权分别跑沪深300的因子组合。三年下来,波动率倒数加权的最大回撤低了将近5个点,夏普比率高了0.3。

核心思想:风险预算。每个因子对组合的风险贡献大致相等。

但有个坑:

  • 波动率计算窗口怎么选?我建议用60个交易日滚动计算
  • 极端行情下波动率会突变,需要做截断处理
  • 因子波动率本身会随时间变化,需要定期再平衡
避坑指南:我曾经直接用全历史波动率算权重,结果遇到2015年股灾,波动率瞬间飙升,权重剧烈抖动。后来我改用指数加权移动平均(EWMA),平滑多了。

4.4 均值-方差优化——马科维茨的遗产

终于聊到重头戏了。均值-方差优化,这是现代投资组合理论的基石。马科维茨老爷子凭这个拿了诺贝尔奖。

核心逻辑就一句话:在给定收益目标下,最小化组合风险。或者反过来,在给定风险下,最大化组合收益。

数学表达:

目标:最小化 w^T Σ w
约束:w^T μ = target_return
     sum(w) = 1
     w_i >= 0

其中 w 是权重向量,Σ 是因子收益率的协方差矩阵,μ 是因子预期收益。

代码实现:

import numpy as np
from scipy.optimize import minimize

def mean_variance_optimize(mu, cov, target_return):
    n = len(mu)
    
    def portfolio_var(w):
        return w.T @ cov @ w
    
    constraints = [
        {'type': 'eq', 'fun': lambda w: np.sum(w) - 1},
        {'type': 'eq', 'fun': lambda w: w.T @ mu - target_return}
    ]
    
    bounds = [(0, 1) for _ in range(n)]
    init_w = np.ones(n) / n
    
    result = minimize(portfolio_var, init_w, 
                      constraints=constraints,
                      bounds=bounds)
    return result.x
警告:均值-方差优化对输入参数极其敏感。预期收益 μ 稍微变一点,权重就天翻地覆。这就是著名的「估计误差最大化」问题。

我个人的经验是:

  • 别直接用历史均值当预期收益,那玩意儿不准
  • 协方差矩阵要做收缩估计,比如用 Ledoit-Wolf 方法
  • 加一些约束条件,比如单个因子权重不超过30%
  • 做敏感性分析,看看权重对参数变化的稳定性

4.5 四种方法对比

咱们用一张表来总结:

方法 复杂度 过拟合风险 实盘稳定性 适用场景
等权配置 基准测试、因子初筛
市值加权 大资金、流动性敏感场景
波动率倒数加权 风险控制优先的场景
均值-方差优化 理论研究、参数稳定的场景

你看,没有绝对的好坏。关键看你的目标是什么。

如果追求稳健,波动率倒数加权是我的首选。如果做学术研究,均值-方差优化是必修课。如果只是快速验证想法,等权配置足够了。

4.6 知识体系图

下面这张图帮你理清四种方法的核心逻辑:

多因子权重优化方法体系 因子权重优化 等权配置 市值加权 波动率倒数加权 均值-方差优化 特性 • 实现最简单 • 无过拟合风险 • 适合做基准 特性 • 流动性好 • 交易成本低 • 易过度集中 特性 • 风险预算均衡 • 回撤控制好 • 需定期再平衡 特性 • 理论最优化 • 参数敏感 • 过拟合风险高 选择建议 稳健优先 → 波动率倒数加权 | 快速验证 → 等权 | 大资金 → 市值加权 | 学术研究 → 均值-方差

嗯,这张图把四种方法的定位和特性都串起来了。你保存下来,以后选方法时拿出来看一眼,心里就有数了。

最后说一句:别迷信任何一种方法。我见过用均值-方差优化亏掉裤子的,也见过用等权跑出超额收益的。关键是理解每种方法的假设和局限,然后根据你的实际情况做选择。

专注资料整理