4、因子暴露的估计方法:时间序列回归、横截面回归、面板数据方法

因子暴露怎么算?这是做统计套利绕不开的核心问题。

说白了,因子暴露就是衡量你的组合对某个风险因子有多敏感。比如市场涨1%,你的组合跟着涨多少?这个系数就是暴露。我刚开始做量化那会儿,总觉得这玩意儿就是个回归系数,跑个OLS就完事了。后来踩了不少坑才发现——估计方法选不对,后面全白干

目前主流的方法有三类:时间序列回归、横截面回归、面板数据方法。咱们一个一个说。

4.1 时间序列回归

这是最直观的方法。你拿一只股票的收益率序列,对因子收益率序列做回归。比如经典的CAPM模型:

R_i - R_f = α + β * (R_m - R_f) + ε

这里的β就是股票对市场因子的暴露。我习惯用滚动窗口来估计,比如过去60个交易日。为什么?因为因子暴露会随时间变化,你用全历史数据估计,可能得到的是个“平均暴露”,对当前交易没啥指导意义。

核心要点:时间序列回归适合估计单个资产对已知因子的暴露。前提是你得先有因子收益率数据。

代码实现其实很简单:

import statsmodels.api as sm

# 假设 returns 是股票超额收益率,factor_returns 是因子收益率
X = sm.add_constant(factor_returns)
model = sm.OLS(returns, X).fit()
beta = model.params[1]  # 因子暴露
alpha = model.params[0] # 超额收益

嗯,这里要注意——残差项一定要做异方差检验。我在项目中遇到过一只小盘股,回归结果看着挺漂亮,R方0.7,但残差方差明显不恒定。后来用了Newey-West标准误才把问题纠正过来。

避坑指南:我曾经用60天滚动窗口估计因子暴露,结果某天股票停牌了,收益率全是0,回归直接崩了。记得做数据清洗,把停牌日、涨跌停日剔除掉。

4.2 横截面回归

这个方法正好反过来。你不是用时间序列去估计单个股票的暴露,而是在某个时间截面上,用所有股票的收益率去反推因子暴露。

具体怎么做?Fama-MacBeth两步法就是典型代表:

  1. 第一步:在每个时间点t,用所有股票的收益率对因子暴露做横截面回归,得到因子收益率f_t
  2. 第二步:对f_t取时间序列平均,得到因子溢价的估计

你想想看,这跟时间序列回归的区别在哪?时间序列回归是“已知因子收益率,求暴露”;横截面回归是“已知暴露,求因子收益率”。

实际应用中,横截面回归更适合做因子选股。比如你知道某只股票的市值、账面市值比这些特征(这就是暴露),你想知道这些特征在市场上能带来多少收益——那就用横截面回归。

# 伪代码示例:横截面回归
# 在每个时间点t,对所有股票做回归
# R_t = X_t * f_t + ε_t
# 其中R_t是股票收益率向量,X_t是因子暴露矩阵,f_t是因子收益率向量

import numpy as np

def cross_sectional_regression(R_t, X_t):
    # R_t: (N,) 股票收益率
    # X_t: (N, K) 因子暴露矩阵
    f_t = np.linalg.lstsq(X_t, R_t, rcond=None)[0]
    return f_t

个人经验:横截面回归对异常值特别敏感。我建议用Winsorize处理一下极端收益率,不然一个涨停板就能把整个截面的因子收益率带偏。

4.3 面板数据方法

时间序列和横截面各有各的局限。时间序列只用了单个资产的历史信息,横截面只用了单期截面的信息。那能不能两个都用上?

当然可以。面板数据方法就是把时间序列和横截面揉在一起,同时利用两个维度的信息。常见的模型有:

  • 固定效应模型:假设每个股票有个体效应(不随时间变化的特质)
  • 随机效应模型:假设个体效应是随机的
  • 混合效应模型:假设所有股票共享相同的截距

我个人习惯用固定效应模型做因子暴露估计。为什么?因为股票之间差异太大了,你很难相信所有股票共享同一个截距项。固定效应模型允许每个股票有自己的“基准收益”,这更符合实际情况。

# 面板数据回归示例(固定效应)
# 使用 linearmodels 库
from linearmodels.panel import PanelOLS

# 假设数据格式:MultiIndex (股票, 时间)
# y: 股票收益率
# X: 因子暴露(注意:这里X是随时间变化的)

model = PanelOLS(y, X, entity_effects=True)
result = model.fit()
print(result.params)

关键区别:面板数据方法能控制不可观测的个体异质性。说白了,它能帮你剔除那些“说不清道不明”的股票特质影响,让因子暴露估计更干净。

4.4 三种方法的对比

说了这么多,到底该用哪个?我整理了个表格,你一看就明白:

方法 适用场景 优点 缺点
时间序列回归 已知因子收益率,求单个资产暴露 直观、易实现、可滚动更新 需要长历史数据,对异常值敏感
横截面回归 已知资产特征,求因子溢价 能捕捉截面差异,适合因子选股 每期样本量有限,易受极端值影响
面板数据方法 同时利用时间和截面信息 控制个体效应,估计更稳健 模型设定复杂,计算量大

我记得有一次做多因子套利策略,用时间序列回归估计出来的暴露,回测效果不错,但实盘就崩了。后来发现是因子暴露随时间漂移得太厉害,滚动窗口根本跟不上。换成面板数据方法后,暴露估计稳定多了,策略也活过来了。

我的建议:如果你做的是高频统计套利,用时间序列回归就够了,简单快速。如果是低频选股策略,面板数据方法更靠谱。横截面回归嘛,更适合做学术研究或者因子挖掘。

4.5 本章知识体系

下面这张图帮你理清三种方法的关系和适用场景:

因子暴露估计方法体系 因子暴露估计 时间序列回归 横截面回归 面板数据方法 滚动窗口 Newey-West Fama-MacBeth Winsorize 固定效应 随机效应 核心原则:方法选择取决于数据频率、资产数量、因子特性 高频用时间序列,低频用面板,因子挖掘用横截面

三种方法没有绝对的好坏,关键看你的数据条件和策略需求。我个人建议:先用时间序列回归快速验证想法,再用面板数据方法做精细化估计。别一上来就搞复杂的模型,容易把自己绕进去。