한계적 커버리지(Marginal coverage)는 평균의 거짓말이다: 이를 잡아내는 컨포멀 진단법 (conformal diagnostics)
요약
컨포멀 예측(Conformal Prediction)에서 평균적인 한계적 커버리지가 특정 데이터 슬라이스나 클래스의 성능 저하를 숨길 수 있음을 경고합니다. 이를 해결하기 위해 클래스별 커버리지를 진단하여 불공정한 예측을 잡아내는 방법을 제시합니다.
핵심 포인트
- 한계적 커버리지는 평균값일 뿐, 특정 클래스의 성능 저하를 은폐할 수 있음
- 쉬운 데이터의 과잉 커버와 어려운 데이터의 과소 커버가 평균을 왜곡함
- 최악 클래스 커버리지 격차(worst-class coverage gap)를 통해 진단 필요
- 조건부 커버리지 확인을 통해 데이터 슬라이스별 불공정성 방지
면책 조항: 이 글은 AI의 도움을 받아 초안을 작성하였으며, 저자가 검토 및 편집하였습니다. 기술적 설계와 의견은 저자 개인의 것입니다.
당신은 분류기(classifier)를 컨포멀 예측기(conformal predictor)로 감싸고, 90% 커버리지(coverage)를 위해 보정(calibrate)한 뒤, 홀드아웃 세트(held-out set)를 확인하여 90.2%가 나온 것을 보았습니다. 그대로 배포하세요.
그 수치는 실제입니다. 하지만 그 수치는 당신이 정말로 중요하게 생각하는 사례들에 대해 모델이 심각하게 커버리지를 놓치고 있는 상태를 여전히 숨기고 있을 수 있습니다. 한계적 커버리지(Marginal coverage)는 평균이며, 평균은 실패를 세탁합니다. 이는 데이터 드리프트(drift) 상황에서 컨포멀 예측이 깨지는 문제와는 다른 문제입니다. 여기서는 교환 가능성(exchangeability)이 유지되고 한계적 보장(marginal guarantee)이 실제로 충족되지만, 단지 방법론이 데이터의 슬라이스(slices) 전반에 걸쳐 조용히 불공정할 뿐입니다. 두 가지 간단한 진단법(diagnostics)이 이를 잡아낼 수 있습니다.
한계적 수치(marginal number)가 실제로 약속하는 것
분할 컨포멀 예측(Split-conformal prediction)은 한계적(marginal) 커버리지 보장을 제공합니다. 즉, 새로운 교환 가능한 샘플(exchangeable sample)에 대해, 실제 라벨이 예측 세트 C(x) 안에 포함될 확률이 최소 1 − α라는 것입니다. 그것이 전부입니다. 이는 입력값(input), 실제 클래스(true class), 또는 예제의 난이도에 따른 조건부(conditional) 커버리지에 대해서는 아무것도 말해주지 않습니다.
그리고 한계적 커버리지는 아주 쉽게 충족될 수 있습니다. 예측기가 쉬운 영역은 과하게 커버(over-covering)하고 어려운 영역은 적게 커버(under-covering)함으로써 정확히 90%를 맞출 수 있습니다. 두 오류가 평균에서 상쇄되기 때문입니다. 보장은 정직하지만, 그것을 해석하는 당신은 그렇지 않습니다.
클래스의 3분의 1을 실패하는 90% 예측기
3개의 클래스, 100개의 보정용 홀드아웃(calibration-held-out) 포인트가 있다고 가정해 봅시다.
- 클래스 A 및 B: 80개 포인트, 그 중 76개에서 실제 라벨이 세트에 포함됨 → 95%.
- 클래스 C: 20개 포인트, 그 중 14개에서 실제 라벨이 세트에 포함됨 → 70%.
한계적 커버리지(Marginal coverage) = (76 + 14) / 100 = 90%. 정확히 목표치입니다. 하지만 클래스 C — 아마도 당신의 희귀하지만 중요한 클래스, 사기 사례, 혹은 악성 스캔 데이터일 수도 있는 — 는 70%의 확률로만 커버됩니다. 헤드라인 수치는 이 중 어떤 것도 알려주지 않았습니다.
해결책은 중요한 요소에 대해 평균을 내는 것을 멈추는 것입니다. **최악 클래스 커버리지 격차 (worst-class coverage gap)**를 보고하세요:
import numpy as np
def worst_class_coverage(y_true, in_set, n_classes):
...
클래스별 커버리지에 대해 min 연산을 한 번 수행하면 "전체 90%"가 "클래스 C에서 70%"로 변하며, 이는 대시보드에 실제로 표시하고 싶은 수치가 됩니다.
한계적 커버리지가 클래스별 점검에서조차 숨기는 실패 요인: 집합 크기 (set size)
클래스 조건부 커버리지 (Class-conditional coverage)는 _어떤 레이블_이 손해를 보고 있는지는 잡아냅니다. 하지만 컨포멀 집합 (conformal sets)에는 커버리지를 유출시키는 두 번째 축이 있습니다. 바로 **크기 (size)**입니다. 어떤 방법론은 자신이 쉽다고 판단하는 입력값 — 즉, 단일 원소 집합 (singleton) {ŷ}를 반환하는 입력값 — 에 대해 체계적으로 과잉 확신(overconfident)을 가질 수 있으며, 평균치를 맞추기 위해 다른 곳에서는 크고 신중한 집합을 내놓는 데 의존할 수 있습니다.
Angelopoulos & Bates는 이 진단법을 **크기 계층화 커버리지 (size-stratified coverage, SSC)**라고 부릅니다. 예측 집합의 크기 |C(x)|에 따라 샘플을 버킷(bucket)으로 나누고, 각 버킷 내에서의 커버리지를 확인하는 방식입니다. 조건부로 정직한 방법론은 모든 크기 계층(size stratum)에서 ≥ 1 − α를 충족합니다. 단일 원소 집합(singleton) — 즉, 확신하지만 틀린 영역 — 의 커버리지가 부족한 방법론은 오직 여기서만 그 문제를 드러냅니다:
def size_stratified_coverage(sizes, in_set, min_stratum=20):
sizes, in_set = np.asarray(sizes), np.asarray(in_set, dtype=float)
out = {}
...
만약 크기-1 계층의 커버리지가 82%인데 다른 모든 계층은 95%이고 한계적 커버리지 (marginal coverage)가 90%라면, 당신은 90%짜리 예측기를 가진 것이 아닙니다. 당신은 _자신이 확신한다고 말하는 바로 그 순간_에 5번 중 1번꼴로 틀리는 예측기를 가진 것이며, 단일 평균 수치는 결코 이를 말해주지 않을 것입니다.
덤으로 확인하기: 이 집합이 과연 유용한가?
커버리지는 이야기의 절반에 불과합니다. 왜냐하면 커버리지는 공짜이기 때문입니다. 모든 K개 클래스를 포함하는 집합은 100%의 확률로 커버리지를 달성하지만, 당신에게 아무런 정보도 주지 않습니다. 따라서 커버리지를 정보성(informativeness) 지표와 함께 살펴보세요. 평균 집합 크기, 단일 원소 비율 (singleton rate), 그리고 자명한 '모든-K' 집합 대비 크기 **효율성 (efficiency)**을 확인하십시오:
def size_efficiency(sizes, K):
if K <= 1:
return 1.0
...
제가 사용하는 규칙은 다음과 같습니다: 실제로 커버리지(coverage)를 통과한 층(strata)에 대해서만 조밀함(tightness)을 인정하는 것입니다. 커버리지를 충족하지 못하면서 아주 얇은(razor-thin) 집합을 유지하는 것은 효율적인 것이 아니라 틀린 것입니다. 집합이 작다는 이유로 보상을 주는 방식은, 82%의 싱글톤(singleton) 영역을 그대로 출시하도록 스스로를 속이는 행위입니다.
솔직한 주의사항
정확한(exact) 조건부 커버리지(conditional coverage)를 공짜로 얻을 수는 없습니다. 유한한 샘플(finite samples)에서 분포-무관(distribution-free) 조건부 커버리지를 달성하는 것은 불가능합니다 (Vovk, 2012; Barber, Candès, Ramdas & Tibshirani, 2021). 이는 도구의 한계가 아니라 정리(theorem)입니다. 클래스 조건부 커버리지(Class-conditional coverage)와 SSC는 **진단법(diagnostics)**이지 보증(guarantees)이 아닙니다. 이들은 관찰 가능한 요소(레이블, 집합 크기 등)에 따라 층화(stratify)하여, 한계적 평균(marginal average)이 조건부 실패(conditional failure)를 가리고 있는 지점을 드러냅니다. 이 방법들이 조건부 타당성(conditional validity)을 인증해주지는 않겠지만, 적절한 정보 없이 거짓을 말하는 수치를 출시하는 것은 막아줄 것입니다.
저는 이 두 가지를 TrustLens (오픈 소스 모델 신뢰성 라이브러리)의 일급 진단 도구(first-class diagnostics)로 추가하고 있습니다. 왜냐하면 "평균만이 아니라 최악의 층(stratum)을 보고하라"는 원칙은 모든 신뢰성 지표를 믿을 수 있게 만드는 것과 동일한 규율이기 때문입니다. 하지만 라이브러리가 반드시 필요한 것은 아닙니다. 위의 세 가지 함수가 아이디어의 전부입니다. 한계적(marginal) 수치와 함께 이 함수들을 계산해 보세요. 그러면 다음에 예측 모델이 90%라고 주장할 때, 그것이 진실인지 아닌지를 알 수 있을 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기