2、多因子模型基础:因子定义与分类、Alpha因子与Beta因子、因子收益率计算、多因子模型框架

好,咱们正式开始聊多因子模型。

说实话,这个模型是量化投资的基石。你想想看,市面上那么多策略,什么趋势跟踪、统计套利、事件驱动……但最核心、最经典的,还是多因子模型。我个人习惯把它比作「搭积木」——每个因子就是一块积木,你挑几块好的,搭在一起,就是一个能赚钱的策略。

2.1 因子定义与分类

先说说什么是因子。

因子,说白了就是「能解释股票收益的共同特征」。比如「市盈率低」的股票是不是更容易涨?「市值小」的股票是不是长期跑赢大盘?这些特征,就是因子。

我在项目中遇到过不少新手,一上来就问「哪个因子最牛?」其实没有最牛的因子,只有最合适的因子组合。

因子的分类方式很多,我习惯按数据来源分三类:

  • 基本面因子:来自财务报表,比如市盈率、市净率、ROE、营收增长率。这类因子逻辑清晰,但更新慢(季度数据)。
  • 技术面因子:来自量价数据,比如动量、反转、波动率、换手率。这类因子更新快,但噪音大。
  • 另类因子:来自非传统数据,比如新闻情绪、搜索热度、卫星图像。这类因子信息含量高,但处理难度大。

还有一种分类方式,按因子对收益的解释方式分:

分类 特点 例子
宏观因子 解释系统性风险 利率、通胀、GDP增速
风格因子 解释股票间差异 市值、价值、动量、波动率
行业因子 解释行业间差异 银行、科技、医药

嗯,这里要注意:分类不是死的。同一个因子,在不同语境下可以归到不同类别。比如「动量因子」,有人把它归为技术面,有人把它归为风格因子。我个人觉得,怎么分类不重要,重要的是你理解它背后的逻辑。

2.2 Alpha因子与Beta因子

这个区分太重要了。我见过很多交易员,做了几年都没搞明白这两者的区别。

Beta因子,就是「市场风险因子」。它解释的是:股票为什么跟着大盘涨跌?你买一只股票,如果大盘涨1%,它涨1.2%,那它的Beta就是1.2。Beta因子赚的是市场波动的钱,说白了就是「看天吃饭」。

Alpha因子,就是「超额收益因子」。它解释的是:股票为什么比大盘涨得多?你买一只股票,大盘涨1%,它涨了2%,多出来的那1%就是Alpha。Alpha因子赚的是「选股能力」的钱,跟市场涨跌无关。

我举个例子你就明白了:

  • 你买沪深300ETF,赚的是Beta收益(市场收益)。
  • 你买一只主动管理基金,基金经理通过选股跑赢沪深300,多出来的部分就是Alpha收益。

多因子模型的核心目标,就是找到稳定的Alpha因子。Beta因子虽然也能赚钱,但市场一跌,Beta收益就没了。Alpha因子才是真正的「护城河」。

核心观点:市场中性策略的本质,就是「剥离Beta,保留Alpha」。通过做多Alpha高的股票、做空Alpha低的股票,对冲掉市场风险,只赚选股的钱。

我曾经犯过一个错误:花了大半年时间优化一个动量因子,回测结果漂亮得不行。结果实盘一跑,收益全没了。后来才发现,那个因子本质上是个Beta因子——它赚的是市场上涨的钱,不是选股的钱。嗯,从那以后,我每次做因子分析,第一件事就是算它跟大盘的相关性。

2.3 因子收益率计算

因子收益率怎么算?说白了就是「做多高因子值股票、做空低因子值股票」的收益。

最常用的方法是「分组法」:

  1. 把所有股票按因子值从大到小排序。
  2. 分成10组(Decile),第1组是因子值最高的,第10组是最低的。
  3. 计算每组股票的等权或市值加权收益。
  4. 因子收益率 = 第1组收益 - 第10组收益。

举个例子,计算「市盈率因子」的收益率:

  • 第1组(低市盈率股票):月收益2.5%
  • 第10组(高市盈率股票):月收益1.0%
  • 因子收益率 = 2.5% - 1.0% = 1.5%

代码实现也很简单:

import pandas as pd
import numpy as np

def calculate_factor_return(df, factor_col, ret_col, n_groups=10):
    """
    计算因子收益率
    df: DataFrame,包含因子值和收益率
    factor_col: 因子列名
    ret_col: 收益率列名
    n_groups: 分组数
    """
    # 按因子值排序并分组
    df['group'] = pd.qcut(df[factor_col], q=n_groups, labels=False)
    
    # 计算每组平均收益
    group_returns = df.groupby('group')[ret_col].mean()
    
    # 因子收益率 = 最高组 - 最低组
    factor_return = group_returns.iloc[-1] - group_returns.iloc[0]
    
    return factor_return

# 使用示例
# factor_return = calculate_factor_return(data, 'pe_ratio', 'monthly_return')

小技巧:计算因子收益率时,我建议用「市值加权」而不是「等权」。因为大市值股票对市场影响更大,市值加权更贴近实际交易。当然,如果你做的是小盘股策略,等权也可以。

2.4 多因子模型框架

好了,前面都是铺垫。现在咱们聊聊多因子模型的整体框架。

多因子模型,说白了就是「用多个因子来解释股票收益」。最经典的模型是Fama-French三因子模型:市场因子、市值因子、价值因子。后来发展出五因子、六因子……但核心思想不变。

数学上,多因子模型可以写成:

R_i = α_i + β_1 * F_1 + β_2 * F_2 + ... + β_k * F_k + ε_i

其中:

  • R_i:股票i的收益率
  • α_i:股票i的Alpha(超额收益)
  • β_k:股票i对因子k的暴露度
  • F_k:因子k的收益率
  • ε_i:残差(个股特有风险)

这个框架的核心逻辑是:股票收益 = 因子收益 + 个股特有收益。因子收益是系统性的,可以被解释;个股特有收益是随机的,无法预测。

下面我用一张SVG图来展示多因子模型的整体框架:

多因子模型框架 数据输入 价格、财务、另类数据 因子处理 标准化、中性化、去极值 因子组合 加权、优化、合成 Alpha因子 Beta因子 行业因子 宏观因子 多因子模型 R = α + β₁F₁ + β₂F₂ + ... + βₖFₖ + ε 策略输出 选股信号 / 组合权重 / 风险控制 反馈优化

这个框架图展示了多因子模型的完整流程:从数据输入,到因子处理,再到因子组合,最后输出策略信号。注意那个反馈循环——好的模型不是一次建成的,需要不断迭代优化。

避坑指南:我曾经在构建多因子模型时,一口气加了20多个因子,觉得「因子越多越安全」。结果模型过拟合得一塌糊涂,实盘收益还不如单因子。后来我学乖了:因子不是越多越好,关键是每个因子都要有独立的逻辑支撑。一般5-10个因子就够了。

最后,我想强调一点:多因子模型不是万能药。它假设因子能解释股票收益,但现实中总有模型解释不了的东西。比如2020年疫情爆发时,很多传统因子都失效了。所以,做量化一定要有敬畏心,模型只是工具,不是真理。

好了,这一章的内容就到这里。因子定义、Alpha与Beta的区别、因子收益率计算、多因子模型框架——这四个知识点,是后续所有策略的基础。你把它吃透了,后面的内容就顺了。


公众号:蓝海资料掘金营,微信deep3321