TL;DR

  • Cohen’s Kappa () 는 두 평가자 간의 범주형 판정 일치도를 우연에 의한 일치 확률을 보정하여 측정하는 지표다.
  • 단순 일치율의 한계를 보완하여 데이터 라벨링의 신뢰성이나 사람 평가(Human Evaluation)의 객관성을 검증하는 데 필수적으로 사용된다.

Cohen’s Kappa: 평가자 간 신뢰도 지표

데이터 사이언스 및 연구 방법론에서 평가자 간의 판단 일관성은 데이터의 신뢰성을 결정하는 핵심 요소다. Cohen’s Kappa는 두 평가자가 우연히 같은 선택을 했을 가능성(Chance Agreement)을 배제하고 순수한 일치도를 정량화한다.


1. 이론적 배경: 단순 일치율의 한계

단순 일치율(Percent Agreement)은 각 범주의 출현 빈도가 극단적으로 편향된 경우, 실제 합의 없이도 높게 측정되는 경향이 있다.

핵심 공식

  • (Observed agreement): 실제 관찰된 일치율.
  • (Expected agreement): 각 평가자의 범주 선택 확률을 바탕으로 계산된 기대 우연 일치율.

2. 산출 프로세스 (Step-by-Step)

50개의 샘플을 두 명의 평가자(A, B)가 Safe / Unsafe로 분류한 시나리오를 가정한다.

1단계: 분할표(Contingency Table) 구성

B: SafeB: Unsafe합계 (A)
A: Safe37340
A: Unsafe2810
합계 (B)391150

2단계: 계산

  1. (관찰 일치율):
  2. (우연 일치율):
    • 둘 다 Safe일 확률:
    • 둘 다 Unsafe일 확률:

3단계: 도출

  • 해석: 단순 일치율은 90%이나, 우연 효과를 보정한 실제 합의도는 약 0.698 (Substantial) 수준이다.

3. 해석 가이드라인 (Landis & Koch, 1977)

Kappa ()일치도 수준
< 0.00Poor (우연보다 낮음)
0.00 ~ 0.20Slight
0.21 ~ 0.40Fair
0.41 ~ 0.60Moderate
0.61 ~ 0.80Substantial (상당함)
0.81 ~ 1.00Almost Perfect

4. 확장 규격

  • Weighted Kappa: 범주 간 거리가 유의미한 순서형(Ordinal) 데이터에서 오차의 크기에 따라 차등 가중치를 부여할 때 사용한다.
  • Fleiss’ Kappa: 평가자가 3명 이상인 다중 평가 상황에서 사용되는 범주형 일치도 지표다.

5. 실무 고려사항 및 한계

5.1. 카파의 역설 (Prevalence Problem)

특정 범주가 지배적으로 많은 데이터셋에서는 평가자들이 거의 완벽하게 일치해도 값이 매우 높아져 가 기대보다 낮게 산출될 수 있다. 이 현상은 [[카파의 역설]]로 별도 관리한다. 따라서 불균형 데이터에서는 단순 일치율, label prevalence, positive/negative agreement, [[카파 계수의 prevalence와 bias 효과]]를 함께 확인해야 한다.

5.2. 낮은 카파 점수의 해석

점수가 낮다고 해서 반드시 평가자의 숙련도 문제로 단정할 수는 없다. 다음과 같은 복합적 원인을 검토해야 한다.

  • 가이드라인 부재: 라벨링 기준이 모호하여 평가자마다 주관이 개입됨.
  • 태스크 난이도: 문제 자체가 전문가조차 판단하기 어려운 고난도 영역임.
  • 범주 정의 중첩: 선택지 간의 경계가 불분명함.

5.3. 생성 데이터 검수 관점 (LLM Context)

LLM 응답의 사실성(Factuality), 안전성(Safety), 품질(Helpfulness) 평가 시 카파는 “검수 기준이 객관적으로 작동하고 있는가” 를 증명하는 척도가 된다. 두 전문가가 독립적으로 검수한 결과의 카파 값이 높을수록, 해당 벤치마크나 리더보드의 신뢰도가 확보된다.


6. 구현 예시 (Python)

from sklearn.metrics import cohen_kappa_score
 
# 평가자 A와 B의 판정 결과 (0: Safe, 1: Unsafe)
rater_a = [0, 0, 1, 0, 1, 0, 0, 0] 
rater_b = [0, 1, 1, 0, 1, 0, 0, 1]
 
# Cohen's Kappa 계산
kappa = cohen_kappa_score(rater_a, rater_b)
print(f"Cohen's Kappa: {kappa:.3f}")

Connections