Conformal Prediction入門:モデルを問わず被覆率を保証する予測区間
はじめに
モデルは点予測を返します。ただ、意思決定に使うなら、その予測がどこまで外れうるかを範囲で示したい。そこで「95%の確率でこの範囲に入る」と予測区間を付けます。問題は、その95%が本当に当たっているとは限らないことです。予測区間が実際に真値を含む割合を被覆率(coverage)と呼びますが、よく使われる正規分布を仮定した区間は、ノイズの大きさが場所によって変わるデータでこの被覆率を外します。
今回、ノイズの大きさが場所によって変わる回帰データで、正規分布を仮定した区間と、分布を仮定しないConformal Predictionを比べました。どの手法も、全体で見れば目標の90%を覆います。ところが領域ごとに見ると、正規仮定はノイズの小さい所で覆いすぎ、大きい所では9割を大きく下回りました。入力に応じて幅を変えるCQRという方法だけが、どの領域でもほぼ9割を保ちます。この記事では、モデルに依存せず被覆率を保証するConformal Predictionの仕組みを、基本のSplit ConformalとCQRを実装しながら確かめます。
対象読者:
- 回帰・分類モデルの出力に不確実性を付けたい実務者
- ベイズに頼らず、分布仮定なしの保証がほしい方
- 予測区間の被覆率という概念を実装で押さえたい方
記事のポイント:
- Conformal Predictionが「モデル非依存・分布フリー・有限標本で被覆率保証」を持つ理由を理解します
- Split Conformalの手順(校正セットで非適合スコアの分位点を取る)を理解します
- 名目被覆率が実際に達成されるか、全体と領域別の両面で検証します
なぜ普通の予測区間は当てにならないか
正規仮定の区間は、残差が正規で、かつ分散が一定という2つの前提に乗っています。現実のデータはどちらも破りやすいものです。残差の分布が歪んでいれば±1.96σは非対称なずれを捉えられませんし、分散が入力で変われば、一定幅の区間はある領域で広すぎ、別の領域で狭すぎます。
被覆率保証とは、 を分布の仮定なしに達成することを指します。Conformal Predictionは、この保証を、どんな予測器の上にも後付けで乗せられます。
Split Conformal Predictionの原理
手順はごく単純です。まず学習用データで予測器 を学習します。次に、学習に使っていない校正セットで、各点の非適合スコア を計算します。このスコアの 分位点 を取り、予測区間を とします。
なぜこれで保証が出るのでしょうか。鍵は交換可能性(exchangeability)という仮定だけです。校正点とテスト点が交換可能なら、テスト点のスコアが校正スコアの中で何番目に来るかは一様に分布します。したがって、テストスコアが校正スコアの 分位点以下に収まる確率は、順位統計量の議論から 以上になります。分位点の取り方を有限標本向けに補正すると、次の保証が厳密に成り立ちます。
モデルが何であれ(線形回帰でも勾配ブースティングでも深層でも)、分布が何であれ、この不等式は成り立ちます。
適応的な区間:CQR
Split Conformalの区間は幅が一定で、不均一分散には向きません。そこで入力に応じて幅を変えたいところです。CQR(Conformalized Quantile Regression)は、下側・上側の分位点回帰モデル を学習し、その予測区間をconformalで補正します。非適合スコアを とし、その分位点 で区間を と広げます。分位点回帰が入力依存の幅を与え、conformal補正が被覆率保証を担保します。
lvl = np.ceil((n + 1) * (1 - alpha)) / n
# split conformal: 絶対残差スコア
qhat = np.quantile(np.abs(ycal - model.predict(Xcal)), lvl)
split = (pred - qhat, pred + qhat)
# CQR: 分位点モデルからのはみ出しをスコアに
scores = np.maximum(q_lo.predict(Xcal) - ycal, ycal - q_hi.predict(Xcal))
qc = np.quantile(scores, lvl)
cqr = (q_lo.predict(Xte) - qc, q_hi.predict(Xte) + qc)
異分散データで試す
ノイズの標準偏差が と入力に比例して増える不均一分散データを生成します。平均と分位点は勾配ブースティングで学習し、学習・校正・テストに分けました。被覆率と区間幅は15回の試行で平均しました。乱数シードは42に固定しました。
まず区間そのものを見ます。正規仮定とSplit Conformalは幅が一定で、ノイズの小さい左側では広すぎ、大きい右側では点がはみ出しています。CQRだけが右へいくほど区間を広げ、データの散らばりに追随しています。

全体の被覆率は次のとおりです。3手法とも目標の0.90をほぼ達成しています。
| 手法 | 全体被覆率 | 平均区間幅 |
|---|---|---|
| 正規仮定 | 0.899 | 5.52 |
| Split Conformal | 0.902 | 5.60 |
| CQR | 0.904 | 4.83 |
問題は領域別の被覆率です。 を5つの区間に分けて見ると、一定幅の2手法は左端で1.00、右端で0.72と大きく振れます。CQRは全域で0.90付近を保ちます。

被覆率の読み方と手法選択
全体の被覆率だけを見ると、3手法は横並びに見えます。しかしこれは、左側の過剰被覆と右側の過小被覆が平均すると打ち消し合っているためで、正規仮定とSplit Conformalは領域別には0.72まで落ちます。ノイズの大きい領域こそリスク評価で重要なのに、そこで区間が信用できないというのは実務では致命的です。全体(marginal)の被覆率と領域別(conditional)の被覆率は別物として見なければなりません。
Split Conformalは分布フリーの保証を持ちますが、それはあくまで全体の被覆率に対する保証です。一定幅である以上、不均一分散下での領域別の偏りは正規仮定と変わりません。保証があること自体は重要ですが、保証されているのが何なのかを取り違えると、安心しすぎてしまいます。
CQRは全域で0.90を保ちつつ、平均区間幅も4.83と最も狭い結果でした。領域別の妥当さと効率を同時に達成しています。予測区間は、被覆率が同じなら狭いほど有用なので、この差は実用上効きます。異分散が疑われるなら、Split Conformalよりも分位点ベースのCQRを既定にする、という判断になります。
見落とせない前提があります。conformalの保証は交換可能性に依存します。時系列や分布シフトのように交換可能性が崩れる場面では保証も崩れるので、時系列向けのEnbPIや、分布シフト下の重み付きconformalが必要になります。また、ここで担保されるのは全体の被覆率であって、領域別の被覆率(conditional coverage)は理論上は保証されません。CQRが領域別にうまくいくのは分位点回帰が異分散を捉えるからで、保証というより設計の賜物です。校正セットが小さいと分位点が不安定になる点も、実務では効いてきます。
まとめ
どんなブラックボックスにも、追加学習なしで被覆率保証を後付けできます。それがConformal Predictionの強みです。今回の不均一分散データでは、全体の被覆率はどの手法も0.90に達しましたが、領域別に見ると一定幅の手法は0.72まで崩れ、CQRだけが全域で0.90を保ちつつ最も狭い区間を与えました。手元のモデルに不確実性を足すなら、まずSplit Conformalで分布フリーの全体保証を確認し、異分散が疑われるならCQRへ進んで領域別の妥当さと効率を取りにいく、という順序が現実的です。