EXAMPLE을 사용한 머신러닝의 혼동 행렬
⚡ 스마트 요약
혼동 행렬은 분류 모델의 성능을 측정하는 표로, 예측된 레이블과 알려진 실제 레이블을 비교하여 분류기가 어떤 클래스를 정확하게 분류하고 어떤 클래스를 잘못 분류했는지 정확하게 보여줍니다.
혼동 매트릭스란 무엇입니까?
A 혼란 매트릭스 이는 성과 측정 기법입니다. 기계 학습 혼동 행렬은 분류 모델이 실제 값이 이미 알려진 테스트 데이터 세트에 대해 어떤 성능을 보였는지 보여주는 표입니다. 혼동 행렬이라는 용어 자체는 간단하지만, 그 위에 덧붙여진 용어들이 다소 복잡할 수 있으므로 각 구성 요소를 아래에서 쉽게 설명합니다.
이 행렬은 모든 것에 적용됩니다. 지도 분류기 — 로지스틱 회귀, 의사결정 트리, 나이브 베이즈 모델 또는 심 신경 네트워크 — 왜냐하면 모델이 예측한 내용과 실제 결과, 이렇게 두 열의 레이블만 비교하기 때문입니다.
혼동 행렬의 네 가지 결과
혼동 행렬은 실제 클래스와 예측 클래스를 비교하여 분류기의 정확도를 시각화합니다. 이진 혼동 행렬은 정사각형으로 구성됩니다.

위 표는 모든 이진 혼동 행렬에 포함된 네 개의 사각형을 나타냅니다.
- TP: 참긍정(True Positive): 예측값이 실제 양성값으로 정확하게 예측되었습니다.
- FP: 거짓양성(False Positive): 예측값이 실제 양수로 잘못 예측됨, 즉 음수값이 양수로 예측됨
- FN: 거짓 음성: 양수 값이 음수로 예측됨
- TN: 참부정적 검사: 예측값이 실제 음수로 정확하게 예측되었습니다.
통계는 두 개의 오류 셀에 고유한 이름을 부여합니다. 오탐(false positive)은 다음과 같습니다. 유형 I 오류 — 해당 모델은 절대로 발생해서는 안 될 경보를 울렸습니다. 오탐(false negative)이란 유형 II 오류 — 모델은 경고음을 울려야 할 때 침묵을 지켰습니다. 두 가지 방법 중 어느 것이 문제 해결에 더 큰 비용을 발생시키는지 파악하면 나중에 어떤 지표를 조정할지 결정할 수 있습니다.
아래 공식과 같이 혼동 행렬을 이용하여 정확도 테스트를 계산할 수 있습니다.
혼동 행렬의 예
혼동 행렬은 재현율, 정밀도, 정확도 및 AUC-ROC 곡선을 측정할 수 있는 유용한 머신 러닝 방법입니다. 아래 축구 예시는 참양성, 참음성, 거짓양성, 거짓음성이라는 용어가 일상적인 언어에서 무엇을 의미하는지 보여줍니다.
참양성:
당신의 예측이 맞았고, 실제로 그렇게 됐어요. 예를 들어, 당신은 프랑스가 월드컵에서 우승할 거라고 예측했는데, 프랑스가 우승했죠.
참 부정:
당신은 부정적인 결과를 예측했고, 그것 또한 사실입니다. 당신은 잉글랜드가 이기지 못할 거라고 예측했고, 잉글랜드는 졌습니다.
거짓 긍정:
당신의 예측은 긍정적이고 거짓입니다.
당신은 잉글랜드가 이길 거라고 예측했지만, 잉글랜드는 졌습니다.
거짓음성:
당신의 예측은 부정적이었지만, 결과는 그 예측이 틀렸음을 보여줍니다.
프랑스가 이기지 못할 것이라고 예상했는데, 프랑스가 이겼습니다.
첫 번째 단어는 예측이 맞았는지 틀렸는지(참 또는 거짓)를 나타내고, 두 번째 단어는 모델이 무엇을 예측했는지(긍정 또는 부정)를 나타낸다는 점을 기억해야 합니다.
혼동 행렬을 계산하는 방법
다음은 혼동 행렬을 계산하는 단계별 과정입니다. 데이터 마이닝:
- 단계 1) 먼저, 테스트 데이터셋과 예상 결과값이 필요합니다.
- 단계 2) 테스트 데이터 세트의 모든 행을 예측합니다.
- 단계 3) 예상 결과와 예측치를 비교하고 개수를 세어보세요.
- 각 클래스의 올바른 예측의 총계입니다.
- 각 클래스의 잘못된 예측의 총계입니다.
그 후, 이러한 숫자는 아래에 주어진 방법에 따라 정리됩니다.
- 행렬의 각 행은 실제 수업에 해당합니다.
- 행렬의 각 열은 예측된 클래스와 연결됩니다.
- 올바른 분류와 잘못된 분류의 총 개수가 표에 입력됩니다.
- 각 클래스에 대한 정답 예측 개수의 합계는 해당 클래스의 실제 행과 예측 열이 만나는 대각선 칸에 입력됩니다.
- 클래스에 대한 잘못된 예측의 합계는 해당 클래스 값에 대한 실제 행과 모델이 대신 선택한 클래스의 예측 열에 기록됩니다.
행과 열의 역할은 규칙이라기보다는 관례이며, 일부 플로팅 도구는 레이아웃을 바꾸기도 하므로 행렬을 해석하기 전에 항상 축 레이블을 읽어야 합니다. 여기에서 사용된 방향(행에는 실제 데이터, 열에는 예측 데이터)은 scikit-learn에서 생성하는 방식입니다.
혼동 행렬을 사용하는 기타 중요한 용어
네 가지 요소가 모두 설정되면, 일련의 보조 용어들이 동일한 표의 서로 다른 부분을 설명합니다.
- 양성 예측값(PPV): 이는 정밀도와 매우 유사합니다. 두 용어의 중요한 차이점은 PPV가 유병률을 고려한다는 점입니다. 클래스가 완벽하게 균형을 이루는 상황에서는 양성 예측값은 정밀도와 같습니다.
- Null 오류율: 이 용어는 항상 다수 클래스를 예측했을 때 예측이 얼마나 자주 틀리는지를 나타냅니다. 이는 분류기의 성능을 비교하는 기준 지표로 사용할 수 있습니다.
- F 점수: F1 점수는 참 양성률(재현율)과 정밀도의 가중 평균 점수입니다.
- ROC 곡선: ROC 곡선은 다양한 임계값에서 참양성률과 거짓양성률을 나타냅니다. 또한 민감도(재현율)와 특이도(참음성률) 사이의 상충 관계를 보여줍니다.
- 정도: 정밀도 측정항목은 양성 클래스의 정확도를 보여줍니다. 이는 양성 클래스의 예측이 얼마나 정확할 가능성을 측정합니다.
분류기가 모든 양성 값을 완벽하게 분류할 때 최대 점수는 1입니다. 정밀도만으로는 음성 클래스를 고려하지 않기 때문에 그다지 유용하지 않습니다. 정밀도는 일반적으로 재현율과 함께 사용됩니다. 재현율은 민감도 또는 참양성률이라고도 하며, 아래와 같이 표기합니다.
- 감도 : 민감도는 양성 클래스를 정확하게 감지한 비율을 계산합니다. 이 지표는 모델이 양성 클래스를 얼마나 잘 인식하는지를 보여줍니다.
혼동 행렬 측정 기준 및 공식
위의 모든 지표는 동일한 네 가지 요소에 대한 산술적 계산이므로, 각 지표가 답하는 질문과 함께 나란히 살펴보면 이해하기 쉽습니다.
| 메트릭 | 공식 | 질문에 대한 답변 | 사용할 때 사용하세요 |
|---|---|---|---|
| 정확성 | (TP + TN) / (TP + TN + FP + FN) | 전체적으로 몇 개의 예측이 맞았나요? | 학급 간 균형이 대략적으로 맞춰져 있습니다. |
| 정밀성 | 티피 / (티피 + FP) | 모델이 긍정적이라고 판단할 때, 그 판단이 맞는 경우는 얼마나 될까요? | 오경보는 비용이 많이 든다. |
| 리콜(감도) | 티피 / (티피 + FN) | 모든 실질적인 긍정적인 요소 중에서, 얼마나 많은 것이 적발되었을까요? | 양성 반응을 놓치는 것은 큰 손실입니다. |
| 특성 | 티엔티엔/(티엔티엔+FP) | 실제 부정적인 사례 중 몇 건이 해소되었습니까? | 부정 클래스도 중요합니다. |
| F1 점수 | 2 × (정밀도 × 재현율) / (정밀도 + 재현율) | 이 둘 사이의 균형은 무엇일까요? | 두 가지 모두에 대해 하나의 번호가 필요합니다. |
스팸 필터가 100개의 이메일을 대상으로 테스트되어 TP = 45, FN = 5, FP = 10, TN = 40의 결과를 생성했다고 가정해 보겠습니다. 정확도는 (45 + 40) / 100 = 0.85입니다. 정밀도는 45 / (45 + 10) = 0.82, 재현율은 45 / (45 + 5) = 0.90, 특이도는 40 / (40 + 10) = 0.80입니다. F1 점수는 0.86입니다.
이러한 수치는 단일 정확도 수치만으로는 알 수 없는 이야기를 들려줍니다. 필터는 실제 스팸의 90%를 차단하지만, 스팸으로 분류된 이메일 5개 중 1개는 잘못 격리합니다. 이러한 오류가 용납될 수 있는지 여부는 각 오류의 비용에 달려 있으며, 바로 이러한 이유 때문에 정확도만 보고하는 대신 전체적인 결과를 보여주는 매트릭스를 제시하는 것입니다.
다중 클래스 분류를 위한 혼동 행렬
분류 문제는 드물게 두 개의 레이블로 끝나지 않으며, 행렬은 형태 변화 없이 크기가 커집니다. N개의 클래스가 있는 경우 표는 N×N 격자가 되는데, 대각선에는 모든 올바른 예측이 기록되고, 대각선이 아닌 각 셀에는 어떤 클래스가 다른 클래스로 잘못 분류되었는지 정확하게 기록됩니다.
이미지를 고양이, 개, 토끼로 분류하는 3개 클래스 모델은 3×3 격자를 생성합니다. 만약 "고양이" 행, "개" 열의 셀에 12라는 값이 있다면, 12개의 고양이 이미지가 개로 분류된 것입니다. 이처럼 상세한 정보 때문에 이 행렬이 점수보다 더 유용합니다. 모델이 구분하지 못한 특정 클래스 쌍을 명확히 나타내기 때문입니다.
정밀도, 재현율 및 F1 점수는 하나의 클래스가 양성이고 나머지는 모두 음성인 '하나 대 나머지' 관점을 사용하여 클래스별로 정의됩니다. 그런 다음 클래스별 수치는 다음 세 가지 방법 중 하나로 결합됩니다.
- 거시 평균: 각 클래스에 대해 독립적으로 지표를 계산한 다음 가중치가 없는 평균을 구합니다. 모든 클래스가 동일하게 계산되므로 드문 클래스가 묻히지 않습니다.
- 마이크로 평균: 모든 클래스의 TP, FP 및 FN 개수를 통합한 후 지표를 계산합니다. 클래스 크기가 클수록 지표가 크게 나타나며, 단일 레이블 문제의 경우 마이크로 정밀도, 마이크로 재현율 및 정확도가 동일합니다.
- 가중 평균: 각 클래스의 실제 인스턴스 수를 가중치로 사용하여 클래스별 점수를 평균화함으로써 클래스 불균형을 시각적으로 보여줍니다.
모든 클래스가 동등하게 중요할 때는 매크로 방식을 선택하고, 클래스 분포가 실제 트래픽을 반영할 때는 가중치 방식을 선택하세요.
혼동 행렬을 만드는 방법 Python
scikit-learn 라이브러리는 두 개의 레이블 배열로부터 전체 테이블을 생성하므로 수동으로 개수를 셀 필요가 없습니다. 아래 예시는 10개의 실제 레이블과 10개의 예측값을 비교합니다.
from sklearn.metrics import confusion_matrix y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0] y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 0] cm = confusion_matrix(y_true, y_pred) print(cm)
이 함수 호출은 2×2 크기의 NumPy 배열을 반환하며, 0번째 행은 실제 음성 클래스이고 1번째 행은 실제 양성 클래스입니다.
[[4 1] [1 4]]
scikit-learn의 규칙에 따라 배열을 읽으면 TN = 4(왼쪽 위), FP = 1(오른쪽 위), FN = 1(왼쪽 아래), TP = 4(오른쪽 아래)가 됩니다. 이 네 값을 한 줄로 풀어서 맵을 생성하면 됩니다.ping 명백한:
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
위에서 설명한 매크로 평균 및 가중 평균을 포함하여 모든 클래스의 정밀도, 재현율 및 F1 점수를 한 번에 얻으려면 다음을 호출하십시오. classification_report() 각 지표를 수동으로 계산하는 대신:
from sklearn.metrics import classification_report print(classification_report(y_true, y_pred))
그래프로 나타낸 버전을 보려면, ConfusionMatrixDisplay.from_predictions(y_true, y_pred) 동일한 표를 레이블이 지정된 히트맵으로 렌더링합니다. 전체 인자 목록은 다음과 같습니다. labels normalize 옵션은 문서에 설명되어 있습니다. scikit-learn confusion_matrix 참조동일한 평가 단계는 로 구축된 모델에도 적용됩니다. TensorFlow왜냐하면 해당 지표는 예측된 레이블에만 의존하기 때문입니다.
왜 혼동 행렬이 필요한가요?
혼동 행렬을 사용하는 장점과 이점은 다음과 같습니다.
- 이는 분류 모델이 예측을 할 때 어떻게 혼란스러워지는지를 보여줍니다.
- 혼동 행렬은 분류기가 저지르는 오류뿐만 아니라 오류의 유형에 대한 통찰력도 제공합니다.
- 이러한 분석은 분류 정확도만을 사용하는 한계를 극복하는 데 도움이 됩니다.
- 혼동 행렬의 모든 열은 해당 예측 클래스의 인스턴스를 나타냅니다.
- 혼동 행렬의 각 행은 실제 클래스의 인스턴스를 나타냅니다.
- 이는 모델 평가를 진단으로 전환하여 더 많은 데이터나 더 나은 특징이 필요한 특정 클래스 쌍을 지적합니다.
그러한 진단적 가치 때문에 혼동 행렬은 모든 평가 단계의 중심에 자리 잡게 됩니다. 데이터 과학 워크플로와 분류기가 실제 운영 환경에 배포되기 전에 일반적으로 가장 먼저 검토되는 테이블인 이유에 대해 설명합니다.


