第三章:量化选股模型基础:多因子模型框架、因子分类与有效性检验
各位同学,欢迎来到第三章。前两章我们聊了指数的编制规则和增强基金的底层逻辑。今天,咱们要真正进入量化选股的核心——多因子模型。
说实话,我入行那会儿,多因子模型还是个挺神秘的东西。大家觉得这是华尔街的“黑箱”。其实说白了,它就是一套系统化的打分系统。你想想看,我们选股票,总得有个依据吧?是看它便宜?还是看它涨得快?还是看公司赚钱能力强?多因子模型就是把所有这些依据,量化成一个个“因子”,然后综合打分。
3.1 多因子模型框架:从“拍脑袋”到“算分数”
多因子模型的核心思想,我习惯用一个公式来概括:
预期收益 = α + β₁ * 因子1 + β₂ * 因子2 + ... + βₙ * 因子n + ε
这个公式看着有点吓人?别怕。咱们拆开来看:
- 预期收益:就是我们对这只股票未来表现的判断。
- 因子:就是我们选股的依据,比如市盈率、动量、波动率等。
- β(贝塔):每个因子对收益的影响权重。权重越大,说明这个因子越重要。
- α(阿尔法):模型解释不了的部分,也就是我们常说的“超额收益”。
- ε(误差项):随机扰动,说白了就是运气成分。
我在项目中遇到过不少新手,一上来就堆砌几十个因子,觉得越多越好。结果呢?模型过拟合,实盘一跑就崩。记住,多因子模型不是“大杂烩”,而是“精选组合”。
核心框架流程:
- 因子生成:从数据中挖掘或构造候选因子。
- 因子筛选:剔除无效、冗余因子。
- 因子合成:将有效因子按权重组合成综合得分。
- 选股执行:根据综合得分排序,买入得分高的,卖出得分低的。
- 回测与迭代:验证策略有效性,持续优化。
下面这张图,是我自己画的多因子模型工作流,你可以把它当作一个“选股工厂”的流水线:
3.2 因子分类:四大主流派系
因子有很多种分类方式。我个人习惯把它们分成四大类:价值、动量、质量、情绪。这四类基本覆盖了市场上90%以上的有效因子。
| 因子类别 | 核心逻辑 | 常见因子举例 | 我的实战经验 |
|---|---|---|---|
| 价值因子 | 买便宜的股票 | 市盈率(PE)、市净率(PB)、市销率(PS)、股息率 | 价值因子在熊市末期特别有效。但要注意“价值陷阱”——便宜没好货。 |
| 动量因子 | 买涨得好的股票 | 过去1个月/3个月/12个月收益率、均线乖离率 | A股市场短期动量(1-3个月)效果不错,但长期动量容易反转。 |
| 质量因子 | 买赚钱能力强、财务健康的公司 | ROE、毛利率、资产负债率、现金流质量 | 质量因子是“慢工出细活”,长期持有效果显著。 |
| 情绪因子 | 利用市场情绪偏差 | 换手率、波动率、分析师预期调整、融资余额变化 | 情绪因子波动大,适合做短期交易信号。 |
小技巧: 我建议初学者先从价值和质量因子入手。这两个因子逻辑清晰,数据容易获取,回测结果也比较稳定。动量因子和情绪因子需要更精细的参数调优,适合进阶。
3.3 因子有效性检验:别被“假信号”骗了
因子不是越多越好,关键是“有效”。怎么判断一个因子是否有效?我一般用三个维度来检验。
3.3.1 IC(信息系数)分析
IC衡量的是因子值与未来收益之间的相关性。简单说,就是看这个因子能不能预测股价涨跌。
- Rank IC:因子排名与收益排名的相关系数。我更喜欢用Rank IC,因为它对极端值不敏感。
- IC均值:通常要求绝对值大于0.02,才算有预测能力。
- IC标准差:越小越好,说明因子表现稳定。
- IR(信息比率) = IC均值 / IC标准差。IR大于0.5算合格,大于1.0算优秀。
举个例子,我去年测试了一个“毛利率因子”,IC均值只有0.015,IR只有0.3。嗯,这个因子基本没什么用,直接淘汰。
3.3.2 分层回测
这是我最喜欢的方法。把股票按因子值从大到小分成10组(Decile),然后看每组未来的收益表现。
理想的情况是:第1组(因子值最大)收益最高,第10组(因子值最小)收益最低,中间各组单调递减。如果出现“U型”或者“倒U型”,说明因子不是线性的,需要做非线性变换。
分层回测的“黄金标准”:
- 多空组合(第1组 - 第10组)年化收益 > 5%
- 多空组合夏普比率 > 0.8
- 各组收益单调性良好
3.3.3 因子相关性分析
很多因子之间是高度相关的。比如市盈率和市净率,都是价值因子,相关性可能高达0.7以上。如果你同时用这两个因子,相当于给价值因子加了双倍权重,会造成“因子拥挤”。
我习惯用相关性矩阵来检查。如果两个因子相关性超过0.6,我会只保留其中一个,或者把它们合成一个“复合因子”。
避坑指南: 我曾经犯过一个错误——在回测中用了“未来数据”。比如用当月的财务数据去预测当月的收益。这相当于“用后视镜开车”,回测结果漂亮得不得了,实盘一塌糊涂。记住,因子值必须基于“已知信息”,不能包含未来信息。
3.4 实战:一个简单的因子检验流程
下面是我常用的因子检验代码框架。你可以直接拿去用,改改参数就行。
# 伪代码示例:因子有效性检验流程
def factor_test(data, factor_name):
# 1. 计算因子值
data['factor'] = calculate_factor(data, factor_name)
# 2. 去极值、标准化
data['factor'] = winsorize(data['factor'], limits=[0.01, 0.99])
data['factor'] = standardize(data['factor'])
# 3. 计算Rank IC
ic = data.groupby('date').apply(
lambda x: x['factor'].rank().corr(x['return'].rank())
)
print(f"IC均值: {ic.mean():.4f}, IR: {ic.mean()/ic.std():.4f}")
# 4. 分层回测
data['group'] = data.groupby('date')['factor'].transform(
lambda x: pd.qcut(x, 10, labels=False)
)
group_return = data.groupby(['date', 'group'])['return'].mean()
# 5. 输出多空组合收益
long_short = group_return.xs(9, level=1) - group_return.xs(0, level=1)
print(f"多空组合年化收益: {long_short.mean()*252:.4f}")
return ic, group_return
这段代码虽然简单,但包含了因子检验的核心步骤。我在实际项目中,会在这个基础上加入行业中性化处理、市值中性化处理,以及更复杂的统计检验。
3.5 小结:因子选股的“道”与“术”
多因子模型,说白了就是一套“量化选股”的方法论。它把投资逻辑从“我觉得”变成了“数据说”。但要注意,因子不是一成不变的。市场在变,因子的有效性也在变。
我个人的习惯是:每季度重新检验一次因子库,淘汰失效的因子,加入新的有效因子。这样才能让模型保持“生命力”。
好了,这一章的内容就到这里。因子是量化选股的“砖瓦”,下一章我们会聊怎么用这些“砖瓦”搭建一个完整的指数增强策略。