如何使用线性回归构建 Alpha 信号(量化框架)

@RohOnChain
英语2个月前 · 2026年6月08日
475K
339
30
23
824

TL;DR

本指南深入剖析了交易中线性回归的机构级应用方法,解释了如何从 Beta 中分离 Alpha、使用 p 值验证信号,以及通过样本外测试来抵御市场噪音。

我将详细解析如何使用线性回归来赢得每一笔交易,构建真正的 alpha 信号,并分享确切的获胜代码。

让我们直接开始。

收藏本文

- 我是 Roan,一名后端开发者,专注于系统设计、高频交易执行和量化交易系统。我的工作关注预测市场在负载下的真实表现。欢迎任何建议、深思熟虑的合作、合伙关系,私信开放。

每个量化交易者都有类似的故事。

你花一周时间建了一个模型。回测看起来完美,权益曲线直线上升,你认为终于找到了。然后实盘。两周后亏损,而你完全不知道为什么。

我见过这个循环终结的量化交易者职业生涯比任何市场崩盘都多。模型从来就不是真的。它是伪装成信号的噪音。而整个领域中最有价值的技能,就是在冒一分钱风险之前,学会区分这两者。

这项技能始于量化金融中最被低估的工具。

线性回归。

我知道这听起来像什么。线性回归是每个人都以为花一个下午就学会然后丢到一边的东西。但接下来我花了多年时间和实际亏损才明白。顶级公司里管理数十亿美元的人,大部分核心信号用的并不是花哨的深度学习怪物。他们用的是线性回归——理解得比大多数人深入得多,应用得比大多数人自律得多。

看看历史上最成功的交易机构。

詹姆斯·西蒙斯正是在这个基础上建立了文艺复兴科技。他的大奖章基金在 1988 年至 2018 年间平均年化总回报率约 66%,是有史以来最好的记录。而据他自己的团队称,该基金只在约 50.75% 的交易中正确。在数百万笔交易中,那微薄的胜率复利增长至超过 1000 亿美元。他们并没有预测未来。他们是从噪声的海洋中提取出一个微小、真实、可重复的信号——这正是回归分析所擅长的。

AQR,目前管理约 1790 亿美元,基于回归因子模型建立了帝国。

PDT Partners 多年来运行统计套利,没有任何一个亏损年份。

这是没有人教过你的线性回归版本。

读完本文,你将理解线性回归的真正含义、alpha 的实际意义、如何用真实代码从头构建单因子和多因子信号、如何像机构研究员一样解读回归输出、区分真实信号与巧合的确切检验方法,以及为什么即使是真实信号最终也会消亡。

注意:本文故意写得很长,每个部分都建立在前一部分之上。如果你认真想构建能实盘存活的信号,请逐字阅读。如果你想要一个神奇指标,那这篇文章不适合你。

第一部分:线性回归到底是什么

Roan - inline image

线性回归找到一条同时最接近所有数据点的直线。

暂时忘掉金融。

线性回归就是在一堆点云中画出最佳直线的数学方法。

想象一下绘制房屋面积与房价的关系。房子越大价格越高,所以点向上漂移。线性回归找到最接近所有这些点的一条直线。输入新房的面积,就可以读出预测价格。这就是全部想法。它是一个学习输入与输出之间关系,然后用于预测的机器。

吴恩达在他著名的斯坦福机器学习课程中就是用这个房价例子开场的,因为它是最简单的学习算法,也是其他一切的基础。

这条线的公式你在学校就学过:

y = a + b x

这里 y 是你预测的值,x 是输入,b 是斜率——y 随 x 上升的陡峭程度,a 是截距——x 为零时 y 的值。找到最佳 a 和 b 的方法是普通最小二乘法(Ordinary Least Squares, OLS)。在无数可能的直线中,OLS 选择那条使直线与实际数据点之间差距的平方和最小的直线。因为平方,所以上方和下方的偏差都算数,而且大偏差受到的惩罚远大于小偏差。

你可以在几行代码中看到整个过程:

python
1import numpy as np
2import statsmodels.api as sm
3
4x = np.array([1400, 1600, 1700, 1875, 2350, 2450]) # 房屋面积
5y = np.array([245, 312, 279, 308, 405, 324]) # 价格(千美元)
6
7X = sm.add_constant(x) # 添加截距项 'a'
8model = sm.OLS(y, X).fit()
9print(model.params) # 输出 a 和 b

现在把它带入市场。在交易中,你的 y 变成资产的回报,x 变成你认为能预测该回报的因子。斜率变成你对那个因子的敏感度。而那个不起眼的截距 a,变成了量化金融中最最重要的数字。原因如下。

第二部分:Alpha 到底是什么

Roan - inline image

总回报分为 beta——市场解释的部分,和 alpha——市场无法解释的部分。

大多数交易者用 alpha 这个词来表示利润。这是错误的,而且代价高昂。

Alpha 是你的策略获得的、无法用已知风险因子的暴露来解释的回报。如果你一年赚了 20%,但市场也赚了 20%,那么你的 alpha 是零。你只是持有 beta——承担市场风险所获得的回报。你因为乘上了浪潮而获得报酬,而不是因为技能。

这种区分就是整个游戏的核心,而回归是分离两者的刀刃。基础模型。你的策略在时间 t 的回报,记作 rₜ,等于一个基准加上它对因子 Xₜ 的暴露再加上噪声:

rₜ = α + β Xₜ + εₜ

慢慢读。β 是你对因子的敏感度。如果因子是市场,beta 表示当市场变动时你变动得多厉害。εₜ 是随机噪声,没有因子能解释的部分。而 α,截距,是当因子贡献为零时你平均获得的回报。

那个截距就是全部奖励。如果在剥离所有已知风险因子后,你的策略仍然显示出正的、统计显著的 alpha,那你就找到了真正的东西。如果一旦考虑了因子,alpha 就消失了,那么你从未拥有过优势。你有的只是伪装成天才的 beta。

迈克尔·詹森在 1968 年首次用这种方式定义了技能,当时他测试了共同基金经理是否真的能击败市场。他运行了这个确切的回归,并问了一个问题:截距是否显著非零?将近六十年后,这仍然是评估机构业绩的方式。它被称为詹森 alpha,是这个领域的基石。

所以当你构建信号时,你的工作绝不是最大化原始回报。而是要产生一个在已知因子消失后仍然存在的正截距。记住这一点。其他一切都为之服务。

第三部分:从头构建你的第一个信号

Roan - inline image

真正的信号只在剥离所有已知因子后衡量 alpha。

让我们先构建最简单的真实模型,然后提升到机构级别。假设你认为一个资产的回报可以部分地被一个因子预测——相关资产的前期回报、动量指标、价值指标。单因子回归是:

rₜ = α + β Xₜ + εₜ

在 Python 中只有几行代码,而截距是你绝不能跳过的部分:

python
1import statsmodels.api as sm
2
3# X 是你的因子序列,y 是你想解释的资产回报
4X = sm.add_constant(X) # 这一行创建了你的 alpha 截距
5model = sm.OLS(y, X).fit()
6print(model.summary())

那行 add_constant 不是形式。它是创建 alpha 项的行。忘记它,你就强行使直线穿过原点,丢弃了整个输出中最重要的数字。

但现实世界从来不是只有一个因子。一个严肃的信号同时考虑多种影响。这就是多因子模型:

rₜ = α + β₁X₁ₜ + β₂X₂ₜ + ... + βₖXₖₜ + εₜ

每个 beta 现在衡量其自身因子的效应,同时保持其他因子不变。“保持其他因子不变”这句话是回归的静默超能力。它隔离了每个因子的独特贡献,剥离了重叠部分。当你将你的策略回报对既定因子(市场、规模、价值、动量)进行回归时,截距中剩下的 alpha 就是你的优势中没有任何已知因子能解释的那部分。

python
1import statsmodels.api as sm
2
3# factors 是一个 DataFrame,每列一个因子,与回报 y 对齐
4X = sm.add_constant(factors)
5model = sm.OLS(y, X).fit()
6
7alpha = model.params['const'] # 你的候选优势
8p_alpha = model.pvalues['const'] # 对它的信任程度
9print("Alpha:", round(alpha, 5))
10print("Alpha p-value:", round(p_alpha, 4))

那个残差截距就是你的候选信号。从这往后的一切都是关于证明它是否真实。

这正是大多数公开教程止步的地方,也是机构工作真正开始的地方。因子构建、中性化处理、将原始信号转化为可交易组合的权重方案。如果你想确切了解像 AQR 这样的公司如何将这些回归转化为实盘因子投资组合,我会在那份详细分解中一步步讲完。

第四部分:像机构研究员一样解读输出

Roan - inline image

专业人士不问回报有多大。他们问自己有多确信这不是偶然。

当你运行那个总结输出时,大多数人只看一个数字就过去了。训练有素的研究员像读诊断报告一样读取它。以下才是真正重要的。

系数及其正负。

每个 beta 给出了方向和强度。在相信任何数字之前,先问问这个正负是否有经济意义。如果你的模型说在某个东西更贵时买入,而你无法解释原因,那你找到的是侥幸,不是因子。

p 值。

这是一切的核心。它回答一个问题:如果这个因子真的没有影响,那么纯粹偶然看到如此强的关系的可能性有多大?p 值为 0.62 意味着有 62% 的可能性你看到的只是随机运气。低于 0.05 是认真对待结果的常规门槛。一个量化交易者看到失败模型 p 值为 0.62,他看到的不是弱信号,而是纯噪声。

R 方。

你的模型解释的回报变异比例,这里有一部分会让初学者大惑不解。在回报预测中,高的 R 方通常是一个警告,而不是奖杯。真实的回报信号是微弱的。R 方为 0.01 或 0.02 如果持续且真实,可能利润丰厚。如果你在回报预测中看到 0.9,几乎可以肯定存在前视偏差,或者你不小心把某个东西与它自身做了回归。

t 统计量。

系数除以它的标准误。粗略规则是 t 统计量的绝对值大于 2 对应 0.05 阈值。严肃的研究人员对全新信号要求 3 或更高,正是因为他们知道在这之前他们默默测试了多少个信号。

你可以直接提取这些值,而不必阅读整个表格:

python
1print("t-stats:\n", model.tvalues)
2print("p-values:\n", model.pvalues)
3print("R-squared:", round(model.rsquared, 4))

内化这个转变。初学者问回报有多大。专业人士问我有多确信这个回报不是偶然。仅仅这一个问题的改变就是全部区别。

第五部分:区分真实信号与噪声的检验,以及信号为何消亡

Roan - inline image

让每个候选信号通过同样的考验。几乎没有能存活下来的,而这正是关键。

残酷的真相是:如果你测试足够多的随机信号,其中一些会纯粹因为偶然看起来有利可图。在 0.05 水平上测试 100 个无用的信号,大约有 5 个会仅凭运气通过。这就是多重检验问题,也是回测说谎的首要原因。以下是严肃团队如何防御。

样本外测试。

永远不要用你构建信号的数据来判断信号。将历史数据分割。用第一部分构建,在模型从未见过的那部分上测试。真正的信号能在跨越中存活。拟合出来的幻想一遇到新数据就会破灭。没有商量余地。

python
1split = int(len(y) * 0.8)
2X_train, X_test = X[:split], X[split:]
3y_train, y_test = y[:split], y[split:]
4
5model = sm.OLS(y_train, X_train).fit()
6oos_pred = model.predict(X_test) # 在未见过的数据上测试

信息系数(IC)。

机构因子研究员很少只凭一次回归成败。他们反复计算 IC——因子值与实际远期回报之间的相关性。平均 IC 大约在 0.03 到 0.05 以上、且在不同时期保持稳定的因子,每一次都胜过只有一次漂亮回测的因子。跨市场环境的稳定性才是真正的指标。

Newey-West 标准误。

金融数据违反了一个核心 OLS 假设,因为回报和波动性在时间上聚集。原始的 p 值会撒谎,通常会美化你的信号。Newey-West 对此进行了标准误修正。使用它悄然表明一个人知道自己在做什么。

python
1# Newey-West 修正显著性,机构默认设置
2model = sm.OLS(y, X).fit(cov_type='HAC', cov_kwds={'maxlags': 5})
3print(model.summary())

多重检验校正。

如果你尝试了 50 个信号,就不能用常规标准来评判胜者。简单的防御是 Bonferroni 校正——将你的阈值除以你测试的次数。试了 50 个信号?要求 p 值低于 0.001 而不是 0.05。这很残酷,但这就是关键。它迫使你诚实地面对你进行了多少次搜索。

让一个候选信号通过样本外验证、稳定的 IC、Newey-West 显著性以及多重检验校正,如果它仍然屹立不倒,你就拥有了大多数散户交易者一辈子都拿不出的东西——一个你真正赢得了信任权的信号。

但要理解最终的真相:即使是真实的信号也会衰减。Alpha 存在于市场无效性中,一旦信号被知晓并被交易,交易本身就会推动无效性消失。最近关于因子拥挤度的研究表明,机械的、易于复制的信号(如简单的动量)随着资本涌入会沿着一条陡峭的可预测曲线衰减,而且一旦因子投资通过 ETF 变得廉价,这种拥挤度急剧加速。最简单的信号最拥挤,死得最快。持久的优势存在于需要真正努力才能构建的信号中,存在于一个能比旧信号衰减更快地产生新信号的研究过程中。这就是为什么文艺复兴三十年来没有停止过一天研究。

作业: 拿一个你现在相信的信号。在你最近 20% 的数据上运行它——假装你从未见过这些数据。如果 alpha 消失了,那你就省下了真金白银。这是你将会运行的最有价值的测试。

第六部分:你刚刚构建的端到端系统

Roan - inline image

每个真实信号都会随着拥挤而侵蚀。取代它们的研究引擎才是真正的优势。

退一步,看看你现在拥有的完整机器,因为这些部件连接成一个清晰的管道。

你从一个因子开始——任何你认为携带未来回报信息的东西。你用 OLS 将资产回报对该因子进行回归,总是包含截距,那个截距就是你的候选 alpha。你扩展到多因子回归,这样你的 alpha 只有在剥离了已知风险因子(市场、规模、价值、动量)后才被测量。截距中剩下的是纯粹、无法解释的优势。

然后你拷问它。你读取 p 值来问它是否可能是运气。你检查正负号是否有经济意义。你忽略诱人的高 R 方,尊重诚实的低 R 方。你在模型从未接触过的数据上进行样本外验证。你计算多个时期的信息系数来确认信号是稳定的,而不是一次性的侥幸。你用 Newey-West 修正标准误,这样市场的时间结构不会欺骗你。你应用多重检验校正,这样你尝试的信号数量不会制造出一个虚假的胜者。

另一端出来的不是一个猜测。它是一个有可测量优势的信号、已知的置信水平、证明它在未见数据上存活、以及对它真实可能性的诚实核算。这就是模型两周就死掉的人与构建出持久东西的人之间的区别。

以下是它实际赚钱的方式:一个具有微小但真实且稳定优势的信号,跨多个独立机会交易,复利增长。文艺复兴的正确率勉强超过一半,却将其变成了市场历史上最伟大的财富,因为优势是真实的、可重复的,并且他们在巨量押注中正确配置了头寸。你现在正从同一个蓝图出发:构建信号,证明其真实,合理配置头寸,并在其 IC 开始衰减时立即替换。

那个替换循环就是整个职业生涯。一个信号是一笔交易。一个能持续产生真实信号且速度超过它们衰减的研究过程,才是一个永续的事业。

总结

线性回归不是你跳过的那种无聊工具。它画出穿过数据的最佳直线,它定义 alpha 到底是什么,它构建你的第一个真实信号,它测试那个信号是真实的还是噪声,它警告你信号何时开始消亡。

Alpha 是剥离所有已知风险因子后存活的截距。你用 OLS 构建一个候选信号,先单因子,然后多因子。你像研究员一样读取输出,其中 p 值和稳定性比回报大小更重要。你通过样本外验证、稳定的信息系数、Newey-West 误差以及对你尝试信号数量的校正来防御多重检验陷阱。你接受每个真实信号都会衰减,这意味着真正的优势是研究引擎,而不是任何单一模型。正是同一个引擎构建了历史上最伟大的基金。

那个盯着夏普比 0.03 和 p 值 0.62 的量化交易者并非运气不好。他跳过了本文中的纪律。不要学他。

这里有一个问题我希望你深思。

如果真正的 alpha 一旦广为人知就会衰减,那么公开信号会摧毁它,而藏匿信号意味着它仍然会随着他人独立发现而慢慢消亡。

那么持久的优势到底来自哪里?信号本身,还是替换它们的研究过程的速度?

你的答案揭示了你思考的方式:像一个追逐一次大胜的交易者,还是像一个构建能够打印优势几十年的机器的量化交易者。

在评论区留下你的答案。没有错误答案,但有些答案非常有启发性。

一键保存

使用 YouMind AI 深度阅读爆款文章

保存原文、追问细节、总结观点,并在一个 AI 工作空间里把爆款文章沉淀成可复用笔记。

了解 YouMind
写给创作者

把你的 Markdown 变成干净的 𝕏 文章

图片上传、表格、代码块,往 𝕏 上手动重排太痛苦。YouMind 把整篇 Markdown 一键转成干净、可直接发布的 𝕏 文章草稿。

试试 Markdown 转 𝕏

更多可拆解样本

近期爆款文章

探索更多爆款文章