【维克】线性回归入门:用一条线预测未来
年化20%量化笔记 · 第34篇
WHY 为什么你需要理解这条"最简单的线"
一个让我重新认识"简单"的时刻
2019年底,我刚转做量化不到半年,满脑子都是复杂的模型——LSTM、强化学习、图神经网络,觉得自己不整点"高大上"的东西就配不上"量化"两个字。
有天晚上,一个做了十五年量化策略的老前辈跟我说了句话:
"你知道我每天开盘前要跑的第一个模型是什么吗?线性回归。不是因为它复杂,恰恰是因为它简单到能告诉你——市场此刻到底在干什么。"
我当时不以为然,觉得这是老一辈的技术审美。直到三个月后,我的深度学习策略在实盘里连续回撤8%,而这个前辈的线性回归模型稳稳地跑着。
我复盘了两边的信号才发现:他的线性回归模型在第3天就发出了减仓信号,因为关键变量的回归系数开始翻转。而我的LSTM还在"学习"——等到它识别出风险时,回撤已经发生了。
这件事彻底改变了我对"简单模型"的态度。线性回归不是一根"幼稚的线",它是所有统计建模的起点,是理解市场结构的窗口,更是你在被复杂模型晃晕时,拉你回地面的那条绳索。
线性回归到底是什么?用一句话说清楚
想象你有一堆散点图——横轴是某个指标(比如过去20天的波动率),纵轴是你关心的结果(比如下个月的收益率)。
你的问题是:这两个变量之间,有没有一条"最优的直线",能最好地描述它们的关系?
线性回归做的事情就是:在所有可能的直线中,找到那根和所有数据点"距离总和最小"的线。
数学上表示为:
Y = β₀ + β₁X + ε
•Y:你要预测的东西(因变量),比如下月收益率
•X:你用来预测的东西(自变量),比如过去20天波动率
•β₀:截距,当X=0时Y的值
•β₁:斜率(回归系数),X每变动1单位,Y平均变动多少
•ε:残差(误差项),模型无法解释的部分
就这么简单。但别被这个"简单"骗了——整个统计学大厦,从这个公式开始。
为什么线性回归在量化交易里如此重要
三个核心理由:
1. 它是所有复杂模型的"地基"
逻辑回归、岭回归、LASSO、主成分分析、甚至神经网络——它们的底层逻辑都建立在"最小二乘法"之上。不理解线性回归,你学后续模型就是空中楼阁。
2. 它是你验证"因子有效性"的第一把尺子
在量化里,当你发现一个新因子(比如市盈率倒数、动量排名),第一个要回答的问题是:"这个因子和收益率之间有没有显著的线性关系?"
答案就在回归系数 β₁ 的大小和显著性里。
3. 它是你理解市场结构的"透视镜"
用线性回归,你可以:
•估算一只股票的Beta系数(它和市场涨跌的敏感度)
•判断一个因子在不同市场状态下是否稳定
•发现变量之间是否有"趋势性"的关联
简单,但强大。这就是线性回归的价值。
HOW 怎么理解和使用线性回归
第一步:理解"最优"是怎么算出来的
线性回归的核心算法叫最小二乘法(Ordinary Least Squares, OLS)。
它的思路非常直觉:
1.先随便画一条线(比如 Y = X)
2.计算每个数据点到这条线的"垂直距离"(也就是残差)
3.把所有残差平方后加总(平方是为了让正负误差不互相抵消)
4.调整线的参数,让"残差平方和"最小
最终找到的那条线,就是"最优拟合线"。
用一个具体的例子感受一下:
假设你有5天的数据,横轴是当日成交量(万手),纵轴是收盘价涨幅(%):
日 | 成交量X | 涨幅Y |
1 | 100 | 1.2 |
2 | 150 | 1.8 |
3 | 80 | 0.5 |
4 | 200 | 2.3 |
5 | 120 | 1.0 |
用OLS拟合出来的回归方程可能是:
Y = -0.3 + 0.013X
意思是:
•截距β₀ = -0.3:成交量为0时(理论上),预期涨幅为-0.3%
•斜率β₁ = 0.013:成交量每增加1万手,涨幅平均增加0.013%
这条线不是完美的——有些天实际涨幅偏离了线,但它是"最不可能偏离"的那条线。
第二步:读懂两个关键数字
拟合出一条线之后,你要重点关注两个统计量:
① 回归系数 β₁ 及其显著性
β₁ 告诉你方向和力度:
•β₁ > 0:正相关,X增大Y也增大
•β₁ < 0:负相关,X增大Y减小
•β₁ ≈ 0:几乎没有线性关系
但更重要的是:这个系数"靠不靠谱"?
这就是t统计量和p值的作用:
•p值 < 0.05:系数在统计上显著,这个关系大概率不是碰巧的
•p值 > 0.05:系数不显著,不能排除是噪声
一个常见的错误:只看β₁的正负和大小,不看显著性。系数看起来再漂亮,如果p值大于0.05,你就不能说"这个变量真的有用"。
② R²(决定系数)
R²衡量的是"回归线解释了多少数据的变化",范围0到1。
•R² = 0.8:模型能解释80%的因变量变动,拟合得很好
•R² = 0.2:只能解释20%,大部分变动在残差里
•R² = 0.01:几乎没解释什么,这条线和"取均值"差不多
在金融数据中,R²普遍偏低。别被吓到——在股票收益率预测中,R² = 0.05(解释5%的变动)的模型就已经很有用了。因为金融数据噪声极大,能解释5%的信号,乘以足够大的资金量和交易频率,就是真金白银。
我见过太多新手拿R²=0.3的模型沾沾自喜,但那通常是在低噪声的合成数据上跑出来的。在真实的A股日频数据里,R²能到0.08就已经是值得深挖的信号了。
第三步:用Python跑你的第一个线性回归
来,写几行代码感受一下。假设我们用的是量化中经典的Fama-French因子分析场景:
// python
import numpy as np
import statsmodels.api as sm
# 模拟数据:过去20日动量(X) vs 下月收益率(Y)
np.random.seed(42)
n = 252 * 5 # 5年的日频数据
momentum = np.random.normal(0.001, 0.02, n) # 动量因子
returns = 0.05 * momentum + np.random.normal(0, 0.01, n) # 收益率 = 0.05*动量 + 噪声
# 线性回归
X = sm.add_constant(momentum) # 添加截距项
model = sm.OLS(returns, X).fit()
# 查看结果
print(model.summary())
运行后你会看到一份详细的统计报告,重点关注:
看什么 | 在哪看 | 判断标准 |
回归系数方向 | coef 列 | 正/负 |
系数是否显著 | P>\ | t\ |
模型解释力 | R-squared | 金融数据中 > 0.03 就值得关注 |
标准误 | std err | 越小越精确 |
实操建议:把上面的代码保存成一个脚本,换不同的因子反复跑,建立对"什么样的回归结果算好、什么算差"的直觉。
第四步:线性回归在量化中的5个经典应用场景
场景1:Beta系数估算
个股收益率 = α + β × 市场收益率 + ε
β就是这只股票相对于大盘的敏感度。β=1.3意味着大盘涨1%,该股平均涨1.3%。
这是CAPM模型的核心,也是所有风险模型的基础。
场景2:因子收益分析
你构建了一个"低市盈率"因子,想知道它到底有没有用:
因子组合收益 = α + β × 因子暴露 + ε
如果β显著为正,说明因子有超额收益。α(截距)如果显著为正,说明因子在控制了暴露之后,还有"纯Alpha"。
场景3:配对交易的价差建模
两只相关股票的价格走势:
股票A价格 = β₀ + β₁ × 股票B价格 + ε
当实际价差偏离回归预测值超过2倍标准差时,可以做均值回归交易——做空贵的、做多便宜的。
场景4:趋势线的量化定义
你画了一条趋势线?量化不靠眼睛画。用线性回归拟合收盘价:
收盘价 = β₀ + β₁ × 时间 + ε
β₁ > 0 且显著:上升趋势成立
β₁ ≈ 0 或不显著:没有趋势,别强行画线了
场景5:残差Alpha
这是最被低估的用法。回归模型解释不了的部分(残差ε),本身可能就是信号:
如果一只股票的实际表现持续好于回归模型的预测(残差持续为正),它可能在被低估。反之亦然。这种"回归残差策略"在学术文献中有大量验证。
第五步:理解线性回归的前提假设(以及违反时会怎样)
线性回归不是万能的。它有4个关键假设,违反任何一个,结果都不可信:
假设 | 含义 | 违反后果 | 金融数据常见问题 |
线性关系 | X和Y真的是线性关系 | 模型拟合差,预测不准 | 金融变量经常是非线性的 |
独立性 | 残差之间互不影响 | 标准误被低估,t检验失效 | 收益率有序列相关性 |
同方差性 | 残差的波动率稳定 | 标准误不可靠 | 波动率聚集是金融数据的典型特征 |
正态性 | 残差近似正态分布 | 极端值影响大 | 金融残差常有厚尾 |
我的建议:先跑回归,看结果,再逐步检查假设。不用一开始就纠结"假设是否完美满足"——金融数据永远不完美,关键是你清楚模型的局限在哪里。
WHAT 线性回归能给你什么
预期成果
完成本篇学习后,你应该能够:
1.理解线性回归的数学本质:OLS最小二乘法如何找到最优拟合线,以及为什么它是最优的
2.正确解读回归输出:β系数的方向与显著性、R²的含义、t统计量和p值的判断
3.识别关键假设:线性回归的4个前提假设,以及金融数据中哪些假设经常被违反
4.写出第一个回归模型:用Python和statsmodels完成一次完整的因子分析
5.建立"简单模型优先"的思维习惯:在追求复杂之前,先用最简单的模型建立基准
- ☐用statsmodels跑一次线性回归,打印summary,逐行理解每个统计量
- ☐选一个你感兴趣的因子(比如"5日动量"、"20日波动率"),对A股某个行业的指数做单因子回归
- ☐观察R²值——如果不到0.05,想一想:是这个因子真的没用,还是金融数据噪声太大?
- ☐改变回归的时间窗口(比如从5年改成1年),观察β系数是否稳定——不稳定的话,这个因子可能不够可靠
- ☐画一张散点图+回归线的可视化图,直观感受一下"拟合"是什么
练习:
- ☐用线性回归估算你持仓中3只股票的Beta值,和你的直觉感受对比一下
- ☐试着用回归残差构建一个简单的"做空高估/做多低估"策略
- ☐读一篇Fama & French的原始论文,看看他们怎么用线性回归拆解股票收益的来源
可量化的产出
指标 | 目标 |
代码脚本数量 | ≥ 1个可复用的线性回归分析模板 |
因子分析次数 | ≥ 3个不同因子的回归结果对比 |
Beta估算 | ≥ 3只股票的β值计算完成 |
可视化图表 | ≥ 1张散点+回归线+残差的综合图 |
最后想说的话
很多人觉得线性回归"太简单了",不屑于学。
但我想告诉你:在量化交易里,能把简单模型用到极致的人,比那些只会堆砌复杂模型的人,走得更远。
巴菲特说过一句类似的话——"我宁可用一个简单的价格买到一个好公司,也不想用复杂的方法做一笔模糊的交易。"
量化也一样。先用线性回归建立你的"基准线",知道简单模型能做到什么程度,再决定是否需要更复杂的工具。
下一篇文章,我们要把这条线从"一个变量"扩展到"多个变量"——多元回归分析。因为真实世界里,影响收益率的从来不只有一个因素。
一条线,只是开始。但这条线,你会用很久很久。
��下一篇预告:第35篇《【维克】多元回归分析:当一个变量不够用时》
