如何使用Conformal Prediction计算ARIMA模型的概率区间?
核心逻辑:基于「非一致性得分」的校准
Conformal Prediction(CP)的本质是通过校准误差分布来构建满足预设置信水平的区间,核心依赖「训练/测试样本同分布(交换性)」的假设——只要这个假设成立,构建的区间就能保证至少$1-\alpha$的覆盖概率($\alpha$是显著性水平,比如95%置信度对应$\alpha=0.05$)。
下面以最常用的Split Conformal Regression(拆分式共形回归,也是绝大多数工具包的底层实现)为例,拆解完整算法步骤:
1. 数据集拆分
将原始标注数据$(X, Y)$拆分为两个互斥子集:
- 训练集$D_{train}$:用来训练基础预测模型(比如线性回归、随机森林等任意回归模型);
- 校准集$D_{cal}$:用来计算误差的分布阈值,通常占总数据的10%-20%,样本量不能太小(否则阈值估计偏差大)。
2. 训练基础预测模型
用$D_{train}$训练模型$f$,得到对任意输入$x$的点预测$\hat{y}(x) = f(x)$。这里的模型可以是任意你想用的回归模型,CP不限制基础模型的类型。
3. 计算非一致性得分
对校准集$D_{cal}$中的每个样本$(x_i, y_i)$,计算非一致性得分——用来衡量「真实值与预测值的偏离程度」,最常用的是绝对误差:
s_i = |y_i - \hat{y}(x_i)|
也可以根据任务选择其他得分,比如相对误差$s_i = |y_i - \hat{y}(x_i)| / |y_i|$(适合数值跨度大的场景)、平方误差$s_i = (y_i - \hat{y}(x_i))^2$等,只要能有效反映预测的不一致性即可。
4. 确定误差阈值$q_{\alpha}$
根据预设的置信水平$1-\alpha$,找到校准集得分的调整分位数:
- 假设校准集有$n_{cal}$个样本,计算分位数位置$k = \lfloor (1-\alpha) \times (n_{cal} + 1) \rfloor$;
- 将所有$s_i$从小到大排序,取第$k$个值作为阈值$q_{\alpha}$。
这里用$(n_{cal}+1)$而不是$n_{cal}$是为了修正小样本下的分位数偏差,保证区间的严格覆盖性。
5. 构建测试样本的预测区间
对新测试样本$x_{test}$,先得到点预测$\hat{y}(x_{test})$,然后构建区间:
[\hat{y}(x_{test}) - q_{\alpha}, \hat{y}(x_{test}) + q_{\alpha}]
这个区间保证在交换性假设下,真实值$y_{test}$落在区间内的概率至少为$1-\alpha$。
其他常见变体
Full Conformal(全共形)
不需要拆分数据集,改用「留一法」:对每个样本$(x_i, y_i)$,用其余所有样本训练模型,计算该样本的非一致性得分,再取分位数作为阈值。优点是不浪费数据,缺点是计算量极大,只适合小数据集。
Adaptive Conformal(自适应共形)
针对Split Conformal区间宽度固定的问题,让阈值随样本特征自适应调整:比如先训练一个模型预测不确定性$\sigma(x)$(比如用分位数回归、贝叶斯模型输出方差),然后将非一致性得分定义为$s_i = |y_i - \hat{y}(x_i)| / \sigma(x_i)$,最终区间为$[\hat{y}(x_{test}) - q_{\alpha} \times \sigma(x_{test}), \hat{y}(x_{test}) + q_{\alpha} \times \sigma(x_{test})]$——不确定性高的样本会得到更宽的区间,更符合实际场景。
关键注意事项
- 交换性是前提:如果测试数据和训练/校准数据分布不一致(比如概念漂移),区间的覆盖概率会失效;
- 得分函数要匹配任务:选得分时要考虑数据的分布特性,比如比例数据用相对误差更合适;
- 校准集样本量:太小会导致阈值估计不准,建议至少保留50个以上的校准样本。
内容的提问来源于stack exchange,提问作者rodrigo franco

