Agent 실험 메트릭 설계

무엇을 측정할 것인가 — North Star, Proxy, Guardrail 메트릭 정의

실험 설계의 첫 번째 질문은 “무엇을 측정할 것인가”이다. RAG 기반 Agent의 메트릭 체계를 North Star / Proxy / Guardrail로 구분하여 정의하고, 오프라인 평가 지표를 온라인 메트릭으로 전환하는 논리를 제시한다. Overall Evaluation Criterion(OEC) 설계 방법을 다룬다.

Experimentation
Agent
저자

Kwangmin Kim

공개

2026년 03월 21일

1 정의

정의: 실험 메트릭 (Experiment Metric)

실험 메트릭이란, A/B 테스트에서 처치(treatment)의 효과를 정량적으로 측정하기 위해 사전 정의하는 지표이다. 실험 시작 전에 확정해야 하며, 실험 후 추가하면 데이터 스누핑(data snooping)이 된다.

  • North Star Metric: 실험의 궁극적 성공을 판단하는 1차 지표

  • Proxy Metric: North Star를 간접적으로 대리하는 단기 측정 가능 지표

  • Guardrail Metric: 악화되면 실험을 중단해야 하는 안전 지표

  • 역학: Primary endpoint, Secondary endpoint, Safety endpoint

  • IT: North Star Metric, Proxy Metric, Guardrail Metric


2 메트릭 계층 구조

2.1 왜 계층이 필요한가

“응답 품질”을 하나의 숫자로 측정할 수 있다면 좋겠지만, Agent 응답의 품질은 다차원적이다. 정확하지만 장황한 응답, 간결하지만 불완전한 응답, 빠르지만 환각이 섞인 응답 — 이들을 단일 지표로 환원하면 트레이드오프를 놓친다.

계층 구조는 이 문제를 해결한다:

North Star (1개)
  "이 Agent가 사용자의 업무를 돕고 있는가?"
    ↓ 분해
Proxy Metrics (3~5개)
  정확도, 완전성, 응답 시간, 사용자 피드백
    ↓ 제약
Guardrail Metrics (2~3개)
  환각률, 시스템 오류율, 응답 지연

2.2 MINERVA Agent별 메트릭 설계

2.2.1 QnA Chatbot

계층 메트릭 정의 측정 방법
North Star Task Completion Rate 사용자가 질의 후 추가 질문 없이 업무를 완료한 비율 세션 로그 분석 (후속 질의 없음 = 완료)
Proxy Relevance Score 응답이 질의에 직접 답하는 정도 (1-5) LLM-as-Judge
Proxy Faithfulness Score 응답이 검색 문서에 근거하는 정도 (1-5) LLM-as-Judge
Proxy Hit Rate@k 검색 결과에 정답 문서가 포함되는 비율 Golden Dataset 기반
Guardrail Hallucination Rate 검색 문서에 근거 없는 주장의 비율 LLM-as-Judge (Faithfulness ≤ 2)
Guardrail Error Rate 시스템 오류(타임아웃, 빈 응답 등) 비율 시스템 로그

2.2.2 Data Standardization Helper

계층 메트릭 정의 측정 방법
North Star Recommendation Acceptance Rate 추천 결과를 사용자가 수정 없이 채택한 비율 사용자 행동 로그
Proxy Top-1 Accuracy 첫 번째 추천이 정답인 비율 Golden Dataset
Proxy Top-3 Recall 상위 3개 추천에 정답이 포함되는 비율 Golden Dataset
Proxy Rule Compliance 추천이 표준화 규칙을 위반하지 않는 비율 규칙 엔진 검증
Guardrail Rule Violation Rate 표준화 규칙을 명시적으로 위반하는 추천 비율 규칙 엔진
Guardrail Response Latency p95 95번째 백분위 응답 시간 시스템 로그

2.2.3 Insilico Code Analysis

계층 메트릭 정의 측정 방법
North Star Analysis Accuracy 코드 분석 결과가 전문가 분석과 일치하는 비율 전문가 검토
Proxy Code Coverage 분석 대상 코드의 몇 %를 실제로 다루는가 자동 검증
Proxy Explanation Clarity 설명의 명확성 (1-5) LLM-as-Judge
Proxy Dependency Accuracy 의존성 식별의 정확도 Golden Dataset
Guardrail Critical Error Rate 잘못된 의존성/로직 설명 비율 전문가 샘플 검토
Guardrail Timeout Rate 분석 시간 초과 비율 시스템 로그

3 오프라인 → 온라인 메트릭 전환

3.1 왜 전환이 필요한가

오프라인 평가 지표(이전 포스트)와 온라인 실험 메트릭은 같은 것을 측정하지 않는다:

차원 오프라인 온라인
데이터 고정된 Golden Dataset 실시간 사용자 질의
평가자 LLM-as-Judge / 자동 사용자 행동 + 자동
맥락 단일 턴, 고정 질의 멀티턴 세션, 다양한 맥락
지표 정확도, 유사도 점수 완료율, 만족도, 재사용률

핵심 질문: 오프라인에서 좋은 점수를 받은 구성이 온라인에서도 실제로 좋은가?

이 상관이 높으면 오프라인 평가의 스크리닝 가치가 높고, 낮으면 온라인 실험의 비중을 키워야 한다.

3.2 전환 매핑

오프라인 지표                    온라인 메트릭
─────────────                   ─────────────
Relevance Score          →→→    Task Completion Rate
  (질의-응답 적합도)              (업무 완료 여부)

Faithfulness Score       →→→    Hallucination Report Rate
  (문서 근거성)                   (사용자가 "부정확" 신고)

Hit Rate@k               →→→    Search Refinement Rate
  (검색 정확도)                   (사용자가 재검색하는 비율)

Completeness Score       →→→    Follow-up Question Rate
  (답변 완전성)                   (추가 질문 비율, 낮을수록 좋음)

3.3 상관 검증 방법

오프라인-온라인 상관을 검증하려면, 초기에 두 지표를 동시에 수집하는 기간이 필요하다:

import numpy as np
from scipy.stats import spearmanr

def validate_offline_online_correlation(
    offline_scores: np.ndarray,
    online_scores: np.ndarray,
    threshold: float = 0.6
) -> dict:
    """오프라인-온라인 지표 간 상관을 검증한다

    Args:
        offline_scores: 오프라인 평가 점수 (구성별)
        online_scores: 온라인 메트릭 (구성별)
        threshold: 수용 가능한 최소 상관계수

    Returns:
        상관계수, p-value, 판정 결과
    """
    corr, p_value = spearmanr(offline_scores, online_scores)
    return {
        "spearman_corr": corr,
        "p_value": p_value,
        "acceptable": corr >= threshold,
        "interpretation": (
            f"오프라인-온라인 상관 ρ={corr:.3f} (p={p_value:.4f}). "
            f"{'오프라인 스크리닝 신뢰 가능' if corr >= threshold else '온라인 실험 비중 확대 필요'}"
        )
    }

4 Overall Evaluation Criterion (OEC)

4.1 OEC란

여러 메트릭을 하나의 종합 점수로 결합한 것이다. 실험의 최종 판정을 단일 기준으로 내릴 수 있게 한다.

\[ \text{OEC} = \sum_{i=1}^{k} w_i \cdot \hat{m}_i \]

여기서 \(\hat{m}_i\)는 각 메트릭의 표준화된 값, \(w_i\)는 가중치이다.

4.2 OEC 설계 시 주의점

OEC의 함정
  1. 가중치 결정의 주관성: \(w_i\)를 어떻게 정하는가? 이해관계자 합의가 필요하다
  2. 메트릭 간 상관: Relevance와 Completeness가 상관이 높으면 사실상 이중 가중된다
  3. 비선형 트레이드오프: Faithfulness가 3점 → 4점은 가치가 크지만, 4점 → 5점은 작을 수 있다. 선형 결합이 이를 반영하지 못한다
  4. 가드레일 혼입 금지: 가드레일은 OEC에 넣지 않고 별도로 판정한다. 가드레일이 위반되면 OEC가 아무리 좋아도 실험을 기각한다

4.3 실용적 대안: 계층적 판정

OEC 대신, 다음 순서로 판정하는 것이 실무적으로 더 안전하다:

Step 1: Guardrail 확인
  → 환각률 증가? 오류율 증가? → YES → 실험 기각 (OEC 무관)

Step 2: North Star 확인
  → Task Completion Rate가 통계적으로 유의하게 개선? → YES → 실험 채택

Step 3: Proxy 확인 (North Star가 유의하지 않을 때)
  → Proxy 메트릭 다수가 일관되게 개선 방향? → YES → 추가 실험 검토
  → Proxy 메트릭이 혼재? → 판단 보류, 실험 연장 또는 재설계

5 메트릭 문서화 템플릿

실험 시작 전에 다음 템플릿으로 메트릭을 문서화한다. 실험 후 메트릭을 추가하거나 변경하면 안 된다.

experiment:
  name: "QnA Chatbot 프롬프트 v2 실험"
  hypothesis: "시스템 프롬프트에 도메인 용어집을 포함하면 Relevance가 개선된다"

metrics:
  north_star:
    name: "Task Completion Rate"
    definition: "질의 후 5분 내 추가 질문 없이 세션 종료한 비율"
    direction: "higher_is_better"
    mde: 0.05  # 5%p 개선 감지

  proxy:
    - name: "Relevance Score"
      definition: "LLM-as-Judge 기반 1-5점 평균"
      direction: "higher_is_better"
    - name: "Hit Rate@5"
      definition: "상위 5개 검색 결과에 정답 문서 포함 비율"
      direction: "higher_is_better"

  guardrail:
    - name: "Hallucination Rate"
      definition: "Faithfulness ≤ 2인 응답의 비율"
      direction: "lower_is_better"
      threshold: 0.10  # 10% 초과 시 실험 중단
    - name: "Error Rate"
      definition: "시스템 오류 응답 비율"
      direction: "lower_is_better"
      threshold: 0.02  # 2% 초과 시 실험 중단

6 관련 주제

선행 지식

시리즈 다음 포스트

다른 카테고리 연결

Subscribe

Enjoy this blog? Get notified of new posts by email: