RAG2026-5일34차시 · RAG 평가 개요15 / 18← 이전목차다음 →MetaContents

34차시. RAG 평가 개요

퀴즈 1 — Precision@k와 Recall@k 계산하기

검색된 조각 id 목록, 관련 조각 id 집합, k를 받아 Precision@k와 Recall@k를 소수 둘째 자리까지 돌려주세요.

빈칸 코드에서 시작합니다.

Python
def precision_recall(retrieved, relevant, k):
    pass
결과 보기 (예시 풀이)
Python
# retrieved: 검색 순서대로 나온 조각 id 목록
# relevant : 이 질문에 관련 있는 조각 id 집합(문서 전체 기준)
def precision_recall(retrieved, relevant, k):
    # 상위 k개만 봅니다.
    top = retrieved[:k]
    # 가져온 것 중 관련 있는 것의 개수
    hit = sum(1 for doc_id in top if doc_id in relevant)
    # Precision: 가져온 것 중 관련 있는 비율. 분모는 가져온 개수입니다.
    precision = hit / len(top) if top else 0.0
    # Recall: 관련 있는 것 중 가져온 비율. 분모는 관련 조각 전체 개수입니다.
    recall = hit / len(relevant) if relevant else 0.0
    return round(precision, 2), round(recall, 2)

relevant = {"p4-1", "p4-2", "p5-1", "p9-3"}            # 관련 조각 4개
retrieved = ["p4-1", "p2-7", "p4-2", "p5-1", "p8-2", "p1-1", "p9-3"]

# 1) 수업 자료의 예: k=5에서 관련 3개를 가져옴 -> (0.6, 0.75)
print("k=5:", precision_recall(retrieved, relevant, 5))

# 2) k를 줄이면 Precision은 오르고 Recall은 내려가는지 봅니다.
print("k=1:", precision_recall(retrieved, relevant, 1))

# 3) k를 늘리면 Recall은 오르고 Precision은 내려가는지 봅니다.
print("k=7:", precision_recall(retrieved, relevant, 7))

실행 결과

출력
k=5: (0.6, 0.75)
k=1: (1.0, 0.25)
k=7: (0.57, 1.0)

채점 기준: Precision의 분모를 가져온 개수로, Recall의 분모를 관련 조각 전체 개수로 두면 정답이다.

관련 교안: 34차시 「3. 검색 평가 지표」 › 3-1) Precision과 Recall

← 이전 절34차시 · 실습 1 — RAG 평가 개요 실습 따라 하기다음 절 →34차시 · 퀴즈 2 — 정답 순위로 MRR 계산하기