【维克】多元回归分析:当一个变量不够用时

0 阅读10分钟

年化20%量化笔记 |

模块:数学与统计基础

WHY:为什么一元回归远远不够?

真实市场从不只有一个变量

上一篇我们聊了一元线性回归,用一个自变量去解释另一个变量的变化。这在做初步探索时很有用,但如果你真拿它去做交易决策,很快就会撞墙。

为什么?因为市场从来不会只受一个因素影响。

举个最直观的例子:你想预测某只股票明天的收益率,你觉得只看一个因素够吗?

• 只看大盘涨跌幅?不够。同一天的两只股票,大盘涨1%,一只涨3%,一只跌1%。

• 只看成交量?不够。放量可能是利好也可能是恐慌。

• 只看行业表现?不够。同行业的龙头和垃圾股走势天差地别。

真实世界里,结果几乎总是被多个因素同时驱动。

这就是多元回归要解决的问题——当"一个变量不够用"的时候,我们怎么把多个变量同时纳入模型,搞清楚每个因素到底贡献了多少?

从"简单直觉"到"系统建模"的认知跃迁

很多量化新手会经历这样一个阶段:

1. 先找到一个"感觉有用"的指标(比如动量因子),做单因子回测,发现有点alpha。

2. 再找第二个指标(比如波动率),单独测,也有点用。

3. 然后直接叠加,心想两个有用的加一起应该更好吧?

4. 结果发现:叠加效果不如预期,有时甚至更差。

这就是为什么需要多元回归。它能帮你解决一个核心问题:在多个因素同时存在的情况下,每个因素的真实贡献到底是多少?它们是独立起作用的,还是互相干扰的?

不做这一步,你永远是在"盲堆因子",跟炒菜不放盐随便乱炖差不多。

为什么这个话题值得专门写一篇?

我自己在因子研究的路上吃过不少亏。早期我特别迷信"找到一个牛逼因子就够了",后来发现,一个因子再好,放进多因子模型里可能完全失效。

比如你发现"低市盈率"能预测股票收益,这在单因子测试里可能非常漂亮。但如果你同时控制了"市值"这个变量——低PE的股票往往是小市值股票——你会发现PE的独立解释力大幅下降。

这就是多元回归的魅力:它能帮你区分"真有用"和"搭便车"。

HOW:多元回归怎么做?

从一元到多元:模型的扩展

一元线性回归长这样:

多元线性回归就是一元版的自然扩展:

看起来只是多了几个变量,但背后的复杂度和需要注意的问题完全不是一个量级。

关键参数解读:

beta_0\\beta\_0:截距项,所有变量为0时的基准值

beta_i\\beta\_i:第i个变量的回归系数,控制其他变量不变时,Xi每变动1个单位,Y的平均变动量

varepsilon\\varepsilon:误差项,模型无法解释的部分

注意"控制其他变量不变"这个前提,这是多元回归系数的核心含义——它衡量的是净效应,不是总效应。

在量化中的实际应用场景

让我给你三个真实场景,看看多元回归在量化交易中怎么用:

场景一:多因子收益预测

你想预测股票未来一个月的收益率Y,选了三个因子:

• X1:过去20天的动量(收益率)

• X2:过去20天的波动率

• X3:市盈率PE的倒数(盈利收益率)

建立多元回归:

跑完回归后,你看每个系数的显著性(t检验),就能知道哪个因子在"控制其他因子后"还有独立的预测力。

场景二:风险归因

你的策略年化收益25%,但你想知道这25%到底从哪来的?是仓位选择的贡献,还是择时的贡献,还是行业配置?

用多元回归,把各维度的收益贡献作为自变量,总收益作为因变量,就能拆解出每个因素的"真实贡献"。

场景三:对冲比率计算

你持有一个股票组合,想用股指期货和国债期货来对冲。问题是:分别该用多少手?

这就是一个典型的多元回归问题:

就是你需要的最优对冲比率。

多元回归的核心陷阱:多重共线性

这是多元回归里最重要的一个坑,没有之一。

什么是多重共线性?简单说就是你的自变量之间高度相关。

举个例子,你想同时用以下三个因子来预测股票收益:

• X1:总市值(对数)

• X2:流通市值(对数)

• X3:自由流通市值(对数)

这三个变量高度相关(相关系数可能>0.95),把它们同时放进回归模型会出什么问题?

1. 系数估计不稳定:稍微变动几个样本,系数可能从正变负、从小到大剧烈波动

2. 标准误膨胀:t检验可能变得不显著,即使这些变量确实有用

3. 系数失去可解释性:因为"控制其他变量不变"这个前提已经不成立了——你不可能独立改变总市值而不改变流通市值

怎么检测多重共线性?

最常用的是VIF(方差膨胀因子,Variance Inflation Factor):

其中

是把第j个变量作为因变量、其他所有变量作为自变量做回归得到的R²。

经验法则:

• VIF < 5:问题不大

• VIF在5-10之间:需要警惕

• VIF > 10:严重共线性,必须处理

怎么处理多重共线性?

| 方法 | 适用场景 | 操作方式 | | --- | --- | --- | | 删除变量 | 有高度相关的冗余变量 | 保留信息量更大、逻辑更强的那个 | | 主成分分析(PCA) | 变量多且都相关 | 将相关变量降维为正交的主成分 | | Ridge回归 | 想保留所有变量但系数不稳定 | 添加L2惩罚项,牺牲无偏性换取稳定性 | | 逐步回归 | 变量很多,需要筛选 | 逐步添加/删除变量,看VIF和AIC变化 |

用Python跑一个多因子回归

给你一段可以直接跑的代码框架:

// python
import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor
# 1. 准备数据
# 假设df包含:stock_return(因变量), momentum, volatility, ep, size
df = pd.read_csv('factor_data.csv')
# 2. 构建自变量矩阵
X = df[['momentum', 'volatility', 'ep', 'size']]
X = sm.add_constant(X)  # 添加截距项
y = df['stock_return']
# 3. 拟合多元回归模型
model = sm.OLS(y, X).fit()
print(model.summary())
# 4. 检查VIF
vif_data = pd.DataFrame()
vif_data['feature'] = ['momentum', 'volatility', 'ep', 'size']
vif_data['VIF'] = [variance_inflation_factor(X.values, i)
for i in range(1, X.shape[1])]  # 跳过常数项
print(vif_data)
# 5. 如果VIF过高,尝试删除VIF最高的变量,重新回归

解读回归结果的关键指标:

:模型能解释多少因变量的变异。量化因子模型里,截面回归的R²通常很低(0.02-0.10),这很正常,不用焦虑。

Adjusted R²:考虑了变量个数的R²,用于比较不同变量数量的模型。

各系数的p值:<0.05通常认为显著,说明该因子在控制其他因子后仍有独立预测力。

F统计量的p值:检验"所有系数同时为0"的原假设。如果这个不显著,说明整个模型没有解释力。

一个容易忽视的问题:样本量要求

多元回归有个基本要求:样本量至少应该是自变量个数的10-20倍

如果你有10个因子变量,至少需要100-200个观测值。在量化场景中,如果做月度截面回归,每个截面至少有几十只股票还好说;但如果你的数据本身就很短(比如只有50个交易日),变量又多,就会"过参数化"。

这其实和后面的过拟合问题是相通的——变量太多、样本太少,模型就会"记住噪声"而不是"发现规律"。

WHAT:掌握多元回归后你能得到什么?

可量化的能力产出

学完这篇,你应该能完成以下具体任务:

| 能力项 | 量化指标 | 验证方式 | | --- | --- | --- | | 构建多因子模型 | 能同时纳入3-10个因子进行回归 | 跑通statsmodels的OLS回归 | | 检测共线性问题 | 计算所有变量的VIF值 | VIF结果全部<10 | | 解读回归结果 | 准确说明每个系数的含义和显著性 | 能向非专业人士解释结果 | | 处理共线性 | 至少掌握2种处理方法 | 成功降低高VIF变量的影响 |

1. 本周***:选3个你熟悉的因子(比如动量、波动率、市值),获取过去1年的月度数据,跑一个多元回归,看每个因子的系数是否显著。*********

2. VIF检查:计算你模型中每个变量的VIF,如果有超过10的,分析原因并尝试处理(删除或替换)。

3. 对比实验

◦ 先跑一元回归(每个因子单独回归),记录R²和系数

◦ 再跑多元回归(所有因子一起),记录R²和系数

◦ 对比差异,思考:为什么加入其他变量后,某些因子变得不显著了?

4. 进阶练习:尝试对同一组因子,分别做截面回归(同一时间点、不同股票)和时间序列回归(同一只股票、不同时间点),体会两种回归的区别。

多元回归在策略开发中的位置

多元回归不是终点,它是你因子研究的"中间站"。从这里出发,你会自然地走向几个方向:

因子筛选:通过回归系数的显著性,淘汰"搭便车"的因子 → 第36篇(回归诊断)

正则化方法:变量太多怎么办?用Lasso/Ridge自动筛选 → 第37篇

非线性关系:万一因子和收益不是线性关系?→ 后续机器学习篇章

因子正交化:让因子之间不相关,消除共线性 → 因子投资模块

多元回归是连接"单因子分析"和"多因子模型"的桥梁。跨过这座桥,你的量化研究就从"一个一个因子瞎试"升级到了"系统性地评估因子组合"。

一个真实的经验数据

分享我自己的一个案例。我曾经用5个因子做截面回归预测A股月度收益:

| 因子 | 一元回归系数 | 一元回归t值 | 多元回归系数 | 多元回归t值 | VIF | | --- | --- | --- | --- | --- | --- | | 动量 | 0.032 | 2.85 | 0.011 | 0.92 | 3.2 | | 波动率 | -0.045 | -3.12 | -0.038 | -2.74 | 1.8 | | PE倒数 | 0.028 | 2.15 | 0.005 | 0.38 | 7.6 | | 市值(对数) | -0.051 | -4.23 | -0.044 | -3.51 | 2.1 | | 换手率 | 0.019 | 1.67 | -0.008 | -0.65 | 8.9 |

你会发现:

• 动量和PE倒数在多元回归中变得不显著了,因为它们和市值有一定相关性(小盘股往往PE低、动量高)

• 波动率和市值保持显著,说明它们有独立的解释力

• 换手率的VIF接近9,和动量有共线性(高动量往往伴随高换手)

这个例子很好地说明了多元回归的核心价值:它能帮你剥离因子之间的重叠,找到真正独立的alpha来源。

下一篇预告:【维克】回归诊断:如何知道你的模型是不是"坏了"?

模型跑出来了,结果怎么看?残差是不是正态分布?有没有异常值在偷偷影响你的结论?下篇讲回归后的"体检报告"。