쌍 혼동 행렬(Pair Confusion Matrix)이란? AI에서 두 군집의 표본 쌍 관계를 비교하는 표
TL;DR
쌍 혼동 행렬은 두 군집 결과가 표본 두 개를 함께 묶었는지 여부를 비교하는 2×2 표입니다. 기준과 예측에서 모두 따로 놓거나 모두 함께 놓은 쌍은 일치, 한쪽만 함께 놓은 쌍은 불일치입니다. scikit-learn 결과는 양방향 쌍을 세므로 칸의 숫자를 고유한 두 표본 조합 수와 바로 같다고 보면 안 됩니다. 이 표는 FMI나 조정 랜드 지수 같은 하나의 성능 점수가 아닙니다.
핵심 3줄 요약
- 핵심 1
한 칸은 표본 쌍의 관계를 셉니다. 원본 표본 하나의 정답 여부가 아니라 두 분할이 그 쌍을 함께 묶었는지를 기록합니다. - 핵심 2
네 칸은 TN·FP·FN·TP입니다. 기준과 예측 모두 다른 군집이면 TN, 둘 다 같은 군집이면 TP입니다. - 핵심 3
출력 숫자는 양방향으로 셉니다. scikit-learn 행렬의 합계는 고유한 순서 없는 쌍의 두 배입니다.
이 글에서 다룰 내용
- 쌍 혼동 행렬의 한 문장 정의
- 네 개 문서의 쌍을 직접 세는 쉬운 예시
- TN·FP·FN·TP와 양방향 집계의 뜻
- 군집 교차 집계표·분류 혼동 행렬과의 차이
- FMI·랜드 지수·ARI와의 연결
- 평가 표본과 라벨을 맞추는 실전 순서
- 자주 묻는 질문 다섯 가지
쌍 혼동 행렬을 한 문장으로 정의하면 무엇인가요?
쌍 혼동 행렬(Pair Confusion Matrix)은 같은 표본에 붙인 두 군집 라벨에서 표본 쌍이 함께 묶이거나 따로 놓인 결과를 교차해 센 2×2 행렬입니다.
scikit-learn의
pair_confusion_matrix
는 첫 번째 라벨 배열을 기준, 두 번째 배열을 비교할 군집 결과로 받습니다. 두 배열에서 같은 위치는 반드시 같은 표본이어야 합니다. 사람이 확인한 클래스와 예측 군집을 대조할 수도 있고, 동일한 문서 집합에 적용한 두 군집 실험을 비교할 수도 있습니다. 후자는 어느 쪽이 정답인지 판정하지 않습니다.
쌍이 양쪽에서 서로 다른 군집이면 참음성(TN), 기준에서는 다른데 예측에서만 같으면 거짓양성(FP)입니다. 기준에서는 같은데 예측에서만 다르면 거짓음성(FN), 양쪽 모두 같으면 참양성(TP)입니다. 행은 기준의 다른 군집·같은 군집, 열은 예측의 다른 군집·같은 군집 순서로 읽습니다.
한 줄 정리: 표본의 클래스 번호가 일치하는지를 세지 않고, 두 표본이 같은 묶음에 드는 관계가 일치하는지를 셉니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 문의 문서 네 개 A·B·C·D를 묶는다고 가정해 보겠습니다. 사람이 확인한 기준 묶음은 {A,B}와 {C,D}입니다. 모델의 예측 묶음은 {A,B,C}와 {D}입니다. 네 문서 자체가 아니라 서로 다른 문서 두 개로 이뤄진 조합을 검사합니다.
- A–B는 기준과 예측 모두 함께 묶었습니다. 따라서 TP가 한 쌍입니다.
- C–D는 기준에서만 함께 묶었습니다. 모델이 갈랐으므로 FN이 한 쌍입니다.
- A–C와 B–C는 기준에서 서로 다르지만 예측에서는 함께 묶였습니다. FP가 두 쌍입니다.
- A–D와 B–D는 두 분할 모두 서로 다르게 놓았습니다. TN이 두 쌍입니다.
순서 없는 고유 조합은 여섯 쌍입니다. 이를 기준의 행, 예측의 열 순으로 놓으면 TN·FP가 있는 첫 행은 [2, 2], FN·TP가 있는 둘째 행은 [1, 1]입니다. 이 수치는 개념을 이해하기 위한 고유 쌍의 집계입니다.
scikit-learn의 행렬은 A–B와 B–A처럼 두 방향을 모두 집계합니다. 따라서 같은 라벨로 함수에 넣으면 첫 행 [4, 4], 둘째 행 [2, 2]가 됩니다. 네 칸의 합은 12이며, 원본 문서 네 건이나 고유한 여섯 조합과 같지 않습니다. 이 예시의 행렬은 표본 쌍을 직접 열거해 구한 값이므로, 분류 예측 네 건의 혼동 행렬로 바꾸어 읽으면 안 됩니다.
쉬운 예시: A와 C는 두 개의 문서이지만 행렬에서는 그 둘이 같은 묶음인지가 한 번의 판단 단위입니다.
왜 AI에서 쌍 혼동 행렬이 중요한가요?
모델이 잘못 합친 쌍과 놓친 쌍을 나눕니다
군집 결과를 평가할 때 총점만 보면 비슷한 사례를 놓친 것인지, 서로 다른 사례를 섞어 버린 것인지 알기 어렵습니다. FP에는 기준상 다른 군집인데 예측이 합친 쌍이, FN에는 기준상 같은 군집인데 예측이 갈라 놓은 쌍이 들어갑니다. 중요한 주제끼리 섞인 문서나 서로 갈라진 동의 표현을 이 구분에서 추적합니다.
예를 들어 문의 자동 분류에서 배송 안내와 환불 안내를 한 군집으로 합쳤다면 해당 문서 조합을 직접 펼쳐 봅니다. FN이 크다면 실제로 같은 주제인 여러 문의가 분리된 이유를 입력 특징이나 전처리에서 찾습니다. 행렬의 숫자는 어느 문서가 원인인지 알려 주지 않으므로 원본 ID로 돌아가는 절차가 필요합니다.
하나의 점수로 요약되기 전의 관계를 남깁니다
랜드 지수는 함께 묶인 쌍과 따로 놓인 쌍 가운데 두 분할이 동의한 비율을 사용합니다. 따라서 TN과 TP를 합친 결과는 한 숫자로 요약되지만, FP와 FN 중 어느 쪽이 커졌는지까지 보여 주지는 않습니다. 쌍 혼동 행렬을 보관하면 평가 지표가 요약한 원래 네 유형을 다시 확인할 수 있습니다.
FMI는 TP를 바탕으로 같은 군집으로 예측한 쌍의 정밀도와 기준상 같은 군집인 쌍의 재현율을 합칩니다. 즉 이 행렬을 읽는 질문은 점수의 대소보다 합치기와 가르기 오류의 구성에 더 가깝습니다. 같은 평가 표본을 썼는지 먼저 확인해야 값의 차이를 비교할 수 있습니다.
핵심 인사이트: 쌍 혼동 행렬은 무엇을 함께 묶거나 갈라 놓았는지 검토할 출발점입니다. 단독으로 좋은 군집을 확정하지는 않습니다.
쌍 혼동 행렬은 어떻게 만드나요?
같은 표본의 두 라벨 배열을 맞춥니다
labels_true
에는 기준 분할,
labels_pred
에는 평가할 분할의 라벨을 넣습니다. 두 배열의 길이가 같아도 정렬 순서가 다르면 서로 다른 문서를 한 위치에서 비교하게 됩니다. 먼저 고유 문서 ID로 결합해 대상 집합과 순서를 고정합니다.
군집 라벨은 이름입니다. 기준의 0과 예측의 0이 뜻하는 주제가 같을 필요는 없습니다. 양쪽에서 묶음의 구성원만 같다면 번호를 서로 바꿔 붙여도 표본 쌍의 관계는 같습니다. 반대로 문서의 순서를 뒤섞으면 번호가 같아도 잘못된 결과가 됩니다.
두 표본의 관계를 네 칸으로 나눕니다
서로 다른 표본을 두 개 골라 기준에서 같은 그룹인지 확인한 뒤, 예측에서도 같은 그룹인지 확인합니다. 기준이 다르고 예측도 다르면 C00(TN), 기준이 다르고 예측은 같으면 C01(FP)입니다. 기준이 같고 예측은 다르면 C10(FN), 양쪽 모두 같으면 C11(TP)에 해당합니다.
scikit-learn 문서의 예시는 기준
[0, 0, 1, 1]
, 예측
[1, 1, 0, 0]
에서
[[8, 0], [0, 4]]
를 출력합니다. 숫자 이름이 모두 달라도 구성원이 똑같으면 비대각선 값이 0입니다. 표의 대각선은 관계의 일치를 뜻하지, 기준 군집 0과 예측 군집 0의 이름이 일치한다는 뜻이 아닙니다.
합계와 집계 단위를 확인합니다
scikit-learn 출력의 합을 네 개의 원본 사례 수와 비교하지 마세요. 서로 다른 표본 두 개로 만든 고유 조합을 양방향으로 세므로 네 표본의 완전한 비교에서는 총합이 12입니다. 고유한 쌍 수로 읽으려면 각 칸을 2로 나눈 뒤 계산 방식과 함께 기록합니다.
이중 계산을 한 것처럼 보이더라도 행렬을 이용해 정밀도나 비율을 계산하면 각 칸에 같은 배수가 적용되어 해당 비율에서는 상쇄됩니다. 다만 보고서에 FP가 네 건이라고 쓰면 문서 네 개가 잘못 분류됐다는 뜻으로 오해하기 쉽습니다. 쌍의 집계와 개별 문서의 건수를 구분하세요.
쌍 혼동 행렬과 헷갈리는 용어는 무엇이 다른가요?
군집 교차 집계표와의 차이
최근 군집 교차 집계표 글에서 다룬
contingency_matrix
의 한 칸은 특정 기준 그룹과 예측 군집에 동시에 속하는 개별 표본 수입니다. 기준 그룹이 둘, 예측 군집이 셋이면 표도 2×3이 됩니다. 쌍 혼동 행렬은 기준·예측 각각의 같은 그룹 여부만 비교하므로 두 분할의 군집 수와 무관하게 2×2입니다.
교차 집계표의 대각선에 있는 표본 수를 쌍 혼동 행렬의 TP로 옮겨 적으면 안 됩니다. 예컨대 한 칸에 문서 두 건이 있으면 개별 표본은 두 건이지만 그 둘로 구성한 고유한 쌍은 한 쌍입니다. 두 표는 서로 다른 질문에 답하고, 집계 단위도 다릅니다.
분류 혼동 행렬과의 차이
분류 혼동 행렬은 사례 하나의 정답 클래스와 예측 클래스를 비교합니다. 이진 분류에서 TP는 해당 사례가 양성이고 예측도 양성인 건수입니다. 쌍 혼동 행렬의 TP는 표본 두 개가 기준과 예측에서 모두 같은 그룹이라는 관계의 개수입니다. 이름은 비슷하지만 행렬에 들어가는 관찰 단위가 다릅니다.
기존 분류 혼동 행렬 글의 정밀도와 재현율을 군집 평가에 그대로 옮기려면 먼저 양성의 정의를 바꿔야 합니다. 군집에서는 같은 군집으로 놓인 두 표본을 양성 쌍이라고 정합니다. 원본 데이터에서 특정 클래스가 양성이라는 뜻과 혼동하지 마세요.
FMI·랜드 지수·ARI와의 차이
랜드 지수(RI)는 TN과 TP처럼 두 분할이 동의한 쌍의 비율입니다. FMI는 양성 쌍을 함께 묶는 정밀도와 놓치지 않는 재현율의 기하평균입니다. 두 지표는 행렬이 아니라 숫자 하나로 결과를 요약합니다. 같은 FP·FN이 있어도 TN의 비중이 크면 랜드 지수의 해석에서 주의가 필요합니다.
조정 랜드 지수(ARI)는 우연한 일치의 기대를 보정합니다. 쌍 혼동 행렬 자체에는 그런 우연 보정이 없습니다. 원본 행렬과 ARI가 다르다고 계산이 틀린 것이 아니라 출력의 목적이 다릅니다. 보정 점수를 묻는 독자는 기존 ARI 글을, 어떤 관계에서 오류가 생겼는지 묻는 독자는 이 표를 읽는 편이 맞습니다.
비교 정리: 군집 교차표는 개별 사례의 겹침, 분류 혼동 행렬은 사례별 정답, 쌍 혼동 행렬은 두 사례의 묶음 관계, FMI와 RI·ARI는 관계를 요약한 점수입니다.
실전에서는 어디에 쓰이나요?
문서 군집 결과의 합치기 오류를 살핍니다
고객 문의에 사람이 붙인 주제 라벨과 AI가 만든 군집 라벨을 같은 문서 ID로 대조합니다. 기준상 배송과 결제처럼 다른 주제인데 모델이 함께 묶은 FP 쌍이 많다면 해당 문서가 공유하는 단어와 표현을 검토합니다. 숫자만으로 잘못 묶인 문서가 무엇인지 알 수 없으므로 쌍의 ID도 별도로 추적합니다.
소수 주제가 큰 군집에 흡수되면 전체 비율에서는 문제가 작게 보일 수 있습니다. 중요한 주제를 정했다면 그 주제의 문서만 따로 집계하거나 예시 쌍을 읽어 실제 운영상의 오류를 확인합니다. 전체 행렬 하나가 개별 그룹의 품질을 보증하지 않습니다.
반복 실험의 분할 관계를 비교합니다
같은 이미지나 문서 집합을 다른 설정으로 군집화했을 때 두 결과를 나란히 놓을 수 있습니다. 기준 라벨로 첫 번째 결과를 쓰면 행렬은 두 실험이 표본을 함께 묶고 갈라 놓은 관계를 나타냅니다. 첫 실험이 정답이라는 뜻은 아닙니다.
군집 번호가 다르게 매겨져도 묶음의 구성원이 같으면 행렬은 관계의 완전 일치를 보여 줍니다. 그러나 비교 대상에 누락 사례가 있거나 데이터 전처리가 달라졌다면 같은 표본으로 다시 맞추어야 합니다. 안정적으로 비슷한 결과가 나왔다는 사실과 실제 정답에 맞는다는 사실도 구분해야 합니다.
표를 확인할 때 어떤 순서로 점검하나요?
1. 표본 ID와 두 라벨의 순서를 고정합니다
파일 두 개를 행 번호로만 합치지 말고 원본 문서 ID를 키로 결합합니다. 양쪽에 공통으로 남아 있는 사례의 수와 중복된 ID를 확인합니다. 사람이 정한 라벨이 없다면 무엇을 비교 기준으로 삼았는지 명시합니다.
미배정이나 노이즈를 별도 라벨로 포함할지, 평가에서 제외할지 사전에 정합니다. 이를 바꾸면 대상 집합과 쌍의 수가 함께 달라지므로 이전 행렬과 무심코 나란히 비교하기 어렵습니다.
2. 네 칸의 뜻과 총합을 대조합니다
첫 행에는 기준상 다른 군집인 쌍의 TN과 FP, 둘째 행에는 기준상 같은 군집인 쌍의 FN과 TP가 들어갑니다. 열은 예측에서 다르게 놓은 쌍과 함께 놓은 쌍입니다. FP와 FN의 자리를 바꾸지 않도록 기준 배열과 예측 배열의 순서도 저장합니다.
네 칸의 합계가 원본 사례 건수와 같을 거라고 기대하지 않습니다. scikit-learn의 양방향 집계와 사람이 열거한 고유 조합을 서로 다른 단위로 적고, 예시 쌍을 몇 개 직접 확인합니다. 같은 결과라도 표시 방식이 다르면 각 칸 수가 두 배로 보입니다.
3. 점수와 원본 쌍을 함께 검토합니다
합치기 오류가 중요한 서비스라면 FP에 해당하는 원본 사례를 우선 엽니다. 반대로 같은 주제를 놓치는 문제가 크다면 FN 사례를 봅니다. 행렬 하나만 보지 말고 해당 사례의 문장, 주제 기준과 검색·분류 목적을 대조하세요.
랜드 지수, FMI 또는 ARI를 함께 적을 때는 어떤 기준 분할과 어떤 평가 집합을 썼는지 남깁니다. 점수가 같아도 오류를 일으킨 문서가 다를 수 있으며, 행렬이 같다고 해도 어떤 주제에 영향이 큰지는 사례를 보기 전에는 알 수 없습니다.
실전 팁: 라벨 배열과 표본 ID, 포함 정책, 양방향 집계 여부, 실제 오류 쌍을 함께 보관하면 다음 실험과 비교하기 쉽습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 원본 문서 수와 쌍 수를 혼동하지 않습니다. 네 문서에서 고유한 두 문서 조합은 여섯 개입니다. scikit-learn의 양방향 행렬 합계는 12입니다. FP 숫자가 문서 FP 건수라는 식으로 보고하지 마세요.
둘째, FP와 FN의 기준 방향을 지킵니다. 기준에서는 분리되어 있는데 예측만 합친 쌍이 FP입니다. 기준에서 함께 있는데 예측이 분리한 쌍은 FN입니다. 두 라벨 입력을 뒤집으면 오류 유형의 해석도 바뀝니다.
셋째, TN이 많다고 모든 군집이 좋은 것은 아닙니다. 군집을 잘게 나누면 서로 다른 군집에 속한 쌍이 많아질 수 있습니다. 전체 일치 비율만 보지 말고 합쳐야 할 쌍을 놓친 사례와 군집별 목적도 확인합니다.
넷째, 정답이 없는 비교를 정확도라고 부르지 않습니다. 두 번의 군집 결과를 서로 대조했을 뿐이면 행렬은 실험 사이의 일치도를 보여 줍니다. 어느 쪽도 검수된 기준이 아닐 수 있으므로 실제 주제 적합성을 따로 검사합니다.
다섯째, 계산량과 보고 단위를 구분합니다. 모든 쌍을 사람이 직접 나열하지 않아도 함수를 이용해 행렬을 얻을 수 있습니다. 보고서에는 사용한 구현의 출력 단위와 원본 평가 표본 수를 함께 남기세요.
주의: 숫자 네 개만으로 특정 문서의 오류나 우연히 일치했는지를 확정할 수 없습니다. 원본 표본과 필요한 보정 점수를 따로 보세요.
자주 묻는 질문
Q1. 일반 혼동 행렬과 같은 표인가요?
아닙니다. 일반 분류 혼동 행렬은 사례 하나의 클래스 정답과 예측을 셉니다. 쌍 혼동 행렬은 표본 두 개가 같은 군집인지에 대한 두 분할의 판단을 셉니다.
Q2. 네 문서인데 행렬 값은 왜 모두 합쳐 12인가요?
서로 다른 문서 두 개의 고유 조합은 여섯 쌍입니다. scikit-learn은 A–B와 B–A처럼 두 방향을 모두 세므로 행렬 합계가 12가 됩니다.
Q3. 군집 번호가 서로 달라도 비교할 수 있나요?
가능합니다. 번호 자체보다 같은 표본끼리 함께 묶였는지를 확인합니다. 번호를 바꾸어도 묶음 구성원이 같으면 쌍의 관계는 그대로입니다.
Q4. 정답 라벨 없이도 만들 수 있나요?
동일한 표본 집합의 두 군집 결과를 비교할 수 있습니다. 다만 두 결과가 비슷하다는 뜻일 뿐 실제 정답이나 품질을 보증하지 않습니다.
Q5. FMI와 ARI를 표에서 바로 읽을 수 있나요?
FMI는 양성 쌍의 정밀도·재현율로 요약하고, ARI는 우연 일치를 보정합니다. 행렬은 네 종류의 관계를 보여 주지만 점수나 우연 보정 결과 그 자체는 아닙니다.
출처
마무리
쌍 혼동 행렬은 같은 표본의 두 분할에서 표본 쌍을 함께 묶거나 갈라 놓은 관계를 TN·FP·FN·TP로 기록합니다. 이 표로 합치기 오류와 놓친 쌍을 따로 살필 수 있지만, 하나의 행렬로 좋은 군집인지 단정할 수는 없습니다.
먼저 원본 표본 ID와 라벨 순서를 맞추고, 출력이 고유 쌍인지 양방향 집계인지 확인하세요. 이후 FP·FN에 해당하는 실제 사례를 펼쳐 보고, 필요하면 동일한 평가 집합에서 FMI나 ARI 같은 지표를 함께 계산합니다. 표의 숫자와 원본 문서를 연결할 때 군집 평가가 비로소 검수 가능한 기록이 됩니다.
