从散点到损失函数:回归、Beta 与量化系统第一章(2026-07-17)
这不是一篇从公式开始的回归教程,而是一次认知路径的完整复盘:先把“时间序列”和“散点图”彻底分开,再理解回归线为什么会自动出现、为什么最小二乘不是“穿过最多点”,最后把损失函数放回 Alpha、风险、成本、组合与执行组成的完整量化系统里。
本文承接 quants/量化新手资产选择、策略与入门指南:资产品类全景图(2026年中版) 和 quants/机构级量化系统最小可运行模板选择指南:Top 5 开源仓库与学习路线(2026-07-15)。前两篇回答“量化可以做什么”和“完整系统怎样运行”,这一篇补上中间最重要的统计地基。
阅读指南
这篇文章解决什么问题
- 为什么两条随时间变化的价格曲线,换一种画法就会变成“一坨散点”。
- 散点图的横轴为什么不是时间,日期又去了哪里。
- 回归线是人手画出来的,还是算法算出来的。
- 为什么“命中最多散点”不是一条可用的最优标准。
- 最小二乘、残差、损失函数、Beta、相关系数和 R² 分别在说什么。
- 为什么模型在最小化损失,却不等于策略直接在最大化赚钱。
- OLS、树模型、XGBoost、LightGBM、深度学习、Transformer 和 Foundation Model 位于同一棵技术树的什么位置。
读完应该获得什么能力
- 看到时间序列图和散点图时,不再混淆坐标轴含义。
- 能用一句话解释回归线、残差、Beta、相关系数和 R²。
- 能说明为什么最小二乘是一种选择,而不是宇宙唯一正确的规则。
- 能把“模型损失”“组合目标”“执行目标”和“最终收益”分成四件事。
- 能指出自己当前位于完整量化地图的哪一层,下一步为什么要学。
前置与后续阅读
- 前置:不要求高等数学,只需要理解百分比收益率和二维坐标。
- 建议顺序:本文 → 损失函数家族与稳健回归 → 因子检验与时间序列验证 → LightGBM/XGBoost → 风险、成本与组合构建。
- 如果想先看代码骨架,回到 quants/机构级量化系统最小可运行模板选择指南:Top 5 开源仓库与学习路线(2026-07-15)。
快速结论
- 时间序列图里,横轴是日期;回归散点图里,横轴是一个变量,纵轴是另一个变量。 日期没有被画在轴上,而是变成了每一个点的身份。
- 回归线不是人凭感觉画的。 普通最小二乘回归会自动选择截距 和斜率 ,使全部纵向残差的平方和最小。
- “穿过最多点”不是最优标准。 连续数据中的点几乎不会恰好落在线上;如果人为规定“离线多近算命中”,答案又会随阈值变化。
- Beta 是斜率,不是相关系数。 Beta 回答“市场代理变动 1% 时,腾讯平均同向变多少”;相关系数回答“两者同步程度有多强”。
- R² 不是赚钱概率。 它只说明样本中线性模型解释了多少波动;高 R² 不保证有 Alpha,更不保证扣除成本后赚钱。
- 损失函数只负责训练模型。 最终收益还要经过风险模型、成本模型、组合构建、执行、成交和归因反馈。
- XGBoost、LightGBM 和深度学习没有抛弃损失函数。 它们仍然定义目标并优化,只是模型形状、正则化、优化方式和数据表达能力更复杂。
- 你当前的位置不是“学完回归”,而是刚建立了 Alpha 模型层的入口。 下一步先把数据口径、样本外验证和因子检验补牢,再上树模型。
这次真正值得保存的,是思考路径
知识点以后随时可以查,认知转折却很容易忘。今天的路径大致经历了六个节点。
节点一:误把所有横轴都看成时间
最初看到腾讯和恒生科技的图,直觉会把它想成两条随时间起伏的曲线:今天涨、明天跌,两条线彼此追逐。这种图当然存在,但它是时间序列图。
节点二:意识到日期可以不再当坐标轴
对每一个交易日,都可以算出两个数:
- 当天恒生科技市场代理的收益率 。
- 当天腾讯的收益率 。
然后把同一天的两个数配成一个坐标 。1 月 3 日是一个点,1 月 4 日又是一个点。所有日期做完以后,横轴已经不再是时间,而是恒生科技代理的日收益;纵轴是腾讯日收益。
节点三:困惑“一坨点为什么还能有一条线”
散点没有天然连线顺序。回归线也不是把点按日期连起来,而是在问另一个问题:有没有一条简单的直线,能够概括 x 与 y 的平均关系?
节点四:从“穿过最多点”追问到最优标准
人的眼睛容易把“最优线”理解为穿过最多点,或者尽量从点云中间划过去。但“中间”必须变成可计算的规则。最小二乘给出的规则是:把每个点的预测误差平方,再全部相加,找总和最小的那条线。
节点五:发现真正的核心是损失函数
一旦追问“为什么偏偏用平方误差”,问题就从画线进入了机器学习的核心:我们必须先定义什么叫错、错多少、怎样汇总,然后模型才知道应该往哪个方向调整。
节点六:意识到损失函数只是量化系统的一小块
模型拟合得好,不等于仓位合理;仓位合理,不等于能低成本成交;成交完成,也不等于收益来源可持续。损失函数属于 Alpha 模型内部,赚钱是整套系统共同作用后的结果。
第一部分:同一批日期,怎样从两条曲线变成散点
时间序列图保留了“先后顺序”
设腾讯复权价格为 ,恒生科技市场代理的复权价格为 。时间序列图画的是:
- 横轴:日期 。
- 纵轴: 或 。
它适合回答:什么时候上涨、什么时候回撤、两个资产是否在相近时期转向。
回归散点图主动丢掉了“先后顺序”
先把价格转成日收益率:
再定义:
于是,每个交易日变成一个点 。散点图不再强调 1 月 3 日发生在 1 月 4 日之前,而是把所有交易日放在一起,观察两个变量的共同变化结构。
[!important] 第一个“啊哈时刻” 时间并没有从数据中消失,只是没有继续占用坐标轴。日期现在是每个样本点的索引,而不是图上的 x 轴。
真实数据图:腾讯与恒生科技 ETF 代理

这张图使用 2024-01-02 至 2026-06-30 的港股日线复权收盘价:腾讯控股 00700,以及南方恒生科技指数 ETF 03033。恒生科技指数官方页面把 HSTECH 定义为符合筛选标准、在香港上市且科技主题业务暴露较高的 30 家大型科技公司;本文使用 03033 作为可交易代理,而不是把 ETF 数据冒充官方指数点位。恒生科技指数官方页面;2026 年 3 月官方 Factsheet
为什么使用 ETF 代理:
- ETF 与腾讯都在港股交易时段成交,日期容易严格对齐。
- ETF 是可交易资产,更接近真实组合会面对的价格、流动性与跟踪误差。
- ETF 不是指数本身,会受费用、跟踪误差、折溢价和分红处理影响,因此结果应称为“对恒生科技暴露的代理回归”。
固定样本得到:
| 指标 | 结果 | 应该怎样读 |
|---|---|---|
| 价格观察数 | 611 | 两个标的都存在复权价格的共同交易日 |
| 日收益样本数 | 610 | 第一日只能作为计算下一日收益的基准 |
| Beta | 0.723 | ETF 代理日收益变动 1% 时,腾讯日收益在样本内平均同向变动约 0.72% |
| 相关系数 | 0.801 | 两者同日涨跌具有较强线性同步性 |
| R² | 0.641 | 简单线性模型在样本内解释了腾讯约 64.1% 的日收益波动 |
| 日截距 Alpha | 0.0459% | 只是该窗口的回归截距,不能直接解释成可交易超额收益 |
这里最容易被误读的是 Alpha。把日截距机械复利年化约为 12.3%,不代表已经找到一个年化 12.3% 的策略:样本窗口有限,收益并不独立同分布,腾讯本身还是指数成分股,ETF 与指数存在跟踪误差,而且这里没有样本外验证、风险调整、交易成本和可执行组合。
数据页面:腾讯 00700 历史价格;南方恒生科技指数 ETF 03033 历史价格。仓库里同时保存了固定 CSV 快照,避免以后数据源变化导致文章中的数字悄悄漂移。
第二部分:回归线到底是怎样算出来的
最简单的线性回归写成:
其中:
- :当天腾讯真实收益。
- :模型根据当天恒生科技代理收益给出的预测。
- :真实值减预测值,也就是残差。
- :截距。
- :斜率。
残差是“竖着量”的误差
对某个点 ,回归线在同一个 上给出预测 :
残差为:
普通最小二乘最小化的是纵向残差,不是点到直线的几何垂直距离。这是因为模型把 x 当解释变量,把 y 当被解释变量;把 x、y 对调后,得到的回归线通常不是原来那一条。
“最优线”必须先定义什么叫错
普通最小二乘的损失是:
算法会找使 最小的 和 。scikit-learn 对 LinearRegression 的定义也是最小化观测目标与线性预测之间的残差平方和。scikit-learn Ordinary Least Squares 文档
在只有一个解释变量且包含截距时,斜率可以直接写成:
截距是:
所以回归线不是“看着差不多”画出来的,而是由全部样本共同决定。
为什么不是“穿过最多点”
这个直觉有三个问题:
- 连续变量的点几乎不可能精确落在同一条线上,“精确命中数”通常接近零。
- 如果规定离线 0.1% 算命中,那么把阈值改成 0.2%,最优线可能立刻改变。
- 命中只区分对错,不区分偏差 0.21% 和偏差 10%,会丢失大量信息。
最小二乘则给每个点一个连续误差,并且平方会让大误差受到更重惩罚。上图右下角的 U 形曲线,就是在尝试不同 Beta 时得到的平方残差和;最低点对应当前样本的 。
为什么最小二乘常用,但不是唯一选择
最小二乘有几个工程优点:
- 在线性模型中目标函数凸,解稳定且容易计算。
- 可微,便于优化。
- 在条件误差近似高斯、方差稳定等假设下,有清晰统计解释。
- 平方会强烈惩罚大误差。
但最后一点也是缺点:金融收益经常有厚尾和异常点,平方损失会被极端行情显著拉动。不同问题可以选择不同损失:
| 损失 | 主要关注 | 适合什么问题 | 代价 |
|---|---|---|---|
| 平方损失 L2 | 大误差惩罚更重 | 普通回归、可微基线 | 对异常点敏感 |
| 绝对误差 L1 | 误差绝对值 | 稳健回归 | 在 0 处不可微,优化与统计性质不同 |
| Huber | 小误差平方、大误差线性 | 同时要平滑与抗异常 | 要选择转折阈值 |
| Quantile / Pinball | 某个条件分位数 | 风险区间、尾部预测 | 不再预测条件均值 |
| Log loss | 概率是否校准 | 涨跌分类、事件概率 | 需要正确处理概率标签 |
| Ranking loss | 相对排序 | 横截面选股 | 排名好不等于收益和容量好 |
[!note] 它在量化地图中的位置 回归形式、标签、损失函数、正则化和训练算法都属于 Alpha 模型层。它们负责把特征变成预期收益、方向、概率或排序分数。
第三部分:Beta、相关系数、R² 和 Alpha 不要混成一件事
| 概念 | 核心公式或定义 | 回答的问题 | 不能回答什么 |
|---|---|---|---|
| Beta | x 变化 1 个单位时,y 平均变化多少 | 两者关系是否稳定、是否因果、策略是否赚钱 | |
| 相关系数 | 两者线性同步程度有多强 | 变化幅度比例、因果方向 | |
| R² | 模型解释了样本中多少 y 的波动 | 样本外效果、Alpha、成本后收益 | |
| Alpha 截距 | 当 x 为 0 时,模型给出的 y 条件均值 | 稳定超额收益或可交易收益保证 |
Beta 是带单位的斜率
如果 x、y 都用百分比收益,Beta 表示百分比变化的比例。本例 Beta 小于 1,只说明在这个样本窗口里,腾讯对 ETF 代理同日波动的线性敏感度较低;它不是“安全分数”,也不是“质量分数”。换基准、换频率、换窗口,Beta 都会变化。
相关系数是标准化后的同步程度
相关系数被限制在 -1 到 1。它不关心两者各自的波动单位,只关心标准化后的共同涨跌。本例相关系数约 0.801,说明点云大体沿右上方向分布,但仍存在明显残差。
简单一元回归中,R² 等于相关系数平方
在包含截距的一元线性回归中:
本例 。但加入多个特征、去掉截距、使用样本外 R² 或采用其他模型后,不能再不加条件地套用这条关系。
高 R² 可能只是高 Beta 暴露,不是 Alpha
如果腾讯与恒生科技代理同步性很强,模型很容易解释大量波动;但这种解释主要来自共同市场暴露。真正的 Alpha 问题是:在已知市场、行业、风格与其他风险暴露之后,是否还能产生稳定、样本外、成本后的增量预测。
第四部分:潜意识里的目标是赚钱,但模型看到的不是钱
“量化的目标不就是赚钱吗?”这句话在系统级别没错,在模型训练层面却过于模糊。系统里至少有四种不同目标。
1. 模型训练目标
模型看见特征 和标签 ,通过最小化 MSE、Log loss、Ranking loss 等损失学习参数。它负责预测,不直接知道你的资金、换手、冲击和回撤承受力。
2. 研究评估目标
研究者用样本外 IC、Rank IC、MSE、分类校准、分层收益、稳定性和特征漂移判断模型是否有增量信息。这一步要防止数据泄漏、幸存者偏差和反复试验造成的过拟合。
3. 组合构建目标
组合层常见的思想是:
同时满足仓位、行业、杠杆、流动性和换手约束。模型分数到这里才变成目标权重。
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_leaves、max_depth 与叶子最小样本数。LightGBM Features 官方文档
深度学习和 Transformer 也没有摆脱目标函数
神经网络通过反向传播计算损失对参数的梯度。Transformer 增加了注意力等结构,使模型更擅长处理序列和跨位置关系,但仍然需要明确训练目标。PyTorch 也把 Transformer 定位为原始架构的参考实现,并提醒现代高性能实现发展很快。PyTorch Transformer 文档
为什么现在不应直接跳到 Foundation Model
对当前阶段,模型复杂度不是主要瓶颈。更容易决定成败的是:
- 标签有没有未来信息。
- 复权、停牌、退市和成分股历史是否正确。
- 训练、验证和测试是否按时间切分。
- 因子在不同市场状态下是否稳定。
- 预测增量能否覆盖风险、换手和冲击。
如果 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,而是沿着今天的问题继续追:
- 同一批数据分别使用 L2、L1、Huber 和 Quantile loss,回归线会怎样变化。
- 人为加入极端行情点,观察每种损失对异常值的敏感度。
- 把固定全样本回归改成滚动 60 日或 120 日回归,观察 Beta 和相关性是否稳定。
- 再把线性模型换成 LightGBM/XGBoost,但保持数据、标签和时间切分完全不变,只比较模型层。
这会自然形成下一章:从最小二乘到稳健损失:金融厚尾、滚动 Beta 与样本外验证。
自测:如果能回答这些问题,第一章才算真正掌握
- [ ] 为什么同一批日期既能画成两条时间曲线,也能画成散点?
- [ ] 散点图中的某一个点代表什么?
- [ ] 日期在散点图中去了哪里?
- [ ] 残差为什么是 ?
- [ ] 最小二乘最小化的到底是什么?
- [ ] 为什么“穿过最多点”不是稳定的目标?
- [ ] Beta、相关系数和 R² 分别回答什么问题?
- [ ] 为什么样本内 R² 高不等于策略会赚钱?
- [ ] 损失函数位于完整量化系统的哪一层?
- [ ] XGBoost、LightGBM 和 Transformer 为什么仍然需要损失函数?
- [ ] 当前下一步应该补数据与验证,还是直接上更复杂模型?为什么?
一句话收束
回归真正教会我们的,不是怎样画一条线,而是量化研究最基本的工作方式:先把问题变成数据,再把“什么叫错”写成目标,用样本外证据检查它,最后让预测穿过风险、成本、组合与执行,才有资格讨论赚钱。