Conformal Prediction
컨포멀 예측은 모든 모델의 점수를 예측 집합이나 구간으로 변환하여 95%와 같이 지정된 비율로 실제 답을 포함하도록 합니다.
컨포멀 예측은 불확실성 정량화를 위한 프레임워크입니다. 학습된 모델의 점수를 사용자가 선택한 비율(예: 95%)로 실제 답을 포함하도록 보장되는 예측 집합이나 구간으로 변환합니다. 컨포멀 이미지 분류기는 여전히 가능한 모든 레이블을 반환하므로 명확한 이미지에는 레이블 하나를, 모호한 이미지에는 여러 레이블을 출력하며, 컨포멀 회귀기는 구간을 반환합니다. 보정 데이터와 새 데이터가 교환 가능하다면, 즉 동일한 출처에서 독립적으로 추출되었다면 어떤 모델과 데이터 분포에서도 이 보장이 성립합니다. Vladimir Vovk, Alexander Gammerman, Glenn Shafer는 1990년대 후반부터 이 방법을 개발해 2005년 저서 무작위 세계에서의 알고리즘 학습에 정리했으며, Anastasios Angelopoulos와 Stephen Bates가 2021년에 발표한 튜토리얼 컨포멀 예측 입문은 머신러닝에서 사용되는 최신 방법을 다룹니다.
분할 컨포멀 예측 작동 방식#
기존의 전체 컨포멀 방법은 각 후보 답변마다 모델을 다시 학습하므로 딥러닝에는 너무 느립니다. 2002년 Harris Papadopoulos와 동료들이 소개한 분할 또는 귀납적 컨포멀 예측은 학습된 모델 하나와 별도로 보류한 보정 세트만 필요합니다:
- 평소처럼 학습 데이터로 모델을 학습합니다.
- 모델이 본 적 없는 라벨이 지정된 보정 예제 n개에 모델을 실행하고 각 예제의 비일치 점수를 계산합니다. 비일치 점수는 실제 답이 모델에 덜 전형적으로 보일수록 커지는 값입니다. 분류기의 경우 일반적인 점수는 1에서 실제 클래스에 할당된 확률을 뺀 값입니다.
- 해당 점수의 ceil((n + 1) x (1 - alpha)) / n 분위수를 구하며, 이를 qhat이라고 합니다. (n + 1) 항은 보장을 정확하게 만드는 유한 표본 보정입니다.
- 새 입력의 경우 점수가 qhat 이하인 모든 후보 라벨을 포함합니다.
결과 집합에는 최소 1 - alpha의 확률로 실제 라벨이 포함됩니다. 새 예제의 점수는 n개의 보정 점수와 교환 가능하므로 이들 사이의 어느 순위에든 똑같이 놓일 수 있습니다. 따라서 최소 1 - alpha 비율의 경우 qhat 이하에 해당합니다.
보장이 적용되는 범위#
이 보장은 주변적입니다. 즉, 모든 입력에 걸쳐 평균적으로 성립합니다. 모델은 쉬운 클래스에서는 과도하게 포함하고 희귀 클래스에서는 충분히 포함하지 않을 수 있으므로, 클래스 조건부(Mondrian) 컨포멀 예측은 클래스별로 별도의 qhat을 보정합니다. 유일한 가정은 교환 가능성이며, 운영 이미지가 보정 이미지와 다를 때 발생하는 데이터 드리프트 상황에서는 이 가정이 성립하지 않습니다. 따라서 보정 세트는 배포 데이터에서 가져와야 하며 데이터가 바뀌면 갱신해야 합니다. 보정 세트의 데이터셋 편향은 예측 집합에 그대로 반영됩니다.
유용한 신호는 집합 크기입니다. 유효한 모든 절차는 목표 커버리지에 도달하므로 방법 간의 경쟁은 집합 크기를 얼마나 작게 만드는지에 달려 있으며, 더 정확한 모델은 더 작은 집합을 만듭니다. ImageNet 분류기에서 테스트된 적응형 예측 집합(APS)과 정규화 적응형 예측 집합(RAPS)은 누적 확률을 사용해 집합 크기가 난이도를 반영하도록 합니다. 컨포멀화 분위수 회귀는 데이터에 잡음이 많은 구간에서 더 넓어지는 구간을 생성합니다.
컨포멀 예측은 세 가지 관련 개념과 다릅니다. 신뢰도 점수는 보장이 수반되지 않는 단일 값입니다. 온도 스케일링과 같은 보정 방법은 점수가 관측된 정확도와 더 잘 일치하게 하므로 컨포멀 집합을 줄이지만, 그 자체로 커버리지를 보장하지는 않습니다. 통계적 신뢰 구간은 평균과 같은 모집단 모수의 불확실성을 나타내는 반면, 컨포멀 집합은 새 관측값 하나가 속할 위치를 나타냅니다.
실제 적용에서의 예측 집합#
분류기가 실수하도록 학습 세트를 의도적으로 작게 설정해 scikit-learn으로 위 단계를 구현합니다:
import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
# Split handwritten digits into training, calibration, and test sets
X, y = load_digits(return_X_y=True)
X_train, X_rest, y_train, y_rest = train_test_split(X, y, train_size=100, random_state=0)
X_cal, X_test, y_cal, y_test = train_test_split(X_rest, y_rest, train_size=500, random_state=0)
model = LogisticRegression(max_iter=2000).fit(X_train, y_train)
# Nonconformity score: 1 minus the probability given to the true class
scores = 1 - model.predict_proba(X_cal)[np.arange(len(y_cal)), y_cal]
# Finite-sample corrected quantile for 95% coverage
alpha, n = 0.05, len(y_cal)
qhat = np.quantile(scores, np.ceil((n + 1) * (1 - alpha)) / n, method="higher")
# Prediction set: every class whose score is at most qhat
sets = 1 - model.predict_proba(X_test) <= qhat
coverage = sets[np.arange(len(y_test)), y_test].mean()
print(f"Top-1 accuracy: {model.score(X_test, y_test):.3f}")
print(f"Set coverage: {coverage:.3f}, average set size: {sets.sum(axis=1).mean():.2f}")최상위 예측만 보면 91.6%의 경우에 정답을 맞히지만, 컨포멀 집합은 테스트 이미지 1,197개 중 96.5%에서 실제 숫자를 포함하여 목표인 95%를 넘으며 평균 라벨 수는 1.27개입니다. MAPIE와 같은 라이브러리는 분류, 회귀, 시계열에 이러한 단계를 적용할 수 있도록 패키징합니다.
응용 분야#
- 의료 영상 분석: 알려진 오류율을 갖는 타당한 소견 집합은 스캔이 모호한 경우 의료진에게 이를 알려주며, 라벨이 하나인 집합은 모델이 안정적으로 처리하는 사례를 표시합니다.
- 대규모 언어 모델(LLM): 컨포멀 방법은 출력에 선택한 비율로 정답이 포함되도록 반환할 샘플 답변의 수나 유지할 주장을 보정하며, 환각 방지책으로 의미 엔트로피를 보완합니다.
- 객체 탐지: 예측된 바운딩 박스 주변의 컨포멀 여백은 선택한 비율로 실제 박스를 포함하는 영역을 제공하며, 자율주행차가 보행자를 피해 주행 경로를 계획할 때 유용합니다.
이미지 분류기는 scikit-learn 예제와 동일한 입력을 사용합니다. Ultralytics YOLO26 분류 모델은 results[0].probs.data의 모든 이미지에 대한 전체 소프트맥스 벡터를 반환하므로, 보류한 라벨 지정 이미지 세트의 점수를 계산해 qhat을 구하고 확률이 1 - qhat 이상인 모든 클래스를 예측 집합에 포함합니다.










