본문으로 건너뛰기

LLM 평가가 거짓 경보를 울린 이유

반복 측정으로 LLM 평가의 노이즈 바닥을 구분한 회귀 테스트 사례입니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

LLM 평가자가 같은 입력을 반복해서 다르게 판정하면서, 변경하지 않은 파이프라인이 5점에서 2점으로 떨어지는 거짓 회귀가 발생했습니다. 글쓴이는 승인 버전을 사례별로 다섯 번 실행해 최솟값과 최댓값을 참조 밴드로 저장하고, 새 점수가 그 범위를 벗어날 때만 노이즈를 넘은 회귀로 집계하는 방식을 채택했습니다. 실제 재현 실험에서는 precision 하락은 참조 밴드를 벗어났지만 accuracy 하락은 밴드 안에 있어 회귀로 세지 않았고, pass에서 fail로 바뀐 개별 사례는 항상 별도로 보고했습니다. 별도 파이프라인에서는 프롬프트 변경 두 건이 회귀를 일으켰고 Sonnet 5로의 변경은 비용이 7.5배 늘었지만 누락 사례를 되찾아 승인됐습니다. 다만 다섯 번의 최솟값과 최댓값은 신뢰구간이 아니며, LLM 평가자의 판단이 옳은지까지 보장하지는 않습니다.

섹션별 상세

01
LLM 기반 회귀 평가에서 한 사례의 점수가 5점에서 2점으로 떨어졌지만 프롬프트와 모델 alias, 설정, retrieval 단계, 호출 trace가 바이트 단위로 같았고 15분 뒤 다시 5점으로 돌아왔습니다. 단일 기준 점수와 전역 tolerance만 사용하면 평가자의 확률적 변동을 실제 회귀로 오인하게 됩니다. 이런 거짓 경보가 반복되면 운영자가 경보를 무시하게 되어 진짜 회귀까지 통과할 위험이 커집니다.
02
새 기준은 버전을 승인할 때 각 사례를 K=5로 반복 실행하고, 점수와 함께 해당 사례의 최솟값과 최댓값을 저장합니다. 새 점수가 승인 버전의 참조 밴드 밖으로 나가면 노이즈를 넘은 회귀로 세고, 밴드 안에 있으면 변화 자체는 보고하되 회귀 집계에서는 제외합니다. 밴드는 현재 실행이 아니라 검토를 마친 참조 실행에서 만들며, pass에서 fail로 바뀐 threshold flip은 샘플 변동과 무관하게 항상 보고합니다.
bash
$ digline compare --suite suite.py --run 2026-09-03T06-18-43

승인된 기준 실행과 현재 실행을 비교해 평가 항목별 회귀와 노이즈 안의 변화를 출력하는 명령입니다.

03
각 평가 사례의 노이즈는 서로 다르므로 하나의 전역 tolerance로 모든 항목을 판단하지 않고 사례별 밴드를 사용합니다. K=5에서 표준편차를 분포 모델처럼 다루는 대신 실제로 관측한 최솟값과 최댓값을 사용하고, 선언된 tolerance와 측정된 밴드를 함께 보존합니다. 따라서 어떤 변화가 허용량은 넘었지만 시스템이 원래 스스로 흔들리는 범위 안에 있는지까지 구분할 수 있습니다.
04
공개 fixture를 세 번 연속 실행한 결과 evals-skills-for-coding-agents와 more-than-just-code-review가 5/5, 2/5, 5/5로 바뀌어 같은 오전에 거짓 경보가 재현됐습니다. 중간 실행에서 precision은 0.666667에서 0.600000으로 내려가 참조 밴드 0.615385–0.666667를 벗어났지만, accuracy는 0.761905에서 0.666667로 내려가 밴드 0.666667–0.761905의 하한에 닿아 노이즈 안으로 분류됐습니다. 전역 tolerance 0.047619만 적용하면 두 지표가 모두 경보를 냈겠지만, 참조 이력은 두 하락의 성격이 다르다는 점을 드러냈습니다.
터미널 비교 결과에서 두 개별 평가 항목은 passing에서 failing으로 바뀌었고, precision은 참조 밴드를 벗어난 반면 accuracy는 밴드 하한에 닿아 노이즈 안으로 분류됐습니다.
Screenshot이미지는 동일한 프롬프트와 모델, temperature로 11분 간격 실행한 결과를 보여주며, 전체 헤드라인에서 3개 체크가 악화되고 1개 체크가 노이즈 안에서 움직였다고 집계합니다. precision은 0.666667에서 0.600000으로 내려가 0.615385–0.666667 참조 밴드를 벗어났지만, accuracy는 0.761905에서 0.666667로 내려가 0.666667–0.761905 밴드 안에 남아 글의 사례별 노이즈 판정 방식을 직접 뒷받침합니다.
05
scout 파이프라인에서 동일한 비교 규칙은 세 가지 변경에 서로 다른 판정을 내렸습니다. Haiku 4.5의 프롬프트에 추가한 조건 두 건은 recall과 accuracy를 낮춰 거부됐고, Sonnet 5 with thinking으로의 변경은 recall을 0.75에서 0.917로 높이며 이전 평가자가 놓친 두 사례를 되찾아 승인됐습니다. 판단 비용은 thinking tokens 때문에 월 약 $1.35에서 약 $10로 7.5배 늘었지만, 사례별 reasoning과 점수 비교가 변경의 품질을 구분하는 근거가 됐습니다.
06
이 방식의 한계는 K=5의 관측 범위가 신뢰구간이 아니며 실제 노이즈보다 좁을 수 있다는 점입니다. 초기 승인 기준이 없으면 밴드를 만들 수 없고, 밴드가 LLM-as-judge의 정답성이나 reasoning의 안정성까지 보장하지도 않습니다. 글쓴이는 명확한 정답을 가진 canary case와 provider fingerprint를 함께 저장하고, 점수뿐 아니라 judge의 텍스트도 보존해 모델 alias 변경과 우연히 맞은 판단을 구분하려 합니다.

용어 해설

LLM 평가자(LLM-as-judge)
LLM 평가자는 다른 LLM의 출력물을 미리 정한 기준과 비교해 점수나 통과 여부를 판정하는 방식입니다. 같은 입력과 프롬프트를 사용해도 모델의 판단이 매번 달라질 수 있어, 단일 실행 결과만으로 회귀를 확정하면 거짓 경보가 발생할 수 있습니다.
노이즈 바닥(Noise Floor)
노이즈 바닥은 시스템을 변경하지 않아도 측정값이 자연스럽게 흔들리는 범위입니다. 이 글에서는 승인된 버전을 다섯 번 실행해 각 평가 항목의 최솟값과 최댓값을 기록하고, 새 점수가 그 범위를 벗어났을 때만 실제 회귀로 집계합니다.
참조 밴드(Reference Band)
참조 밴드는 승인된 기준 버전에서 반복 측정한 점수의 최솟값과 최댓값으로 만든 구간입니다. 현재 실행 결과가 이 구간 안에 있으면 점수 하락을 보고하되 노이즈 안의 변화로 분류하고, 기준 버전의 측정 이력을 근거로 판단합니다.
회귀 테스트(Regression Testing)
회귀 테스트는 코드나 모델 설정을 바꾼 뒤 기존 동작이 깨지지 않았는지 고정된 사례로 확인하는 절차입니다. LLM 애플리케이션에서는 출력 자체가 확률적으로 달라질 수 있으므로, 변경 전후 점수뿐 아니라 변경하지 않았을 때의 변동 폭도 함께 측정해야 합니다.
카나리 케이스(Canary Case)
카나리 케이스는 정답이 명확한 고정 입력을 별도로 두고 모델이나 제공자 변경 여부를 감시하는 평가 사례입니다. 품질 점수의 회귀를 판정하기보다 이 사례의 결과와 밴드가 움직였는지 확인해, 개별 사례를 쫓기 전에 전체 기준선을 다시 잡을지 결정하는 데 사용합니다.

기술

  • Python
  • digline
  • Claude
  • Haiku 4.5
  • Sonnet 5

활용 사례

  • RSS 기반 AI 뉴스 브리핑 평가
  • Reddit 게시물의 댓글 가치 판정
  • LLM 애플리케이션 변경 전후 회귀 테스트
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 09. 09.수집 2026. 09. 09.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.