RAG2026-5일37차시 · 루브릭 설계16 / 18← 이전목차다음 →MetaContents

37차시. 루브릭 설계

퀴즈 2 — 두 채점자의 일치도 재기

두 채점자가 같은 답변들에 매긴 총점 딕셔너리 두 개를 받아 평균 차이, 완전 일치 개수, 차이가 0.3 이상인 답변 목록, 그리고 일치도 해석(0.1 이하 매우 일치, 0.3 이하 수용 가능, 그 위는 루브릭 수정 필요)을 돌려주는 agreement(scores_a, scores_b) 를 만드세요.

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

Python
def agreement(scores_a, scores_b, flag=0.3):
    # 답변마다 두 점수의 차이를 구해 평균, 완전 일치 수, 불일치 목록을 냅니다
    pass
결과 보기 (예시 풀이)
Python
def agreement(scores_a, scores_b, flag=0.3):
    """두 채점자의 점수 딕셔너리를 견주어 평균 차이, 완전 일치 수, 불일치 목록을 냅니다."""
    diffs = {}
    for qid in scores_a:
        # 같은 답변에 매긴 두 점수의 차이(절댓값)
        diffs[qid] = round(abs(scores_a[qid] - scores_b[qid]), 2)

    avg = sum(diffs.values()) / len(diffs)
    same = sum(1 for d in diffs.values() if d == 0)
    # 차이가 flag 이상인 답변은 기준이 모호했던 곳이라 다시 봅니다
    disagree = [q for q, d in diffs.items() if d >= flag]

    # 수업 자료의 일치도 목표표로 해석을 붙입니다
    if avg <= 0.1:
        verdict = "매우 일치"
    elif avg <= 0.3:
        verdict = "수용 가능"
    else:
        verdict = "루브릭 수정 필요"
    return round(avg, 2), same, disagree, verdict

# 예시 1: 수업 자료의 두 채점자 표 (Q002, Q005 에서 갈림)
A = {"Q001": 2.00, "Q002": 1.15, "Q003": 0.75, "Q004": 1.70, "Q005": 1.30}
B = {"Q001": 2.00, "Q002": 1.45, "Q003": 0.75, "Q004": 1.70, "Q005": 0.95}
avg, same, disagree, verdict = agreement(A, B)
print(f"평균 차이 {avg} · 완전 일치 {same}/{len(A)} · 불일치 {disagree} · {verdict}")

# 예시 2: 기준이 흐려 거의 모든 답변에서 크게 갈린 경우
C = {"Q001": 2.00, "Q002": 0.80, "Q003": 1.60}
D = {"Q001": 1.40, "Q002": 1.50, "Q003": 1.00}
print(agreement(C, D))   # 평균 차이가 0.3 을 넘어 수정 필요가 나와야 합니다

실행 결과

출력
평균 차이 0.13 · 완전 일치 3/5 · 불일치 ['Q002', 'Q005'] · 수용 가능
(0.63, 0, ['Q001', 'Q002', 'Q003'], '루브릭 수정 필요')

채점 기준: 수업 자료의 표로 평균 차이 0.13, 완전 일치 3개, 불일치 Q002·Q005 가 나오고 해석이 기준표와 맞으면 정답입니다.

관련 교안: 37차시 「6. 실습 ② — 채점자 간 일치도 확보」 › 6-1) 일치도 측정하기

← 이전 절37차시 · 퀴즈 1 — 가중 총점과 Gate로 합격 판정하기다음 절 →37차시 · 정리