MakeAI 딥러닝

신뢰도 85%는 무슨 뜻일까 — 모델 점수를 믿을 수 있는 확률로 만드는 보정

모델이 내는 0.85라는 숫자는 그 자체로는 "85% 확률로 맞다"는 뜻이 아니에요. 보정(calibration)을 어떻게 하고, 임계값 85%를 어떻게 정했는지 설명해요.

4분 읽기

지난 몇 주 동안 "신뢰도 0.85 미만은 저신뢰 목록으로 뺀다"는 말을 계속 했어요. 그런데 그 0.85가 뭔지 설명을 안 했더라고요. 오늘은 그 얘기예요.

모델 점수는 확률이 아니에요

분류 모델의 softmax 출력이나 OCR 엔진의 점수는 0~1 사이 숫자지만, 그게 "맞을 확률"이라는 보장은 없어요. 특히 요즘 딥러닝 모델은 과신(overconfident) 하는 경향이 강해요. 0.95라고 했는데 실제로 맞는 비율은 80%인 식이죠.

저희도 처음에 OCR 엔진 점수를 그대로 신뢰도로 썼다가 혼났어요. 담당자분이 "90%라면서 왜 이렇게 많이 틀려요?" 하셨거든요. 맞는 말씀이었어요. 그 90%는 아무 의미 없는 숫자였어요.

보정이 뭐냐면요

보정(calibration)은 모델 점수를 실제 정답률과 맞추는 작업이에요. "점수가 0.8인 것들을 모아 보면 실제로 80%가 맞아야 한다"는 거죠. 이걸 재는 지표가 ECE(Expected Calibration Error)예요. 점수 구간별로 (평균 점수 - 실제 정답률)의 절댓값을 가중 평균한 거예요.

구간      개수    평균 점수   실제 정답률   차이
0.9-1.0   1200    0.96      0.84        0.12  ← 과신
0.8-0.9    400    0.85      0.81        0.04
0.7-0.8    250    0.75      0.77        0.02
0.6-0.7    150    0.65      0.71        0.06  ← 과소

위처럼 생겼으면 높은 구간에서 과신하고 있는 거예요.

저희가 쓰는 방법

복잡한 거 안 써요. 두 가지를 조합해요.

1. 온도 스케일링(temperature scaling). 로짓을 상수 T로 나눈 뒤 softmax 해요. T 하나만 검증셋에서 찾으면 돼서 간단하고, 과신 문제에 효과가 좋아요. 모델마다 T가 달라요. 저희 풍선 번호 분류기는 T가 1.8 정도였어요(많이 과신하고 있었다는 뜻이에요).

2. 구간별 보정 표(histogram binning). OCR 엔진처럼 로짓에 접근 못 하는 경우엔 점수 구간별로 실제 정답률을 표로 만들어 두고 치환해요. 문서 종류별로 표가 달라요. 스캔 도면과 CAD PDF는 같은 점수여도 실제 정답률이 많이 다르거든요.

보정은 반드시 학습에 안 쓴 데이터로 해요. 학습 데이터로 보정하면 또 과신해요.

하나의 신뢰도가 아니라 여러 개를 합쳐요

실제로 "부품표 10번 행의 수량이 4" 라는 결과 하나에는 여러 모델이 관여해요. 표 검출, 셀 분할, 글자 인식, 열 역할 추정. 각각 신뢰도가 있어요. 이걸 하나로 합치는 방법도 고민이었어요.

곱하면 너무 낮아지고(0.95 × 0.95 × 0.95 × 0.95 = 0.81), 최솟값을 쓰면 한 단계의 불확실성만 반영돼요. 저희는 가장 약한 고리의 신뢰도를 기본으로 하되, 다른 근거로 뒷받침되면 올려요. 예를 들어 수량 글자 인식은 0.8인데 도면에서 검출한 부품 영역 개수가 4개로 같으면 교차 검증이 된 거니까 올려요. 반대로 개수가 다르면 내려요. 이 규칙 자체도 검증셋으로 ECE를 재면서 조정했어요.

85%는 어떻게 정했냐면요

임계값은 모델이 아니라 업무가 정해요. 저희가 한 건 이거예요.

  1. 보정된 신뢰도 구간별로 실제 오류율을 구해요.
  2. 담당자분께 "이 항목을 확인하는 데 몇 초 걸리나요", "틀린 게 그대로 나가면 얼마나 큰일인가요"를 여쭤봐요.
  3. 확인 비용 × 확인 건수와 오류 비용 × 놓친 건수가 균형이 되는 지점을 찾아요.

도면 검증에서는 틀린 게 그대로 나가는 비용이 아주 크고(재작업, 납기), 확인은 한 건에 몇 초라서 임계값이 높게 잡혔어요. 그게 85%예요. 다른 업무(예: 내부 문서 검색용 파싱)에서는 70%로 둔 데도 있어요. 85%가 정답이 아니라, 정하는 과정이 정답이에요.

보정이 깨지는 순간

보정은 한 번 하면 끝이 아니에요. 입력 분포가 바뀌면 깨져요.

  • 새 고객사 도면이 들어오면(양식, 스캔 품질이 다름) 보정 표를 다시 봐야 해요.
  • 모델을 재학습하면 T를 다시 찾아야 해요.
  • 계절적으로 스캔 품질이 달라지는 경우도 봤어요(복합기 교체).

그래서 저희는 운영 중에 사람이 확인한 결과를 모아서 주기적으로 ECE를 다시 재요. 이게 올라가면 보정부터 다시 하고, 그래도 안 되면 모델을 봐요. 이 모니터링 얘기는 하반기에 ML Ops 쪽에서 다시 다룰게요.

정리

  • 모델 점수는 확률이 아니에요. 보정을 거쳐야 "85%"라고 말할 자격이 생겨요.
  • 온도 스케일링과 구간 보정 표, 이 둘이면 대부분 충분했어요.
  • 임계값은 모델이 아니라 업무 비용이 정해요.

다음 주는 이 신뢰도로 "판단 보류"를 설계하는 이야기예요. 모르면 모른다고 말하는 AI를 어떻게 만드는지요.