본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 23. 12:39

AI의 자동 분류로 오답은 사라지지 않는다: 신뢰도 임계값으로 수동 작업 전환 기준을 정하는 법

요약

AI 자동화 시스템 운영 시 발생하는 오답 리스크를 관리하기 위해 신뢰도 임계값(Confidence Threshold)을 설정하는 실무적인 방법을 다룹니다. 모델이 출력하는 신뢰도 수치를 맹신하지 않고, 실제 데이터를 통해 오답률과 자동화율을 측정하여 최적의 임계값을 결정하는 프로세스를 제안합니다.

핵심 포인트

  • 모델의 자체 신뢰도(Confidence)는 실제 정답률과 일치하지 않을 수 있음
  • 허용 가능한 오답률을 기준으로 필요한 임계값을 역산하여 결정해야 함
  • 정답이 포함된 샘플 데이터를 활용해 임계값별 실제 오답률을 측정하는 과정이 필수적임
  • 신뢰도 게이트를 통해 자동 처리와 수동 검토(Human-in-the-loop)를 분리하여 리스크 관리

문의 메일을 ChatGPT로 자동 분류하는 체계를 사내에서 운영하기 시작했을 때, 처음에 막혔던 부분이 바로 여기였습니다. "정확도가 95%입니다"라고 설명해도, 반드시 돌아오는 대답은 "그럼 남은 5%는 누가 책임지나요?"였습니다. 이 부분이 결정되지 않으면 현장의 자동화는 승인(GO)이 나지 않습니다.

마침 똑같은 질문을 정면으로 다룬 글을 발견하고 무척 공감했습니다. AI로 자동화할 수 있습니다. 그런데 그 리스크는 누가 감수하나요? 정답률이 98%라도 오답 2%는 사라지지 않습니다. 그 2%를 누가 떠맡을 것인가 하는 문제입니다.

제 현장에서의 답은 심플했습니다. 전부 AI에게 맡기지 않는 것이었습니다. 자신 있는 안건만 자동으로 처리하고, 의심스러운 안건은 사람의 큐(Queue)로 넘깁니다. 신뢰도(confidence)로 게이트를 거는, 흔히 쓰이는 방식입니다. 그림으로 나타내면 다음과 같습니다.

[IMG:1]

형태 자체는 평범합니다. 막히는 지점은 "자신 있는" 것을 어떻게 판정할 것인가, 바로 이 한 점이었습니다.

단순하게 한다면, ChatGPT에게 라벨과 함께 신뢰도를 반환하게 하여 0.9 이상이면 자동, 이라고 결정합니다. Structured Outputs를 사용하면 신뢰도를 수치로 고정하여 가져올 수 있습니다.

from openai import OpenAI
import json
client = OpenAI() # OPENAI_API_KEY 는 환경 변수로 전달
...

이렇게 하면 confidence 수치를 안정적으로 얻을 수 있습니다. 문제는 그 다음입니다. 모델이 반환하는 confidence는 실제 정답률과 일치하지 않습니다. "0.9"라고 말하고 있어도 정말 9할을 맞춘다는 보장이 없습니다. 이곳을 믿고 임계값(threshold)을 결정하면 발등을 찍히게 됩니다.

해야 할 일은 하나입니다. 정답을 알고 있는 샘플을 준비하여, 임계값마다 "실제 자동 오답률"과 "자동화율"을 측정합니다. 허용 가능한 오답률로부터 필요한 임계값을 역산합니다. 그것뿐입니다.

아래 코드는 그대로 동작합니다. 여기서는 설명을 위해 가상 데이터로 돌리고 있지만, 실무에서는 sample을 본인이 가진 정답 포함 데이터(1건 = 신뢰도와 그 판정이 정답이었는지 여부)로 교체하기만 하면 됩니다.

import random
# 1건 = (모델의 자기 신고 confidence, 그 판정이 실제로 정답이었는지 여부)
random.seed(20260623)
...

직접 실행하면 다음과 같이 나옵니다.

[전체 그대로 자동화] 오답률 8.8% N=500
[confidence 수치 ≠ 실제 정답률]
신고 0.50〜0.85 : 92건 실제 정답률 66.3%
...

읽는 법을 차례대로 적겠습니다. 전부 그대로 자동화하면 오답률이 8.8%입니다. 이는 감수할 수 없는 숫자입니다. 임계값을 0.90으로 자르면, 자동화율 75%를 유지하면서 자동화 측의 오답은 2.4%까지 떨어집니다. 대신 124건이 사람의 손으로 넘어갑니다. "오답을 3% 이내로 억제하고 싶다"라고 결정하면, 필요한 임계값은 0.87, 자동화율은 79%라고 숫자로 돌아옵니다. 감으로 "일단 0.9로 하자"라고 정하는 것과는 근거의 무게가 다릅니다.

여기서 은근히 효과적인 것이 신고된 confidence 구간별 실제 정답률입니다. 0.50〜0.85라고 말한 안건은 실제로는 66%밖에 맞지 않았습니다. 반면 모델은 500건 중 360건을 0.95 이상으로 밀어 넣습니다. 신뢰도 수치를 그대로 확률이라고 믿으면 이러한 편향을 알아차릴 수 없습니다. 그래서 0.9라는 숫자에 의미를 두지 않고, 자신의 데이터로 측정한 실제 오답률을 기준으로 선을 긋습니다.

출력의 마지막을 다시 한번 봐주세요. "오답 2% 이내"는 어떤 임계값에서도 도달 불가능하다고 나옵니다. 이는 구현 버그가 아니라 신뢰도 게이트의 한계입니다. 자신만만하게 틀리는 안건이 일정 수 존재하기 때문이며, 그런 안건은 임계값이 높은 쪽에 섞여 있어 걸러낼 수 없습니다.

즉, 신뢰도 게이트에는 바닥(floor)이 있습니다. 2%보다 낮은 수치를 진심으로 노린다면 다른 신호(signal)를 추가할 수밖에 없습니다. 제가 했던 방법은 판정 라벨과 본문의 키워드가 어긋나는 안건을 별도 루트로 사람에게 넘기는 방식이었습니다. 그래도 부족하다면 수동 리뷰의 비율을 높여 자동화율을 포기합니다. 어디를 포기할 것인가 하는 트레이드오프(trade-off)를 정면으로 선택하는 문제가 됩니다.

또 하나, 이 기준 설정은 한 번 정하고 끝나는 것이 아닙니다. 모델을 새로운 버전으로 올리거나, 들어오는 문의 경향이 계절에 따라 변하면 신뢰도와 정답률의 대응 관계가 어긋납니다. 샘플은 정기적으로 다시 추출하여 임계값을 다시 잡아야 합니다. 이 부분을 소홀히 하면, 어느샌가 감수할 수 없는 오답을 자동으로 흘려보내게 됩니다.

「오답 2%는 누가 책임지는가」라는 질문에 대한 현장의 답은, 임계값(Threshold) 밖에 있는 안건을 수동 리뷰(Human Review)가 명시적으로 맡는 것입니다. AI에게 전부를 맡기지 마세요. 맡길 범위를 감이 아니라 수중에 있는 데이터의 숫자로 결정하십시오. 선을 긋는 근거를 표 한 장으로 설명할 수 있는 상태로 만들어 두어야 합니다.

처음에 준비할 것도 가볍습니다. 정답이 포함된 샘플이 100~수백 건 정도 있다면, 위의 코드가 임계값별 오답률을 산출해 줄 것입니다. 그다음은 허용 가능한 오답률을 현장 담당자나 의사 결정권자와 합의하고, 거기서부터 임계값을 역산하기만 하면 됩니다. 이 과정을 한 번 거쳐 두면, "그래서 틀리면 어떻게 할 건데?"라는 질문을 받았을 때 숫자로 선을 그어 보여줄 수 있습니다. 자동화 논의가 앞으로 나아갈 수 있을지는 대개 이 질문 하나로 결정됩니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0