k
korAI
고급 전체
🔥 고급2026-09-067~9분

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

Claude를 평가자(Judge)로 사용하는 자동 평가 파이프라인에서 위치 편향·자기 선호 편향을 정량적으로 제거하고, 결과에 통계적 신뢰 구간을 부여하는 방법을 다룬다.

evaluationllm-judgemlops

LLM Judge의 구조적 편향 문제

LLM-as-Judge는 인간 평가 대비 비용을 95% 이상 절감하지만, 두 가지 편향이 결과를 오염시킨다. 위치 편향(Position Bias): 동일 응답이라도 첫 번째로 제시된 쪽이 평균 8~15%p 높은 점수를 받는다. 자기 선호 편향(Self-preference Bias): Claude를 Judge로 쓸 때 Claude 생성 응답을 GPT-4 응답보다 약 12%p 더 선호하는 경향이 보고되어 있다.

편향 제거 전략: 스왑 앤 평균(Swap-and-Average)

두 응답의 순서를 바꿔 각각 평가한 뒤 점수를 평균 내면 위치 편향을 통계적으로 상쇄할 수 있다. 자기 선호 편향은 Judge 프롬프트에 "응답 생성 모델을 알 수 없다고 가정하라"는 명시적 지시와 함께 평가 기준을 루브릭(rubric) 형태로 구조화하면 6~8%p 완화된다.

import anthropic
import json
from statistics import mean, stdev

client = anthropic.Anthropic()

RUBRIC = """다음 기준으로 0~10점 평가. JSON만 반환.
- accuracy(정확성): 0~4점
- clarity(명확성): 0~3점
- completeness(완결성): 0~3점
응답 형식: {"accuracy": N, "clarity": N, "completeness": N, "total": N}"""

def judge_pair(question: str, resp_a: str, resp_b: str) -> dict:
    def evaluate(first: str, second: str) -> dict:
        prompt = f"{RUBRIC}\n\n질문: {question}\n응답1: {first}\n응답2: {second}\n어느 모델이 생성했는지 알 수 없다. 응답1 평가:"
        msg = client.messages.create(
            model="claude-opus-4-5",
            max_tokens=128,
            messages=[{"role": "user", "content": prompt}],
        )
        return json.loads(msg.content[0].text)

    # 순서 A→B, B→A 두 번 평가
    score_ab = evaluate(resp_a, resp_b)
    score_ba = evaluate(resp_b, resp_a)

    # 스왑 평균으로 위치 편향 상쇄
    avg_a = mean([score_ab["total"], 10 - score_ba["total"]])
    return {"response_a_debiased_score": round(avg_a, 2),
            "response_b_debiased_score": round(10 - avg_a, 2)}

신뢰 구간 확보와 운영 체크리스트

통계적 신뢰 구간: 단일 판정으로는 노이즈가 크다. 동일 쌍을 5회 평가해 표준편차를 구하면, 실측 기준 σ ≈ 0.8~1.2점(10점 척도)이 일반적이다. 95% 신뢰구간 ±1.6점 이내 차이는 통계적으로 유의하지 않으므로 "무승부"로 처리해야 한다.

트레이드오프

  • 평가 횟수 ↑ → 신뢰도 ↑, API 비용 ↑ (5회 기준 단일 대비 10× 비용)
  • 루브릭 세분화 ↑ → 일관성 ↑, Judge 컨텍스트 토큰 ↑
  • 권장: 배치 API 활용 시 비용 50% 절감 가능, 평가 결과 24시간 캐시

실패 모드

  • Judge 출력이 JSON 파싱 실패 시 재시도 없이 0점 처리하는 버그 주의
  • 평가 대상 응답이 4000자 초과 시 Judge가 후반부를 무시하는 경향 → 청크 분할 평가 필요

운영 체크리스트

  • [ ] 위치 편향 측정: 동일 응답 순서 바꿔 100쌍 테스트, 편향 <5%p 확인
  • [ ] 인간 평가 샘플(5%)과 Judge 결과 상관계수 목표 ≥0.80
  • [ ] 평가 결과를 데이터베이스에 저장, 모델 업그레이드 시 회귀 감지
  • [ ] Judge 프롬프트 버전 관리 필수 (프롬프트 변경 = 점수 분포 변경)