🔥 고급2026-05-086~8분
LLM-as-Judge 평가 파이프라인 구축: 편향 제거와 신뢰구간 확보
Claude를 평가자로 활용하는 자동 평가 파이프라인에서 발생하는 위치 편향·자기 선호 편향을 수치로 측정하고, 신뢰할 수 있는 회귀 감지 시스템을 설계하는 방법을 다룬다.
evaluationllm-judgeproduction
LLM-as-Judge의 실제 편향 수치
학술 연구와 실무 경험을 종합하면 LLM 평가자는 세 가지 주요 편향을 가진다.
- 위치 편향(Position Bias): 두 응답 비교 시 먼저 제시된 응답을 선호하는 경향 — 연구에 따라 편향률 15~30%
- 자기 선호 편향(Self-Preference): 같은 모델 패밀리가 생성한 응답을 더 높게 평가 — Claude로 Claude 응답 평가 시 약 8~12% 과대평가 관찰
- 길이 편향(Verbosity Bias): 더 긴 응답을 더 좋다고 판단하는 경향 — 토큰 수 증가 10%당 점수 약 0.15점 상승
이 편향들을 방치하면 평가 파이프라인이 실제 품질 저하를 감지하지 못하고 **거짓 음성(False Negative)**을 양산한다.
편향 완화 설계와 신뢰구간
import anthropic
import random
from statistics import mean, stdev
client = anthropic.Anthropic()
JUDGE_PROMPT = """당신은 엄격한 평가자입니다. 아래 응답을 1~5점으로 평가하세요.
기준: 정확성(40%), 간결성(30%), 근거 명확성(30%)
응답: {response}
점수만 숫자로 출력하세요."""
def evaluate_single(response: str, n_trials: int = 5) -> dict:
"""동일 응답을 n회 반복 평가 → 분산 측정"""
scores = []
for _ in range(n_trials):
result = client.messages.create(
model="claude-opus-4-5",
max_tokens=16,
temperature=0.3, # 낮은 temperature로 평가 일관성 확보
messages=[{"role": "user", "content": JUDGE_PROMPT.format(response=response)}]
)
try:
scores.append(float(result.content[0].text.strip()))
except ValueError:
continue
avg = mean(scores)
sd = stdev(scores) if len(scores) > 1 else 0
ci_95 = 1.96 * sd / (len(scores) ** 0.5) # 95% 신뢰구간
return {"mean": avg, "std": sd, "ci_95": ci_95, "n": len(scores)}
def position_bias_check(resp_a: str, resp_b: str) -> float:
"""A-B, B-A 순서 모두 평가 후 편향 측정"""
score_ab = evaluate_single(f"응답1: {resp_a}\n응답2: {resp_b}")["mean"]
score_ba = evaluate_single(f"응답1: {resp_b}\n응답2: {resp_a}")["mean"]
return abs(score_ab - score_ba) # 0에 가까울수록 편향 없음
# 실행 예시
result = evaluate_single("파이썬은 인터프리터 언어입니다.", n_trials=5)
print(f"Score: {result['mean']:.2f} ± {result['ci_95']:.2f} (95% CI)")
# 출력 예: Score: 3.80 ± 0.35 (95% CI)
핵심 설계 원칙: CI_95가 ±0.5를 초과하면 해당 평가 결과를 신뢰하지 않는다. n_trials를 늘리거나 프롬프트를 재설계해야 한다.
회귀 감지와 운영 체크리스트
회귀 감지 임계값 설정: 기준 점수 대비 평균 -0.3점 이상 하락 시 알림. CI가 겹치지 않을 때만 유의미한 변화로 판단한다.
트레이드오프:
- n_trials 증가 → 정확도 향상, 비용·지연 증가 (5회: 비용 5×, CI ±0.35 / 10회: 비용 10×, CI ±0.25)
- temperature 0.0 → 결정론적이나 엣지케이스 다양성 부족
- temperature 0.5 → 다양성 확보, 분산 증가
운영 체크리스트:
- [ ] 평가 프롬프트 버전 관리 — 프롬프트 변경이 점수 분포 이동을 유발하므로 변경 시 A/B 비교 필수
- [ ] 위치 편향 주간 점검 — 편향 delta > 0.4이면 평가 프롬프트 재설계
- [ ] 골든셋(human-labeled 100건) 유지 — LLM 평가자와 인간 평가자 상관계수 ≥ 0.75 유지 확인
- [ ] 평가 결과 DB 저장 (model, prompt_version, score, ci, timestamp) — 시계열 분석
- [ ] 비용 예산: n_trials=5 기준 1,000건 평가 ≈ $0.75 (opus-4-5 배치 적용 시 ≈ $0.38)