LLM에게 confidence 점수를 물어보면 안 되는 이유
Using LLM for confidence scoring is a bad idea
TL;DR Highlight
LLM이 말한 confidence 숫자는 측정값이 아니라 그럴듯한 텍스트일 뿐이다
Who Should Read
에이전트 답변을 사람에게 넘길지 말지 LLM이 말한 confidence 점수로 정하고 있는 백엔드 개발자
Core Mechanics
- LLM이 말한 0.85는 측정값이 아니다
- LLM은 토큰을 하나씩 이어 쓰는 모델이라 숫자도 다른 글자처럼 써 낸다.
- 내부 계기판을 읽어서 나온 값이 아니라 그럴듯한 다음 텍스트다.
- 믿을 만한 confidence에는 조건이 둘 있다
- 예측이 얼마나 많은 정보에 근거했는지 반영해야 한다.
- 같은 종류의 질문에서 실제 결과와 대조해 검증돼 있어야 한다.
- LLM 점수는 두 조건을 못 채운다
- 사전학습은 다음 토큰을 맞히는 점수만 매기고, 쓴 confidence가 정답률과 맞는지는 채점하지 않는다.
- 모델은 confidence 점수가 글에서 어떻게 생겼는지만 배웠다.
- 직접 확인해 볼 수 있다
- 같은 질문을 다시 물으면 0.85가 0.7로 바뀔 수 있다.
- "확실해?"로 문구만 바꿔도 점수가 움직이고, 앞에 "명백히 정답"이라고 써 두면 높은 점수가 따라온다.
- confidence는 LLM 밖의 규칙으로 만들어야 한다
- LLM은 답변만 쓰고, 점수는 관찰 가능한 정보로 계산한다.
- 예로 검색 문서 유무와 개수, 이전에 답한 유형인지, 같은 질문에 두 번 답이 일치하는지를 든다.
- 기록이 없으면 점수도 없다
- 답변마다 정보, 점수, 정답 여부를 저장하고 정보 조합별 실제 정답률로 규칙을 고친다.
- 매주 confidence 구간별 실제 정답률 표를 만들어 과신 여부를 확인한다.
Community Reactions
- LLM도 confidence를 표현할 수 있고 질문 방식이 문제라는 의견
- 0-100 척도 대신 문제를 여러 축으로 쪼개 작은 enum이나 이진 선택으로 묻고 가중합하면 훨씬 나아진다는 주장이다.
- RLCR 같은 학습으로 보정이 가능하다는 반론
- RLCR은 보상에 Brier 페널티를 더해 정답률만이 아니라 confidence도 채점한다는 설명이다.
- 항상 60%만 말하는 전략보다 쉬운 문제와 어려운 문제를 구분하는 전략의 페널티가 낮다(0.24 대 0.15)는 계산도 나왔다.
- logprobs나 고전 ML을 쓰라는 실무 경험
- 출력 클래스를 고정하고 logprobs를 보거나 같은 프롬프트를 여러 번 호출해 선택 분포를 재라는 의견이 있었다.
- BERT, pooling, 확률 보정 SVM 조합이 잘 맞았다는 경험도 나왔고, 학습 데이터가 필요하다는 단서가 붙었다.
- 실제 서비스에서 신뢰하기 어려웠다는 경험
- 회사에서 LLM이 텍스트에 등급과 신뢰구간을 매기는데 출력이 믿을 만하지 않았다는 경험이 있었다.
- 도메인 데이터로 파인튜닝해 보정했다는 경험, 채점 스크립트나 A~F 루브릭으로 기준을 명시한다는 경험도 있었다.
How to Apply
- 오늘 LLM 점수의 일관성부터 재보기
- 실제 쓰는 confidence 프롬프트 10건을 각각 5번씩 돌려 점수 분산을 확인한다.
- 같은 입력에서 점수가 흔들리면 그 점수로 하는 라우팅은 중단한다.
- 관찰 가능한 신호 3개를 로그로 남기기
- 검색된 문서 개수, 같은 질문 2회 답변 일치 여부, 질문 유형을 답변마다 저장한다.
- 점수 자리에는 LLM 자가평가 대신 이 값을 넣는다.
- 리뷰 결과를 정답 라벨로 모으기
- 사람이 승인했는지, 고객이 재문의했는지를 correct 필드로 기록한다.
- 신호 조합별 정답률 표를 만들어 첫 규칙으로 쓴다.
- 주 1회 보정 표 만들기
- confidence 구간별 실제 정답률을 계산한다.
- 90% 구간이 70%만 맞으면 규칙을 낮추고 사람 검토 기준선을 올린다.
Try It
# 파이썬에 붙여넣어 실행하는 간이 보정 표 (표준 라이브러리만 사용)
from collections import defaultdict
# 답변 기록: (검색 문서 있음, 두 번 답변 일치, 정답 여부)
records = [
(True, True, True), (True, True, True), (True, False, False),
(False, False, False), (False, True, False), (True, True, True),
]
groups = defaultdict(list)
for has_doc, agree, correct in records:
groups[(has_doc, agree)].append(correct)
base = sum(c for *_, c in records) / len(records)
print(f'기본 정답률 {base:.0%}')
for key, vals in groups.items():
rate = sum(vals) / len(vals)
print(key, f'n={len(vals)}', f'confidence={rate:.0%}')
# 이어서 해 볼 것: records를 실제 리뷰 로그로 바꾸고, 주 1회 구간별 정답률과 비교해 보기Terminology
관련 논문
PHP2Shell: AI가 찾아낸 PHP 코어 RCE 취약점
Wiz가 AI로 PHP 코어의 10년 묵은 RCE를 찾아 익스플로잇까지 만들었다
The Judge Can Debias Itself: LLM-as-a-Judge가 스스로 편향을 고치게 하는 법
심사 프롬프트에 편향 경고를 넣거나 스스로 비판시켰더니 21개 중 20개 조합에서 정확도가 올랐다
미국 노동시간의 90%는 AI 벤치마크가 제대로 다루지 못하는 일이다
벤치마크 29개를 직업 과제에 매핑했더니 노동시간 90%가 커버 밖
Postgres 19, AI 코드 리뷰가 버그를 너무 많이 찾아 출시 연기
LLM 코드 리뷰가 버그를 쏟아내 Postgres 19가 11월로 밀리고 기능 8~10개가 빠졌다
StarSkirmish Bench v0.2: LLM이 1시간 만에 짜는 StarCraft 봇 대결
LLM에게 1시간 동안 StarCraft 봇을 짜게 했더니 GPT-6 Astra가 1위
그럴듯한 설명 하나면 멀티모달 LLM 심사위원도 속는다 (JUPE 벤치마크)
정답은 그대로 두고 설명만 붙였더니 MLLM 심사위원의 오답 거절률이 12.7~13.8%p 떨어졌다
신경망은 이미 깔끔하다: polysemanticity의 원인 재해석
뉴런을 직접 들여다봤더니 대부분 한 가지 역할이 있었다는 주장
Linus Torvalds의 첫 LLM 보조 패치 시리즈
Linus가 LLM으로 folio 조회 패치 10개를 만들어 read() 벤치가 10배 빨라졌다
Related Resources
- https://rumple.github.io/blog/2026/10/20/asking-llm-for-confidence.html
- https://magazine.sebastianraschka.com/i/217935364/51-on-cali...
- https://scikit-learn.org/stable/modules/calibration.html
- https://docs.liquid.ai/lfm/models/decision-models
- https://www.metaculus.com/questions/43900/bot-superiority-in...