Public note

从散点到损失函数:回归、Beta 与量化系统第一章(2026-07-17)

·Markdown 原文

从散点到损失函数:回归、Beta 与量化系统第一章(2026-07-17)

这不是一篇从公式开始的回归教程,而是一次认知路径的完整复盘:先把“时间序列”和“散点图”彻底分开,再理解回归线为什么会自动出现、为什么最小二乘不是“穿过最多点”,最后把损失函数放回 Alpha、风险、成本、组合与执行组成的完整量化系统里。

本文承接 quants/量化新手资产选择、策略与入门指南:资产品类全景图(2026年中版) 和 quants/机构级量化系统最小可运行模板选择指南:Top 5 开源仓库与学习路线(2026-07-15)。前两篇回答“量化可以做什么”和“完整系统怎样运行”,这一篇补上中间最重要的统计地基。

阅读指南

这篇文章解决什么问题

  1. 为什么两条随时间变化的价格曲线,换一种画法就会变成“一坨散点”。
  2. 散点图的横轴为什么不是时间,日期又去了哪里。
  3. 回归线是人手画出来的,还是算法算出来的。
  4. 为什么“命中最多散点”不是一条可用的最优标准。
  5. 最小二乘、残差、损失函数、Beta、相关系数和 R² 分别在说什么。
  6. 为什么模型在最小化损失,却不等于策略直接在最大化赚钱。
  7. OLS、树模型、XGBoost、LightGBM、深度学习、Transformer 和 Foundation Model 位于同一棵技术树的什么位置。

读完应该获得什么能力

  • 看到时间序列图和散点图时,不再混淆坐标轴含义。
  • 能用一句话解释回归线、残差、Beta、相关系数和 R²。
  • 能说明为什么最小二乘是一种选择,而不是宇宙唯一正确的规则。
  • 能把“模型损失”“组合目标”“执行目标”和“最终收益”分成四件事。
  • 能指出自己当前位于完整量化地图的哪一层,下一步为什么要学。

前置与后续阅读

  • 前置:不要求高等数学,只需要理解百分比收益率和二维坐标。
  • 建议顺序:本文 → 损失函数家族与稳健回归 → 因子检验与时间序列验证 → LightGBM/XGBoost → 风险、成本与组合构建。
  • 如果想先看代码骨架,回到 quants/机构级量化系统最小可运行模板选择指南:Top 5 开源仓库与学习路线(2026-07-15)。

快速结论

  1. 时间序列图里,横轴是日期;回归散点图里,横轴是一个变量,纵轴是另一个变量。 日期没有被画在轴上,而是变成了每一个点的身份。
  2. 回归线不是人凭感觉画的。 普通最小二乘回归会自动选择截距 α 和斜率 β,使全部纵向残差的平方和最小。
  3. “穿过最多点”不是最优标准。 连续数据中的点几乎不会恰好落在线上;如果人为规定“离线多近算命中”,答案又会随阈值变化。
  4. Beta 是斜率,不是相关系数。 Beta 回答“市场代理变动 1% 时,腾讯平均同向变多少”;相关系数回答“两者同步程度有多强”。
  5. R² 不是赚钱概率。 它只说明样本中线性模型解释了多少波动;高 R² 不保证有 Alpha,更不保证扣除成本后赚钱。
  6. 损失函数只负责训练模型。 最终收益还要经过风险模型、成本模型、组合构建、执行、成交和归因反馈。
  7. XGBoost、LightGBM 和深度学习没有抛弃损失函数。 它们仍然定义目标并优化,只是模型形状、正则化、优化方式和数据表达能力更复杂。
  8. 你当前的位置不是“学完回归”,而是刚建立了 Alpha 模型层的入口。 下一步先把数据口径、样本外验证和因子检验补牢,再上树模型。

这次真正值得保存的,是思考路径

知识点以后随时可以查,认知转折却很容易忘。今天的路径大致经历了六个节点。

节点一:误把所有横轴都看成时间

最初看到腾讯和恒生科技的图,直觉会把它想成两条随时间起伏的曲线:今天涨、明天跌,两条线彼此追逐。这种图当然存在,但它是时间序列图

节点二:意识到日期可以不再当坐标轴

对每一个交易日,都可以算出两个数:

  • 当天恒生科技市场代理的收益率 xt
  • 当天腾讯的收益率 yt

然后把同一天的两个数配成一个坐标 (xt,yt)。1 月 3 日是一个点,1 月 4 日又是一个点。所有日期做完以后,横轴已经不再是时间,而是恒生科技代理的日收益;纵轴是腾讯日收益。

节点三:困惑“一坨点为什么还能有一条线”

散点没有天然连线顺序。回归线也不是把点按日期连起来,而是在问另一个问题:有没有一条简单的直线,能够概括 x 与 y 的平均关系?

节点四:从“穿过最多点”追问到最优标准

人的眼睛容易把“最优线”理解为穿过最多点,或者尽量从点云中间划过去。但“中间”必须变成可计算的规则。最小二乘给出的规则是:把每个点的预测误差平方,再全部相加,找总和最小的那条线。

节点五:发现真正的核心是损失函数

一旦追问“为什么偏偏用平方误差”,问题就从画线进入了机器学习的核心:我们必须先定义什么叫错、错多少、怎样汇总,然后模型才知道应该往哪个方向调整。

节点六:意识到损失函数只是量化系统的一小块

模型拟合得好,不等于仓位合理;仓位合理,不等于能低成本成交;成交完成,也不等于收益来源可持续。损失函数属于 Alpha 模型内部,赚钱是整套系统共同作用后的结果。

第一部分:同一批日期,怎样从两条曲线变成散点

时间序列图保留了“先后顺序”

设腾讯复权价格为 Pt,恒生科技市场代理的复权价格为 Qt。时间序列图画的是:

  • 横轴:日期 t
  • 纵轴:PtQt

它适合回答:什么时候上涨、什么时候回撤、两个资产是否在相近时期转向。

回归散点图主动丢掉了“先后顺序”

先把价格转成日收益率:

rtTencent=PtPt11
rtHSTECH=QtQt11

再定义:

xt=rtHSTECH,yt=rtTencent

于是,每个交易日变成一个点 (xt,yt)。散点图不再强调 1 月 3 日发生在 1 月 4 日之前,而是把所有交易日放在一起,观察两个变量的共同变化结构。

[!important] 第一个“啊哈时刻” 时间并没有从数据中消失,只是没有继续占用坐标轴。日期现在是每个样本点的索引,而不是图上的 x 轴。

真实数据图:腾讯与恒生科技 ETF 代理

腾讯与恒生科技 ETF 代理:从时间序列到回归与损失函数

这张图使用 2024-01-02 至 2026-06-30 的港股日线复权收盘价:腾讯控股 00700,以及南方恒生科技指数 ETF 03033。恒生科技指数官方页面把 HSTECH 定义为符合筛选标准、在香港上市且科技主题业务暴露较高的 30 家大型科技公司;本文使用 03033 作为可交易代理,而不是把 ETF 数据冒充官方指数点位。恒生科技指数官方页面2026 年 3 月官方 Factsheet

为什么使用 ETF 代理:

  1. ETF 与腾讯都在港股交易时段成交,日期容易严格对齐。
  2. ETF 是可交易资产,更接近真实组合会面对的价格、流动性与跟踪误差。
  3. ETF 不是指数本身,会受费用、跟踪误差、折溢价和分红处理影响,因此结果应称为“对恒生科技暴露的代理回归”。

固定样本得到:

指标 结果 应该怎样读
价格观察数 611 两个标的都存在复权价格的共同交易日
日收益样本数 610 第一日只能作为计算下一日收益的基准
Beta 0.723 ETF 代理日收益变动 1% 时,腾讯日收益在样本内平均同向变动约 0.72%
相关系数 0.801 两者同日涨跌具有较强线性同步性
0.641 简单线性模型在样本内解释了腾讯约 64.1% 的日收益波动
日截距 Alpha 0.0459% 只是该窗口的回归截距,不能直接解释成可交易超额收益

这里最容易被误读的是 Alpha。把日截距机械复利年化约为 12.3%,不代表已经找到一个年化 12.3% 的策略:样本窗口有限,收益并不独立同分布,腾讯本身还是指数成分股,ETF 与指数存在跟踪误差,而且这里没有样本外验证、风险调整、交易成本和可执行组合。

数据页面:腾讯 00700 历史价格南方恒生科技指数 ETF 03033 历史价格。仓库里同时保存了固定 CSV 快照,避免以后数据源变化导致文章中的数字悄悄漂移。

第二部分:回归线到底是怎样算出来的

最简单的线性回归写成:

yt=α+βxt+εt

其中:

  • yt:当天腾讯真实收益。
  • α+βxt:模型根据当天恒生科技代理收益给出的预测。
  • εt:真实值减预测值,也就是残差。
  • α:截距。
  • β:斜率。

残差是“竖着量”的误差

对某个点 (xt,yt),回归线在同一个 xt 上给出预测 y^t

y^t=α+βxt

残差为:

εt=yty^t

普通最小二乘最小化的是纵向残差,不是点到直线的几何垂直距离。这是因为模型把 x 当解释变量,把 y 当被解释变量;把 x、y 对调后,得到的回归线通常不是原来那一条。

“最优线”必须先定义什么叫错

普通最小二乘的损失是:

L(α,β)=t=1n(ytαβxt)2

算法会找使 L 最小的 αβ。scikit-learn 对 LinearRegression 的定义也是最小化观测目标与线性预测之间的残差平方和。scikit-learn Ordinary Least Squares 文档

在只有一个解释变量且包含截距时,斜率可以直接写成:

β=Cov(x,y)Var(x)

截距是:

α=y¯βx¯

所以回归线不是“看着差不多”画出来的,而是由全部样本共同决定。

为什么不是“穿过最多点”

这个直觉有三个问题:

  1. 连续变量的点几乎不可能精确落在同一条线上,“精确命中数”通常接近零。
  2. 如果规定离线 0.1% 算命中,那么把阈值改成 0.2%,最优线可能立刻改变。
  3. 命中只区分对错,不区分偏差 0.21% 和偏差 10%,会丢失大量信息。

最小二乘则给每个点一个连续误差,并且平方会让大误差受到更重惩罚。上图右下角的 U 形曲线,就是在尝试不同 Beta 时得到的平方残差和;最低点对应当前样本的 β0.723

为什么最小二乘常用,但不是唯一选择

最小二乘有几个工程优点:

  • 在线性模型中目标函数凸,解稳定且容易计算。
  • 可微,便于优化。
  • 在条件误差近似高斯、方差稳定等假设下,有清晰统计解释。
  • 平方会强烈惩罚大误差。

但最后一点也是缺点:金融收益经常有厚尾和异常点,平方损失会被极端行情显著拉动。不同问题可以选择不同损失:

损失 主要关注 适合什么问题 代价
平方损失 L2 大误差惩罚更重 普通回归、可微基线 对异常点敏感
绝对误差 L1 误差绝对值 稳健回归 在 0 处不可微,优化与统计性质不同
Huber 小误差平方、大误差线性 同时要平滑与抗异常 要选择转折阈值
Quantile / Pinball 某个条件分位数 风险区间、尾部预测 不再预测条件均值
Log loss 概率是否校准 涨跌分类、事件概率 需要正确处理概率标签
Ranking loss 相对排序 横截面选股 排名好不等于收益和容量好

[!note] 它在量化地图中的位置 回归形式、标签、损失函数、正则化和训练算法都属于 Alpha 模型层。它们负责把特征变成预期收益、方向、概率或排序分数。

第三部分:Beta、相关系数、R² 和 Alpha 不要混成一件事

概念 核心公式或定义 回答的问题 不能回答什么
Beta Cov(x,y)/Var(x) x 变化 1 个单位时,y 平均变化多少 两者关系是否稳定、是否因果、策略是否赚钱
相关系数 Cov(x,y)/(σxσy) 两者线性同步程度有多强 变化幅度比例、因果方向
1SSE/SST 模型解释了样本中多少 y 的波动 样本外效果、Alpha、成本后收益
Alpha 截距 y¯βx¯ 当 x 为 0 时,模型给出的 y 条件均值 稳定超额收益或可交易收益保证

Beta 是带单位的斜率

如果 x、y 都用百分比收益,Beta 表示百分比变化的比例。本例 Beta 小于 1,只说明在这个样本窗口里,腾讯对 ETF 代理同日波动的线性敏感度较低;它不是“安全分数”,也不是“质量分数”。换基准、换频率、换窗口,Beta 都会变化。

相关系数是标准化后的同步程度

相关系数被限制在 -1 到 1。它不关心两者各自的波动单位,只关心标准化后的共同涨跌。本例相关系数约 0.801,说明点云大体沿右上方向分布,但仍存在明显残差。

简单一元回归中,R² 等于相关系数平方

包含截距的一元线性回归中:

R2=Corr(x,y)2

本例 0.80120.641。但加入多个特征、去掉截距、使用样本外 R² 或采用其他模型后,不能再不加条件地套用这条关系。

高 R² 可能只是高 Beta 暴露,不是 Alpha

如果腾讯与恒生科技代理同步性很强,模型很容易解释大量波动;但这种解释主要来自共同市场暴露。真正的 Alpha 问题是:在已知市场、行业、风格与其他风险暴露之后,是否还能产生稳定、样本外、成本后的增量预测。

第四部分:潜意识里的目标是赚钱,但模型看到的不是钱

“量化的目标不就是赚钱吗?”这句话在系统级别没错,在模型训练层面却过于模糊。系统里至少有四种不同目标。

1. 模型训练目标

模型看见特征 X 和标签 y,通过最小化 MSE、Log loss、Ranking loss 等损失学习参数。它负责预测,不直接知道你的资金、换手、冲击和回撤承受力。

2. 研究评估目标

研究者用样本外 IC、Rank IC、MSE、分类校准、分层收益、稳定性和特征漂移判断模型是否有增量信息。这一步要防止数据泄漏、幸存者偏差和反复试验造成的过拟合。

3. 组合构建目标

组合层常见的思想是:

maxw预期收益λ·风险γ·交易成本

同时满足仓位、行业、杠杆、流动性和换手约束。模型分数到这里才变成目标权重。

4. 执行目标

执行层要把目标权重变成真实订单,在成交概率、价差、冲击、时间风险和机会成本之间取舍。一个预测正确但无法成交的信号,对真实账户没有价值。

量化系统全景图:从数据到反馈

Excalidraw 可编辑源文件:量化系统全景图:从数据到反馈

这张图最重要的不是层数,而是接口:

输入 输出
数据层 原始行情、财务、事件、另类数据 可复现特征、标签、训练/验证/测试切分
Alpha 模型 特征与标签 预期收益、方向、概率或排名
风险模型 持仓、暴露、历史协方差与限额 风险预测和约束
成本模型 订单、价差、成交量、波动 预期费用、滑点、冲击与容量
组合构建 Alpha + 风险 + 成本 目标权重
执行模型 目标权重 + 市场状态 订单、成交、真实持仓与现金
归因反馈 收益、持仓、成交、风险 哪一层有效、哪一层失效、下一轮研究问题

[!important] 第二个“啊哈时刻” 损失函数不是量化系统的最终目标,而是 Alpha 模型训练时使用的局部语言。系统最终是否赚钱,要看预测信息能否穿过风险、成本、组合和执行层而不被消耗掉。

第五部分:从最小二乘到 XGBoost、LightGBM、Transformer

技术演进不是“新模型把旧模型推翻”,而是模型表达能力、训练方式和工程效率不断扩展。

技术 模型怎样表达关系 通常怎样训练 在量化中的价值 主要风险
OLS 一条直线或超平面 最小化平方损失 快、透明、适合做第一基线和暴露解释 线性假设、异常点、共线性、非平稳
决策树 按特征阈值切成多个区域 选择能最大幅度降低损失的切分 自动捕捉非线性和交互 单树不稳定、容易过拟合
GBDT 多棵树逐步叠加 每轮拟合当前损失的负梯度 强大的表格数据基线 时间泄漏、参数搜索过度、换手未约束
XGBoost 正则化的提升树集合 训练损失 + 模型复杂度,使用一阶/二阶信息 成熟、稳健、可处理稀疏特征 结果仍依赖标签、切分和样本外验证
LightGBM 直方图切分、leaf-wise 生长的提升树 梯度提升并优化训练速度与内存 大样本、多特征、快速实验 小样本 leaf-wise 更易过拟合,需限制叶子与深度
深度学习 多层可学习表示 反向传播最小化目标函数 原始序列、图像、文本、多模态 数据需求大、解释难、非平稳市场中脆弱
Transformer 注意力建模序列和跨位置关系 反向传播 + 大规模并行训练 长序列、新闻/公告/文本、多资产关系 计算成本、泄漏、过拟合、并不天然适合所有表格 Alpha
Foundation Model 大规模预训练后迁移或微调 预训练目标 + 下游适配 文本理解、研究助手、多任务表征 训练语料时点、可审计性、幻觉、部署与数据合规

XGBoost 和 LightGBM 仍然在优化损失

XGBoost 的核心目标可以概括为“训练损失 + 树复杂度正则项”,不是离开损失函数另起炉灶。官方参数文档也把学习任务、目标函数、L1/L2 正则与树构建方式明确分开。XGBoost 参数文档XGBoost 论文

LightGBM 主要在树的工程实现上做了重要优化:连续特征分桶形成直方图,并采用 leaf-wise 生长;在叶子数固定时它往往能更快降低损失,但小样本下也更容易过拟合,因此仍要控制 num_leavesmax_depth 与叶子最小样本数。LightGBM Features 官方文档

深度学习和 Transformer 也没有摆脱目标函数

神经网络通过反向传播计算损失对参数的梯度。Transformer 增加了注意力等结构,使模型更擅长处理序列和跨位置关系,但仍然需要明确训练目标。PyTorch 也把 Transformer 定位为原始架构的参考实现,并提醒现代高性能实现发展很快。PyTorch Transformer 文档

为什么现在不应直接跳到 Foundation Model

对当前阶段,模型复杂度不是主要瓶颈。更容易决定成败的是:

  1. 标签有没有未来信息。
  2. 复权、停牌、退市和成分股历史是否正确。
  3. 训练、验证和测试是否按时间切分。
  4. 因子在不同市场状态下是否稳定。
  5. 预测增量能否覆盖风险、换手和冲击。

如果 OLS 和树模型基线都没有通过这些检查,Transformer 只会更昂贵地放大同一批错误。

常见误区清单

误区 1:散点图横轴仍然是时间

纠正:横轴已经变成恒生科技代理收益率;日期只是点的索引。

误区 2:散点图是在画两条时间曲线

纠正:每个点同时包含同一天的两个变量,没有“第一条线”和“第二条线”。

误区 3:回归线是人手动划出来的

纠正:给定损失、模型形式和数据,算法会算出确定的参数;更换损失或样本,线才会变化。

误区 4:穿过最多点的线就是最好

纠正:连续数据几乎没有精确命中;最小二乘比较全部残差平方和。

误区 5:Beta 越大越好,或者越小越安全

纠正:Beta 只是相对某个基准、某个窗口和某种频率的敏感度,不是质量评分。

误区 6:相关性高就可以配对交易

纠正:相关不等于价差平稳,更不等于存在可交易的均值回归。配对交易还要研究协整、结构变化、成本和卖空约束。

误区 7:R² 高就是预测能力强

纠正:样本内高 R² 可能只反映共同市场暴露;真正需要样本外、增量、成本后的证据。

误区 8:模型的目标就是赚钱

纠正:模型优化可计算的损失;组合和执行层才把预测转成资金结果。

误区 9:模型越新越高级,效果一定越好

纠正:金融数据少、噪声大、分布会变。透明、稳定、可复现的简单基线,往往比没有验证纪律的复杂模型更有价值。

如何复现和更新本文图表

统计图

固定数据快照:quants/foundations/data/tencent_csop_hstech_daily_2024-01-02_2026-06-30.csv

绘图源文件:quants/foundations/scripts/build_regression_charts.py

在 vault 根目录运行:

python3 quants/foundations/scripts/build_regression_charts.py

脚本优先使用 Seaborn 主题,未安装 Seaborn 时会回退到 Matplotlib 自带样式;计算和绘图只依赖 NumPy 与 Matplotlib。以后换成别的股票或新的数据窗口,只要保持 CSV 的三列结构不变,文章中的图片路径无需修改。

结构图

本文没有使用 Mermaid。量化系统图和学习路线图都保存了:

  • 可直接在 Obsidian 与网页中显示的 PNG 预览。
  • 用于无损缩放和后续导出的 SVG 版本。
  • 可继续拖动和修改的 .excalidraw.md 源文件。

当前这个 vault 的插件清单里没有启用 Excalidraw,但这不影响预览;需要编辑源图时,再安装或启用 Excalidraw 社区插件并切换到 Excalidraw View。

后续学习导航

量化学习路线图:从回归到完整策略

Excalidraw 可编辑源文件:量化学习路线图:从回归到完整策略

阶段 为什么学 学完获得什么能力 最小交付物
0. 数据与收益率 错误口径会让后面全部失真 复权、对齐、收益率、标签、时间切分 一份可审计数据快照与数据字典
1. OLS 与损失函数 建立预测、误差和参数的直觉 散点、残差、Beta、相关、R²、L1/L2/Huber 手算小样本 + 可复现回归图
2. 因子检验 防止只在样本内看起来有效 IC、Rank IC、分层、滚动稳定性、泄漏检查 一个单因子样本外报告
3. 树模型基线 处理非线性和特征交互 LightGBM/XGBoost、时间序列 CV、特征重要性 与 OLS 同数据同标签的严格对照
4. 风险·成本·组合 预测分数不能直接当仓位 风险暴露、协方差、成本、换手、约束优化 从预测分数到目标权重的可解释规则
5. 回测与执行 目标权重最终必须成交 订单、手续费、滑点、冲击、成交与对账 成本前后回测与执行日志
6. 归因与迭代 知道收益究竟来自哪里 Alpha、Beta、行业、成本和执行归因 监控面板、失效条件与研究反馈
可选支线 只有在传统基线稳定后再扩大表达能力 序列、多模态、文本、迁移学习 与树模型的样本外、成本后公平比较

下一步最合理的主题

不是立刻训练 Transformer,而是沿着今天的问题继续追:

  1. 同一批数据分别使用 L2、L1、Huber 和 Quantile loss,回归线会怎样变化。
  2. 人为加入极端行情点,观察每种损失对异常值的敏感度。
  3. 把固定全样本回归改成滚动 60 日或 120 日回归,观察 Beta 和相关性是否稳定。
  4. 再把线性模型换成 LightGBM/XGBoost,但保持数据、标签和时间切分完全不变,只比较模型层。

这会自然形成下一章:从最小二乘到稳健损失:金融厚尾、滚动 Beta 与样本外验证。

自测:如果能回答这些问题,第一章才算真正掌握

  • [ ] 为什么同一批日期既能画成两条时间曲线,也能画成散点?
  • [ ] 散点图中的某一个点代表什么?
  • [ ] 日期在散点图中去了哪里?
  • [ ] 残差为什么是 yy^
  • [ ] 最小二乘最小化的到底是什么?
  • [ ] 为什么“穿过最多点”不是稳定的目标?
  • [ ] Beta、相关系数和 R² 分别回答什么问题?
  • [ ] 为什么样本内 R² 高不等于策略会赚钱?
  • [ ] 损失函数位于完整量化系统的哪一层?
  • [ ] XGBoost、LightGBM 和 Transformer 为什么仍然需要损失函数?
  • [ ] 当前下一步应该补数据与验证,还是直接上更复杂模型?为什么?

一句话收束

回归真正教会我们的,不是怎样画一条线,而是量化研究最基本的工作方式:先把问题变成数据,再把“什么叫错”写成目标,用样本外证据检查它,最后让预测穿过风险、成本、组合与执行,才有资格讨论赚钱。