k
korAI
고급 전체
🔥 고급2026-05-086~8분

LLM-as-Judge 평가 파이프라인 구축: 편향 제거와 신뢰구간 확보

Claude를 평가자로 활용하는 자동 평가 파이프라인에서 발생하는 위치 편향·자기 선호 편향을 수치로 측정하고, 신뢰할 수 있는 회귀 감지 시스템을 설계하는 방법을 다룬다.

evaluationllm-judgeproduction

LLM-as-Judge의 실제 편향 수치

학술 연구와 실무 경험을 종합하면 LLM 평가자는 세 가지 주요 편향을 가진다.

  1. 위치 편향(Position Bias): 두 응답 비교 시 먼저 제시된 응답을 선호하는 경향 — 연구에 따라 편향률 15~30%
  2. 자기 선호 편향(Self-Preference): 같은 모델 패밀리가 생성한 응답을 더 높게 평가 — Claude로 Claude 응답 평가 시 약 8~12% 과대평가 관찰
  3. 길이 편향(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)