共形预测 Conformal Prediction

共形预测(conformal prediction,CP)是一种置信度预测器

  • 给定置信度水平,共形预测能为预测器模型生成具有统计有效性的预测区间
  • 共形预测可以逐类分析,独立保证每个类的错误率,适用于数据偏斜的情况
  • 广泛应用于假设检验,能为机器学习系统的预测提供有保证的不确定性量化
  • 共形预测易于理解和应用,通用性强,适用于不同领域不同类型的预测模型
  • 共形预测的算法相对新颖,相关的开源实现较少,更多的研究停留在学术界

由于翻译用词缺少官方定义,共形预测也称共形推理或保形预测

算法原理

共形预测的一般过程:

  1. 根据输入 $x$ 和输出 $y$ 构建预训练模型,并输出识别不确定性的启发式概念
  2. 定义得分函数 $s(x,y)\in R$,得分越大意味着 $x$ 和 $y$ 的一致性越差
  3. 依次计算所有样本的得分函数分布 $s_1 = s(X_1,Y_1),...,s_n = s(X_n,Y_n)$
  4. 预定义置信度 $\alpha$,寻找得分函数分布中的 $\frac{[(n+1)(1-\alpha)]}{n}$ 分位数,作为 $\hat{p}$
  5. 基于分位数 $\hat{p}$ 构建共形预测所需的样本 $C(X_{test})={y:s(X_{test},y)\leq \hat{p} }$

共形预测的简单示例(右侧含 Python 代码):

  1. 基于模型的 Softmax 输出计算得分函数:$s=1-y_{pred}$;Softmax 输出试图测量每种类别的条件概率,是模型内置的不确定性的启发式概念,因此可用于定义得分函数
  2. 预定义置信度 $\alpha$,在 $s$ 的分布中找到对应的分位数 $\hat{p}$;假如定义置信度 $\alpha=0.1$,则意味着至少有 90%的真实 softma 输出(预测概率)大于 $1-\hat{p}$(具体证明可参考论文 的附录 4)
  3. 基于预测输出和分位数 $\hat{p}$ 构建共形预测所需的训练集;这样在新数据的样本中,$y_{new}=1$ 意味着模型的真实 softma 输出(预测概率)要保证大于 $1-\hat{p}$ 的概率至少有 90%

共形预测能够将任意模型中不确定性的启发式概念转换为一种严格概念

得分函数根据具体预测模型的不同可以有不同的形式,比如对于分位数回归问题,可以用回归预测值与最近分位数之间的差值来作为得分函数;对于高斯过程回归 等生成模型,可以用生成分布的标准差来作为得分函数;对于贝叶斯算法等概率模型,可以用后验分布概率来作为得分函数

评价指标

适应性评估

适用性:困难的样本应该返回较大的预测集合,简单的样本应该返回较小的预测集合

核心思想:计算不同条件下的最低覆盖率,最低覆盖率越高,共形预测的适用性越强

  1. FSC 指标:基于特征分层的覆盖率指标

$$ FSC = \min_{g\in{1,...,G}} \frac{1}{|\mathcal{I}_{g}|} \sum_{i\in\mathcal{I}_{s}}\mathbb{1} \left\{Y_{i}^{(\mathrm{val})}\in\mathcal{C}\Big(X_{i}^{(\mathrm{val})}\Big)\right} $$

  • 其中 $g$ 表示对特征离散化处理后的取值, $G$ 表示取值的可能种类数
  • $\mathcal{I}_{g}$ 表示验证集中满足 $X_{i,1}^{(val)}=g$ 的样本集合,$|\mathcal{I}_{g}|$ 表示样本个数
  • 所有样本先按照特征分层后再分别统计覆盖率,其中的最低覆盖率即 FSC
  1. SSC 指标:基于特征分层的覆盖率指标

$$ FSC = \min_{g\in{1,...,G}} \frac{1}{|\mathcal{I}_{g}|} \sum_{i\in\mathcal{I}_{s}}\mathbb{1} \left\{Y_{i}^{(\mathrm{val})}\in\mathcal{C}\Big(X_{i}^{(\mathrm{val})}\Big)\right} $$

  • 和 FSC 的公式一样,只不过 $g$ 表示数据分层的一种方式;比如说,根据验证集 $C(x)$ 的元素数分为三组(一个元素、两个元素或多于两个元素)
  • 与 FSC 不同,用户不必预先定义一组重要的离散特征(通用性更强)

补充:注意区分边缘(marginal)覆盖与条件(conditional)覆盖

  • 在边缘覆盖中,错误样本会集中在某个区域
  • 在条件覆盖中,错误样本更偏向于均匀分布

准确率验证

核心思想:计算不同条件下的平均覆盖率,平均覆盖率越高,共形预测的准确率越高

$$ C_{j}={\frac{1}{n_{\mathrm{val}}}}\sum_{i=1}^{n_{\mathrm{val}}}\mathbb{1} \left\{Y_{i,j}^{\left(\mathrm{val}\right)}\in\mathcal{C}_{j}\left(X_{i,j}^{\left(\mathrm{val}\right)}\right)\right},{\mathrm{~for~}}j=1,...,R, $$

  • 其中 $n_{\mathrm{val}}$ 表示验证集的大小,验证集的每个样本为 $(X_{i,j}^{(val)},Y_{i,j}^{(val)})$
  • $j$ 表示第 $j$ 类测试(共 $R$ 种测试),$i$ 表示第 $i$ 个样本
  • 最终所有测试的平均准确率 ${\overline{{C}}}={\frac{1}{R}}\sum_{j=1}^{R}C_{j}$ 应该接近 $1-\alpha$

测试集的数据量也会影响到准确率的验证:

  • 以上图所示,n = 1000 时覆盖范围通常在 0.88 到 0.92 之间
  • 因此,一般认为测试集的数据量在 1000 以上才具备较好的验证效果

其他拓展

进阶方向:

  • 利用共形预测来平衡组,比如确认某医疗分类模型在所有亚组中均表现合格
  • 保形预测也适用于无监督的异常值检测,不确定性高的样本更可能是异常点
  • 通过加权的共性预测,还可以一定程度上修复分布偏移导致的模型失效问题

拓展应用:

  • 肿瘤图像分割中,通过共形预测来控制风险,确保像素遗漏的概率低于 $\alpha$
  • 天气预报中,针对时序温度数据进行不确定性估计,进而预测温度区间
  • 对在线评论分类中有害评论进行异常检测,确保有害评论的通过率低于 $\alpha$
  • 对医疗诊断问题,确保模型准确率达到 95%以上才输出模型的预测结果

Python 工具:

  • MAPIE - 量化机器学习模型的不确定性和控制风险 1.3k⭐️
  • Conformal Prediction - 共形预测方法的开发测试|真实案例脚本 792⭐️
  • 应用形预测实用指南 - 量化机器学习和计算机视觉模型中的不确定性 146⭐️

图机器学习的共形预测:CS224W 图机器学习16 PART2:量化 GNN 的不确定性

参考: A Gentle Introduction to Conformal Prediction and Distribution-Free Uncertainty Quantification
Conformal Prediction – A Practical Guide with MAPIE

往年同期文章