코헨 카파(Cohen Kappa)란? AI에서 두 라벨러의 일치를 우연 보정으로 평가하는 지표
TL;DR
코헨 카파는 같은 자료를 두 사람이 분류했을 때의 일치율에서, 각자의 라벨 사용 비율로 추정한 우연 일치를 보정하는 지표입니다. AI 학습·평가 자료를 만드는 사람들의 기준이 얼마나 맞는지 살필 때 씁니다. 같은 일치율도 범주 분포에 따라 카파가 달라집니다. 높은 값이 정답의 진실성이나 AI 모델 성능을 보장하지는 않습니다. 범주별 건수·불일치 원문·가중 방식과 계산이 정의되는 조건을 함께 확인합니다.
핵심 3줄 요약
- 핵심 1
두 라벨러의 판정을 비교합니다. 같은 사례에 붙인 범주가 얼마나 일치하는지 측정하며 한쪽을 반드시 정답으로 두지는 않습니다. - 핵심 2
각자의 범주 비율로 우연을 추정합니다. 보정 기준은 항상 50%가 아닙니다. 두 사람이 사용한 라벨의 분포가 계산에 들어갑니다. - 핵심 3
일치와 올바름을 구분합니다. 둘 다 같은 실수를 할 수 있습니다. 높은 카파와 별개로 기준표·불일치·독립 검수를 확인합니다.
이 글에서 다룰 내용
- 코헨 카파의 한 문장 정의
- 같은 80% 일치율이 다른 점수가 되는 쉬운 예시
- 관측 일치·우연 일치·보정 계산의 순서
- 선형·제곱 가중과 미정의 값의 뜻
- 정확도·MCC·다중 라벨러 지표와의 차이
- 라벨링·평가 기준 점검의 실전 사용처
- 범주 순서·자료 분포·불일치를 확인하는 체크리스트
코헨 카파를 한 문장으로 정의하면 무엇인가요?
코헨 카파는 같은 사례를 분류한 두 라벨러의 관측 일치를 각 라벨러의 범주 분포에서 기대되는 일치와 비교해 보정하는 통계량입니다.
영문명은 Cohen’s kappa이며 코헨의 카파 계수라고도 부릅니다. 기본 형태는 사례마다 하나의 범주를 붙이는 두 사람의 판정을 비교합니다. 서로 같은 이름표를 붙였는지 묻는 지표이지, 어느 사람이 실제로 옳은지 결정하는 절차는 아닙니다.
scikit-learn 사용자 가이드는 사람 주석자 사이의 라벨 비교를 본래 용도로 설명합니다. 이 글도 AI 학습 데이터와 평가 라벨을 만드는 과정의 일치도에 초점을 맞춥니다. 두 라벨 목록을 받는다는 이유만으로 모델의 정답률 지표와 같은 목적이라고 설명하지 않습니다.
한 줄 정리: 코헨 카파는 라벨을 붙인 두 사람의 일치를 보는 숫자입니다. 라벨을 만드는 작업이나 최종 정답을 확정하는 검수와 구분합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 AI 학습용 고객 문의 100건을 두 담당자에게 일반·긴급으로 나누게 했다고 가정해 보겠습니다. 다음은 수식을 설명하려고 만든 가상 집계입니다. 실제 고객 자료나 운영 품질을 측정한 결과는 아닙니다.
첫 자료에서는 두 사람이 모두 일반 50건·긴급 50건을 붙였습니다. 함께 일반이라고 한 문의가 40건, 함께 긴급이라고 한 문의가 40건이고 서로 다른 판정은 20건입니다. 관측 일치율은 80%입니다. 각자의 50대 50 비율로 구한 우연 일치는 50%이고 카파는 0.6입니다.
둘째 자료에서는 두 사람이 모두 일반 80건·긴급 20건을 붙였습니다. 함께 일반이라고 한 문의는 70건, 함께 긴급이라고 한 문의는 10건이며 불일치는 여전히 20건입니다. 일치율은 똑같이 80%지만 우연 일치는 68%이고 카파는 0.375입니다.
두 결과의 차이는
(0.8 - 0.5) ÷ (1 - 0.5) = 0.6
과
(0.8 - 0.68) ÷ (1 - 0.68) = 0.375
로 확인합니다. 한 범주가 흔하면 그 범주를 함께 고를 기회도 커지므로 같은 일치율에 적용하는 보정 기준이 달라집니다.
숫자는 Python 표준 라이브러리로 고정된 교차 집계표를 계산해 확인했습니다. scikit-learn 함수를 실행하거나 모델을 학습한 결과로 제시하지 않습니다. 둘째 자료의 담당자가 더 부정확하다고 단정하기보다 자료 구성과 불일치 사례를 함께 읽습니다.
쉬운 예시: 두 사람이 같은 이름표를 붙인 횟수만 세지 않고, 각자 자주 고르는 이름표 때문에 생기는 기대 일치도 함께 살피는 방식입니다.
왜 AI에서 코헨 카파가 중요한가요?
학습과 평가의 라벨 기준을 점검합니다
AI에 정답으로 보여 줄 자료를 만드는 사람도 같은 문장을 다르게 해석합니다. 배송 지연 문의를 일반 안내로 볼지 긴급 대응으로 볼지 기준이 모호할 수 있습니다. 카파와 불일치 기록은 기준표의 어디를 다시 설명할지 찾는 출발점입니다.
높은 일치율에 숨은 범주 쏠림을 살핍니다
대부분의 자료가 일반이라면 두 사람이 일반을 자주 골라 높은 일치율을 얻을 수 있습니다. 카파는 두 사람의 범주 사용 비율을 보정에 반영합니다. 그러나 불균형 자체를 없애거나 자료 구성이 다른 조사들을 완전히 공정하게 맞추는 지표는 아닙니다.
Artstein·Poesio의 논문은 좋은 일치가 타당성을 보장하지 않는다고 구분합니다. 같은 기준을 잘못 이해한 두 사람이 같은 실수를 반복할 수도 있습니다. 합의한 라벨 가운데 일부도 별도로 검수하고 불일치가 많은 유형은 원문과 반례를 남깁니다.
핵심 인사이트: 라벨러의 일관성과 라벨의 올바름은 다른 질문입니다. 카파를 계산한 뒤에도 기준과 원본 자료의 검수가 남습니다.
코헨 카파는 어떤 순서로 계산하나요?
1. 같은 사례의 라벨을 교차 집계합니다
행은 첫 라벨러의 범주, 열은 둘째 라벨러의 범주로 정합니다. 두 사람이 같은 범주를 붙인 사례는 대각선에 쌓입니다. 전체 건수로 대각선 합을 나누면 관측 일치
p_o
입니다. 두 목록의 길이뿐 아니라 문의 ID와 순서까지 같아야 합니다.
2. 두 사람의 범주 비율을 곱해 더합니다
각 범주에서 첫 사람의 사용 비율과 둘째 사람의 사용 비율을 곱하고 전체 범주에 걸쳐 더합니다. 이 값이 우연 일치
p_e
입니다. 둘째 예시에서는
0.8 × 0.8 + 0.2 × 0.2 = 0.68
입니다. 두 사람의 분포가 다르면 각각의 실제 비율을 씁니다.
이 기대값은 각자가 관측된 범주 분포대로 독립적으로 라벨을 고른다는 우연 모형에서 나옵니다. 실제 라벨러가 무작위로 작업했다는 측정 결과가 아니며, 실제 일치 가운데 우연으로 생긴 사례를 개별적으로 찾아낸 값도 아닙니다.
3. 기대 일치를 뺀 몫을 비교합니다
기본 공식은
카파 = (p_o - p_e) ÷ (1 - p_e)
입니다. 관측 일치에서 기대 일치를 빼고 기대 일치를 넘어설 수 있는 몫으로 나눕니다. scikit-learn의 확인한 공식 구현은 동등한 불일치 비율 형태를 사용합니다. 선형·제곱 가중 카파는 범주 사이의 거리까지 이 비교에 반영합니다.
실전 팁: 카파만 저장하지 말고 원본 교차표와 관측 일치율, 두 사람의 범주별 건수를 함께 남기세요. 점수가 바뀐 이유를 다시 계산하기 쉽습니다.
주요 설정과 결과는 어떻게 읽나요?
입력과 labels는 범주 대응을 정합니다
cohen_kappa_score(y1, y2)
의 입력은 같은 사례에 대한 두 범주 목록입니다.
labels=None
이면 두 목록 중 한 번이라도 등장한 라벨을 사용합니다. 일부 범주만 지정하면 제외되는 사례가 생길 수 있으므로 이를 전체 자료의 결과라고 보고하지 않습니다.
weights는 순서형 범주의 불일치 거리를 정합니다
weights=None
은 다른 범주로 고른 사례를 모두 같은 불일치로 다룹니다.
weights="linear"
는 범주 위치 차이의 절댓값을,
weights="quadratic"
은 그 제곱을 사용합니다. 세 단계가 낮음·보통·높음 순서라면 한 단계 차이와 두 단계 차이의 상대 거리는 선형에서 1과 2, 제곱에서 1과 4입니다.
가중 카파의 거리는 라벨의 문자 이름이나 임의 숫자의 원래 크기가 아니라 계산 행렬의 범주 위치에서 나옵니다. 순서가 있는 등급은
labels=[0, 1, 2]
처럼 의미 순서를 명시하고 코드표를 저장합니다. 배송·환불·결제처럼 자연스러운 순서가 없는 명목 범주에는 임의의 거리 가중을 붙이지 않습니다.
sample_weight는 사례별 집계 비중입니다
sample_weight
는 각 사례가 교차표에 기여하는 비중을 바꿉니다. 등급 간 거리인
weights
와 다른 옵션입니다. 가중치를 쓰면 관측 일치뿐 아니라 범주 사용 비율도 가중 집계에서 구하므로, 적용 목적과 원래 사례 수를 함께 기록합니다.
음수·0·미정의 값을 나누어 읽습니다
계산이 정의될 때 완벽한 일치는 1입니다. 0은 관측 일치가 이 우연 모형의 기대값과 같다는 뜻이며 음수는 그보다 적은 일치입니다. 무작위 작업의 증거로 단정하지 않습니다. 가능한 전체 범위는 -1부터 1 안이지만 주어진 범주 분포에서 항상 -1까지 내려갈 수 있다는 뜻은 아닙니다.
두 사람이 모든 사례에 같은 한 범주만 붙이면 관측 일치와 기대 일치가 모두 1이어서 분모가 0입니다. 확인한 scikit-learn 1.9.1은 경고와 함께 기본적으로
NaN
을 반환합니다. 1.9에서 추가된
replace_undefined_by
로 대체값을 정해도 정보가 없는 평가가 정상적인 일치도 측정으로 바뀌지는 않습니다.
코헨 카파와 헷갈리는 용어는 무엇이 다른가요?
관측 일치율·정확도와의 차이
관측 일치율은 두 사람이 같은 라벨을 붙인 비율이며 카파는 기대 일치를 보정한 값입니다. 정확도는 검증한 정답과 모델 예측의 일치 비율을 말합니다. 두 사람 중 누구도 확정 정답이 아닐 수 있는 조사에 정확도라는 이름을 붙이면 평가 목적을 혼동합니다.
매튜스 상관계수·균형 정확도와의 차이
매튜스 상관계수(MCC)는 정답·예측 라벨의 상관을 요약하고 균형 정확도는 클래스별 재현율을 같은 비중으로 평균냅니다. 카파는 두 라벨러의 범주 분포로 기대 일치를 추정합니다. 이진 결과표를 사용할 수 있다는 공통점만으로 같은 공식이나 같은 평가 질문이라고 볼 수는 없습니다.
Fleiss 카파·Krippendorff 알파와의 차이
Cohen 카파의 이 함수는 두 라벨러를 받습니다. 세 명 이상을 한꺼번에 평가하거나 라벨러마다 빠진 판정이 있다면 연구 설계에 맞는 다른 일치도 정의를 검토합니다. Fleiss 카파는 여러 판정자의 분포를 묶는 방식으로 기대 일치를 추정하므로 Cohen 카파의 단순한 이름 변경이 아닙니다.
데이터 라벨링·정답 검수와의 차이
데이터 라벨링은 자료에 이름표를 붙이는 작업입니다. 카파는 그 결과의 일치를 측정하는 숫자이고, 최종 검수는 어느 판정을 채택할지 근거를 확인하는 과정입니다. 불일치를 합의로 없앤 뒤에만 카파를 계산하면 처음의 독립 판정이 얼마나 달랐는지 놓칩니다.
비교 정리: 일치율은 함께 고른 비율, 카파는 기대 일치를 보정한 통계량, 정확도는 정답 대비 모델의 정답률입니다. 라벨을 만들고 검수하는 작업은 별도로 남습니다.
실전에서는 어디에 쓰이나요?
학습용 문서 라벨의 기준을 맞춥니다
두 사람이 같은 표본의 문의 유형·문서 주제·감정 범주를 독립적으로 붙인 뒤 일치를 확인합니다. 전체 점수와 함께 자주 엇갈리는 범주를 찾아 기준표에 예시와 반례를 보강합니다. 보강한 기준은 새로운 표본에서 다시 점검해 이전 사례를 외운 효과와 구분합니다.
LLM 평가자의 판정 기준을 확인합니다
답변이 지정한 기준을 충족했는지 두 사람이 같은 항목과 범주로 평가할 때 활용합니다. 자유로운 답변 원문을 카파 함수에 그대로 넣는 작업이 아닙니다. 먼저 사례당 하나의 판정 라벨과 평가 단위를 정하고 사람 평가의 일관성을 모델 결과의 품질과 나눠 보고합니다.
코헨 카파를 적용할 때 어떤 순서로 확인하나요?
1. 단위와 범주, 독립 판정 조건을 정합니다
문의 한 건인지 문장 하나인지 먼저 고정합니다. 두 라벨러에게 같은 자료와 같은 기준표를 주고 상대 판정을 보기 전에 라벨을 남깁니다. 보류·판정 불가 범주와 누락 처리도 미리 정해 애매한 자료만 사후에 빼지 않습니다.
2. 원본 판정과 범주별 집계를 보존합니다
ID로 두 목록을 연결하고 누락·중복을 확인합니다. 원본 건수의 교차표, 대각선 일치율, 각자의 범주 사용 비율을 봅니다. 기본 카파인지 순서형 가중 카파인지 정한 뒤 같은 설정으로 계산하고 미정의 값과 경고는 별도 표시합니다.
3. 불일치 검토와 후속 평가를 나눠 남깁니다
담당자가 엇갈린 원문을 검토하고 기준의 모호함·라벨 실수·자료 부족을 구분합니다. 합의 후 최종 라벨은 독립 판정과 별도 열로 보관합니다. 다음 조사에는 새로운 표본을 사용하고 범주 구성·표본 수·가중 방식이 달라졌는지도 함께 보고합니다.
작은 표본의 카파 차이를 곧바로 개선으로 확정하지 않습니다. statsmodels의 별도 함수는 교차 집계표를 받아 분산과 검정 정보를 제공하지만 scikit-learn의 함수는 점수 하나를 반환합니다. 불확실성 검토는 표본 추출과 반복 관측 여부에 맞춰 설계하고 점수 계산과 구분합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 높은 일치를 정답 보증으로 읽지 않습니다. 두 사람이 같은 잘못된 기준을 따르면 카파가 높아도 라벨은 틀릴 수 있습니다. 기준표와 합의 라벨의 별도 검수를 유지합니다.
둘째, 자료 분포와 범주 순서를 바꾸어 점수를 꾸미지 않습니다. 흔한 유형만 고르거나 등급 순서를 재배열하면 평가가 달라집니다. 비교 전후의 범주별 건수와 제외 기준을 함께 남깁니다.
셋째, 관행적 기준값을 자동 통과선으로 쓰지 않습니다. 카파 0.8 같은 숫자만으로 모든 라벨링 작업이 충분하다고 판단하지 않습니다. 중요한 범주의 불일치와 후속 검수 비용, 사용 목적에 맞춰 승인 조건을 정합니다.
넷째, 두 라벨러와 다중 라벨 문제를 구분합니다. 한 문서에 여러 태그를 동시에 붙이는 문제는 이 단일 범주 입력과 다릅니다. 태그별로 나눠 계산한다면 각 점수의 단위와 누락 조건을 명시하고 문서 전체의 일치도라고 부르지 않습니다.
주의: 카파는 현재 표본·범주·두 판정 목록을 전제로 해석하는 요약값입니다. 미정의 값을 0이나 1로 대체한 결과와 실제로 계산된 점수를 섞어 보고하지 않습니다.
자주 묻는 질문
Q1. 카파 0.6이면 두 사람이 60% 일치했나요?
아닙니다. 이 글의 첫 예시는 관측 일치율이 80%인데 카파가 0.6입니다. 관측 일치율과 보정 점수는 다른 값이므로 함께 표시합니다.
Q2. 두 사람 중 한 명을 정답으로 정해야 하나요?
카파는 두 라벨러의 일치를 대칭적으로 비교합니다. 누가 옳은지 정하지 않으며 최종 정답을 확정하려면 원문·기준·검수 근거를 별도로 확인합니다.
Q3. 음수면 프로그램이 잘못된 건가요?
꼭 그렇지는 않습니다. 관측 일치가 기대 일치보다 작으면 음수입니다. 코드표와 ID 대응을 먼저 확인한 뒤 실제 불일치 관계를 검토합니다.
Q4. 같은 한 라벨만 붙여도 완벽한 카파인가요?
관측 일치율은 100%여도 기대 일치 역시 100%여서 기본 공식이 정의되지 않습니다. 확인한 구현의 기본 반환은 NaN이며 정상적인 1점과 구별합니다.
Q5. linear와 quadratic은 표본의 중요도인가요?
두 옵션은 순서형 범주 사이 불일치 거리를 정합니다. 사례별 비중은 sample_weight입니다. 두 종류의 가중을 혼용하지 않고 범주의 의미 순서를 기록합니다.
Q6. 세 사람이 붙인 라벨도 한 번에 넣나요?
여기서 설명한 함수는 두 목록을 받습니다. 세 명 이상의 전체 일치도를 보려면 라벨러 수와 누락 구조에 맞는 별도 정의를 고릅니다. 두 명씩 계산한 평균을 같은 통계량으로 부르지 않습니다.
출처
마무리
코헨 카파는 같은 자료를 분류한 두 라벨러의 일치에서 각자의 범주 사용 비율로 기대한 우연 일치를 보정하는 지표입니다. 관측 일치율·보정 점수·최종 라벨의 올바름을 따로 보면 AI 데이터의 기준을 더 정확히 점검할 수 있습니다.
감자나라ai님이 라벨의 품질을 확인한다면 두 사람의 독립 판정과 원본 교차표부터 남겨 보세요. 범주 분포·등급 순서·가중 방식·미정의 조건을 확인하고 불일치 원문을 검수하는 것이 점수 하나만 보고 합격을 선언하는 것보다 필요한 정보를 더 많이 남깁니다.
