RAG2026-5일36차시 · 평가 실습15 / 18← 이전목차다음 →MetaContents

36차시. 평가 실습

퀴즈 1 — Hit Rate와 MRR 직접 계산하기

질문마다 검색된 페이지 순서(found)와 정답 페이지(gold)가 담긴 리스트를 받아 Hit Rate 와 MRR 을 계산하는 retrieval_metrics(rows) 를 만드세요. 정답 페이지가 하나도 없으면 그 질문의 역순위는 0 입니다.

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

Python
def retrieval_metrics(rows):
    # 질문마다 정답 페이지가 처음 나온 순위를 찾아 Hit 과 1/순위를 모읍니다
    pass
결과 보기 (예시 풀이)
Python
def retrieval_metrics(rows):
    """검색 결과 rows 로 Hit Rate 와 MRR 을 계산합니다.
    rows 의 각 항목: {"id", "found": 검색이 돌려준 페이지 순서, "gold": 정답 페이지}"""
    hits = 0
    rr_sum = 0.0
    for r in rows:
        # 정답 페이지가 처음 나온 순위를 찾습니다 (1위부터 셉니다)
        rank = 0
        for i, p in enumerate(r["found"], 1):
            if p in r["gold"]:
                rank = i
                break
        # 순위가 있으면 Hit, 역순위(1/순위)를 더합니다. 못 찾으면 0 입니다
        if rank:
            hits += 1
            rr_sum += 1.0 / rank
        print(f"   {r['id']} 순위={rank} rr={1.0 / rank if rank else 0.0:.2f}")
    n = len(rows)
    return {"hit_rate": hits / n, "mrr": rr_sum / n}

# 예시 1: 다섯 질문 중 넷은 찾았고 하나(Q022)는 못 찾은 경우
rows = [
    {"id": "Q001", "found": [4, 5, 2], "gold": [4]},      # 1위
    {"id": "Q002", "found": [3, 5, 6], "gold": [5]},      # 2위
    {"id": "Q014", "found": [4, 5, 7], "gold": [7]},      # 3위
    {"id": "Q022", "found": [],        "gold": [6]},      # 검색 결과 없음
    {"id": "Q031", "found": [4, 2, 1], "gold": [5, 9]},   # 정답 근거를 못 찾음
]
m = retrieval_metrics(rows)
print(f"Hit Rate : {m['hit_rate'] * 100:.1f}%")
print(f"MRR      : {m['mrr']:.3f}")

# 예시 2: 모두 찾긴 했지만 정답이 3~4위로 밀린 경우
late = [{"id": "A", "found": [1, 2, 9], "gold": [9]},
        {"id": "B", "found": [1, 2, 3, 8], "gold": [8]}]
m2 = retrieval_metrics(late)
# Hit Rate 는 100% 인데 MRR 이 낮으면 Re-ranking 이 필요한 신호입니다
print(f"Hit Rate : {m2['hit_rate'] * 100:.1f}%  MRR : {m2['mrr']:.3f}")

실행 결과

출력
   Q001 순위=1 rr=1.00
   Q002 순위=2 rr=0.50
   Q014 순위=3 rr=0.33
   Q022 순위=0 rr=0.00
   Q031 순위=0 rr=0.00
Hit Rate : 60.0%
MRR      : 0.367
   A 순위=3 rr=0.33
   B 순위=4 rr=0.25
Hit Rate : 100.0%  MRR : 0.292

채점 기준: 정답이 처음 나온 순위로 역순위를 구하고, 못 찾은 질문을 0으로 넣어 평균을 내면 정답입니다.

관련 교안: 36차시 「2. 실습 ① — 검색 평가」

← 이전 절36차시 · 체크리스트와 과제다음 절 →36차시 · 퀴즈 2 — 그룹별 정답률과 표본 부족 표시