代表性面试主题

数据科学面试:Conformal 预测区间怎么建?

数据困难
OfferCC 编辑团队发布 更新

题干

一个回归模型需要给每个预测附带不确定性区间。请设计 split conformal prediction,推导校准分位数,解释覆盖率保证依赖的假设,并讨论时间序列、协变量漂移和区间过宽时怎么办。

1. 题目

你已有一个点预测模型 f(x),但业务需要输出类似 [lower, upper] 的预测区间,并希望在置信水平 1 - alpha 下具有可解释的覆盖率。请设计 split conformal prediction 流程,说明训练集、校准集和测试点如何分工。

2. 约束与澄清

  • 先讨论回归和绝对误差分数;分类集合、在线校准和条件覆盖率属于延伸。
  • 训练模型后固定参数,校准集不能再用于拟合点预测器。
  • 覆盖率是对一批可交换样本的边际保证,不承诺每个子群或每个单点都达到相同比例。
  • 需要区分随机采样数据、时间序列和发生协变量漂移时的有效性。

3. 核心思路

将数据分为训练集和校准集。用训练集拟合点预测器,在校准集上计算非一致性分数 s_i = |y_i - f(x_i)|。对目标覆盖率 1 - alpha,取校准分数的有限样本修正分位数 q;新样本 x 的区间为 [f(x) - q, f(x) + q]。

在交换性假设下,这个构造给出边际覆盖率保证:新标签落在区间内的概率至少接近 1 - alpha,有限样本版本需要按校准集大小选择保守的次序统计量。它不要求点预测器本身正确,但区间宽度会反映模型残差和数据噪声。

4. 参考实现

python
def fit_split_conformal(train, calibration, alpha):
    model = fit_point_predictor(train.x, train.y)
    scores = sorted(
        abs(y - model.predict(x))
        for x, y in zip(calibration.x, calibration.y)
    )
    # Use the finite-sample conformal quantile, not a naive percentile.
    rank = ceil((len(scores) + 1) * (1 - alpha))
    q = scores[min(rank, len(scores)) - 1]

    def predict_interval(x):
        center = model.predict(x)
        return center - q, center + q

    return predict_interval

5. 正确性与评估

评估时必须在独立测试集上统计覆盖率与平均区间宽度,并按时间、地区或用户群检查差异。覆盖率低于目标可能来自非交换数据、校准集过小、分布漂移或实现错误;只报告平均覆盖率无法发现某个群体系统性失效。

区间宽度与分数定义有关:绝对残差给出对称区间,分位数回归或局部尺度分数可产生非对称或自适应区间。更窄的区间不自动代表更好,必须与覆盖率和业务损失一起比较。

6. 追问与陷阱

  • “分布无关”不是“无条件任何分布都保证”;经典保证依赖校准样本与新样本满足交换性。
  • 时间序列的顺序依赖会破坏朴素 split conformal,需使用滚动校准、加权方法或明确降低保证范围。
  • 协变量漂移下可按密度比加权,但权重估计错误会影响覆盖率,不能继续宣称原始保证不变。
  • 边际覆盖率不等于条件覆盖率;小群体或极端输入可能仍有很宽或很窄的区间。

7. 延伸阅读

可以比较 split、cross-conformal、在线 conformal 和加权 conformal:它们在数据复用、计算成本、适应漂移和理论保证之间取舍。生产系统还应监控覆盖率、区间宽度、残差漂移、校准集新鲜度和拒绝/人工复核比例。

8. 面试评分点

能正确拆分训练与校准

应说明点预测器只在训练集拟合,校准分数来自未参与拟合的样本,并使用有限样本分位数。

能解释覆盖率假设

应说清交换性、边际覆盖率与条件覆盖率的区别,不能把结果描述成每个样本的确定性保证。

能处理漂移与时间依赖

应提出滚动、加权或在线校准,并说明这些方法的额外假设和保证变化。

能平衡区间宽度

应同时报告覆盖率和宽度,按子群监控失效,并把统计指标与业务损失联系起来。

公开来源

同类题目

资源

产品对比

每份对比均基于官方资料,并标注复核日期。

查看完整对比