매튜스 상관계수(MCC)란? AI에서 정답과 예측 라벨의 일치를 상관으로 평가하는 지표
TL;DR
매튜스 상관계수는 정답 라벨과 예측 라벨의 관계를 상관계수로 요약하는 분류 평가 지표입니다. 이진 분류에서는 TP·TN·FP·FN 네 결과를 함께 반영하고 여러 클래스에도 확장합니다. 한 클래스만 예측하는 모델의 높은 정확도만 보고 판단하는 일을 줄이는 데 유용합니다. 다만 클래스별 재현율의 평균이나 정답 확률은 아닙니다. 0점의 계산 조건과 실제 오류 건수를 함께 확인합니다.
핵심 3줄 요약
- 핵심 1
정답률과 다른 관계를 봅니다. 맞힌 수와 함께 정답·예측의 클래스 분포를 반영합니다. 이진 분류에서는 네 종류의 결과가 모두 계산에 들어갑니다. - 핵심 2
음수도 가능한 상관 지표입니다. 완벽한 일치는 1이며 이진 분류의 완전한 반대 예측은 -1입니다. 0이 무작위 예측의 증거인 것은 아닙니다. - 핵심 3
분류 라벨과 원본 오류를 확인합니다. 확률을 넣는 함수가 아닙니다. 임계값·클래스별 건수·가중치와 혼동 행렬을 같은 평가 자료에서 남깁니다.
이 글에서 다룰 내용
- 매튜스 상관계수의 한 문장 정의
- 정상 메일과 스팸으로 비교하는 쉬운 예시
- 네 결과와 클래스 분포를 반영하는 계산 원리
- 입력 라벨·표본 가중치·다중 분류의 뜻
- 정확도·F1·균형 정확도·ROC-AUC와의 차이
- 실전 사용처와 평가 체크리스트
- 0점·작은 표본·잘못된 클래스 대응의 주의점
매튜스 상관계수를 한 문장으로 정의하면 무엇인가요?
매튜스 상관계수는 같은 사례의 정답 범주와 예측 범주가 얼마나 함께 맞물리는지 상관으로 요약하는 분류 평가 지표입니다.
영문명은 Matthews Correlation Coefficient이며 MCC로 줄여 씁니다. 매튜 상관계수나 매튜즈 상관계수로 표기하기도 합니다. 이진 분류에서는 파이 계수와 같은 통계량입니다. 여기서는 scikit-learn의 공식 함수와 다중 클래스 확장을 기준으로 설명합니다.
평가하려면 사람이 확인한 정답과 모델의 최종 예측 라벨이 필요합니다. 메일 한 통마다 정상인지 스팸인지 나란히 기록한 뒤 두 목록의 일치를 계산합니다. 여러 문서 유형을 분류할 때도 한 사례에 하나의 라벨을 붙이는 문제에 적용합니다.
한 줄 정리: MCC는 이미 나온 분류 결과를 평가하는 숫자입니다. 학습 방법이나 모델이 출력한 확률과 구별합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 메일 100통을 정상·스팸으로 나누는 AI를 비교한다고 가정해 보겠습니다. 정답은 정상 80통과 스팸 20통입니다. 아래 결과는 설명용으로 정한 예측이며 실제 서비스의 측정값이 아닙니다.
모델 A는 모든 메일을 정상으로 예측합니다. 정상 80통을 맞히고 스팸 20통을 전부 놓칩니다. 정확도는 80%지만 MCC는 0입니다. 예측이 한 클래스에만 몰려 있어 그 높은 정답률을 두 범주의 구분 능력으로 해석하기 어렵습니다.
모델 B는 정상 80통 중 72통, 스팸 20통 중 16통을 맞힙니다. 정상 8통을 스팸으로 잘못 보내고 스팸 4통을 놓칩니다. 정확도는 88%이고 MCC는 소수 셋째 자리까지 반올림하면 0.656입니다.
모델 C도 정확도는 88%입니다. 정상은 78통 맞히지만 스팸은 10통만 찾습니다. 정상 2통을 잘못 차단하고 스팸 10통을 놓치는 결과이며 MCC는 약 0.585입니다. 맞힌 총수가 같아도 클래스별 예측 분포와 오류 구성이 달라 두 MCC가 다릅니다.
이 계산은 Python 표준 라이브러리로 고정된 혼동 행렬의 수식을 확인한 결과입니다. scikit-learn 모델을 학습하거나 지표 함수를 실행한 결과로 제시하지 않습니다. B의 MCC가 더 높다고 스팸 차단 업무에서 무조건 B를 채택해야 한다는 뜻도 아닙니다.
쉬운 예시: 전체 정답률이 같은 두 메일 분류기도 정상 메일을 잘못 막는 수와 놓친 스팸의 수는 다릅니다. MCC는 그 관계를 하나의 상관 점수로 요약합니다.
왜 AI에서 매튜스 상관계수가 중요한가요?
다수 클래스에 몰린 예측을 살핍니다
한쪽 클래스가 많은 자료에서는 그쪽만 예측해도 정확도가 높습니다. MCC는 정답과 예측의 클래스 분포를 함께 반영하므로 전체 정답률 외의 비교 기준이 됩니다. 그렇다고 평가 자료의 클래스 비율이 바뀌어도 점수가 불변인 것은 아닙니다.
같은 정답률의 오류 구성을 비교합니다
B와 C처럼 맞힌 총수가 같은 모델도 다른 결과를 냅니다. 전체 정확도만 남기면 이런 차이가 보고서에서 사라집니다. MCC 옆에 혼동 행렬과 클래스별 재현율·정밀도를 붙이면 점수가 달라진 이유를 오류 구성에서 확인하기 쉽습니다.
Google의 분류 지표 안내도 평가 기준을 문제의 오류 비용과 연결해 읽도록 설명합니다. MCC가 네 결과를 반영한다는 사실만으로 누락과 오탐의 실제 피해까지 같은 비중으로 처리했다고 볼 수는 없습니다.
핵심 인사이트: MCC는 분류 결과를 다른 관점에서 비교하는 지표입니다. 클래스 불균형을 없애거나 잘못된 정답표를 고쳐 주지는 않습니다.
매튜스 상관계수는 어떤 순서로 계산하나요?
1. 정답과 예측을 혼동 행렬로 집계합니다
스팸을 양성으로 정하면 TP는 찾아낸 스팸, TN은 정상으로 남긴 정상 메일입니다. FP는 잘못 차단한 정상 메일이고 FN은 놓친 스팸입니다. confusion_matrix 문서에서는 행이 정답이고 열이 예측입니다. 라벨 순서가
[0, 1]
이라면 첫 행은 TN·FP, 둘째 행은 FN·TP입니다.
2. 네 결과로 이진 상관을 구합니다
공식 사용자 가이드의 이진 계산식은
MCC = (TP × TN - FP × FN) ÷ √((TP + FP)(TP + FN)(TN + FP)(TN + FN))
입니다. 분자는 맞은 결과끼리 곱한 값에서 틀린 결과끼리 곱한 값을 빼서 구합니다. 정답·예측의 주변 합으로 크기를 조정합니다. TP 하나나 정답 총수만 늘었다고 점수가 일정하게 증가하는 구조는 아닙니다.
3. 다중 분류는 전체 행렬로 계산합니다
클래스가 여러 개면 전체 혼동 행렬의 대각 합, 전체 표본 수, 정답별 행 합과 예측별 열 합을 사용합니다. 공식 구현도 이 순서로 계산합니다. 각 클래스를 따로 이진화해 구한 MCC의 단순 평균과는 다른 정의입니다. 클래스 번호를 연속 숫자로 두고 일반 상관 함수를 호출하는 방법도 아닙니다.
실전 팁: 수식을 직접 구현하기 전에 같은 라벨 순서의 원본 건수 행렬을 저장하세요. 행별 비율로 정규화한 표를 원본 건수로 착각하면 다른 계산이 됩니다.
입력과 결과는 어떻게 읽나요?
입력은 확률이 아닌 최종 라벨입니다
matthews_corrcoef(y_true, y_pred)
는 같은 사례 순서의 정답 라벨과 예측 라벨을 받습니다. 확률 기반 모델이라면 정해진 임계값이나 판정 규칙으로 라벨을 먼저 만듭니다. 이 함수에는 양성 이름을 정하는
pos_label
이나 평균 방식을 고르는
average
인자가 없습니다.
0점과 음수의 조건을 함께 봅니다
정답과 예측이 독립인 모집단에서는 0을 기준으로 생각할 수 있습니다. 그러나 유한한 평가에서 나온 0이 실제 무작위 예측을 증명하지는 않습니다. scikit-learn 1.9.1 구현은 정답이나 예측이 한 클래스뿐이라 분모가 0이면 0.0을 반환합니다. 계산이 퇴화한 경우와 연관이 약한 경우를 구별합니다.
이진 분류에서 두 정답 클래스가 있고 완전히 반대로 예측하면 -1입니다. 다중 분류도 전체 범위는 -1부터 1 안이지만 주어진 클래스 수와 분포에서 -1에 도달할 수 있다는 뜻은 아닙니다. 세 클래스가 2건씩 있고 모두 다음 클래스로 순환해 틀린 설명용 예시는 정확도 0%, MCC -0.5입니다.
표본 가중치는 집계 자체를 바꿉니다
sample_weight
를 쓰면 혼동 행렬에 건수 대신 사례별 가중치가 누적됩니다. 가중치의 목적과 실제 값을 보고서에 남깁니다. 모든 클래스의 재현율을 자동으로 같은 비중으로 평균내는 옵션은 아닙니다. 학습 시 모델에 준 클래스 가중치와 평가 시 넣은 표본 가중치도 별도로 기록합니다.
매튜스 상관계수와 헷갈리는 용어는 무엇이 다른가요?
정확도·혼동 행렬과의 차이
정확도는 전체에서 맞힌 비율입니다. 혼동 행렬은 정답과 예측을 교차한 개수 표이고 MCC는 그 표에서 구한 하나의 상관 점수입니다. MCC가 같아도 구체적으로 어떤 범주를 헷갈렸는지까지 같지는 않으므로 원본 표를 함께 봅니다.
F1·균형 정확도와의 차이
이진 F1은 양성 정밀도와 재현율의 조화평균이며 기본 계산식에 TN이 직접 들어가지 않습니다. MCC는 TN도 계산에 사용합니다. 균형 정확도는 클래스별 재현율의 산술평균입니다. MCC에 균형적인 측정이라는 설명이 붙어도 같은 비중의 재현율 평균이라는 뜻은 아닙니다.
ROC-AUC·확률 캘리브레이션과의 차이
MCC는 최종 라벨을 평가하므로 판정 임계값을 바꾸면 값도 달라집니다. ROC-AUC처럼 여러 임계값의 구분 성능을 요약하는 지표와 다릅니다. MCC 0.8을 예측의 80%가 맞거나 확률이 80%로 보정됐다는 뜻으로 읽지 않습니다.
비교 정리: 정확도는 정답률, 균형 정확도는 재현율 평균, F1은 양성 정밀도·재현율의 결합, MCC는 정답·예측 라벨의 상관을 살핍니다.
실전에서는 어디에 쓰이나요?
메일·문서 분류의 비교 지표로 씁니다
정상·스팸이나 문서 유형처럼 정답을 붙일 수 있는 분류에서 모델 버전을 비교합니다. 드문 클래스도 평가 자료에 포함하고 같은 사례에 대한 예측을 비교합니다. 클래스별 건수를 바꾼 다른 평가셋과 점수만 곧바로 견주지 않습니다.
LLM 자동화의 분류 부분을 평가합니다
LLM이 문의를 정해진 라벨로 라우팅하는 작업에도 적용할 수 있습니다. 사람이 확인한 정답 기준과 출력 라벨의 대응이 먼저입니다. 자유로운 설명의 사실성·출처·문장 품질을 MCC 하나로 평가하거나 시스템 전체의 안전성을 확정하는 용도로 쓰지는 않습니다.
매튜스 상관계수를 적용할 때 어떤 순서로 확인하나요?
1. 평가 대상과 클래스 대응을 고정합니다
메일이나 문서 한 건을 평가 단위로 정하고 정답표의 기준을 확인합니다. 정답과 예측의 ID·순서를 맞춥니다. 숫자 코드가 다르면 의미를 확인해 같은 코드표로 변환하며 누락·미분류 결과를 조용히 빼지 않습니다.
2. 분모와 원본 집계를 먼저 점검합니다
정답과 예측에 각각 몇 종류의 라벨이 있는지 셉니다.
confusion_matrix(y_true, y_pred, labels=[0, 1], normalize=None)
처럼 원본 건수를 봅니다. 표시용
normalize="true"
표는 각 정답 행의 비율이므로 그대로 건수 공식에 넣지 않습니다.
3. 같은 조건에서 지표와 오류를 남깁니다
MCC·정확도·클래스별 재현율·정밀도·혼동 행렬을 함께 저장합니다. 모델·프롬프트 버전, 임계값, 평가 기간, 표본 가중치와 제외 기준도 기록합니다. 오류 원문을 보면 숫자 변화가 라벨 기준의 차이인지 모델의 차이인지 점검할 수 있습니다.
4. 독립 자료에서 비교를 마무리합니다
검증 자료로 판정 규칙을 정한 뒤 튜닝에 쓰지 않은 테스트 자료에서 평가합니다. 소수 클래스가 작다면 한두 오류에 점수가 크게 흔들릴 수 있으므로 반복 분할의 변동이나 표본 단위에 맞는 신뢰구간을 함께 검토합니다. 작은 차이를 확정적인 우위로 보고하지 않습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 0을 무작위 모델의 증거로 단정하지 않습니다. 정답과 예측이 모두 같은 한 클래스여서 정확도 100%인 자료도 이 구현에서는 MCC 0입니다. 비교할 클래스가 빠진 평가인지, 모델이 한 라벨만 반환하는지 먼저 확인합니다.
둘째, 클래스 번호의 숫자 크기에 의미를 붙이지 않습니다. 정답과 예측에 같은 이름 변경을 적용하면 MCC는 변하지 않습니다. 정답 쪽 코드만 바꾸면 다른 평가가 됩니다. 다중 클래스 코드의 일반 피어슨 상관과 MCC를 혼동하지 않습니다.
셋째, 점수만 높이려고 임계값을 고르지 않습니다. 검증 자료에서 MCC가 높아진 규칙도 정상 메일 차단을 더 늘릴 수 있습니다. 사람이 처리할 수 있는 검토량과 중요한 클래스의 누락 기준을 별도로 정합니다.
넷째, 여러 라벨을 동시에 붙이는 문제와 구분합니다. 여기서 설명한 scikit-learn 함수는 이진·다중 클래스 라벨을 지원합니다. 한 문서에 여러 태그를 붙이는 다중 라벨 행렬은 같은 입력으로 지원한다고 가정하지 않습니다.
주의: MCC는 정답표와 평가 자료에 조건부인 요약값입니다. 작은 표본, 분포 변화, 잘못된 라벨과 실제 오류 비용을 점수 하나가 해결하지 않습니다.
자주 묻는 질문
Q1. MCC가 0.7이면 정확도 70%인가요?
아닙니다. MCC는 상관 점수이고 정확도는 맞힌 비율입니다. 점수의 숫자가 비슷해도 같은 뜻이 아닙니다. 정확도와 혼동 행렬은 별도로 계산하고 해석합니다.
Q2. 클래스 수를 50대 50으로 맞춰야 계산하나요?
그럴 필요는 없습니다. 불균형한 자료에도 계산합니다. 다만 클래스 비율이 달라지면 점수도 달라질 수 있으므로 실제 평가 목적과 자료 구성을 함께 남깁니다.
Q3. 음수면 프로그램 오류인가요?
반드시 오류는 아닙니다. 정답과 예측이 반대 방향으로 연결될 수 있습니다. 클래스 코드가 잘못 대응됐는지 먼저 점검하고 실제 오류 패턴을 확인합니다. 다중 분류의 완전한 오답이 항상 -1은 아닙니다.
Q4. MCC를 계산하면 분류 확률도 보정되나요?
아닙니다. 이미 정한 라벨을 평가할 뿐 모델의 확률이나 계수를 바꾸지 않습니다. 확률의 신뢰도는 별도의 캘리브레이션 평가로 확인합니다.
Q5. 여러 클래스에서는 매크로 MCC를 쓰나요?
여기서 설명한 함수는 전체 혼동 행렬을 이용한 다중 클래스 확장입니다. 클래스별 이진 MCC의 단순 평균을 반환하지 않으며 평균 방식을 선택하는 인자도 없습니다.
Q6. MCC가 F1이나 균형 정확도보다 항상 좋은가요?
아닙니다. 답하려는 평가 질문이 다릅니다. MCC와 함께 클래스별 오류 및 업무 비용을 확인하고 같은 자료에서 지표들이 서로 다른 모델을 선호하는 이유를 살핍니다.
출처
마무리
매튜스 상관계수는 정답과 예측 라벨의 관계를 상관으로 요약하는 분류 평가 지표입니다. 이진 분류의 네 결과를 반영하고 여러 클래스에도 확장하지만 정확도나 클래스별 재현율 평균으로 읽지는 않습니다.
감자나라ai님이 분류 결과를 비교한다면 정답·예측의 대응과 클래스별 건수부터 확인해 보세요. MCC와 원본 혼동 행렬을 함께 남기고 0점의 계산 조건, 임계값과 실제 오류 비용을 따로 살핍니다. 최종 판단은 같은 조건의 독립 평가와 중요한 오류가 줄었는지를 기준으로 합니다.
