혼동 행렬 지표
1. 개요
1. 개요
혼동 행렬 지표는 이진 분류 모델의 성능을 평가하기 위한 핵심 도구인 혼동 행렬에서 파생된 다양한 정량적 척도이다. 이 지표들은 모델이 예측한 결과와 실제 값을 네 가지 경우의 수(참양성, 거짓양성, 거짓음성, 참음성)로 분류한 표를 기반으로 계산된다.
주요 목적은 단순한 정확도 이상으로 모델의 성능을 다각도로 분석하는 것이다. 특히 클래스 불균형이 심한 데이터셋에서는 정확도가 오해의 소지가 있을 수 있어, 정밀도, 재현율, F1 점수 등의 지표가 더 유용한 통찰을 제공한다. 또한 ROC 곡선과 AUC-ROC 같은 시각적이고 통합된 지표는 다양한 임계값 설정에 따른 모델 성능 변화를 종합적으로 비교하는 데 활용된다.
이 지표들은 머신러닝 모델 개발 과정에서 모델 선택, 하이퍼파라미터 튜닝, 최종 성능 보고에 필수적이다. 문제의 도메인에 따라 적합한 지표를 선택하는 것이 중요하며, 예를 들어 의료 진단에서는 재현율이, 스팸 메일 필터링에서는 정밀도가 더 강조될 수 있다.
2. 혼동 행렬의 기본 구조
2. 혼동 행렬의 기본 구조
혼동 행렬은 이진 분류 모델의 성능을 평가하기 위한 기본 도구이다. 이는 모델의 예측 결과와 실제 값을 네 가지 가능한 경우의 수로 교차 분류하여 표 형태로 나타낸다. 이 표는 모델이 얼마나 잘 분류했는지, 그리고 어떤 유형의 오류를 발생시키는지를 한눈에 파악할 수 있게 해준다.
혼동 행렬의 구성 요소는 다음과 같은 네 가지 범주로 정의된다.
* 참양성(TP): 실제 값이 양성(Positive)이고, 모델도 양성으로 올바르게 예측한 경우의 수이다.
* 거짓양성(FP): 실제 값은 음성(Negative)이지만, 모델이 양성으로 잘못 예측한 경우의 수이다. 이는 1종 오류 또는 False Alarm으로도 불린다.
* 거짓음성(FN): 실제 값이 양성이지만, 모델이 음성으로 잘못 예측한 경우의 수이다. 이는 2종 오류 또는 Miss로도 불린다.
* 참음성(TN): 실제 값이 음성이고, 모델도 음성으로 올바르게 예측한 경우의 수이다.
이진 분류에서 혼동 행렬은 일반적으로 2x2 표로 표현된다. 행은 실제 클래스를, 열은 모델이 예측한 클래스를 나타낸다. 가장 일반적인 레이아웃은 다음과 같다.
실제 \ 예측 | 양성 예측 | 음성 예측 |
|---|---|---|
실제 양성 | TP | FN |
실제 음성 | FP | TN |
이 표에서 대각선(TP, TN)은 모델이 정확히 분류한 경우를 나타내며, 비대각선(FP, FN)은 오분류된 경우를 나타낸다. 모든 기본 성능 지표(정확도, 정밀도, 재현율, 특이도 등)는 이 네 가지 기본 숫자(TP, FP, FN, TN)를 조합하여 계산된다.
2.1. 참양성(TP), 거짓양성(FP), 거짓음성(FN), 참음성(TN)
2.1. 참양성(TP), 거짓양성(FP), 거짓음성(FN), 참음성(TN)
혼동 행렬의 기본 구조는 이진 분류 문제의 예측 결과를 네 가지 범주로 나누어 표현하는 것이다. 이 네 가지 범주는 예측값과 실제값의 조합에 따라 정의되며, 모든 평가 지표 계산의 기초가 된다.
첫 번째 범주는 참양성(True Positive, TP)이다. 이는 실제로 양성인 샘플을 모델이 올바르게 양성으로 예측한 경우를 가리킨다. 예를 들어, 질병이 있는 환자를 검사에서 '질병 있음'으로 판정하면 참양성에 해당한다. 두 번째 범주는 거짓양성(False Positive, FP) 또는 1종 오류(Type I Error)이다. 이는 실제로는 음성인 샘플을 모델이 잘못하여 양성으로 예측한 경우이다. 건강한 사람을 질병이 있다고 오진하는 것이 대표적인 예시이다.
세 번째 범주는 거짓음성(False Negative, FN) 또는 2종 오류(Type II Error)이다. 이는 실제로는 양성인 샘플을 모델이 잘못하여 음성으로 예측한 경우를 의미한다. 질병이 있는 환자를 검사에서 '정상'으로 판정해버리는 위험한 오류에 해당한다. 네 번째 범주는 참음성(True Negative, TN)이다. 이는 실제로 음성인 샘플을 모델이 올바르게 음성으로 예측한 경우이다. 건강한 사람을 정상으로 판정하는 것이 여기에 속한다.
이 네 가지 요소는 보통 2x2 표 형태의 혼동 행렬로 정리된다. 이 표는 예측 결과를 한눈에 요약하고, 이후 정확도, 정밀도, 재현율 같은 다양한 성능 지표를 계산하는 데 직접적으로 사용된다.
실제 양성 (P) | 실제 음성 (N) | |
|---|---|---|
예측 양성 | 참양성 (TP) | 거짓양성 (FP) |
예측 음성 | 거짓음성 (FN) | 참음성 (TN) |
2.2. 이진 분류에서의 표현 방식
2.2. 이진 분류에서의 표현 방식
이진 분류에서 혼동 행렬은 일반적으로 2x2 행렬 형태로 표현됩니다. 이 행렬은 모델의 예측 결과(양성 또는 음성)와 실제 값(참 또는 거짓)을 네 가지 조합으로 분류하여 정리합니다. 각 셀은 참양성(TP), 거짓양성(FP), 거짓음성(FN), 참음성(TN)의 빈도수를 나타냅니다.
행렬의 행은 실제 클래스를, 열은 예측된 클래스를 나타내는 것이 일반적인 관례입니다. 표로 표현하면 다음과 같습니다.
실제 \ 예측 | 양성 예측 | 음성 예측 |
|---|---|---|
실제 양성 | TP | FN |
실제 음성 | FP | TN |
이 구조를 통해 모델이 양성 클래스와 음성 클래스를 각각 얼마나 잘 식별하고 오판하는지 한눈에 파악할 수 있습니다. 대각선(TP, TN)은 올바르게 분류된 경우를, 비대각선(FP, FN)은 오분류된 경우를 보여줍니다.
이 표현 방식은 정확도, 정밀도, 재현율, 특이도 등 모든 기본 성능 지표를 계산하는 기초가 됩니다. 예를 들어, 정확도는 (TP+TN) / (TP+FP+FN+TN) 공식으로 직접 도출할 수 있습니다. 따라서 혼동 행렬은 단순한 결과 요약을 넘어, 모델의 강점과 약점을 체계적으로 진단할 수 있는 핵심 도구 역할을 합니다.
3. 기본 성능 지표
3. 기본 성능 지표
정확도(Accuracy)는 전체 예측 중 올바르게 예측한 비율을 나타내는 가장 직관적인 지표이다. 이는 참양성(TP)과 참음성(TN)의 합을 전체 관측치 수로 나누어 계산한다. 그러나 데이터의 클래스 분포가 불균형할 경우, 즉 한 클래스의 샘플 수가 압도적으로 많을 때는 높은 정확도 수치가 모델의 실제 성능을 왜곡할 수 있다. 예를 들어, 95%가 음성인 데이터에서 모든 샘플을 음성으로 예측하는 모델은 정확도가 95%이지만, 양성을 전혀 찾아내지 못하는 문제가 있다.
정밀도(Precision)는 모델이 양성이라고 예측한 결과 중 실제로 양성인 비율을 측정한다. 이는 참양성(TP)을 참양성(TP)과 거짓양성(FP)의 합으로 나누어 구한다. 정밀도는 거짓경보(FP)를 최소화하는 것이 중요한 상황, 예를 들어 스팸 메일 분류에서 정상 메일을 스팸으로 잘못 분류하는 것을 줄일 때 핵심 지표가 된다.
재현율(Recall, 민감도)은 실제 양성인 샘플 중에서 모델이 올바르게 양성으로 찾아낸 비율을 의미한다. 이는 참양성(TP)을 참양성(TP)과 거짓음성(FN)의 합으로 나누어 계산한다. 재현율은 놓치는 것을 최소화하는 것이 중요한 상황, 예를 들어 질병 진단에서 실제 환자를 병에 걸리지 않았다고 잘못 판단하는 위험(FN)을 줄일 때 중점적으로 고려된다.
특이도(Specificity)는 실제 음성인 샘플 중에서 모델이 올바르게 음성으로 예측한 비율이다. 이는 참음성(TN)을 참음성(TN)과 거짓양성(FP)의 합으로 나누어 구한다. 특이도는 재현율과 대조적인 지표로, 음성 샘플을 정확하게 식별하는 모델의 능력을 평가한다. 이 네 가지 기본 지표는 서로 트레이드오프 관계에 있으며, 문제의 맥락에 따라 적절히 선택하거나 조합하여 사용해야 한다.
3.1. 정확도(Accuracy)
3.1. 정확도(Accuracy)
정확도는 전체 예측 중 올바르게 예측한 비율을 나타내는 지표이다. 이는 혼동 행렬의 네 가지 기본 요소인 참양성(TP), 참음성(TN), 거짓양성(FP), 거짓음성(FN)을 모두 사용하여 계산된다. 공식은 다음과 같다.
정확도 = (TP + TN) / (TP + TN + FP + FN)
이 값은 0과 1 사이의 값을 가지며, 1에 가까울수록 모델의 전체적인 예측 성능이 높음을 의미한다. 직관적이고 계산이 간단하여 가장 널리 사용되는 평가 지표 중 하나이다.
그러나 정확도는 클래스 불균형이 심한 데이터셋에서는 오해의 소지가 있는 지표가 될 수 있다. 예를 들어, 95%가 음성 샘플인 데이터에서 모든 샘플을 음성으로 예측하는 모델은 정확도가 95%로 매우 높게 나오지만, 실제로 관심 있는 양성 클래스를 전혀 찾아내지 못하는 무용지물 모델이다. 따라서 데이터 분포가 균형 잡혀 있을 때, 또는 모든 종류의 오류(FP와 FN)가 비슷한 비용을 가질 때 유용한 지표이다.
3.2. 정밀도(Precision)
3.2. 정밀도(Precision)
정밀도는 이진 분류 모델이 '양성'으로 예측한 샘플들 중에서 실제로 양성인 샘플의 비율을 의미한다. 이는 모델의 예측이 얼마나 정확한지를, 특히 양성 예측에 초점을 맞춰 평가한다. 높은 정밀도는 모델이 양성으로 예측한 대부분이 실제 양성임을 나타내며, 이는 거짓양성(False Positive)을 최소화하는 능력과 직결된다.
정밀도는 공식적으로 참양성(True Positive)을 참양성과 거짓양성(False Positive)의 합으로 나눈 값으로 계산된다. 수식은 다음과 같다.
Precision = TP / (TP + FP)
정밀도가 중요한 지표인 전형적인 상황은 거짓양성의 비용이 매우 높은 경우이다. 예를 들어, 스팸 메일 필터링에서 정상 메일을 스팸으로 잘못 분류하면 중요한 메일을 놓칠 수 있다. 또는 질병 진단 검사에서 건강한 사람을 환자로 오진하는 경우 불필요한 추가 검사와 심리적 부담을 초래한다. 이러한 도메인에서는 높은 정밀도를 확보하는 것이 모델 평가의 핵심 목표 중 하나가 된다.
그러나 정밀도만을 단독으로 사용하는 것은 주의를 요한다. 높은 정밀도는 모델이 매우 보수적으로 양성을 예측하여 거짓양성을 거의 만들지 않음을 의미할 수 있지만, 동시에 많은 실제 양성 샘플을 놓치는(즉, 높은 거짓음성을 발생시키는) 결과를 초래할 수 있다. 따라서 정밀도는 일반적으로 재현율 또는 F1 점수와 같은 다른 지표와 함께 종합적으로 해석되어야 모델의 성능을 균형 있게 이해할 수 있다.
3.3. 재현율(Recall, 민감도)
3.3. 재현율(Recall, 민감도)
재현율은 이진 분류 모델의 성능을 평가하는 핵심 지표 중 하나로, 실제 양성인 샘플 중에서 모델이 올바르게 양성으로 예측한 비율을 나타낸다. 민감도라고도 불리며, 모델이 긍정적인 사례를 얼마나 잘 찾아내는지에 대한 능력을 측정한다. 수학적으로는 참양성(TP)의 수를 참양성과 거짓음성(FN)의 수의 합으로 나눈 값으로 정의된다[1]. 이는 모델이 놓치지 않고 포착해야 하는 중요한 사건(예: 질병 진단에서의 실제 환자, 스팸 메일 탐지에서의 실제 스팸)을 평가할 때 특히 중요하게 여겨진다.
재현율은 정밀도와 대비되는 개념으로, 정밀도가 '모델이 양성이라고 예측한 것 중에 실제로 양성인 비율'을 강조한다면, 재현율은 '실제 양성인 것 중에 모델이 양성이라고 찾아낸 비율'을 강조한다. 따라서 재현율이 높다는 것은 거짓음성을 최소화했다는 것을 의미하며, 실제 양성 샘플을 놓치는 경우가 적다는 장점이 있다. 반면, 재현율만을 극대화하려고 하면 모델이 지나치게 보수적으로 판단하여 거짓양성이 늘어나고 정밀도가 떨어질 수 있다는 트레이드오프 관계가 존재한다.
이 지표는 특히 클래스 불균형이 심한 데이터셋에서 소수 클래스(양성 클래스)의 성능을 평가하거나, 거짓음성의 비용이 매우 큰 도메인에서 핵심 지표로 활용된다. 대표적인 적용 분야는 다음과 같다.
적용 분야 | 재현율이 중요한 이유 |
|---|---|
의료 진단 (질병 탐지) | 실제 환자를 건강하다고 잘못 판단(거짓음성)하면 치료 기회를 놓칠 수 있어 치명적이다. |
공정 라인에서 불량품을 정상품으로 잘못 통과시키면 품질 문제와 리콜 비용이 발생한다. | |
실제 사기 거래를 정상 거래로 판단하면 금전적 손실이 직접적으로 발생한다. |
따라서 재현율은 모델의 검출 능력을 평가하는 데 필수적인 지표이며, 종종 정밀도와 함께 F1 점수라는 하나의 조화 평균 지표로 통합되어 모델의 전반적인 성능을 종합적으로 판단하는 데 사용된다.
3.4. 특이도(Specificity)
3.4. 특이도(Specificity)
특이도(Specificity)는 이진 분류 모델이 실제 음성 클래스인 샘플들을 얼마나 정확하게 음성으로 예측하는지 측정하는 지표이다. 민감도(재현율)가 양성 클래스에 대한 식별 능력을 평가한다면, 특이도는 음성 클래스에 대한 식별 능력을 평가한다. 이는 거짓 양성 오류를 피하는 모델의 능력을 반영한다.
특이도는 참 음성의 수를 전체 실제 음성 샘플의 수로 나누어 계산한다. 수식으로는 특이도 = TN / (TN + FP)로 표현된다. 여기서 TN은 참 음성, FP는 거짓 양성을 의미한다. 특이도 값의 범위는 0부터 1 사이이며, 1에 가까울수록 모델이 음성 샘플을 거의 오류 없이 정확히 찾아낸다는 것을 의미한다.
특이도가 특히 중요한 도메인은 거짓 양성의 비용이 매우 높은 경우이다. 예를 들어, 건강한 사람을 질병이 있다고 잘못 진단(FP)하는 것은 불필요한 추가 검사와 심리적 불안을 초래할 수 있다. 따라서 질병 진단 스크리닝 테스트에서는 높은 특이도를 확보하는 것이 주요 목표 중 하나가 된다. 특이도와 민감도는 일반적으로 트레이드오프 관계에 있어, 하나를 높이면 다른 하나가 낮아지는 경향을 보인다.
지표 | 설명 | 계산식 |
|---|---|---|
특이도 | 실제 음성을 정확히 음성으로 예측하는 비율 | TN / (TN + FP) |
민감도(재현율) | 실제 양성을 정확히 양성으로 예측하는 비율 | TP / (TP + FN) |
이러한 특성 때문에 모델 평가 시 정확도만 보는 것은 위험할 수 있으며, 특히 클래스 불균형 데이터에서는 특이도와 민감도, 정밀도 등을 함께 종합적으로 검토해야 한다.
4. 통합 및 조화 지표
4. 통합 및 조화 지표
정밀도와 재현율은 서로 트레이드오프 관계에 있으며, 하나의 지표만으로 모델의 성능을 평가하기 어려운 경우가 많다. 이를 통합하여 단일 점수로 나타내는 대표적인 지표가 F1 점수이다. F1 점수는 정밀도와 재현율의 조화 평균으로 계산되며, 두 지표 모두에 균형 있게 가중치를 부여한다. 특히 한 클래스의 샘플 수가 적은 불균형 데이터셋에서 유용하게 사용된다.
F1 점수의 계산 공식은 다음과 같다.
F1 = 2 * (정밀도 * 재현율) / (정밀도 + 재현율)
정밀도와 재현율이 모두 높을수록 F1 점수는 높아지며, 한쪽이 매우 낮으면 점수에 큰 영향을 미친다. F1 점수의 변형으로 특정 지표에 더 비중을 두는 Fβ 점수도 존재한다.
단일 임계값에서의 정밀도와 재현율을 요약하는 F1 점수와 달리, 정밀도-재현율 곡선은 분류 모델의 임계값을 변화시키며 정밀도와 재현율의 관계를 시각적으로 보여준다. PR 곡선 아래의 면적을 의미하는 AUC-PR은 모델의 전반적인 성능을 하나의 숫자로 요약한다. AUC-PR 값이 1에 가까울수록 이상적인 모델이며, 특히 음성 클래스에 비해 양성 클래스가 매우 적은 경우 ROC 곡선보다 더 민감한 성능 지표로 간주된다.
4.1. F1 점수(F1-Score)
4.1. F1 점수(F1-Score)
F1 점수는 정밀도와 재현율의 조화 평균으로 계산되는 통합 성능 지표이다. 이는 특히 클래스 불균형이 심한 데이터셋에서 단일 지표로 모델의 성능을 평가할 때 유용하게 사용된다. 정밀도와 재현율은 일반적으로 트레이드오프 관계에 있기 때문에, 하나의 수치로 두 측면을 균형 있게 반영하는 지표가 필요하다.
F1 점수의 공식은 다음과 같다.
F1 = 2 * (정밀도 * 재현율) / (정밀도 + 재현율)
이는 정밀도와 재현율의 산술 평균이 아닌 조화 평균을 사용함을 의미한다. 조화 평균은 두 값 중 작은 값에 더 큰 민감도를 보이기 때문에, 정밀도와 재현율이 모두 높을 때만 높은 점수를 부여한다. 따라서 한쪽 지표가 극단적으로 낮은 경우 F1 점수는 이를 강하게 반영하여 낮아진다.
지표 | 공식 | 특징 |
|---|---|---|
정밀도 | TP / (TP + FP) | 양성으로 예측한 것 중 실제 양성의 비율 |
재현율 | TP / (TP + FN) | 실제 양성 중 올바르게 예측한 비율 |
F1 점수 | 2 * (정밀도 * 재현율) / (정밀도 + 재현율) | 정밀도와 재현율의 조화 평균 |
F1 점수의 변형으로, 정밀도와 재현율에 서로 다른 가중치를 부여한 Fβ 점수도 존재한다. Fβ 점수는 β 매개변수를 사용하여 재현율에 β배만큼 더 중요도를 부여한다. β=1일 때는 일반적인 F1 점수가 되며, β>1이면 재현율을, β<1이면 정밀도를 더 강조한다. 이는 스팸 메일 탐지(정밀도 강조)나 질병 진단(재현율 강조)과 같이 문제의 도메인에 따라 상대적 중요도가 다른 상황에 적용된다.
4.2. 정밀도-재현율 곡선(PR Curve)과 AUC-PR
4.2. 정밀도-재현율 곡선(PR Curve)과 AUC-PR
정밀도와 재현율은 서로 트레이드오프 관계에 있는 지표이다. 임계값을 높이면 정밀도는 일반적으로 상승하지만 재현율은 하락하며, 반대로 임계값을 낮추면 재현율은 상승하지만 정밀도는 하락하는 경향을 보인다. 정밀도-재현율 곡선(PR Curve)은 이러한 관계를 시각적으로 보여주기 위해, 가능한 모든 임계값에 대해 계산된 정밀도와 재현율의 쌍을 좌표평면에 그린 곡선이다. X축은 재현율, Y축은 정밀도로 설정된다.
PR 곡선 아래 면적을 AUC-PR(Area Under the Precision-Recall Curve)이라고 한다. AUC-PR 값은 0과 1 사이를 가지며, 값이 1에 가까울수록 모델의 성능이 우수함을 의미한다. 특히 양성 클래스와 음성 클래스의 샘플 수가 심하게 불균형한 데이터셋에서 모델 성능을 평가할 때 ROC 곡선과 AUC-ROC보다 더 유용한 지표로 간주된다. 이는 정밀도와 재현율이 음성 클래스의 수(참음성)에 영향을 받지 않기 때문이다.
특성 | 설명 |
|---|---|
곡선 형태 | 우상향하는 것이 일반적이지만, 정밀도와 재현율의 변화에 따라 요동칠 수 있다. |
기준선 | 무작위 분류기의 성능은 데이터셋 내 양성 클래스의 비율(Prevalence)에 해당하는 수평선으로 나타난다. |
성능 해석 | 곡선이 오른쪽 상단 모서리(1, 1)에 가까울수록, 즉 AUC-PR 값이 클수록 성능이 좋다. |
PR 곡선을 분석할 때는 곡선의 전체적인 형태와 AUC-PR 값뿐만 아니라, 특정 재현율 수준에서의 정밀도나 특정 비즈니스 요구사항을 만족하는 지점(임계값)을 찾는 것도 중요하다. 예를 들어, 스팸 메일 탐지에서는 높은 정밀도가, 질병 진단에서는 높은 재현율이 더 중요할 수 있다.
5. 임계값 의존성 및 시각화
5. 임계값 의존성 및 시각화
혼동 행렬에서 파생된 대부분의 기본 지표는 이진 분류 모델이 양성 클래스와 음성 클래스를 구분하는 데 사용하는 결정 임계값에 크게 의존합니다. 예를 들어, 정밀도와 재현율은 임계값을 낮추면 일반적으로 재현율이 증가하고 정밀도가 감소하는 트레이드오프 관계를 보입니다. 이 임계값 의존성을 분석하고 최적의 임계값을 선택하기 위해 ROC 곡선과 AUC-ROC가 널리 사용됩니다.
ROC 곡선은 X축에 거짓양성비율(1 - 특이도)을, Y축에 진양성비율(재현율)을 놓고, 임계값을 1부터 0까지 변화시키며 그린 곡선입니다. 완벽한 분류기는 그래프의 좌상단(0,1) 점에 가까운 곡선을 그리며, 무작위 분류기는 대각선(y=x)에 가까운 형태를 보입니다. ROC 곡선 아래의 면적을 AUC-ROC라고 하며, 이 값은 0과 1 사이를 가지며 모델의 전반적인 분류 능력을 요약하여 나타냅니다. AUC-ROC가 1에 가까울수록, 0.5에 가까울수록 모델의 예측 능력이 낮음을 의미합니다.
임계값 변화에 따른 영향 | 재현율(TPR) | 거짓양성비율(FPR) |
|---|---|---|
임계값 낮춤 (양성 판정을 더 많이 함) | 증가 | 증가 |
임계값 높임 (양성 판정을 더 엄격하게 함) | 감소 | 감소 |
임계값 선택은 단순히 AUC-ROC 값을 최대화하는 것이 아니라, 실제 문제의 비즈니스 요구사항에 따라 결정됩니다. 예를 들어, 스팸 메일 필터링에서는 정상 메일을 스팸으로 잘못 분류하는 것(거짓양성)을 최소화하기 위해 임계값을 높여 정밀도를 우선시할 수 있습니다. 반면, 질병 진단 모델에서는 환자를 놓치는 것(거짓음성)을 줄이기 위해 임계값을 낮춰 재현율을 높이는 전략을 택할 수 있습니다. 따라서 ROC 곡선을 시각화하고 다양한 임계값에서의 성능 지표를 비교하는 것은 모델을 실제 환경에 배포하기 전에 필수적인 단계입니다.
5.1. ROC 곡선(Receiver Operating Characteristic Curve)
5.1. ROC 곡선(Receiver Operating Characteristic Curve)
ROC 곡선은 이진 분류 모델의 성능을 평가하는 데 널리 사용되는 그래픽 도구이다. 이 곡선은 분류 임계값을 0부터 1까지 변화시키면서, 그에 따른 참양성율(TPR, 또는 재현율)과 거짓양성율(FPR)의 관계를 2차원 평면에 나타낸다. ROC 곡선의 X축은 거짓양성율(FPR), Y축은 참양성율(TPR)로 구성된다.
ROC 곡선의 형태는 모델의 성능을 직관적으로 보여준다. 완벽한 분류기(에러율이 0인 모델)의 ROC 곡선은 좌상단 꼭짓점(0, 1)을 지나는 형태를 가진다. 반면, 무작위 추측에 해당하는 분류기의 ROC 곡선은 Y=X 형태의 대각선(기준선)을 따라 그려진다. 일반적으로 유용한 모델의 ROC 곡선은 이 기준선보다 왼쪽 상단에 위치하며, 곡선이 좌상단으로 볼록하게 튀어나올수록 모델의 분별력이 우수함을 의미한다.
곡선 형태 | 모델 성능 의미 |
|---|---|
좌상단 꼭짓점(0,1) 통과 | 완벽한 분류기 (이상적) |
기준선(Y=X) 위쪽, 볼록한 형태 | 유용한 분류기 |
기준선(Y=X)과 일치 | 무작위 추측 수준의 분류기 |
기준선(Y=X) 아래쪽 | 무작위 추측보다 나쁜 분류기 |
ROC 곡선의 주요 장점은 분류 임계값에 독립적으로 모델의 예측 능력을 평가할 수 있다는 점이다. 또한, 클래스 불균형이 심한 데이터셋에서도 정확도보다 더 안정적인 평가를 제공하는 경우가 많다. 그러나 ROC 곡선은 거짓양성율과 참양성율을 모두 고려하므로, 거짓양성에 대한 비용이 매우 높은 경우(예: 스팸 메일 분류에서 중요한 메일을 스팸으로 잘못 분류하는 경우)에는 정밀도-재현율 곡선(PR 곡선)이 더 적합한 평가 도구가 될 수 있다.
5.2. AUC-ROC (Area Under the ROC Curve)
5.2. AUC-ROC (Area Under the ROC Curve)
AUC-ROC는 ROC 곡선 아래의 면적을 의미하며, 0.0에서 1.0 사이의 값을 가집니다. 이 값은 분류 모델의 성능을 하나의 숫자로 요약하여 표현하는 데 사용됩니다. AUC-ROC 값이 1.0에 가까울수록 모델의 분류 성능이 우수함을 나타내며, 0.5는 무작위 추측과 동등한 성능을 의미합니다. 0.5 미만의 값은 오히려 반대 예측을 하는 것이 더 나을 수 있음을 시사합니다[2].
AUC-ROC는 임계값에 독립적인 지표라는 점이 주요 장점입니다. 정밀도나 재현율과 같은 지표는 특정 임계값 선택에 크게 의존하지만, AUC-ROC는 모든 가능한 임계값에 걸쳐 모델의 성능을 종합적으로 평가합니다. 이는 모델이 양성 클래스와 음성 클래스를 얼마나 잘 구분하는지에 대한 전반적인 측정치를 제공합니다. 높은 AUC-ROC는 모델이 다양한 임계값 설정에서도 일관되게 좋은 성능을 낼 가능성이 높음을 의미합니다.
AUC-ROC 값 범위 | 모델 성능 해석 |
|---|---|
0.9 ~ 1.0 | 매우 우수한 분류 성능 |
0.8 ~ 0.9 | 좋은 성능 |
0.7 ~ 0.8 | 괜찮은 성능 |
0.6 ~ 0.7 | 보통 성능 |
0.5 ~ 0.6 | 낮은 성능 |
0.5 | 무작위 추측 수준 |
그러나 AUC-ROC는 클래스 간 균형이 잡힌 데이터셋에서 모델의 전반적인 순위 구분 능력을 평가하는 데 유용하지만, 클래스 불균형이 심한 데이터셋에서는 해석에 주의가 필요합니다. 소수 클래스에 대한 예측 성능이 매우 나쁘더라도 다수 클래스를 잘 맞추면 높은 AUC-ROC 값을 얻을 수 있기 때문입니다. 따라서 이러한 경우에는 정밀도-재현율 곡선과 AUC-PR 값을 함께 확인하는 것이 권장됩니다.
5.3. 임계값 선택의 중요성
5.3. 임계값 선택의 중요성
임계값은 이진 분류 모델이 확률 출력값을 기반으로 최종적으로 '양성' 또는 '음성' 클래스로 판단하는 기준점이다. 모델은 일반적으로 0과 1 사이의 확률 값을 출력하며, 이 값이 임계값보다 크거나 같으면 양성, 작으면 음성으로 분류한다. 따라서 임계값의 설정은 혼동 행렬의 네 가지 요소(참양성, 거짓양성, 참음성, 거짓음성)의 비율을 직접적으로 결정하며, 결과적으로 정밀도, 재현율, F1 점수 등 모든 성능 지표에 중대한 영향을 미친다.
임계값을 높이면(예: 0.9) 모델은 매우 확신하는 경우에만 양성으로 판단하므로, 거짓양성은 줄어들어 정밀도가 향상될 수 있다. 반면, 확신도가 조금 낮은 실제 양성 샘플들은 음성으로 잘못 분류되어 거짓음성이 증가하고 재현율은 하락한다. 반대로 임계값을 낮추면(예: 0.1) 모델은 더 많은 샘플을 양성으로 분류하게 되어 재현율은 높아지지만, 동시에 거짓양성도 늘어나 정밀도가 떨어질 수 있다. 이처럼 정밀도와 재현율은 일반적으로 트레이드오프 관계에 있다.
임계값 변화 | 주요 영향 | 일반적인 지표 변화 |
|---|---|---|
임계값 상승 | 양성 판단이 보수적으로 변함 | 정밀도 ↑, 재현율 ↓ |
임계값 하락 | 양성 판단이 관대하게 변함 | 재현율 ↑, 정밀도 ↓ |
따라서 단일 고정 임계값(보통 0.5)에서 계산된 성능 지표만으로 모델을 평가하는 것은 한계가 있다. 최적의 임계값은 해결하려는 문제의 비즈니스 목표와 비용에 따라 달라진다. 예를 들어, 스팸 메일 탐지에서는 정상 메일을 스팸으로 잘못 걸러내는(거짓양성) 비용이 크므로 정밀도를 높이기 위해 임계값을 높게 설정할 수 있다. 반면, 질병 진단 검사에서는 환자를 놓치는(거짓음성) 위험을 최소화하는 것이 중요하므로 재현율을 높이기 위해 임계값을 상대적으로 낮게 설정할 수 있다. ROC 곡선이나 정밀도-재현율 곡선을 분석하고, 필요에 따라 검증 세트에서 F1 점수 또는 특정 비용 함수를 최적화하는 지점을 찾아 임계값을 조정하는 것이 일반적인 실무 방법이다.
6. 다중 클래스 분류에서의 확장
6. 다중 클래스 분류에서의 확장
다중 클래스 분류에서는 이진 분류에서 사용되는 혼동 행렬과 성능 지표를 직접 적용하기 어렵다. 따라서 각 클래스를 양성으로, 나머지 클래스를 음성으로 간주하는 '일대다' 방식을 반복 적용하거나, 여러 클래스에 대한 결과를 종합하는 평균화 기법을 사용한다.
주요 평균화 방법으로는 마크로 평균, 마이크로 평균, 가중 평균이 있다. 마크로 평균은 각 클래스별로 계산된 지표(예: 정밀도, 재현율)의 산술 평균을 구한다. 이 방법은 모든 클래스를 동등하게 취급하므로, 소수 클래스의 성능도 전체 평균에 동일한 비중으로 반영된다. 반면, 마이크로 평균은 모든 클래스의 참양성, 거짓양성, 거짓음성을 전역적으로 합산한 후, 하나의 지표를 계산한다. 이는 각 샘플에 동등한 가중치를 부여하는 효과가 있으며, 클래스별 샘플 수의 불균형이 있을 때 전체적인 분류 정확도에 더 민감하게 반응한다. 가중 평균은 각 클래스의 지표를 해당 클래스의 지지도(샘플 수)에 비례하여 가중치를 부여해 평균을 낸다.
다중 클래스 혼동 행렬은 K x K 크기의 행렬로 표현되며, 여기서 K는 클래스의 수이다. 행은 실제 클래스를, 열은 예측된 클래스를 나타낸다. 주대각선 요소는 각 클래스가 올바르게 분류된 샘플 수를 의미한다. 이 행렬을 분석하면 특정 클래스 쌍 간의 혼동 패턴(예: 클래스 A를 클래스 B로 자주 잘못 예측하는지)을 시각적으로 파악할 수 있다.
평균 방식 | 계산 방법 | 특징 |
|---|---|---|
마크로 평균 | 각 클래스별 지표의 산술 평균 | 모든 클래스를 동등하게 취급. 소수 클래스의 성능 변화에 민감. |
마이크로 평균 | 모든 클래스의 TP, FP, FN을 전역 합산 후 지표 계산 | 각 샘플에 동등한 가중치. 클래스 불균형 시 전체 정확도와 유사. |
가중 평균 | 클래스별 샘플 수(지지도)를 가중치로 한 가중 평균 | 데이터셋의 클래스 분포를 반영한 평균. |
이러한 확장을 통해 F1 점수와 같은 지표도 다중 클래스 환경에서 계산할 수 있다. 예를 들어, '마크로 F1'은 각 클래스의 F1 점수를 먼저 계산한 후 평균을 내고, '마이크로 F1'은 전역적인 정밀도와 재현율로부터 계산한다. 문제의 특성과 클래스 분포에 따라 적절한 평균 방식을 선택해야 한다.
6.1. 마크로 평균, 마이크로 평균, 가중 평균
6.1. 마크로 평균, 마이크로 평균, 가중 평균
다중 클래스 분류 문제에서 혼동 행렬 지표를 종합하는 주요 방법은 마크로 평균, 마이크로 평균, 가중 평균이다. 각 클래스별로 계산된 정밀도, 재현율, F1 점수와 같은 지표를 하나의 대표값으로 요약할 때 사용한다. 이 방법들은 클래스 간 중요도나 데이터 분포의 불균형을 다루는 방식에서 차이가 난다.
마크로 평균은 각 클래스를 동등하게 취급한다. 먼저 모든 클래스에 대해 지표(예: 정밀도)를 개별적으로 계산한 후, 그 값들의 산술 평균을 구한다. 이 방식은 소수 클래스의 성능이 전체 평균에 동일한 비중으로 반영되므로, 클래스 불균형이 심한 데이터셋에서 소수 클래스의 성능 저하를 민감하게 포착한다. 반면, 마이크로 평균은 모든 클래스의 참양성, 거짓양성, 거짓음성을 전역적으로 합산한 후, 그 합계를 바탕으로 단일 지표를 계산한다. 이는 각 샘플에 동등한 가중치를 부여하는 효과가 있어, 다수의 클래스 성능이 전체 평균을 크게 좌우한다.
가중 평균은 클래스별 지표를 계산한 후, 각 클래스의 지지도(해당 클래스의 실제 샘플 수)를 가중치로 사용하여 평균을 낸다. 이는 데이터셋 내 클래스 분포를 반영한 평균 방식이다. 예를 들어, 클래스 A의 샘플이 100개, 클래스 B가 20개라면, 클래스 A의 성능 지표에 더 높은 가중치가 부여된다. 이 방식은 마이크로 평균과 유사한 결과를 내는 경우가 많지만, 명시적으로 가중치를 정의한다는 점에서 차이가 있다.
평균 방식 | 계산 방법 | 특징 |
|---|---|---|
마크로 평균 | (클래스1_지표 + 클래스2_지표 + ...) / 클래스 수 | 모든 클래스를 동등하게 평가. 소수 클래스 성능 변화에 민감. |
마이크로 평균 | 전체 TP, FP, FN의 합으로 계산한 단일 지표 | 각 샘플을 동등하게 평가. 다수 클래스 성능이 지배적. |
가중 평균 | (클래스1_지표 * 가중치1 + 클래스2_지표 * 가중치2 + ...) / 총 가중치 | 일반적으로 클래스별 샘플 수를 가중치로 사용. 데이터 분포 반영. |
적절한 평균 방식의 선택은 문제의 목표에 달려 있다. 모든 클래스가 동등히 중요하다면 마크로 평균이 적합하다. 전체적인 샘플 분류 정확도를 종합적으로 보고자 한다면 마이크로 평균이 유용하다. 데이터의 불균형 분포를 고려한 평균값이 필요할 때는 가중 평균을 사용한다.
6.2. 다중 클래스 혼동 행렬
6.2. 다중 클래스 혼동 행렬
다중 클래스 분류 문제에서는 혼동 행렬이 각 클래스 간의 오분류 패턴을 보여주는 정방행렬 형태로 확장된다. 행렬의 크기는 클래스의 개수 *n*에 따라 *n* × *n*이 되며, 행은 실제 클래스를, 열은 모델이 예측한 클래스를 나타낸다. 주대각선 상의 값들은 올바르게 분류된 샘플 수를 의미하며, 비대각선 요소들은 한 클래스가 다른 클래스로 잘못 분류된 횟수를 보여준다. 이는 특정 클래스 쌍 간의 혼동 관계를 파악하는 데 유용한 정보를 제공한다[3].
다중 클래스 혼동 행렬을 해석하는 일반적인 방법은 각 클래스를 긍정 클래스로 설정하고 나머지 모든 클래스를 부정 클래스로 간주하는 일대다 방식을 반복 적용하는 것이다. 이를 통해 각 클래스별로 참양성, 거짓양성, 거짓음성, 참음성 값을 도출할 수 있다. 예를 들어, 세 클래스(A, B, C) 문제에서 클래스 A에 대한 성능을 평가할 때, A를 양성, B와 C를 합쳐 음성으로 취급하여 이진 분류 지표를 계산한다.
실제 \ 예측 | 클래스 A | 클래스 B | 클래스 C |
|---|---|---|---|
클래스 A | TP_A | FN_A (→ B) | FN_A (→ C) |
클래스 B | FP_A (B → A) | TN (B→B) | - |
클래스 C | FP_A (C → A) | - | TN (C→C) |
이렇게 얻은 클래스별 지표들을 종합하기 위해 마크로 평균, 마이크로 평균, 가중 평균 등의 기법이 사용된다. 다중 클래스 혼동 행렬은 모델의 전반적인 성능뿐만 아니라, 특정 클래스의 분류 난이도나 클래스 간 유사성에 의한 체계적 오류를 진단하는 핵심 도구 역할을 한다.
7. 지표 선택 가이드라인
7. 지표 선택 가이드라인
지표 선택 가이드라인은 주어진 분류 문제의 특성과 비즈니스 목표에 맞는 적절한 혼동 행렬 기반 평가 지표를 선택하는 방법을 제시한다. 올바른 지표 선택은 모델 성능을 현실적으로 평가하고, 실제 적용에서의 효과를 극대화하는 데 핵심적이다.
선택은 주로 데이터의 클래스 불균형 정도와 문제의 도메인에 따라 결정된다. 정확도는 클래스 분포가 균형 잡힌 경우 유용하지만, 불균형이 심한 데이터에서는 대표성을 잃는다. 예를 들어, 99%가 음성인 데이터에서 모든 샘플을 음성으로 분류하는 모델도 99%의 정확도를 보이지만, 실제로 양성을 찾아내는 능력은 전혀 없다. 이러한 경우 정밀도와 재현율의 조화 평균인 F1 점수가 더 나은 대안이 된다. 특히 재현율은 거짓음성의 비용이 매우 높은 의료 진단(질병 검출)이나 스팸 메일 탐지에서 핵심 지표로 간주된다. 반면, 정밀도는 거짓양성을 최소화해야 하는 상황, 예를 들어 법률적 조치가 수반되는 사기 탐지 시스템에서 중요하게 여겨진다.
문제 도메인 | 주요 관심사 | 권장 지표 | 이유 |
|---|---|---|---|
의료 진단 | 질병을 가진 환자를 놓치지 않는 것 (FN 최소화) | 재현율 (민감도) | 질병이 있으나 검사에서 음성으로 나오는 경우를 줄이는 것이 최우선이다. |
스팸 메일 필터링 | 정상 메일을 스팸으로 잘못 분류하는 것 (FP 최소화) | 중요한 메일이 스팸함으로 들어가는 것을 방지하는 것이 중요하다. | |
클래스 균형 데이터 | 전반적인 정확한 분류 | 모든 클래스가 비슷한 비중을 가지므로 전반적인 성능을 평가하기에 적합하다. | |
클래스 불균형 데이터 | 소수 클래스의 성능 포착 | F1 점수, AUC-PR | 다수 클래스의 영향으로부터 벗어나 소수 클래스에 대한 예측 성능을 평가할 수 있다. |
최종적으로는 단일 지표에만 의존하기보다 여러 지표를 종합적으로 검토하고, ROC 곡선이나 정밀도-재현율 곡선과 같은 시각적 도구를 함께 활용하는 것이 바람직하다. 또한, 모델을 평가하는 목적이 순위 매기기인지, 특정 임계값에서의 결정을 내리는지에 따라 AUC-ROC나 F1 점수와 같은 지표의 우선순위가 달라진다. 항상 지표의 수학적 정의와 그것이 반영하는 실전적 의미를 연결 지어 고려해야 한다.
7.1. 클래스 불균형 데이터셋에서의 고려사항
7.1. 클래스 불균형 데이터셋에서의 고려사항
클래스 불균형 데이터셋은 한 클래스의 샘플 수가 다른 클래스에 비해 현저히 많은 경우를 말한다. 예를 들어, 사기 탐지나 희귀 질병 진단과 같은 문제에서 정상 사례(다수 클래스)는 매우 많지만, 관심 대상인 사기나 질병 사례(소수 클래스)는 극히 적은 비율로 나타난다. 이러한 환경에서는 정확도와 같은 기본 지표가 매우 오해의 소지가 있다. 전체 샘플의 99%가 정상인 데이터에서 모든 샘플을 '정상'으로 분류하는 모델도 99%의 정확도를 달성할 수 있지만, 이 모델은 소수 클래스를 전혀 탐지하지 못하는 무용지물이다.
따라서 불균형 데이터에서는 소수 클래스의 성능을 세심하게 평가하는 지표를 선택해야 한다. 정밀도와 재현율은 소수 클래스에 초점을 맞춘 대표적인 지표다. 특히 재현율은 실제 소수 클래스 중에서 모델이 얼마나 올바르게 찾아냈는지를 측정하므로, 놓치면 안 되는 사례를 최소화하는 것이 중요한 임무(예: 질병 진단)에서 핵심 지표로 사용된다. 반면, 정밀도는 모델이 양성이라고 예측한 것 중 진짜 양성의 비율로, 거짓 경보를 줄이는 것이 중요한 상황(예: 스팸 메일 필터링)에서 중요해진다. F1 점수는 이 두 지표의 조화 평균으로, 정밀도와 재현율 간의 균형을 하나의 수치로 요약한다.
평가 목적 | 권장 지표 | 주요 고려사항 |
|---|---|---|
소수 클래스 검출 최적화 | 거짓음성을 최소화하는 데 중점 | |
거짓양성 최소화 | 양성 예측의 정확성을 높이는 데 중점 | |
정밀도와 재현율의 균형 | 두 지표의 조화 평균 | |
전반적 성능 비교 (불균형) | 임계값에 독립적인 평가 가능 |
ROC 곡선과 그 아래 면적인 AUC-ROC는 임계값 변화에 따른 성능을 평가하는 데 널리 쓰이지만, 극심한 불균형 데이터에서는 다수 클래스의 영향력을 과도하게 반영할 수 있다는 비판이 있다. 이 경우 정밀도-재현율 곡선과 AUC-PR이 더 유용한 대안이 될 수 있다. AUC-PR은 소수 클래스의 성능 변화에 훨씬 민감하게 반응하여, 불균형 데이터에서 모델의 실질적 성능을 더 잘 드러내준다. 결론적으로, 클래스 불균형이 심한 문제에서는 정확도를 신뢰하지 않고, 재현율, 정밀도, F1 점수, AUC-PR 등을 종합적으로 분석하는 것이 바람직하다.
7.2. 문제 도메인에 따른 적합 지표
7.2. 문제 도메인에 따른 적합 지표
이진 분류 문제에서 적합한 지표의 선택은 문제의 도메인과 비즈니스 목표에 크게 의존한다. 예를 들어, 스팸 메일 필터링에서는 정상 메일을 스팸으로 잘못 분류하는 거짓양성(FP)을 최소화하는 것이 중요하다. 사용자가 중요한 메일을 놓칠 수 있기 때문이다. 따라서 정밀도(Precision)가 핵심 지표가 된다. 반면, 의료 진단 검사, 특히 감염병 선별이나 암 진단에서는 실제 환자를 건강하다고 판단하는 거짓음성(FN)을 최대한 줄이는 것이 절대적이다. 이 경우 재현율(Recall, 민감도)이 가장 중요한 평가 기준이 된다.
클래스 불균형이 심한 데이터셋에서는 정확도(Accuracy)가 오해의 소지가 있을 수 있다. 예를 들어, 사기 거래 탐지 시스템에서 정상 거래가 99%, 사기 거래가 1%인 데이터에서 모든 거래를 '정상'으로 분류해도 정확도는 99%가 된다. 이는 모델의 성능을 제대로 반영하지 못한다. 이러한 경우 정밀도-재현율 곡선(PR Curve)과 그 아래 면적(AUC-PR)이 더 유용한 평가 도구가 된다. F1 점수는 정밀도와 재현율의 조화 평균으로, 두 지표를 균형 있게 고려해야 할 때 자주 사용된다.
다양한 도메인별 적합 지표는 다음과 같이 정리할 수 있다.
도메인 예시 | 주요 목표 | 권장 지표 | 이유 |
|---|---|---|---|
정보 검색 (검색 엔진) | 검색 결과의 관련성 높이기 | 사용자에게 보여주는 상위 결과의 정확성이 중요함 | |
의료 진단/보안 경보 | 위험한 케이스(질병, 침입) 놓치지 않기 | 재현율(민감도) | 거짓음성을 최소화하는 것이 최우선 과제임 |
추천 시스템 | 사용자에게 적합한 아이템 제공 | 순위에 따른 관련 아이템 추천 품질을 평가 | |
사기 탐지/스팸 필터링 | 잘못된 경보 최소화 | 정상 활동을 잘못 차단하는 거짓양성 비용이 큼 | |
객체 탐지/영상 분할 | 예측 영역의 정확도 평가 | 예측된 경계박스나 마스크의 공간적 정합도를 측정 |
최종적으로 모델을 평가할 때는 단일 지표에만 의존하기보다, 혼동 행렬을 함께 살펴보고 ROC 곡선과 PR 곡선을 비교 분석하는 것이 바람직하다. 이는 모델의 강점과 약점을 다각도로 이해하고, 실제 운영 환경에서의 성능을 더 정확히 예측하는 데 도움을 준다.
8. 계산 예시 및 구현
8. 계산 예시 및 구현
혼동 행렬 지표를 계산하는 일반적인 방법은 Python 프로그래밍 언어와 scikit-learn 라이브러리를 사용하는 것이다. scikit-learn은 sklearn.metrics 모듈을 통해 정확도, 정밀도, 재현율, F1 점수 등 주요 지표를 쉽게 계산할 수 있는 함수를 제공한다. 먼저 confusion_matrix, classification_report, accuracy_score, precision_score, recall_score, f1_score 등의 함수를 임포트한다. 실제 값(y_true)과 모델의 예측 값(y_pred)을 리스트나 배열 형태로 준비한 후, 해당 함수에 인자로 전달하여 지표를 계산한다.
다음은 간단한 이진 분류 예시 코드이다.
```python
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score, precision_score, recall_score, f1_score
# 실제 레이블과 예측 레이블
y_true = [0, 1, 0, 1, 1, 0, 0, 1]
y_pred = [0, 1, 1, 1, 0, 0, 0, 1]
# 혼동 행렬 계산
cm = confusion_matrix(y_true, y_pred)
print("혼동 행렬:")
print(cm)
# 주요 지표 계산
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
print(f"정확도: {accuracy:.2f}")
print(f"정밀도: {precision:.2f}")
print(f"재현율: {recall:.2f}")
print(f"F1 점수: {f1:.2f}")
# 종합 보고서 출력
print("\n분류 보고서:")
print(classification_report(y_true, y_pred))
```
classification_report 함수는 정밀도, 재현율, F1 점수를 클래스별로 보여주고, 마크로 평균과 가중 평균도 함께 제공하여 매우 편리하다.
실제 데이터 적용 사례로, 붓꽃 데이터셋을 이용한 다중 클래스 분류 평가를 생각해 볼 수 있다. 로지스틱 회귀나 랜덤 포레스트 같은 모델을 학습시킨 후, 테스트 세트에 대한 예측을 수행한다. 이때 precision_score나 recall_score 함수의 average 매개변수를 'macro', 'micro', 'weighted' 중 하나로 설정하여 다중 클래스에 대한 평균 방식을 지정한다. 클래스 간 불균형이 심한 데이터셋(예: 사기 탐지)에서는 정확도보다 재현율이나 F1 점수가 더 유의미한 평가 지표가 된다. 또한, ROC 곡선과 AUC-ROC는 roc_curve 및 roc_auc_score 함수를, 정밀도-재현율 곡선은 precision_recall_curve 함수를 이용하여 시각화하고 계산할 수 있다.
8.1. Python (scikit-learn)을 이용한 계산
8.1. Python (scikit-learn)을 이용한 계산
혼동 행렬 지표들은 Python의 scikit-learn 라이브러리를 통해 쉽게 계산하고 시각화할 수 있다. sklearn.metrics 모듈은 정확도, 정밀도, 재현율, F1 점수 등 주요 지표를 계산하는 함수와 혼동 행렬 자체를 생성하는 함수를 제공한다.
계산은 일반적으로 예측값(y_pred)과 실제값(y_true)의 두 배열을 입력으로 받아 수행된다. 다음은 기본적인 계산 예시이다.
```python
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
# 예시 데이터: 실제 레이블과 모델의 예측 레이블
y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred = [1, 0, 0, 1, 0, 1, 1, 0]
# 기본 지표 계산
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred) # 양성 클래스(1)에 대한 정밀도
recall = recall_score(y_true, y_pred) # 양성 클래스(1)에 대한 재현율
f1 = f1_score(y_true, y_pred)
print(f"정확도: {accuracy:.2f}")
print(f"정밀도: {precision:.2f}")
print(f"재현율: {recall:.2f}")
print(f"F1 점수: {f1:.2f}")
# 혼동 행렬 생성
# 출력 형태: [[TN, FP],
# [FN, TP]]
cm = confusion_matrix(y_true, y_pred)
print("혼동 행렬:")
print(cm)
```
다중 클래스 분류의 경우, average 매개변수를 사용하여 평균 방식을 지정한다. classification_report 함수를 사용하면 주요 지표들을 클래스별로 한 번에 종합하여 출력할 수 있다.
```python
from sklearn.metrics import classification_report
y_true_multi = [0, 1, 2, 2, 1, 0]
y_pred_multi = [0, 2, 2, 1, 1, 0]
# 마크로 평균, 마이크로 평균, 가중 평균 등을 계산
precision_macro = precision_score(y_true_multi, y_pred_multi, average='macro')
recall_weighted = recall_score(y_true_multi, y_pred_multi, average='weighted')
print(f"마크로 평균 정밀도: {precision_macro:.2f}")
print(f"가중 평균 재현율: {recall_weighted:.2f}")
# 종합 보고서 출력
report = classification_report(y_true_multi, y_pred_multi)
print(report)
```
ROC 곡선과 AUC-ROC, 정밀도-재현율 곡선도 쉽게 그릴 수 있다. 이 경우 모델이 출력한 확률 점수(y_score)가 필요하다.
```python
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc, precision_recall_curve
# 예시 확률 점수 (양성 클래스(1)에 대한 확률)
y_scores = [0.8, 0.2, 0.6, 0.9, 0.3, 0.7, 0.4, 0.1]
# ROC 곡선 계산
fpr, tpr, thresholds_roc = roc_curve(y_true, y_scores)
roc_auc = auc(fpr, tpr)
# 정밀도-재현율 곡선 계산
precision_pr, recall_pr, thresholds_pr = precision_recall_curve(y_true, y_scores)
# 시각화
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
ax1.plot(fpr, tpr, label=f'ROC curve (AUC = {roc_auc:.2f})')
ax1.plot([0, 1], [0, 1], 'k--') # 대각선 기준선
ax1.set_xlabel('False Positive Rate')
ax1.set_ylabel('True Positive Rate (Recall)')
ax1.set_title('ROC Curve')
ax1.legend()
ax2.plot(recall_pr, precision_pr)
ax2.set_xlabel('Recall')
ax2.set_ylabel('Precision')
ax2.set_title('Precision-Recall Curve')
plt.show()
```
8.2. 실제 데이터 적용 사례
8.2. 실제 데이터 적용 사례
실제 데이터에 혼동 행렬 지표를 적용하는 대표적인 사례로는 의료 진단, 스팸 메일 필터링, 불균형 데이터셋 처리, 그리고 다중 클래스 분류 문제를 들 수 있다.
의료 진단, 예를 들어 COVID-19 검사 키트 평가에서는 재현율(민감도)이 매우 중요한 지표이다. 거짓음성(실제 감염자를 음성으로 판정)을 최소화하여 감염 확산을 방지해야 하기 때문이다. 반면, 스팸 메일 필터링에서는 정밀도가 더 중요할 수 있다. 정상 메일을 스팸으로 잘못 분류(거짓양성)하는 경우 사용자에게 중요한 메일이 차단될 수 있기 때문이다. 이처럼 문제의 도메인에 따라 강조해야 할 지표가 달라진다.
클래스 분포가 심하게 치우친 데이터, 예를 들어 사기 거래 탐지(정상 거래 99%, 사기 거래 1%)에서는 정확도만으로 모델을 평가하는 것은 오해를 불러일으킨다. 모든 거래를 정상으로 분류해도 정확도는 99%에 달하지만, 사기 거래는 하나도 찾지 못하는 무용지모 모델이 된다. 이러한 경우 F1 점수, 정밀도-재현율 곡선(PR Curve)의 AUC-PR, 또는 재현율과 정밀도를 함께 살펴보는 것이 더 적합한 평가 방식이다.
다중 클래스 문제, 예를 들어 손글씨 숫자(MNIST)나 이미지 분류에서는 단일 지표보다 평균 방식을 고려해야 한다. 다음 표는 세 가지 주요 평균 방식의 특징을 보여준다.
평균 방식 | 계산 방법 | 특징 |
|---|---|---|
마이크로 평균 | 모든 클래스의 TP, FP, FN을 전역적으로 합산 후 지표 계산 | 각 샘플을 동등하게 취급, 클래스 크기의 영향을 받음 |
마크로 평균 | 각 클래스별 지표를 계산한 후 산술 평균 | 각 클래스를 동등하게 취급, 소수 클래스의 성능을 균등하게 반영 |
가중 평균 | 각 클래스별 지표를 클래스 샘플 수 비율로 가중하여 평균 | 클래스 불균형을 고려한 마크로 평균의 변형 |
실제 구현에서는 scikit-learn 라이브러리의 classification_report 함수를 사용하면 정밀도, 재현율, F1 점수를 마이크로, 마크로, 가중 평균으로 한 번에 계산하여 제공받을 수 있다. 이를 통해 모델의 전반적인 성능과 클래스별 성능 편차를 종합적으로 진단할 수 있다.
