样本权重:四种类型
金融机器学习的拟合中,不是每条观测都该被赋予同样的权重。López de Prado 的四种权重方案(唯一性、收益归因、时间衰减、波动率缩放)针对不同偏差起作用,要按用途有意识地使用,而不是默认开启。
样本权重:四种重要的权重
等权重是大多数量化机器学习流水线里默默生效的默认值。你把一组观测堆起来,拟合一个模型,每行都只算一次。结果就是模型把 2017 年一个安静的周二和 2020 年 3 月美联储决议日当成同一个数据点。它们不是同一种观测:前者只是上百个普通交易日的回声,本身没什么信息量;后者才是真正驱动截面收益变化的高信息量事件。等权重会丢掉让金融数据变得有趣的内在结构。
本文就是讲怎么解决这个问题的。四种实务中重要的权重方案,分别处理四个不同的问题。用的方案和问题对不上号,就会一边去除某种偏差、一边引入相反方向的偏差。
参考是 López de Prado 的 Advances in Financial Machine Learning 第 4 章(下文简称 AFML)。这一章不长,想法也不算显然。大部分从业者读一遍之后,觉得“加权是锦上添花”,最后还是上线等权重模型。他们第一次疑惑为什么回测扛不住状态切换的时候,通常就是回过头来重读这一章的时刻。
为什么等权重是错的
三个理由,从最显到最隐。
第一个理由是冗余。基于 60 天滚动窗口的特征在第 天和第 天几乎包含同样的信息。如果训练集是日频观测,等价于把同样的信息重复了 100 次。用这些数据训练的模型,实际上把最近的冗余重复计算了 100 遍,把真正独立的观测的权重相对压低了。这种冗余是结构性的:它来自特征的构造方式。
第二个理由是事件集中。一年中大部分的截面收益变化,集中在几十天里。2020 年的收益分布大概由 15–20 个交易日决定:3 月的 COVID 崩盘、之后的反弹、选举波动、疫苗消息日、年尾的拉升。其余 230 天对截面信号的贡献相对小很多。用等权重训练的模型,学到的是“平均一天”,不是高信息量的一天。而高信息量的一天恰恰是你最需要模型表现好的日子。
第三个理由是状态依赖。训练集里较老的观测,宏观环境跟现在不一样。用 2010–2015 数据拟合的因子模型,可能只适合 2010–2015,不适合 2018–2024。如果不给老观测降权,你实际上隐含地假设了数据生成过程平稳。它不平稳。
这三个理由(冗余、事件集中、状态依赖)驱动了 AFML 第 4 章里的三种权重方案。第四种(收益归因)针对的是一个元问题:怎么把这三种组合起来。
(López de Prado, M., Advances in Financial Machine Learning, 第 4 章。ISBN 978-1119482086。)
第一类:唯一性权重
核心思路是:时点 的观测如果不和邻近时间的观测重复,就更有信息量。权重应该正比于这条观测有多“独特”。
形式上,把观测 的平均唯一性定义为它贡献到的并发标签的平均数量。如果观测 是一个标签,它和数据集里另外 个标签有重叠(因为它们共享一个特征计算窗口),那么唯一性权重就是:
其中 是和观测 标签重叠的标签数量。
对一个纵向屏障为 天的三重障碍标签,标签窗口是 。如果另一个观测的标签窗口和这个窗口重叠(也就是另一个标签从 开始),它们就共享信息。唯一性就是重叠标签数量的倒数。
一个干净的算法是通过并发矩阵。设 是矩阵, 表示观测 和 是否共享一个标签计算窗口。观测 的平均唯一性是:
直觉是:一个和很多其他观测重叠的观测,权重很小;标签窗口相对孤立的观测,权重很大。
实操上这为什么重要?假设你有 1,000 条日频观测(大约 4 年),标签跨度 。每个标签和最多 10 个邻居重叠,冗余因子大约 10 倍。如果不用唯一性权重,模型会把 1,000 条观测当成 1,000 个独立样本;实际上它们更接近 100 个独立样本。有效样本量只有你认为的十分之一。夏普比率的置信区间会窄 3 倍。
修正是:按 加权。现在 1,000 条观测经过正确加权,贡献的信息量大致相当于 100 条独立观测。夏普置信区间会变宽,反映真实情况。
(AFML, §4.4.1。)
第二类:收益归因权重
这是“元权重”。其他三种权重是从数据集结构(重叠、时间、波动率)算出来的。收益归因权重来自每条观测对应的实际收益:在该观测上做对了方向,赚了多少。
公式:
其中 是观测 对应的收益, 是某个基准(通常是时点 的平均波动率调整后的收益)。
想法是:一个产生大收益(正或负)的标签,承载的信息比产生微薄收益的标签多。这是一种把模型的注意力集中到“真正对 P&L 有贡献”的标签上的方式。
问题是:这种权重依赖标签本身,如果你的标签本身就是真实收益的噪声估计,就会出现鸡生蛋的问题。收益归因权重的正确使用方式是最后一步:在已经有模型、想重点拟合“贡献了 P&L”的标签时再用。
一种常见模式:先用唯一性权重拟合模型,对每条标签做 P&L 归因,然后在驱动了大部分 P&L 的标签上用收益归因权重重新拟合。这就是一种重要性采样。
还有一种更微妙的模式:把收益归因权重用来识别哪些观测是“定义状态的”,也就是那些绝对收益特别大的观测,然后在后续训练中加大它们的权重。这样模型会显式学习状态结构,而不是把这些定义状态的日子当作噪声。
风险是:收益归因权重会过度加权异常值。一次闪崩日可能主导整个权重。修正是把绝对收益按某个波动率倍数截尾,或者用收益的排名而不是绝对值。
(AFML, §4.6。)
第三类:时间衰减权重
思路是:较老的观测相关性较低,因为底层分布已经漂移。给老样本降权。
标准形式是指数衰减:
其中 是观测 的时间戳, 是拟合时刻, 是衰减时间常数。
半衰期(权重减半的时间)是 。半衰期 1 年意味着 年。
怎么选?三种方法,按优先级排序。
方法 1:把半衰期和目标持仓周期对齐。 如果你拟合的模型是 5 天持仓,半衰期 3–6 个月比较合理。如果你是季度再平衡,半衰期 1–2 年。半衰期要长到足以包含足够数据,又短到能强调近期状态。
方法 2:用交叉验证优化 。 留出最近 20% 的数据,对前 80% 用不同 拟合,在留出集上评估。样本外表现最好的 就是选择。这是诚实的做法,但需要留出足够的数据来区分差异。
方法 3:用 alpha 的 IC 半衰期。 从之前的拟合(不带时间衰减)出发,度量 IC 随时间衰减的速度。把 设为大约 IC 半衰期。这把数据权重和实际信号衰减联系起来。
时间衰减的风险: 设得太小,模型只拟合近期状态,失去泛化能力; 设得太大,又退回到等权重及其所有问题。一个有用的诊断是对不同 拟合,看样本内和样本外表现怎么变。样本外表现开始变差的点就是最优 。
(AFML, §4.7。)
第四类:波动率缩放权重
思路是:高波动率时期产生更大的绝对收益,会主导模型拟合。用波动率的倒数缩放,让每个状态的贡献相等。
公式:
或者使用滚动标准化:
其中 是观测 时刻的实现波动率。
为什么这很重要:收益对特征的回归本质上是在收益空间做的。低波动率下 1% 的变动和高波动率下 5% 的变动,幅度不同但可能承载类似的信息。没有波动率缩放时,高波动率观测会主导拟合,模型实际上学到的是“高波动率时期发生了什么”,而不是“是什么在驱动收益”。
更精细的版本用标签标准差的倒数,而不是收益标准差。这考虑到不同标签可能有不同的噪声水平(例如用更短窗口构造的标签噪声更大)。
实务中最常用的组合形式:
这是唯一性权重(处理特征重叠)乘以时间衰减(处理状态漂移)乘以波动率倒数(处理绝对收益异质性)。三种权重,三个问题,一个最终权重。
(参见 AFML, §6.5 关于仓位规模上下文中波动率缩放的相关讨论。)
权重组合
顺序很重要。先施加唯一性权重,再施加时间衰减,最后做波动率缩放。每一步都基于前一步的结果。
一个常见错误:先施加时间衰减,再做唯一性。这会让那些特征和近期观测重叠的观测(绝大多数都是)被降权过度。正确顺序是:先识别每条观测的独特信息含量(唯一性),再按这些信息对当前状态的相关程度加权(时间衰减),最后把所有观测缩放到同一个波动率水平。
权重是相乘的,不是相加的。你不是只挑一种方案,而是把它们堆叠起来。
一个实务上的提醒:堆叠权重后,要做归一化,让权重和等于观测数(或其他方便选定的常数)。这样无论用哪套权重,损失函数的规模都差不多,超参数调整会更简单。
一个具体例子
假设你在 4 年日频数据上拟合模型(约 1,000 个交易日)。标签是 的三重障碍。特征包括 20 天滚动波动率和 60 天动量。
唯一性权重: 时,每个标签窗口是 5 天。如果两个观测 和 的标签窗口相交,就算重叠。日频数据下,每个标签大约和 10 个其他标签重叠(前后各 5 个,减去自身)。平均唯一性大约是 0.1。所以大多数观测的唯一性权重约为 0.1,少数高度冗余的约为 0.05,少数相对孤立的约为 0.5。
时间衰减: 半衰期 2 年时( 年),4 年前的观测权重为 。1 年前的观测权重为 。最老的观测被降权 75%;最近的保留 70% 以上。
波动率缩放: 4 年期间实现波动率(年化)从 2017 年平静期的约 8%,到 2020 年 3 月的 60% 以上。波动率倒数权重从平静期的 1/0.08 = 12.5,到危机期的 1/0.6 = 1.7。危机期观测相对平静期被降权 7 倍。
组合: 2018 年(中期、平静)的典型观测权重约为 。2020 年 3 月危机期观测约为 。2014 年(最老、平静)观测约为 。
相对权重说明问题:模型对 2018 年数据的拟合强度是对 2020 危机期数据的两倍,因为 2018 年在每个单位状态漂移上包含更多独特信息。这正是关键点。模型如果把 2020 年拟合得太狠,就会校准到危机动态上,然后错估 2021–2024 平静期的机会。
什么时候不用权重
等权重也合理的三个场景。
场景 1:单点时序的截面模型。 如果你的数据集是某一天很多资产的特征和标签快照,没有时间衰减需要施加,没有滚动特征重叠,没有收益归因。等权重是对的。
场景 2:每个标签是独立事件的分类问题。 如果你要预测某个具体事件(财报、FDA 决定、并购完成)是正面还是负面,每个事件是离散观测。如果事件在不同状态下聚集,仍然可以施加时间衰减,但通常不需要唯一性和波动率缩放。
场景 3:特征工程之前。 还没计算滚动特征之前,数据集里观测之间的重叠很小。唯一性权重大致相等。时间衰减和波动率缩放仍然适用,但唯一性可以不管。
其他所有情况(大多数量化机器学习流水线)都应该用这四种权重方案中的至少一种,并且很可能是两种或三种堆叠。
权重到底带给你什么
用正确权重拟合的因子模型,在近期状态下的因子载荷更准确,置信区间也更现实,能反映真实的有效样本量。在回测上的性能提升通常不大(可能从夏普 1.5 提升到 1.7),但稳健性的提升是实在的。用加权拟合的模型在状态切换时更不容易彻底失效,因为它锚定在最近的、独特的、按波动率调整的观测上,而不是全部嘈杂的历史。
夏普比率的提升不是正确的指标。正确的指标是:如果模型用 2023 年底前的数据拟合,2024 年的表现会怎样?使用正确权重的模型比等权重的模型更能扛住这种过渡。
(AFML, 第 4 章小结。)
实现提示
权重很容易实现。唯一性权重需要并发矩阵(朴素算法复杂度 ,但用滚动窗口能降到 )。时间衰减是单个指数。波动率缩放需要滚动实现波动率。
几条实务建议:
- 归一化权重让 。这样损失函数的规模就和权重选择无关。
- 在第 1 和第 99 百分位上截尾极端权重,避免单条观测主导。
- 堆叠权重时,验证有效样本量(用 计算)至少为 30,否则标准误不可靠。
- 每次重新拟合时都重新计算权重。2020 年用 2010–2020 数据计算权重拟合的模型,到了 2024 年应该用 2014–2024 数据重新计算权重。
要点是:权重不是“锦上添花”,它是模型规格的一部分,和特征、超参数同等重要。特征差、权重好的模型,会比特征好、权重差的模型表现更好,因为后者实际上拟合了错误的样本分布。
更大的视角
这四种权重方案不仅仅是技术修正,它们编码了关于金融数据的四种不同先验信念:
- 唯一性权重:数据中的信号是稀疏的,大多数观测是冗余的。
- 收益归因权重:信号集中在那些驱动了 P&L 的事件上。
- 时间衰减权重:信号是非平稳的,近期更相关。
- 波动率缩放权重:信号在相对收益里,不在绝对收益里。
这些先验没有哪个是普适的,但都经常成立。量化机器学习的艺术,就在于知道哪些先验适用于你的具体数据集,并按正确顺序堆叠对应的权重。2010–2024 年美股日频动量模型需要四种都用;单日截面价值模型一种都不用。大部分流水线介于两者之间。
(López de Prado, M., Advances in Financial Machine Learning, 第 4 章,§4.5。ISBN 978-1119482086。)