---
id: [[P-Reinforce|P-Reinforce]]-AUTO-EVM-001
category: Computer_Science_and_Theory
confidence_score: 1.00
tags: [auto-reinforced, ir-metrics, evaluation, ndcg, map, precision-recall]
last_reinforced: 2026-05-04
---

# [[Information Retrieval Evaluation Metrics|Information Retrieval Evaluation Metrics]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> "검색의 품질을 숫자로 증명하기: 얼마나 정확하게 가져왔는가([[Precision & Recall|Precision/Recall]])와 얼마나 좋은 순서로 보여주었는가([[nDCG|nDCG]], [[MAP|MAP]])를 정량화하여 검색 시스템의 성능을 객관적으로 측정하는 지표 체계."

## 📖 구조화된 지식 (Synthesized Content)
정보 검색(IR) 시스템의 성능 평가는 검색된 결과의 집합적 정확도와 결과의 순위(Ranking) 품질을 모두 고려해야 합니다.

1.  **집합 기반 지표 (Set-based Metrics)**:
    *   **[[Precision & Recall|Precision (정밀도)]]**: 검색된 문서 중 실제 관련 있는 문서의 비율. (노이즈가 얼마나 적은가?)
    *   **[[Precision & Recall|Recall (재현율)]]**: 전체 관련 문서 중 실제로 검색된 문서의 비율. (얼마나 놓치지 않았는가?)
    *   **F1-Score**: 정밀도와 재현율의 조화 평균으로 두 지표의 균형을 측정합니다.

2.  **순위 기반 지표 (Rank-based Metrics)**:
    *   **[[nDCG|nDCG (Normalized Discounted Cumulative Gain)]]**: 검색 결과의 위치(Rank)에 따른 가중치를 부여합니다. 관련성 높은 문서가 상단에 올수록 점수가 높아지며, 다양한 서비스에서 표준적으로 사용됩니다.
    *   **[[MAP|MAP (Mean Average Precision)]]**: 여러 쿼리에 대한 Average Precision의 평균입니다. 관련 문서가 상단에 배치될수록 높은 점수를 받습니다.
    *   **[[ERR|ERR (Expected Reciprocal Rank)]]**: 사용자가 검색 결과 리스트를 위에서부터 훑어보다가 만족스러운 문서를 찾았을 때 검색을 중단하는 행동 모델을 가정하여 만족도를 측정합니다.

3.  **RAG 특화 지표**:
    *   **[[Context Precision & Recall|Context Precision]]**: 검색된 컨텍스트 중 실제 질문 답변에 필요한 정보가 상단에 위치하는지 측정합니다.
    *   **[[Context Precision & Recall|Context Recall]]**: 정답을 도출하기 위한 핵심 정보가 컨텍스트 내에 모두 포함되었는지 측정합니다.

## ⚖️ Trade-offs & Caveats
*   **지표 간 상충**: 재현율을 높이려고 검색 범위를 넓히면 정밀도가 떨어지는 경향이 있습니다. 비즈니스 목적(예: 법률 검색은 Recall 중시, 일반 추천은 Precision 중시)에 따라 최적의 지표를 선택해야 합니다.
*   **사용자 피드백과의 간극**: 오프라인 벤치마크 점수가 높더라도 실제 사용자 클릭 패턴이나 만족도와는 일치하지 않을 수 있으므로 [[A/B Testing|A/B 테스트]]와 병행해야 합니다.

## 💻 실전 구현 코드 (Boilerplate)
Python `scikit-learn` 및 직접 구현을 통한 주요 지표 산출 예시입니다.

```python
import numpy as np
from sklearn.metrics import ndcg_score

# 1. 실제 관련성 (Relevance Score: 0~3점 척도)
true_relevance = np.array([[3, 2, 3, 0, 1]]) # 실제 정답들의 점수
# 2. 시스템의 예측 결과 (상단에 노출된 순서대로의 점수 배치)
predicted_scores = np.array([[0.9, 0.8, 0.7, 0.6, 0.5]])

# 3. nDCG 계산
ndcg = ndcg_score(true_relevance, predicted_scores)
print(f"nDCG @ 5: {ndcg:.4f}")

# 4. 간단한 Precision @ K 구현
def precision_at_k(actual, predicted, k):
    act_set = set(actual)
    pred_set = set(predicted[:k])
    return len(act_set & pred_set) / k

actual_ids = [101, 105, 120]
predicted_ids = [101, 202, 105, 303, 404]
print(f"Precision @ 3: {precision_at_k(actual_ids, predicted_ids, 3):.4f}")
```

## 🔗 지식 연결 (Graph)
*   **기본 개념**: [[Information Retrieval (IR)|Information Retrieval (IR)]], [[Learning to Rank (LTR)|Learning to Rank]]
*   **평가 도구**: [[LLM-as-judge|LLM-as-judge]], [[RAG Evaluation Frameworks|RAG Evaluation Frameworks]]
*   **운영 체계**: [[A/B Testing|A/B Testing]], [[Judgment List|판단 리스트 (Judgment List)]]

---
*Last updated: 2026-05-04*
