halo 的技术博客

返回

先说结论:RL 智能体给每个动作打一个 Q 值就下单,但这个点估计不带任何可靠性凭证——分布一漂移,它可以「自信地犯错」。共形预测(Conformal Prediction)能包裹任意预测器,吐出一个「预测区间」,在有限样本、分布无关的前提下,保证以至少 1−α 的概率覆盖真实收益。据此可设计一条带可验证下限的交易规则:只在贪婪动作的共形收益下界 > 0 时才出手。 在异方差 + 协变量偏移的合成环境上实测:同分布下目标覆盖 90%、实测 91.1%,保证兑现;出手门控把”开仓即盈利”的命中率从 76.9% 抬到 97.4%。但也要诚实:唯一的假设”可交换性”一旦破坏,保证立刻失效——协变量偏移拉到 3.0,覆盖率从 90% 崩到 53.8%。

分裂共形的有限样本覆盖保证:实测覆盖率贴合目标(同分布)

一、Q 值的沉默:点估计不告诉你「有多可信」#

一个训练好的 RL / bandit 智能体,面对状态 xx,给每个动作算一个 Q 值,选最大的那个下单。问题是:

  • Q 值 = 2.3,这到底是”稳赚 2.3”还是”平均 2.3 但可能 −5 到 +9”?
  • 模型在训练分布里见过这个状态吗?还是在瞎外推?
  • 我凭什么相信这一单?

点估计沉默。它给你一个数,不给你任何”这个数有多可信”的凭证。而金融最要命的恰恰是尾部——一个高置信但错误的动作,可能就是爆仓那一单。

传统做法(贝叶斯后验、MC Dropout、深度集成)能给不确定性,但它们的置信区间没有覆盖保证:模型说的”95% 区间”实际可能只覆盖 70%,尤其在模型误设或分布偏移时。我们想要的是一个可验证的、不依赖模型正确性的保证。

这就是共形预测的舞台。

二、共形预测:给任意预测器套一层「覆盖保证」#

共形预测(Vovk et al.)的承诺极强:给定任意黑盒预测器 f^\hat f 和一个显著性水平 α\alpha,我构造一个预测区间 C(x)C(x),使得

P(YtestC(Xtest))1α\mathbb{P}\big(Y_{\text{test}} \in C(X_{\text{test}})\big) \geq 1 - \alpha

这个保证是有限样本的(不是渐近)、分布无关的(不假设数据服从任何具体分布)、模型无关的(f^\hat f 可以是任意烂模型)。 唯一的假设是:校准数据和测试数据可交换(exchangeable)——直觉上就是”同分布、可随意打乱顺序”。

最实用的变体是分裂共形(split conformal),三步:

  1. 训练:在训练集上拟合任意 f^\hat f(这里是每个动作一个 ridge 回归的 Q 估计)。
  2. 校准:在一个独立的校准集上,对每个样本算不符合度分数(nonconformity score),最简单就是残差绝对值 si=Yif^(Xi)s_i = |Y_i - \hat f(X_i)|。取这些分数的 (1α)(1-\alpha) 经验分位数(带有限样本修正)q^\hat q
  3. 预测:新样本的区间就是 C(x)=[f^(x)q^, f^(x)+q^]C(x) = [\hat f(x) - \hat q,\ \hat f(x) + \hat q]

为什么这就够了?因为在可交换性下,测试样本的分数 stests_{\text{test}} 与校准分数们同分布,stests_{\text{test}} 落在校准分数的 (1α)(1-\alpha) 分位数以内的概率恰好 1α\geq 1-\alpha。就这么朴素,却给出严格保证。

三、纯 numpy 实现:分裂共形 + 局部自适应#

关键的一行是 k=(n+1)(1α)k = \lceil (n+1)(1-\alpha)\rceil——这个 (n+1)(n+1)有限样本修正是共形保证的核心,少了它保证就只在 nn\to\infty 成立。

四、实测:保证兑现,门控提纯信号#

同分布覆盖:目标 90%,实测 91.1%,区间平均宽度 4.06。保证兑现,且不保守过头。扫一遍 α\alpha,实测覆盖率紧贴对角线(见上方封面图)——这就是共形的价值:你要 90% 就给你 90%,要 95% 就给你 95%,说到做到。

带可验证下限的交易规则:只在贪婪动作的共形收益下界 f^(x)q^>0\hat f(x)-\hat q > 0 时才开仓——即”下行风险被证明性地压在零以上”才出手。结果:

指标始终贪婪(每步都交易)共形门控(仅下界>0 时出手)
开仓即盈利命中率76.9%97.4%
出手率100%17.1%
每步平均收益1.100.53

门控把命中率从 77% 拉到 97.4%——只在”证明有把握”时出手,信号被大幅提纯。代价是只出手 17% 的时间、每步平均收益减半。这是纪律换胜率的经典权衡:适合”宁可少做、不做错”的低频高确信场景。

五、诚实翻车之一:可交换性破坏,保证立刻失效#

共形保证有且仅有一个前提——可交换性。这个前提在金融里最脆弱,因为市场天天在漂移。我把测试集的协变量(特征 x0)逐步平移,模拟真实的分布偏移:

可交换性破坏则保证失效:协变量偏移下普通共形覆盖率跌破名义值

  • 偏移 = 0(同分布):覆盖 90.4%,保证成立。
  • 偏移 = 1.5:覆盖跌到 76.4%。
  • 偏移 = 3.0:覆盖崩到 53.8%——名义 90% 的区间,实际只覆盖一半多。

保证不是永真符咒。 校准集在”旧世界”算出的分位数 q^\hat q,一旦市场进入”新世界”(协变量分布变了、异方差结构变了),就不再是有效的分位数。这不是共形的 bug,是它诚实标注的适用边界:它保证的是”可交换假设成立时的覆盖”,不是”无论如何的覆盖”。 实盘部署必须配合分布漂移检测(如在线更新校准集、加权共形 Weighted Conformal)。

图里的蓝线(局部自适应共形)在这个协变量偏移下守住了——但注意,那是因为这里的偏移可以被 x0 的已知尺度函数吸收;换一种”分数分布本身变形”的偏移,它同样会崩。没有任何共形变体能在任意分布偏移下白嫖覆盖。

六、诚实翻车之二:边际覆盖达标 ≠ 处处达标#

这是共形最容易被误读的地方。它保证的是边际覆盖(marginal coverage):在整个测试分布上平均 90%。但平均达标不等于每个子群都达标

我的环境是异方差的——波动随 |x0| 增大。普通共形用一个等宽区间 ±q^\pm\hat q 打天下,于是:

边际覆盖达标≠处处达标:普通共形在高波动区欠覆盖、低波动区过覆盖

  • 低波动区(x0≈0):真实波动小,等宽区间太宽 → 过覆盖 98%(浪费,区间没用还宽)。
  • 高波动区(|x0|≈3):真实波动大,等宽区间太窄 → 欠覆盖只有 49%(危险,你以为 90% 安全其实一半时间被击穿)。

边际上它确实是 91%——高低相抵的平均数。但如果你专门在高波动状态下交易,你实际拿到的是 49% 的覆盖,而不是 90%。这对风控是灾难。

修法是局部自适应共形(normalized conformal):用一个不确定性估计 u(x)u(x) 归一化残差分数,区间变成 ±q^u(x)\pm\hat q\cdot u(x)——随局部波动伸缩。实测把各特征区间的覆盖从 49%~98% 的剧烈波动,拉回到均匀的 87%~92%。区间在该宽的地方宽、该窄的地方窄,条件覆盖才真正达标。

A. 实现细节#

  • 预测器:每个动作一个 ridge 回归(λ=1)估计 Q,共形层完全模型无关,换成任何模型不改保证。
  • 不符合度分数:贪婪动作的实现收益残差绝对值 RgreedyQ^greedy|R_{\text{greedy}} - \hat Q_{\text{greedy}}|;局部版用 RQ^/u(x)|R-\hat Q|/u(x)u(x)=0.5+0.8x0u(x)=0.5+0.8|x_0|
  • 有限样本修正:分位数取第 k=(n+1)(1α)k=\lceil(n+1)(1-\alpha)\rceil 小的分数,这是覆盖保证成立的关键。
  • 数据划分:训练 4000 / 校准 2000 / 测试 6000~12000,三者独立采样,校准与测试同分布(可交换)以验证保证。
  • 交易规则:仅当共形区间下界 Q^greedyq^>0\hat Q_{\text{greedy}}-\hat q>0 时按贪婪动作开仓,否则空仓(收益 0)。

B. 已知偏差#

  • 合成 bandit,非真实市场:单步 contextual bandit,无跨期状态转移、无交易成本、无冲击。真实 RL 交易是多步 MDP,共形在序贯决策上的覆盖保证要复杂得多(时序依赖破坏可交换性)。
  • 可交换性是硬前提:这是最大的现实鸿沟。金融数据天然非平稳,严格可交换几乎不存在。第五节展示的覆盖崩塌不是特例而是常态,实盘必须叠加漂移检测 / 加权共形 / 在线再校准。
  • 边际保证的误导性:第六节说明,若在特定 regime(高波动)集中交易,边际 90% 会退化成局部 49%。必须用局部自适应或按 regime 分组校准。
  • 区间宽 ≠ 预测准:共形只保证”覆盖”,不保证”区间窄”。一个总是输出 (,+)(-\infty,+\infty) 的预测器覆盖率 100% 却毫无用处。区间宽度反映的是底层模型质量,共形层救不了烂模型。

C. 结果解读#

  1. 共形的真正卖点是”可验证”:不是让预测更准,而是给不确定性一个分布无关的凭证。同分布下实测覆盖 91.1% 紧贴目标 90%,这种”说 90 就是 90”的可靠性,是贝叶斯 / Dropout 给不了的。
  2. 门控是纪律工具:命中率 77%→97.4% 的提升全部来自”只在有把握时出手”。这不是更聪明的预测,而是更诚实的弃权(abstention)。适合低频、高确信、错一单代价极大的策略;不适合需要高换手、靠数量取胜的策略(出手率 17% 太低)。
  3. 保证的边界比保证本身更重要:第五、六节两处翻车才是这篇的核心。共形不是”永真保证”,它是”可交换假设下的保证”。把它当护身符盲目信任,反而比不用更危险——因为你会对一个已失效的区间产生虚假安全感。
  4. 局部自适应是异方差市场的刚需:金融波动天然随 regime 变化,等宽区间必然在高波动区欠覆盖。凡是要在不同波动状态下交易的策略,普通共形的边际保证都不够,必须上 normalized / Mondrian 共形做条件校准。
  5. 适用边界:数据近似平稳、可周期性再校准、追求可验证风控 → 共形大幅受益;强非平稳、regime 突变、无法及时再校准 → 覆盖保证会系统性失效,需配合漂移检测,或干脆不依赖其数值保证。

拆穿五类陷阱(中阶):① 保证=永真(错,可交换性破坏后覆盖从 90% 崩到 54%);② 边际=条件(错,边际 91% 在高波动区实为 49%);③ 区间=预测准(错,共形只保覆盖不保区间窄,救不了烂模型);④ 无分布=无假设(错,可交换性是硬假设,金融最难满足);⑤ 覆盖达标即可交易(错,出手率 17% 说明可验证≠可盈利,纪律换的是胜率不是总量)。

共形强化学习交易:给 RL 动作一个可验证的覆盖保证
https://blog.halo26812.eu.org/blog/conformal-rl-trading
Author halo
Published at 2026年7月24日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨