3、多因子模型基础:因子定义、因子分类与有效性检验

做量化投资的朋友,咱们今天聊聊多因子模型。说实话,这是整个量化选股体系的基石。你想想看,单因子就像一把尺子,只能量长度;多因子就像一套工具箱,能测出股票的各种维度。我做了这么多年,发现很多新手一上来就堆因子,结果模型过拟合得一塌糊涂。嗯,咱们今天就把这事掰扯清楚。

3.1 因子到底是什么?

因子,说白了就是一个能解释股票收益的特征变量。它可以是市盈率、换手率,也可以是分析师情绪。我个人习惯把因子理解成「股票的体检指标」——每个指标都反映股票某个侧面的健康状况。

举个例子:

  • 市盈率因子:反映估值高低
  • 动量因子:反映价格趋势
  • 波动率因子:反映风险水平

我在项目中遇到过最典型的误区:有人把「总市值」和「流通市值」同时放进模型。这俩相关性高达0.95,说白了就是重复信息。你想想看,这跟体检时量两次身高有什么区别?

⚠️ 避坑指南:我曾经见过一个团队,因子库里塞了200多个因子,结果回测漂亮,实盘一塌糊涂。核心问题就是因子之间高度共线,模型根本分不清哪个因子真正有效。

3.2 因子分类:三大门派

因子的分类方式很多,我习惯按数据来源分成三类:基本面、技术面、情绪面。这三类各有各的脾气,咱们一个一个说。

3.2.1 基本面因子

这类因子来自财务报表,反映公司内在价值。常见的有:

  • 估值类:PE、PB、PS、PCF
  • 成长类:营收增长率、净利润增长率
  • 质量类:ROE、毛利率、资产负债率
  • 规模类:总市值、流通市值

基本面因子的特点是「慢但稳」。我记得2018年做A股回测时,估值因子在熊市里表现特别好,但牛市里反而拖后腿。为什么会这样?因为市场情绪高涨时,没人看估值。

3.2.2 技术面因子

这类因子来自交易数据,反映市场行为。常见的有:

  • 动量因子:过去N日收益率
  • 反转因子:短期超买超卖信号
  • 波动因子:历史波动率、振幅
  • 量价因子:成交量变化、资金流向

技术面因子更新频率高,适合短线策略。但我建议你别只看单一技术指标,容易掉进数据挖掘的坑里。

3.2.3 情绪面因子

这类因子来自非结构化数据,反映市场参与者的心理状态。常见的有:

  • 分析师情绪:评级调整、盈利预测修正
  • 舆情因子:新闻情感得分、社交媒体热度
  • 资金流向:主力资金净流入、融资融券余额

情绪面因子是我个人比较看好的方向。为什么?因为市场短期定价往往由情绪驱动,而不是基本面。但要注意,情绪数据的质量参差不齐,清洗起来很费功夫。

💡 核心观点:三类因子各有优劣。基本面因子稳但慢,技术面因子快但噪,情绪面因子准但杂。好的多因子模型,一定是三类因子的有机组合。

3.3 因子有效性检验:别被回测骗了

因子有效性检验,说白了就是判断这个因子到底能不能赚钱。我见过太多人把回测曲线做得漂漂亮亮,结果实盘一跑就崩。这里我分享三个核心检验方法。

3.3.1 IC分析(信息系数)

IC衡量因子值与未来收益的相关性。计算方法很简单:

# 计算IC值
import pandas as pd
import numpy as np
from scipy.stats import spearmanr

def calc_ic(factor_values, forward_returns):
    """
    计算因子IC值
    factor_values: 因子值序列
    forward_returns: 未来N日收益率
    """
    ic, p_value = spearmanr(factor_values, forward_returns)
    return ic, p_value

# 示例:计算某因子的IC
factor = [1.2, 0.8, 1.5, 0.6, 1.1]
returns = [0.03, -0.01, 0.05, -0.02, 0.04]
ic, p = calc_ic(factor, returns)
print(f"IC值: {ic:.3f}, p值: {p:.3f}")

IC值范围在-1到1之间。绝对值越大,因子预测能力越强。我个人习惯看IC的均值、标准差和IR(IC/IC_std)。IR大于0.5的因子,基本可以放心用。

3.3.2 分层回测

把股票按因子值分成10组(或5组),看每组收益是否单调递增或递减。这是最直观的检验方法。

分组 因子值范围 平均收益 胜率
第1组(最低) 0-10% -0.5% 42%
第2组 10-20% 0.2% 48%
第3组 20-30% 0.8% 55%
第4组 30-40% 1.2% 60%
第5组(最高) 40-50% 1.8% 68%

你看这个表格,收益从-0.5%到1.8%单调递增,说明因子区分度很好。如果出现「中间高两头低」的情况,那这个因子可能是个非线性关系,需要进一步处理。

3.3.3 多空组合检验

做多因子值最高的组,做空最低的组,看这个多空组合的收益曲线。如果曲线平稳向上,说明因子有稳定的选股能力。

🔧 实战技巧:我建议你在做多空检验时,至少覆盖一个完整的牛熊周期。A股的话,2015年到2020年是个不错的检验区间。为什么?因为这段时间经历了牛市、熊市、震荡市,能充分检验因子的稳定性。

3.4 因子有效性检验的常见陷阱

做因子检验这么多年,我踩过不少坑。这里列几个最常见的:

  • 幸存者偏差:只用当前存活的股票做回测,忽略了退市的股票。结果就是回测收益虚高。
  • 前视偏差:用未来的数据计算因子值。比如用年报数据时,没考虑财报发布日期,导致因子值提前「泄露」。
  • 过拟合:在大量因子中反复筛选,总能找到几个回测漂亮的。但实盘时这些因子往往失效。
  • 数据挖掘偏差:同一个因子换几个参数,总能找到最优参数。但最优参数往往只是运气好。
⚠️ 避坑指南:我曾经犯过一个低级错误——用全样本数据做因子检验,没做样本外验证。结果回测IC高达0.15,实盘直接变成-0.03。从那以后,我坚持把数据分成训练集和测试集,训练集用来开发因子,测试集用来验证。

3.5 多因子模型的核心逻辑

说了这么多,咱们用一张图来总结多因子模型的核心逻辑。这张图是我自己画的,涵盖了从因子定义到模型构建的完整流程。

多因子模型核心流程 因子定义 明确因子含义与计算方式 因子分类 基本面/技术面/情绪面 有效性检验 IC/分层/多空 因子筛选 相关性/稳定性/冗余 模型构建 权重分配/合成因子 回测验证 样本内/样本外/稳健性 实盘部署 实时计算/风险控制 持续迭代优化 图:多因子模型从定义到部署的完整流程 虚线表示反馈迭代,实线表示正向流程

这张图展示了多因子模型的完整流程。从因子定义开始,经过分类、检验、筛选,再到模型构建和回测验证,最后部署实盘。注意那条虚线——它代表反馈迭代。我个人的经验是,一个好的多因子模型至少要迭代3-5轮,才能达到稳定状态。

3.6 小结

今天咱们聊了多因子模型的基础知识。因子定义要清晰,分类要合理,检验要严格。记住三个核心点:

  • 因子定义:明确计算方式,避免歧义
  • 因子分类:基本面、技术面、情绪面,三类都要覆盖
  • 有效性检验:IC分析、分层回测、多空组合,一个都不能少

做量化投资,最怕的就是「回测猛如虎,实盘亏成狗」。避免这个问题的唯一方法,就是严格做好因子有效性检验。嗯,今天就到这里,希望这些经验对你有帮助。