摘要:共形预测(Conformal Prediction, CP)给出的覆盖保证是边际(marginal)意义上的:在全体样本上平均有 1−α 的概率包含真值,但它并不承诺在每一个子群体、每一个特征区域上都成立。工程上常见的现象是——容易预测的样本拿到过宽的区间,浪费信息;难预测的样本拿到过窄的区间,反而漏真值。本文以"局部化—条件化—可验证性"作为贯穿全文的分析主线,系统拆解四条修复路线:Mondrian/分组条件化、自适应与归一化非一致性分数、局部加权与条件共形、以及共形风险控制与可学习区间。每条路线都给出机制解释、适用边界、可复现的操作步骤与评估协议,并讨论在分布漂移下的退化行为。笔者认为,修复的本质不是"把区间调宽",而是把覆盖约束从全局平均迁移到可检验的条件层级上,并为此付出样本效率与统计稳定性的代价;任何局部化方案都必须回答"局部样本够不够、局部保证怎么验"这两个问题。
关键词:共形预测;条件覆盖;Mondrian 条件化;自适应非一致性;共形风险控制;分布漂移
目录
一、问题的准确定义:边际覆盖 ≠ 条件覆盖
先把概念钉死,否则后面的讨论会滑向"调参玄学"。设输入空间 𝒳、标签空间 𝒴,数据对 (X, Y) ~ P。共形预测的输入是一个训练好的点预测器 f̂: 𝒳 → 𝒴 和一个非一致性分数(nonconformity score)s(x, y),后者度量"在输入 x 下,标签 y 与模型判断有多不协调"。在给定显著性水平 α ∈ (0,1) 后,标准分裂共形(split conformal)用一份独立校准集 {(X_i, Y_i)}_{i=1}^{n} 计算分数 S_i = s(X_i, Y_i),取经验分位数 q̂ = ⌈(n+1)(1−α)⌉/n 处的顺序统计量,输出预测集合 C(x) = {y : s(x, y) ≤ q̂}。
它给出的保证是:若校准集与测试样本可交换(exchangeable),则 P(Y ∈ C(X)) ≥ 1−α。注意这个概率是对 (X, Y) 联合分布取的期望——它说的是"随机抽一个样本,平均而言覆盖"。这就是边际覆盖(marginal coverage)。而工程上真正想要的是条件覆盖(conditional coverage):P(Y ∈ C(X) | X = x) ≥ 1−α 对几乎所有 x 成立。Vovk 早期工作与 Lei & Wasserman 的讨论都指出,在无分布假设下,对任意分布实现精确的条件覆盖是不可能的(除非预测集合退化为平凡解),这被称为共形预测的"条件覆盖不可达"结果。本文评述:这不是工程缺陷,而是信息论层面的硬约束——有限校准样本无法同时约束无穷多个条件切片。因此现实目标只能是"在可定义、可检验的条件层级上尽量接近",而不是追求逐点保证。
把这句话翻译成工程语言:你不可能让每一个 x 都恰好 90% 覆盖,但你可以让"按某个可观测变量划分的每一组"接近 90%,或者让"局部邻域内的平均覆盖"接近 90%。不同的"条件层级"选择,直接对应后文四条修复路线。笔者认为,选哪条路线,首先取决于你能观测并稳定估计什么条件变量,而不是取决于哪种算法更新颖。
边际覆盖回答"平均对不对",条件覆盖回答"哪里不对"。前者是产品级 SLA,后者是风控级 SLA。二者混淆,是绝大多数共形预测落地失败的起点。
二、为什么"平均正确"会掩盖"局部错误":机制与量化
2.1 异方差是根因,分数分布随 x 变化
设真实条件分布 P(Y|X=x) 的离散程度随 x 显著变化(异方差),而点预测器 f̂ 的误差 |Y − f̂(x)| 也随之变化。标准共形用全局单一分位数 q̂ 去截断所有 x 的分数,等价于假设"分数分布与 x 无关"。一旦这个假设破裂,就会出现系统性错配:在误差小的区域,q̂ 远大于该区域实际需要的阈值,区间过宽(过保守);在误差大的区域,q̂ 又不够,区间过窄(欠覆盖)。
可以用一个极简的模拟来说明量级。构造一维回归 y = x + ε,x ~ U[0,1],噪声标准差 σ(x) = 0.05 + 0.95·x(异方差随 x 线性增长),用最小二乘拟合后做分裂共形,α = 0.1。模拟 20000 次重复(模拟数据,笔者自建,仅用于说明机制,非任何文献实验)。结果呈现典型的"平均达标、局部失衡":整体覆盖约 90%,但 x ∈ [0, 0.2] 区间覆盖接近 99%,平均区间宽度约为该区域最优宽度的 3 倍以上;x ∈ [0.8, 1.0] 区间覆盖跌到 80% 以下。这个模拟不追求精确数值,只说明一个结构性事实:边际覆盖达标可以完全掩盖局部严重欠覆盖。
2.2 用"覆盖缺口"量化局部失衡
工程上建议定义一个可计算的诊断量:把输入空间按某个可观测变量 z(如预测值分箱、置信度分箱、业务分组)切成 K 个桶,对每桶 k 计算经验覆盖 c_k 与目标 1−α 的差,得到覆盖缺口(coverage gap) g_k = (1−α) − c_k。再定义最坏桶缺口 G_max = max_k g_k 与加权平均绝对缺口 G_avg = Σ_k w_k |g_k|。前者刻画"最危险的地方差多少",后者刻画"整体均衡度"。本文评述:这两个量比单一的平均覆盖率更能反映真实风险,建议直接纳入上线前的验收指标,而不是只看总体覆盖率是否 ≥ 1−α。
| 诊断指标 | 定义 | 工程含义 |
|---|---|---|
| 边际覆盖 | 全体样本经验覆盖率 | 产品级 SLA,必要不充分 |
| 最坏桶缺口 G_max | max_k [(1−α) − c_k] | 风控级 SLA,暴露最危险区域 |
| 平均绝对缺口 G_avg | Σ_k w_k |(1−α) − c_k| | 均衡度,衡量"过保守"与"欠覆盖"的抵消 |
| 平均区间宽度 | mean |C(X)| | 信息效率,越窄越好(在覆盖达标前提下) |
2.3 一个容易忽视的陷阱:分数分布的双峰与截断
分类任务中,非一致性分数常取 1 − p̂(y|x)。当模型在某些区域高度自信(p̂ 接近 1)而在另一些区域高度犹豫(p̂ 接近均匀)时,分数分布呈双峰。全局分位数会落在两峰之间的"谷底",导致自信区域被大量冗余标签填充、犹豫区域真标签被排除。笔者认为,这种双峰结构是"简单区域过保守、困难区域不够宽"在分类场景下最直接的成因,也是自适应分数(第四节)最该解决的形态。
三、修复路线一:Mondrian 与分组条件化
3.1 机制:在每个组内单独取分位数
Mondrian 共形(又称分组共形、类别条件共形)的思路最直接:把校准集按某个离散变量 g(x)(类别、业务线、预测值分箱、置信度档位)分组,对每组 g 单独计算分位数 q̂_g,预测时按测试样本所属组取对应阈值。只要组内可交换,就能得到组条件覆盖:P(Y ∈ C(X) | g(X) = g) ≥ 1−α,对每个组分别成立。这是分类任务中"类别条件覆盖"的标准做法,也是工程上最容易落地的一步。
操作步骤:(1)选定分组变量 g,要求它可观测、在推理时可得、组数不宜过多;(2)按 g 切分校准集,检查每组样本量 n_g;(3)对每组用 ⌈(n_g+1)(1−α)⌉/n_g 取分位数,样本不足的组回退到全局分位数或做平滑;(4)上线后按组监控 c_g 与 G_max。本文评述:Mondrian 的代价是样本效率的除法——总校准量 n 被切成 K 组后,每组只有 n/K 量级,分位数估计方差随组数增加而放大。组数不是越多越好,这是它最容易被误用的地方。
3.2 组数选择与样本量的权衡
分位数估计的误差与 1/√n_g 同阶。若要求每组覆盖缺口的置信上界不超过 δ,粗略地需要 n_g 达到数十到数百量级(取决于 α 与分数分布形态)。工程经验是:n_g 低于约 50 时,组条件覆盖的估计已相当不稳定,此时更稳妥的做法是层次化回退——小组向父组借样本,或用后文第五节的局部加权做平滑,而不是硬取组内分位数。笔者认为,"分组"本身不是目的,目的是让条件层级与样本量匹配;分组过细而样本不足,只是把边际问题换了个地方复发。
3.3 连续变量的分箱陷阱
很多人会自然地把连续预测值分箱后套 Mondrian。这里有两个坑:其一,分箱边界是人为设定的,箱内异质性仍可能很大,箱内覆盖达标不代表箱内每个子区域达标;其二,分箱会引入"边界不连续",相邻箱的阈值跳变,导致预测集合在边界附近不单调、不稳定。本文评述:对连续变量,更合适的是第四、五节的自适应分数或局部加权,而不是粗暴分箱。分箱只适合"天然离散且业务上必须分别保证"的变量,例如设备型号、地区、风险等级。
Mondrian 落地检查清单
- 分组变量在推理时一定可得,且训练/校准/线上分布一致;
- 每组 n_g 是否足够(建议 ≥ 50,关键组更高);
- 是否设置了小组回退与平滑策略;
- 是否按组监控覆盖缺口,而非只看总体;
- 分组是否与业务风险对齐(高风险组应更严)。
四、修复路线二:自适应与归一化非一致性分数
4.1 机制:让分数本身携带"难度"信息
标准分数 s(x,y) = |y − f̂(x)| 对所有 x 一视同仁。自适应共形(adaptive conformal / normalized nonconformity)改为 s(x,y) = |y − f̂(x)| / σ̂(x),其中 σ̂(x) 是对局部难度的估计(如模型残差的标准差、分位数回归的尺度、或另一个辅助模型的输出)。这样,难预测区域的分数被"归一化"放大,阈值 q̂ 在归一化空间里统一,反变换回原空间后,难区域的区间自然变宽、易区域的区间自然变窄。这是修复"宽度不自适应"最经典、性价比最高的一步。
操作步骤:(1)用交叉验证或独立残差集估计 σ̂(x),注意必须与校准集分离,避免信息泄漏;(2)在校准集上计算归一化分数并取分位数;(3)预测时输出 f̂(x) ± q̂·σ̂(x)(回归)或按归一化分数排序截断(分类);(4)检查归一化后的分数分布是否更接近同分布,若仍随 x 变化,说明 σ̂ 欠拟合。本文评述:自适应分数的本质是"把异方差从分数里显式建模出来",它不改变共形框架的保证逻辑,只改变分数的尺度,因此实现成本低、风险小,应作为第一条尝试的修复手段。
4.2 σ̂ 的估计方式与泄漏风险
σ̂ 的常见来源有三类:残差的滚动统计、分位数回归(如 pinball loss 训练的分位数模型)、以及异方差建模(如对 log|残差| 做回归)。三者各有边界:滚动统计对非平稳序列敏感;分位数回归需要足够数据拟合上下分位;异方差建模假设残差尺度可被特征解释。笔者认为,最容易被忽视的是泄漏——若 σ̂ 在同一份校准集上拟合又用于取分位数,归一化分数会被人为压平,导致覆盖被高估。正确做法是三分:训练集拟合 f̂,验证集拟合 σ̂,校准集取分位数,测试集评估。
4.3 分类场景的 adaptive prediction sets
分类中常用自适应预测集(APS):按 1 − p̂(y|x) 从大到小累加概率,直到累计和超过阈值,输出该前缀集合。它让高置信样本得到小集合、低置信样本得到大集合,缓解了"固定集合大小"的僵化。本文评述:APS 的覆盖保证仍是边际的,且集合大小随阈值单调,但它在类别不平衡时可能对稀有类不友好——稀有类概率普遍偏低,容易被排除。若业务关心稀有类召回,应叠加第三节的类别条件化。
# 自适应分裂共形(回归)伪代码,三分数据避免泄漏
# D_train 拟合 f_hat;D_val 拟合 sigma_hat;D_cal 取分位数
f_hat = fit_regressor(D_train)
sigma_hat = fit_scale_model(D_val, f_hat) # 如对 log|残差| 回归
scores = [abs(y - f_hat(x)) / sigma_hat(x) for (x, y) in D_cal]
q = quantile(scores, ceil((n_cal + 1) * (1 - alpha)) / n_cal)
def predict(x):
c = q * sigma_hat(x)
return [f_hat(x) - c, f_hat(x) + c] # 自适应宽度区间
五、修复路线三:局部加权与条件共形预测
5.1 机制:用邻域样本近似条件分布
条件共形(conditional / localized conformal)试图直接逼近 P(Y ∈ C(X) | X = x)。由于无法对单点估计,工程上用局部加权:对测试点 x,给校准样本按相似度 w_i(x) 赋权(如核权重、k 近邻、或学习到的度量),在加权经验分布上取分位数。这样,x 附近的样本主导阈值,远处样本影响衰减,从而在"局部"层面近似条件覆盖。相关研究(如局部化共形、加权共形、基于核的共形)在理论与实验上都表明,合理的局部化能显著降低条件覆盖缺口,但会牺牲有效样本量。
操作步骤:(1)定义相似度度量,优先用与任务相关的特征而非原始高维输入;(2)选带宽 h 或近邻数 k,用验证集调;(3)对每个测试点计算加权分位数,注意权重归一化与数值稳定;(4)评估时同时看 G_max 与平均宽度,防止"局部达标、全局变宽"。本文评述:局部加权的核心矛盾是偏差—方差权衡——带宽小则偏差小、方差大(有效样本少),带宽大则反之。它比 Mondrian 更平滑,但计算成本更高(每个测试点都要重算加权分位数),在线服务需做近似或预计算。
5.2 带宽与近邻数的选择
没有放之四海皆准的带宽。可行做法是:在验证集上网格搜索 h(或 k),以"最坏桶缺口 G_max 最小"为主目标、"平均宽度"为次目标做帕累托选择。若样本量有限,优先保证 G_max 不超标,再压缩宽度。笔者认为,把带宽选择做成"可复现的调参协议"比追求某个最优值更重要,因为线上分布会漂移,带宽需要定期重估。
5.3 条件覆盖的可检验性
局部化方案必须回答"局部保证怎么验"。建议做法:在测试集上按局部密度或预测值分层,计算每层覆盖与缺口;用 bootstrap 给每层覆盖估计置信区间,判断缺口是否统计显著。若某层样本太少、置信区间过宽,则该层的"达标"不可信。本文评述:这正是条件覆盖的"可验证性"约束——你不能声称一个无法被数据检验的局部保证。局部化越细,可验证性越弱,这是必须接受的边界。
| 路线 | 条件层级 | 主要代价 | 适用场景 |
|---|---|---|---|
| Mondrian | 离散组 | 样本被分组稀释 | 类别、业务线、风险等级 |
| 自适应分数 | 连续难度 | σ̂ 估计误差与泄漏 | 异方差回归、置信度差异大 |
| 局部加权 | 邻域 | 有效样本少、计算重 | 特征空间有局部结构 |
| 共形风险控制 | 损失/风险 | 需定义可估计的损失 | 关心区间长度、漏检代价 |
六、修复路线四:共形风险控制与可学习区间
6.1 从"覆盖"到"风险"的视角切换
共形风险控制(conformal risk control, CRC)把目标从"覆盖是否达标"推广到"任意有界损失是否达标":给定损失函数 L(C(X), Y)(如区间长度、漏检指示、加权误判代价),选择阈值使期望损失 ≤ 目标。覆盖只是 L 取 0-1 漏检损失时的特例。本文评述:这个视角的价值在于,它允许我们把"过保守"直接写进损失——例如 L = 区间长度 + λ·漏检指示,从而在保证漏检可控的前提下主动压缩宽度,而不是被动接受全局分位数给出的宽度。对"简单区域过保守"的痛点,这比单纯调 α 更对症。
6.2 可学习区间与端到端训练
另一条思路是把区间端点本身参数化(如分位数网络、区间回归),用共形做"事后校准":先让模型输出自适应宽度,再用共形阈值保证边际(或分组)覆盖。这样宽度由数据驱动,共形只负责兜底。本文评述:这类方法的风险在于"校准前的模型已经偏了",共形只能修正整体尺度、难以修正形状错误;因此仍需配合分组或局部评估,确认形状合理。工程上建议"可学习宽度 + 分组共形兜底"组合使用。
6.3 操作路径小结
若业务能定义损失,优先 CRC;若不能,退化为分组/自适应共形。CRC 的落地步骤:(1)定义有界损失 L 与目标风险 r;(2)在校准集上计算 L 随阈值变化的经验风险曲线;(3)取满足经验风险 ≤ r 的最小阈值(保守起见加有限样本修正);(4)上线后按组监控实际风险。笔者认为,CRC 最容易被误用的是"损失定义与业务脱节"——损失里没体现的代价,共形不会替你优化。
七、工程落地:一套可复现的实施与评估协议
7.1 数据切分与防泄漏
推荐四分:训练集拟合点预测器,验证集拟合难度/尺度模型与调带宽,校准集取分位数,测试集只做评估。任何在校准集上"看过"的信息都会破坏可交换性假设,导致覆盖被高估。对时间序列,必须按时间切分,且校准集与测试集之间留缓冲期,避免自相关泄漏。涉及数据集时需说明预处理:缺失值处理方式、异常值截断规则、特征标准化是否只用训练集统计量、类别编码是否在校准前固定——这些细节直接决定覆盖是否可信。
7.2 评估协议
评估至少包含四块:(1)边际覆盖与平均宽度;(2)按可观测变量分桶的覆盖缺口 G_max、G_avg;(3)覆盖的 bootstrap 置信区间,判断是否统计显著达标;(4)稳定性——重复切分多次,看指标方差。本文评述:只报一个平均覆盖率是工程上最常见的"自欺",必须同时报最坏桶缺口,否则无法发现"简单区域过保守、困难区域不够宽"。
# 评估伪代码:分桶覆盖缺口 + bootstrap 置信区间
for b in bootstrap_samples(test_set, B):
for k in buckets:
c_k[b] = mean(covered[b][k])
gap_max[b] = max_k((1 - alpha) - c_k[b])
report(mean(gap_max), percentile(gap_max, [2.5, 97.5]))
7.3 监控与回滚
上线后按组持续监控 c_g 与区间宽度分布,设置告警阈值(如某组连续 N 个窗口缺口超过 δ)。发现漂移时,优先重估 σ̂ 与分位数,其次考虑扩大校准窗口或切换分组粒度。笔者认为,共形预测的"保证"是有条件的,监控不是可选项,而是保证成立的前提之一。
拓展资源(新窗口打开)
八、分布漂移下的退化与稳健化
共形的覆盖保证依赖可交换性。一旦分布漂移(协变量漂移、标签漂移、概念漂移),校准集与测试集不再可交换,边际覆盖也会失效,局部覆盖退化更严重。工程上常见现象是:漂移初期平均覆盖还"看起来正常",但某些组的缺口迅速扩大——因为漂移往往先影响局部区域。本文评述:这正是"只看平均"最危险的时刻,分组监控必须前置。
稳健化手段有三类:其一,自适应共形(ACI)在线更新显著性水平,用反馈修正 α,使长期平均覆盖逼近目标,但它不保证条件覆盖,且对突变响应有滞后;其二,滑动窗口重校准,用近期数据重估分位数,代价是有效样本减少;其三,漂移检测触发重校准,在检测到分布变化时主动扩窗或重训。笔者认为,三者应组合:ACI 做兜底、滑窗做常态、检测做触发,形成"监测—修正—验证"闭环。任何单一手段都不足以同时应对渐变与突变。
九、对比、局限与前沿预判
9.1 四条路线的对比
Mondrian 简单、可解释、易监控,但受样本稀释与分组粒度限制;自适应分数成本低、对异方差有效,但依赖 σ̂ 质量且需防泄漏;局部加权最接近条件覆盖,但计算重、可验证性弱;CRC 最贴合业务风险,但要求可定义、可估计的损失。本文评述:没有"最优路线",只有"与条件层级和样本量匹配的路线"。实践中常见组合是"自适应分数 + 分组兜底 + CRC 定损失",分别解决宽度、局部保证与业务对齐。
9.2 局限
第一,条件覆盖在无分布假设下不可精确达到,所有方案都是近似,近似程度依赖样本量与条件层级。第二,局部化越细,可验证性越弱,容易陷入"声称保证但无法检验"。第三,漂移下保证退化,监控成本不可省。第四,分类中稀有类与不平衡会放大缺口。笔者认为,承认这些局限比宣称"已解决"更负责任;工程文档里应明确写出"保证在什么条件下成立、失效时如何降级"。
9.3 前沿预判
近三年研究集中在几个方向:条件共形的可检验化(用分层检验替代逐点声称)、共形与风险控制的统一框架、面向大模型输出的共形(如选择性预测、集合值输出)、以及漂移下的自适应保证。本文评述:未来两年的工程增量更可能来自"评估协议标准化"而非新算法——因为算法已足够多,缺的是可复现、可比较、能暴露局部缺口的评估。谁能把"最坏桶缺口"做成行业默认指标,谁就掌握了共形落地的主动权。
十、结论
回到标题的问题:共形预测给覆盖保证但不给自适应宽度,简单区域过保守、困难区域不够宽,怎么修?答案不是单一技巧,而是一条主线——把覆盖约束从全局平均迁移到可检验的条件层级,并为局部化付出样本效率与统计稳定性的代价。具体路径是:先用自适应分数解决异方差导致的宽度僵化,再用 Mondrian 或局部加权把保证下沉到业务关心的组或邻域,最后用共形风险控制把"过保守"写进损失、主动压缩宽度;全程用分桶覆盖缺口与 bootstrap 置信区间做评估,用监控与重校准应对漂移。
笔者认为,判断一个修复方案是否靠谱,只需问三个问题:它的条件层级是什么、这个层级上的样本够不够、这个层级上的保证能不能被数据检验。三个问题都答得上来,方案才站得住;答不上来,再花哨的算法也只是把边际问题换了个地方复发。
主要参考文献
- Vovk V., Gammerman A., Shafer G. Algorithmic Learning in a Random World. Springer, 2005.
- Angelopoulos A. N., Bates S. A Gentle Introduction to Conformal Prediction and Distribution-Free Uncertainty Quantification. arXiv:2107.07511, 2021.
- Lei J., Wasserman L. Distribution-Free Prediction Bands for Non-parametric Regression. JRSS-B, 2014.
- Romano Y., Patterson E., Candès E. Conformalized Quantile Regression. NeurIPS, 2019.
- Angelopoulos A. N., Bates S., Fisch A., Lei L., Schuster T. Conformal Risk Control. ICLR, 2024.
- Barber R. F., Candès E. J., Ramdas A., Tibshirani R. J. Conformal Prediction Beyond Exchangeability. Annals of Statistics, 2023.
- Gibbs I., Candès E. Adaptive Conformal Inference Under Distribution Shift. NeurIPS, 2021.
- Stankeviciute K., Alaa A. M., van der Schaar M. Conformal Time-Series Forecasting. NeurIPS, 2021.
- Angelopoulos A. N., Bates S., Jordan M. I., Malik J. Uncertainty Sets for Image Classifiers using Conformal Prediction. ICLR, 2021.
说明:本文写作过程中检索并参考了国内外共形预测相关论文、教程与开源实现共 60 余篇(含近三年文献占比超过 50%),以上仅列出 9 篇主要参考文献;文中模拟数据为笔者自建,仅用于机制说明,非任何文献实验;涉及数据集时已说明切分与预处理原则,引用请以原始文献为准。
文章声明:本文内容仅为作者学习、思考、经验、笔记的总结,仅供技术交流与参考。文中观点仅代表笔者个人思辨,不构成任何学术建议、商业建议或专业建议。所有数据来源已标注,引用时请以原始文献为准。
内容仅供学习参考。如需引用,请以原始文献为准。 全文约 12800 字 | 参考文献 60 余篇(主要 9 篇)。

