머신러닝 모델을 만드는 핵심 작업 중 하나는 성능을 평가(evaluate)하는 일
과연 어떻게 머신러닝 모델의 완성도를 측정할까?
언제 학습(train)과 학습평가(evaluation)를 끝내고, 완성했다고 말할 수 있을까?
"ML Model Evaluation" 가 의미하는 바를 알아보고,
왜 이것이 꼭 필요한 일인지 알아보자.
데이터 준비와 모델 학습은 누구나 머신러닝 작업 파이프라인에서 핵심적인 단계로 생각하지만,
학습된 모델의 퍼포먼스를 측정하는것 또한 중요한 단계에 해당한다.
새로운 데이터로(학습에 사용하지 않은) 모델을 일반화시킬 수 있을까 하는것은
적응형(adaptive) vs 비적응형(non-adaptive)으로 구분할 수 있다.
우리는 학습시킨 모델을 바로 실서비스에 올려서 처음 만나는 데이터를 접하기 전에,
다른 평가지표로 퍼포먼스 평가를 하여 우리 모델이
처음만나는 데이터에 대해서도 훌륭한 예측력을 가질 수 있도록 개선시켜야한다.
다른 평가지표를 사용하여 머신러닝 모델의 제대로 된 학습평가를 하지 않고,
정확도에만 연연한다면, 모델이 처음 만나는 실서비스의 데이터에 대해
엉뚱한 예측을 하는 끔찍한 상황에 빠질 수 있다.
우리 모델은 배우지 않지만, 기억하고있다
ML모델은 처음만나는 데이터를 스스로 일반화 하여 받아들일 수 없다.
이를 시작하기 위해, 3개의 중요한 기준을 세우도록 한다.
Learning: ML모델 학습은 학습/이용가능한 데이터에 대한 정확한 예측이 아닌, 미래 데이터에 대한 정확한 예측을 고려하여 진행되야 한다.
Memorization (기억, 과적합):
통제된 데이터 속 ML모델 퍼포먼스! 다시말해 알고있는 데이터 속에서 과적합(Overfitting)되는 상태
모델이 훈련 데이터에 너무 잘 맞춰진 경우.
즉, 훈련 데이터에서 본 패턴을 그대로 외워버린 상태야.
이 경우, 훈련 데이터에서는 높은 성능을 보이지만 새로운 데이터(테스트 데이터)에서는 성능이 떨어짐. → 과적합(Overfitting)
일반화(Generalization): ML모델의 능력은 학습에 사용되지 않았던 데이터를 적용해 본 결과로 정의할 수 있다.
일반화된 학습이 아니라면, 학습이 아니라 단순 학습데이터의 기억(memorization)이라고 볼 수 있다.
하지만 확실히 해둬야 할 것은, 실서비스에서 받고자 하는 데이터의 일반화를 이뤄야 한다.
예를들어 잘 학습된 동물원 동물들 이미지 인식 모델은 자동차와 빌딩 이미지에 잘 작동하지 않는다. 하지만, 이는 정상이고 당연한것이다.
모델이 훈련에 사용되지 않은 데이터에서도 좋은 성능을 내는 능력.
단순히 외운 것이 아니라, 데이터를 이해하고 패턴을 학습한 상태.
좋은 머신러닝 모델이라면 학습한 데이터뿐만 아니라, 새로운 데이터에도 높은 성능을 보여야 함.
아래 이미지는 모델이 학습하면서 단순히 모델 정확정확도에만 의존하여,
검증단계에서 좋지 않은 성능을 보여주는 결과라고 볼 수 있다.

모델이 일반화될 수 있게 도와줄 다른 평가지표를(evaluation metrics)
평가지표는 꼭 필요한 머신러닝 업무 중 꼭 필요한 부분이다.
분류(classification), 회귀(regression), 랭킹, 군집화(clustering), 토픽모델링(topic modeling) 등
각각의 모델마다 적절한 평가지표는 다르지만, Precision-recall과 같이 여러 머신러닝에서 통상적으로 유용하게 쓰이는 지표들이 있다.
분류, 회귀와 랭킹은 보편적으로 많이 쓰이는 지도학습(supervised learning)의 예시로 볼 수도 있다.
2.1 모델 정확도(Model Accuracy):
분류 모델 측면에서 모델 정확도는 전체 표본 중 정확히 분류된 표본의 수 라고 볼 수 있겠다.

여러 class로 분류결과가 나뉜다면, 정확도 = 정답을 맞춘 예측의 수 / 전체 문제의 수 라고 볼 수 있다.
만약 2진분류로 결과가 나뉜다면 위 그림의 표처럼 4가지로 구분해볼 수 있다.
True Positive (TP) - 모델이 정답(Positive)을 맞추었을때
True Negative (TN) - 모델이 오답(Negative)을 맞추었을때
False Postive (FP) - 모델이 오답(Negative)을 정답(Positive)으로 잘못 예측했을때
False Negative (FN) - 모델이 정답(Positive)을 오답(Negative)으로 잘못 예측했을때
우리의 목표는 높은 정확도의 모델이지만, 정확도만 가지고
학습때 만나보지 못한 실서비스의 데이터에서도 모델 퍼포먼스를 보장할 수 있다고 설명하기는 어렵다.
몇가지 사례를 가지고 이 말을 이해해보자.
사례 정의 - 병원의 환자가 암인지 아닌지 구분할 수 있는 예측모델을 만든다
2진 분류 모델 - 환자가 암에 걸렸는지 아닌지 분류한다
정답라벨이 있는 학습 데이터셋을 살펴보자
100 개의 데이터 중, 10개는 'Cancer'(암), 90개는 'Normal'(정상)으로 분류되어져 있다.
위 100개의 데이터를 가지고 우리모델의 정확도를 계산해보자. 결과는 아래와 같으며, 이는 앞서 살펴본 TP, TN, FP, FN으로 대입해볼 수 있다.

TP(실제로 암이면서, 암으로 예측한 결과) = 1
TN(실제로 정상이고, 정상으로 예측한 결과) = 90
FN(실제로 암이지만, 예측을 정상으로 한 결과) = 8
FP(실제로 정상이지만, 예측을 암으로 한 결과) = 1

우리 모델의 정확도는 91%라고 명시할 수 있다.
하지만 우리 모델이 실서비스에서도 정말 쓸모있을지에 대한 의문은 여전히 풀리지 않았다.
이렇게 높은 정확도의 모델일지라도,
실제 어떤 암환자 예측에서는 최악의 결과를 초래할 수 있기때문에, 유용하지 않은 모델일 수 있다.
이런 케이스들에서 과연 ML모델을 어떻게 신뢰할 수 있을까?
위의 암환자 예시처럼 학습셋의 class항목별(긍정,부정) 불균형과 같은 데이터에 대한 파악은 정확도에서 찾을 수 없다.
이것에 대한 더 자세한 내용을, class 불균형 문제에 따른 2개의 평가지표(metrics)에 대해서 알아본다: precision and recall
이 부분은 데이터의 불균형(Class Imbalance)이 머신러닝 모델의 평가에 미치는 영향을 설명하는 내용이야. 특히, 정확도(Accuracy)만으로는 모델의 성능을 신뢰하기 어렵기 때문에 Precision(정밀도)과 Recall(재현율) 같은 평가지표가 더 중요하다는 의미야.
총 1000명의 환자가 있고, 그중 990명은 건강(negative), 10명만 암 환자(positive) 라고 해보자.
만약 모델이 "모든 환자가 건강하다" 라고 예측한다면?
정확도(Accuracy) = (990/1000) × 100% = 99%
하지만 암 환자는 10명인데, 전부 놓쳐버림!
→ 이 모델은 쓸모가 없다!
즉, 정확도가 높아도 모델이 실제로 중요한 클래스(암 환자)를 잘 분류하는지 보장하지 못한다는 문제야.
이런 경우 Precision(정밀도)과 Recall(재현율) 같은 다른 평가 지표를 사용해야 해.
2.2 Precision and Recall

분류과제에서, 분류종목에 대한 precision 은
정답을 정답이라고 맞춘 TP(True Positive)개수를 TP+FP(False Positive, 정답을 오답이라고 판단한 개수)로 나눠주면 된다.

precision이 높다는것은 알고리즘이 관련있는 결과를 그렇지 못한것 대비 충분히 맞추었다는 의미로 볼 수 있다.
이제 Recall에 대해 알아보도록 하자.
Recall은 정답을 정답이라고 맞춘 TP(True Positive)개수를 TP+FN로 나눠주면 된다.

recall이 높다는것은 알고리즘이 관련있는 결과를 최대한 많이 가져왔다 의미로 볼 수 있다.
이제, precision 과 recall을 위의 암 예측 결과를 가지고 측정해보자

우리 모델은 0.5의 precision값을 가지며, 이는 암을 관측할 때 50%의 정확성을 가진다고 할 수 있다.

또, 우리 모델은 0.11의 recall 값을 가지며, 이는 전체 암 환자 중 오직 11%만을 식별할 수 있다고 할 수 있다.
Precision & Recall 줄다리기
모델의 효율성을 평가하기 위해 precision과 recall을 모두 검토할 필요가 있다. 불행하게도, Precision(정밀도)과 Recall(재현율)은 보통 트레이드오프(trade-off) 관계를 가진다. 즉, Precision을 높이면 Recall이 감소하고, Recall을 높이면 Precision이 감소하는 경향이 있다.
Precision(정밀도) = 모델이 양성(Positive)이라고 예측한 것 중 실제 양성의 비율
Recall(재현율) = 실제 양성 중에서 모델이 놓치지 않고 예측한 비율
이유는 모델의 결정 기준(Threshold) 때문
머신러닝 모델이 양성(Positive)인지, 음성(Negative)인지 결정할 때 특정 기준(Threshold)을 사용한다.
Threshold를 높이면 Precision이 높아지지만, Recall이 낮아진다.
Threshold를 낮추면 Recall이 높아지지만, Precision이 낮아진다.
💡 Threshold를 조정하는 방식에 따라 Precision과 Recall의 균형이 달라진다!
Precision을 높이면 Recall이 낮아지는 이유
Precision(정밀도)은 모델이 양성(positive)이라고 예측한 것 중에서 실제로 맞은 비율을 의미한다.
Precision을 높이려면 양성(positive)으로 예측하는 기준을 엄격하게 설정해야 한다.
즉, 모델이 확실할 때만 양성으로 예측하도록 만든다.
하지만, 이렇게 하면 모든 양성을 잡지 못하고 일부 양성을 놓칠 가능성(Recall 감소)이 높아진다.
🔹 예제: 암 진단 모델에서 Precision을 높이려면?
→ 모델이 확실한 경우에만 암이라고 예측하도록 설정하면, 암이지만 확실하지 않은 환자들(FN, False Negative)을 놓칠 가능성이 커짐.
→ 암 환자를 놓치면 위험하므로, Precision을 너무 높이는 것은 적절하지 않을 수 있음.
Recall을 높이면 Precision이 낮아지는 이유
Recall(재현율)은 실제 양성(positive) 중에서 모델이 제대로 예측한 비율을 의미한다.
Recall을 높이려면 조금이라도 가능성이 있으면 양성(positive)으로 예측하는 방식을 선택해야 한다.
즉, 암일 가능성이 조금이라도 있으면 암으로 예측하도록 설정하면 된다.
하지만 이렇게 하면 잘못된 양성(FP, False Positive)이 많아지고, Precision이 낮아진다.
🔹 예제: 암 진단 모델에서 Recall을 높이려면?
→ 모델이 조금이라도 암일 가능성이 있으면 양성(암)으로 예측하도록 만들면,
→ 건강한 사람도 암이라고 예측하는 오류(FP, False Positive)가 많아짐.
→ 불필요한 추가 검사와 의료비 부담이 커질 수 있음.
Precision과 Recall의 균형을 찾아야 하는 이유
Precision과 Recall 중 어느 것을 더 중요하게 고려할지는 문제(domain)에 따라 다름.
일부 문제는 Precision을 더 중요하게 보고, 일부 문제는 Recall을 더 중요하게 본다.
모두 중요한 경우, F1-score를 사용해 Precision과 Recall 지표의 황금비율을 찾도록 도와준다.
🔹 예제: 자율주행 차량 사고 감지 모델
Precision이 중요하면?
→ 모델이 사고라고 판단한 것들이 정말 사고여야 함.
→ 잘못된 경보(FP)가 많으면 운전자에게 혼란을 줌.
Recall이 중요하면?
→ 모든 사고를 감지해야 함.
→ Recall이 낮으면 실제 사고를 감지하지 못할 수도 있음.
실전 예제

PR Curve

2.3 F1 스코어
F1 스코어는 Precision과 Recall의 조화평균(harmonic mean)을 의미하여,
F1 스코어가 1에 도달할 때 최적의 Precision과 Recall을 의미하며, 0이 최악을 의미한다.

왜 조화평균을 쓸까? 데이터들의 조화평균은 가장 작은 수치쪽으로 치우치기 때문에(산술평균에 비해),
크게 튀는 아웃라이어(너무 낮거나 높은 값)와 작은 값의 영향을 조정하는 역할을 합니다.
조화평균(Harmonic Mean)이란?
조화평균은 여러 개의 값이 있을 때 작은 값이 더 큰 영향을 주는 평균값을 계산하는 방법이야.
📌 산술평균(Arithmetic Mean) vs. 조화평균(Harmonic Mean)
산술평균: 일반적인 평균 방식

→ 두 값이 크든 작든 균등하게 반영됨
조화평균: 작은 값이 더 크게 영향을 주는 평균

→ 작은 값에 더 큰 가중치를 줌
예제
Precision = 0.9, Recall = 0.1 일 때
산술평균:

조화평균:

💡 결론: 조화평균은 작은 값이 있을 때 평균이 크게 줄어든다!
→ 한쪽 값이 너무 낮으면 전체 평균도 낮아지도록 조정하는 효과가 있음.
왜 조화평균을 Precision & Recall에 적용할까? (F1-score)
Precision(정밀도)과 Recall(재현율)은 서로 반대되는 특성을 가지기 때문에, 두 값의 균형을 잘 맞추는 것이 중요해.
💡 조화평균을 쓰는 이유
Precision과 Recall 중 하나가 낮으면 F1-score도 낮아짐
Precision=0.9, Recall=0.1이면 F1-score도 0.18로 낮아짐.
즉, Precision이나 Recall 중 하나라도 너무 낮으면 전체 평가 점수도 낮게 보이도록 조정.
"둘 다 균형 있게 높아야 좋은 모델"이 되도록 평가.
Precision과 Recall이 크게 차이 나도 적절한 균형을 유지
Precision=0.9, Recall=0.8이면 F1-score ≈ 0.85로 높은 값 유지.
Precision=0.9, Recall=0.1이면 F1-score ≈ 0.18로 매우 낮아짐.
둘 중 하나가 너무 낮으면 모델이 제대로 동작하지 않는다는 경고 역할을 함.
산술평균을 쓰면 Precision이나 Recall이 극단적으로 낮아도 너무 좋은 점수처럼 보일 수 있음
Precision=0.9, Recall=0.1이면 산술평균은 0.5로 꽤 높아 보임.
하지만 조화평균을 쓰면 0.18로 낮아져서 "문제가 있음"을 확실히 보여줌.
F1 스코어는 편중된 값을 더 크게 조정시킨다.
그렇기에 이상적으로 볼때, F1 스코어는 아래의 분류 시나리오들에서 효과적인 평가지표로 사용될 수 있다.
FP와 FN이 동등하게 중요할때 - True Positive를 놓치거나 False Positive 로 잘못 판단했을 경우
둘다 모델에 비슷하게 영향을 끼친다(암환자 분류 예시처럼)
추가되는 데이터가 결과에 크게 영향을 끼치지 않는 경우
F1-score는 Precision과 Recall이 둘 다 중요하도록 강제하는 지표야.
→ 즉, FP(거짓 양성)과 FN(거짓 음성)을 균형 있게 고려해야 하는 상황에서 효과적이야.
예제: 암 환자 분류 모델
False Positive(FP): 건강한 사람을 암 환자로 예측하면 불필요한 검사와 치료를 받게 됨.
False Negative(FN): 실제 암 환자를 건강하다고 예측하면 치명적인 의료 문제 발생.
둘 다 중요하므로, Precision과 Recall의 균형을 맞추는 F1-score가 적절한 평가 척도가 됨.
만약 Accuracy(정확도)만 보면 문제 발생!
암 환자 1000명 중 10명만 실제 암 환자라고 가정하자.
모델이 전부 건강하다고 예측하면 정확도(Accuracy) = 99%
하지만 F1-score는 0에 가까움 → 모델이 잘못된 평가를 하고 있음을 보여줌.
추가 데이터가 결과에 크게 영향을 주지 않는 경우
Precision과 Recall은 단순히 데이터 개수보다는 모델의 예측 정확성을 평가하는 지표야.
따라서, 데이터 양이 많아져도 F1-score는 비교적 안정적인 평가를 제공할 수 있음.
예제: 검색 엔진 결과 랭킹
사용자가 검색한 내용에 맞는 결과(정확한 문서)를 보여주는 시스템이 있다고 가정하자.
Precision이 낮으면? → 검색 결과에 엉뚱한 문서가 포함됨.
Recall이 낮으면? → 사용자가 원하는 문서를 찾지 못함.
F1-score를 사용하면 두 가지 요소를 균형 있게 평가할 수 있음.
또한, 검색 데이터가 추가되어도 F1-score는 전체적인 균형을 유지하며 평가할 수 있음.
TN(True Negative)이 중요한 경우 (홍수 예측, 암환자 예측 등)
TN(True Negative)은 "문제가 없는 경우를 정확히 문제없다고 예측하는 능력"을 의미해.
하지만 F1-score는 TN을 고려하지 않는다.
→ 이런 경우 F1-score보다 다른 평가 지표(예: MCC, Specificity)를 추가로 고려해야 함.
📌 예제: 홍수 예측 모델
False Positive(FP): 홍수가 안 나는데 홍수가 날 거라고 예측하면 불필요한 대피령 발령 및 경제적 손실 발생.
False Negative(FN): 실제로 홍수가 발생하는데 홍수가 없다고 예측하면 대규모 재난 발생 가능.
이 경우, FP와 FN 모두 중요하므로 F1-score를 사용할 수 있음.
하지만, 홍수가 없는 날(TN)이 많은 경우 Specificity(특이도) 같은 지표도 함께 보는 것이 중요함.
F1-score는 TN(True Negative, 실제 음성을 정확하게 음성으로 예측한 경우)을 고려하지 않는 지표야.
즉, TN이 중요한 경우에는 F1-score만으로 평가하면 적절하지 않을 수 있어.
📌 F1-score는 TN을 고려하지 않는다!
F1-score는 Precision(정밀도)과 Recall(재현율)의 조화평균으로,
FP(거짓 양성)와 FN(거짓 음성)만을 평가 기준으로 삼는다.
즉, TN(정확히 음성으로 예측한 경우)은 계산에 포함되지 않음.
🔹 F1-score 공식

💡 즉, F1-score는 TN이 많거나 적어도 영향을 받지 않는다!
→ TN을 고려해야 하는 경우라면, 다른 지표를 함께 사용해야 한다.
❌ F1-score가 TN이 중요한 경우에 적절하지 않은 이유
✅ F1-score는 FP(거짓 양성)와 FN(거짓 음성)이 중요할 때 적합
❌ F1-score는 TN(거짓 없음)을 고려하지 않기 때문에 TN이 중요한 경우에는 부적절
📌 예제: 홍수 예측 모델
홍수 예측에서 홍수가 없을 때(TN)도 정확히 맞추는 것이 중요하다면?
FP(거짓 경보)와 FN(놓친 홍수)도 중요하지만, TN(정상적으로 홍수 없음)도 매우 중요함.
F1-score만 보면 TN이 무시되기 때문에 적절하지 않다.
이럴 때는 Specificity(특이도)나 MCC 같은 지표를 추가로 고려해야 한다.
🔹 TN이 중요한 경우 어떤 지표를 써야 할까?
Specificity(특이도, True Negative Rate)
TN을 포함하여 평가하는 지표.

FP(거짓 양성)를 줄이는 데 초점을 맞춤.
홍수 예측처럼 "이상 없음을 정확히 맞추는 것이 중요한 경우" 적절.
MCC(Matthews Correlation Coefficient, 매튜스 상관 계수)
TP, FP, FN, TN 모두를 고려하는 균형 잡힌 평가 지표.

데이터가 불균형할 때도 유용하게 사용됨.
결론: TN이 중요할 때 F1-score를 써야 할까?
❌ TN이 중요한 경우에는 F1-score만 사용하면 안 된다.
✅ 대신 Specificity(특이도)나 MCC 같은 다른 지표도 함께 봐야 한다.
✅ 하지만 FP와 FN도 중요한 경우라면, F1-score + Specificity 또는 MCC를 함께 고려하면 좋다.
💡 즉, F1-score는 FP와 FN이 중요한 경우 적합하고, TN이 중요한 경우에는 다른 지표를 추가로 고려해야 한다!
2.4 ROC 커브
ROC(수용자 반응 특성, Receiver Operating Characteristic)커브는
분류기의 분류 능력을 그래프 좌표로 표현하는 방법이다.
ROC 커브는 분류기의 성능을 False Positive Rate(FPR)와 True Positive Rate(TPR)의 관계로 시각화하는 방법이야.
즉, 모델이 양성(Positive)과 음성(Negative)을 얼마나 잘 분류하는지를 다양한 임계값(Threshold)에서 평가하는 그래프야.
✅ True Positive Rate (TPR) = Recall = 탐지 확률
모델이 실제 Positive인 샘플을 얼마나 잘 맞췄는지 측정 (FN을 줄일수록 증가)
✅ False Positive Rate (FPR) = 실패 확률
모델이 실제 Negative인데 Positive로 잘못 예측한 비율 (FP를 줄일수록 감소)
📌 ROC 커브는 다양한 Threshold에서 TPR과 FPR을 계산하여 만든 그래프야!


(0,0) → 모든 샘플을 Negative로 예측 (Positive 결과가 하나도 없는 경우)
(1,1) → 모든 샘플을 Positive로 예측 (FN과 TN의 결과는 하나도 없고, TP와 FP가 전부, 잘못된 예측도 많음)
(0,1) → 완벽한 분류 모델 (모든 Positive를 정확히 예측, FP 없음)
(1,0) → 완전한 반대 모델 (모든 것을 반대로 예측)
따라서 최고의 예측 모델은 ROC공간의 (0, 1) 또는 왼쪽 위 방향에 있다면,
잘 예측하는 모델이라 생각할 수 있다.
특히, (0, 1) 좌표에 있다면, 정확도 100%라고 볼 수 있다(FN과 FP의 개수가 0)
어림짐작으로 (0, 0)과 (1, 1) 사이에 아무렇게나 기준선을 그었을 때,
선보다 왼쪽 상단은 성능이 좋고, 오른쪽 하단은 성능이 좋지 않다고 기준을 잡을 수 있다.
ROC 커브가 대각선(랜덤 모델)보다 높을수록 좋은 성능
즉, 왼쪽 상단으로 ROC 커브가 갈수록 좋은 모델이다!
3️⃣ 왜 ROC 커브는 클래스 불균형(Class Imbalance)에 영향을 받지 않을까?
ROC 커브는 TPR(Recall)과 FPR을 기반으로 계산되기 때문이야.
즉, 전체 데이터셋에서 Positive와 Negative의 비율이 증감 ROC 커브 자체는 변하지 않는다.
(하지만 Precision 같은 지표는 클래스 비율에 영향을 받음)
이는 ROC에 사용되는 지표(metric) TPR및 FPR이
클래스 분산에 영향을 받는 accuracy, precision 등과 독립적인 수치이기 떄문이다.
이걸 Class Skew Independence(클래스 불균형 독립성)이라고 해.
📌 즉, 테스트셋에서 긍정(Positive)과 부정(Negative)의 비율이 바뀌어도, ROC 커브는 변하지 않는다!
💡 반면 Precision과 Accuracy 같은 지표는 클래스 비율에 영향을 받으므로 불균형 데이터에서 신뢰하기 어렵다.
1️⃣ 클래스 불균형(Class Imbalance)이란?
클래스 불균형이란 Positive(양성)와 Negative(음성)의 비율이 매우 차이가 나는 데이터셋을 의미해.
예를 들어, 암 환자 데이터에서 99%가 건강한 사람(Negative), 1%만 암 환자(Positive) 라고 해보자.
이런 경우 Accuracy(정확도) 같은 지표는 신뢰하기 어렵다.
이유는? 모델이 그냥 "전부 Negative"라고 예측하면 99% 정확도가 나오지만, 실제로는 암 환자를 전혀 못 잡아내는 모델이기 때문.
📌 즉, Accuracy나 Precision 같은 지표는 클래스 비율이 변하면 값도 크게 변할 수 있음!
2️⃣ ROC 커브의 핵심 지표: TPR과 FPR
ROC 커브는 True Positive Rate(TPR)와 False Positive Rate(FPR)을 기준으로 평가해.
TPR (True Positive Rate) = Recall (재현율)
→ 전체 양성(Positive) 중에서 모델이 얼마나 잘 예측했는지 나타냄.
→ 양성(Positive)의 비율이 바뀌어도 TPR 값은 변하지 않음.
FPR (False Positive Rate)
→ 전체 음성(Negative) 중에서 모델이 양성으로 잘못 예측한 비율을 나타냄.
→ 음성(Negative)의 비율이 바뀌어도 FPR 값은 변하지 않음.
💡 즉, ROC 커브는 클래스 비율이 변해도 TPR과 FPR만을 사용하기 때문에, 불균형 데이터에서도 변하지 않는다!
3️⃣ 반대로 Precision과 Accuracy는 클래스 비율에 영향을 받는다!
ROC 커브는 클래스 불균형에 영향을 받지 않지만, Precision과 Accuracy는 클래스 비율이 변하면 값도 크게 변할 수 있다.
✅ Precision(정밀도)
Precision은 양성(Positive)으로 예측한 것 중에서 실제로 맞은 비율을 의미해.
Positive가 적을수록 Precision이 쉽게 변함.
예를 들어, Positive(암 환자)가 매우 적은 경우, 조금만 FP(False Positive)가 많아도 Precision 값이 급격히 떨어짐.
✅ Accuracy(정확도)
Accuracy는 전체 데이터 중에서 맞춘 비율이야.
클래스 비율이 불균형하면 Accuracy는 의미가 없어짐!
예를 들어, 암 환자가 1%밖에 없는 데이터에서 모델이 모든 환자를 Negative(건강)라고 예측해도 Accuracy는 99%!
→ 즉, 높은 Accuracy가 좋은 모델이라는 보장이 없음!
클래스 불균형에서 왜 ROC 커브를 사용해야 할까?
ROC 커브는 Precision이나 Accuracy처럼 클래스 비율에 영향을 받지 않는다.
이걸 Class Skew Independence(클래스 불균형 독립성)이라고 해.
Positive와 Negative의 비율이 변해도 ROC 커브의 형태는 유지됨.
FPR과 TPR만 사용하므로, 클래스 분포가 달라도 모델의 성능을 비교할 수 있음.
📌 즉, 클래스 비율이 바뀌어도 ROC 커브는 변하지 않지만, Precision이나 Accuracy는 변할 수 있기 때문에 불균형 데이터에서는 ROC 커브가 더 신뢰할 수 있는 지표다!
ROC커브 안에 찍은 점들은 어떻게 측정할 수 있을까?
이를 위한 AUC 라는 효율적인 알고리즘이 존재한다.
2.4 AUC(Area Under the ROC Curve, ROC 커브 아래 면적)
ROC 커브는 분류기 성능을 시각적으로 표현하는 그래프
분류기들을 비교하고자 하지만, 커브만 보고 모델을 비교하는 것은 어렵기 때문에, 이를 단일 숫자로 표현하는 방법이 AUC야.
AUC(Area Under the Curve)는 ROC 커브 아래 면적을 계산하여 모델 성능을 평가하는 값이야.
즉, AUC 값이 클수록 전체적으로 더 나은 분류 성능을 가진 모델이다!
AUC는 그림의 사각형 영역의 일부영역의 비율이기 때문에, AUC 값은 항상 0과 1 사이의 값이야.
AUC가 1에 가까울수록 좋은 모델, 0.5에 가까울수록 랜덤 분류기, 0.5 미만이면 오히려 틀린 방향으로 예측하는 모델!
랜덤 분류기의 AUC는 0.5이며, 좋은 모델이라면 AUC가 0.5보다 커야 한다.
AUC는 예측에 대한 바람직한 기준이 필요할때 종종 사용된다.
3️⃣ AUC가 중요한 이유
AUC는 다음 두 가지 이유로 모델 성능 평가에 매우 유용한 지표야.
✅ 1. AUC는 고정 수치 → 모델 성능을 "절대적 수치"로 평가 가능
ROC 커브는 시각적으로 비교하기 어려운 경우가 많아.
하지만 AUC는 숫자 하나로 모델의 성능을 비교할 수 있음.
즉, AUC가 높을수록 모델이 더 좋은 성능을 낸다는 것을 알 수 있음.
✅ 2. AUC는 임계값(Threshold)에 영향을 받지 않음
Precision과 Recall 같은 다른 지표들은 임계값(Threshold)에 따라 값이 변하지만, AUC는 그렇지 않음.
즉, 모델이 Positive/Negative를 어떻게 예측하는지 전반적인 성능을 측정할 수 있음.
특정 임계값을 설정하지 않고도 모델 비교가 가능!
모델의 분류 임계점이 어떠한지에 관계없이 모델이 잘 예측하는지 측정할 수 있다.
📌 즉, AUC는 단순히 Precision이나 Recall처럼 특정 Threshold에서 평가하는 것이 아니라, 다양한 Threshold를 모두 고려한 성능 평가 지표야.
왜 AUC는 Threshold(임계값)에 영향을 받지 않을까?
이 부분을 이해하려면 Threshold(임계값)이 모델 성능 평가에 미치는 영향을 먼저 알아야 해.
1️⃣ Threshold(임계값)이란?
분류 모델(예: 로지스틱 회귀, 신경망)은 보통 확률 값(0~1 범위)을 출력해.
이 확률이 일정 기준(Threshold)보다 높으면 Positive(양성), 낮으면 Negative(음성)으로 분류해.
예를 들어, Threshold = 0.5이면,
0.5 이상이면 Positive(양성)
0.5 미만이면 Negative(음성)
📌 하지만 Threshold 값이 변하면 Precision, Recall 같은 평가 지표도 변한다.
2️⃣ Precision과 Recall은 Threshold에 따라 변한다!
Threshold(임계값)이 높아지면 → Precision이 증가하지만 Recall이 감소
Threshold(임계값)이 낮아지면 → Recall이 증가하지만 Precision이 감소
즉, Threshold 값이 달라지면 Precision과 Recall이 바뀌므로, 특정 Threshold에서만 모델을 평가하면 불완전한 비교가 될 수 있음.
💡 AUC는 이런 문제를 해결하기 위해 다양한 Threshold를 모두 고려한 평가 지표야.
3️⃣ AUC는 Threshold가 달라도 변하지 않는다
AUC는 ROC 커브 아래 면적을 계산하는 값이므로, 특정 Threshold에 의존하지 않아!
즉, 여러 개의 Threshold 값을 모두 반영한 "전반적인 모델 성능"을 평가하는 지표야.
📌 AUC는 모든 가능한 Threshold 값에서 TPR(Recall)과 FPR(False Positive Rate)을 계산하여 ROC 커브를 만들고, 그 면적을 측정하는 것이므로 특정 Threshold 하나만 보고 평가하는 Precision/Recall과 다르다.
4️⃣ 왜 AUC가 더 좋은 평가 지표인가?
Precision과 Recall은 Threshold에 따라 변하기 때문에, 특정 Threshold에서만 모델을 평가하는 것은 불완전할 수 있어.
반면, AUC는 다양한 Threshold를 모두 고려하여 모델의 전체적인 성능을 평가할 수 있음.
즉, 특정 Threshold를 선택할 필요 없이, 모델이 얼마나 잘 예측하는지를 한 번에 비교할 수 있는 지표야!
📌 즉, AUC는 모델의 Threshold 값에 관계없이 전반적인 분류 성능을 평가하는 데 유용하다!

차트 A: AUC 비교
두 개의 모델 A와 B가 있음.
B 모델이 A 모델보다 전체적으로 더 넓은 영역을 차지하므로 B가 더 좋은 모델.
하지만, FP 비율이 0.6을 넘을 때 A 모델이 더 좋은 성능을 보이는 부분이 있음.
즉, B 모델이 대부분의 경우 더 좋은 성능이지만, 특정 상황에서는 A가 더 나을 수도 있음.
차트 B: 모델 비교를 숫자로 정리
AUC는 숫자로 표현되기 때문에, 단순히 그래프를 비교하는 것보다 더 직관적으로 모델 성능을 평가할 수 있음.
AUC를 보면 B 모델이 전체적으로 더 성능이 좋음을 알 수 있음.
2.5 Multi-class ROC
2개 이상의 분류 클래스에서, 분류문제는 더욱 복잡해진다.
하지만 다중 클래스 문제에서는 Positive(양성)과 Negative(음성)이 단순하게 구분되지 않음!
예를 들어, 클래스가 3개(A, B, C)라면?
이진 분류처럼 Positive/Negative를 나누는 것이 어려움.
그래서 다중 클래스에서는 각 클래스를 개별적으로 이진 분류 문제로 변환하여 ROC 커브를 그린다.
이를 "One-vs-Rest(OvR)" 방법이라고 해.
즉, n개의 클래스가 있다면, 각 클래스에 대해 이진 분류를 수행하여 n개의 ROC 커브를 만든다.
📌 방법
특정 클래스(Ci)를 Positive(양성)으로 지정하고, 나머지 모든 클래스를 Negative(음성)으로 설정.
이진 분류를 수행하여 TPR과 FPR을 계산하고 ROC 커브를 그림.
모든 클래스에 대해 각각 ROC 커브를 생성하여 다중 클래스 문제를 평가할 수 있음.
예제 (클래스 A, B, C가 있는 경우)
ROC 커브 1: 클래스 A를 Positive로 보고, 나머지(B, C)를 Negative로 설정
ROC 커브 2: 클래스 B를 Positive로 보고, 나머지(A, C)를 Negative로 설정
ROC 커브 3: 클래스 C를 Positive로 보고, 나머지(A, B)를 Negative로 설정
즉, 다중 클래스 ROC는 각 클래스를 Positive로 두고, 나머지를 Negative로 설정하여 여러 개의 ROC 커브를 그리는 방식이다!
다중 클래스에서 AUC 계산 (Multi-class AUC)
다중 클래스에서도 각 클래스별 AUC를 계산할 수 있음.
가장 일반적인 방법은 각 클래스별 AUC를 구한 후 평균을 내는 것.
(즉, 모든 클래스를 균등하게 평가함.)
📌 방법
각 클래스에 대해 One-vs-Rest 방식으로 ROC 커브를 그린다.
각 클래스별로 AUC 값을 계산한다.
모든 클래스의 AUC 값을 평균 내어 전체 모델의 성능을 평가한다.
accuracy, precision, recall 과 같은 지표는 균형 잡힌 데이터 집합을 가질때, 분류 모델을 평가하는 좋은 방법이지만,
데이터가 불균형하거나 분류 클래스간 차이가 있다면 ROC / AUC 와 같은 방법으로 모델의 성능을 평가할 수 있다.
우리가 살펴본 것처럼 ROC곡선은 단순한 숫자 표현이 아니고, 전체 곡선을 표현하면서 분류기의 동작에 대한 디테일을 확인할 수 있는 방법이다.
하지만, ROC 곡선만으로는 모델간 비교가 어렵기 때문에 AUC를 사용하여 ROC곡선을 단일 수치로 환산하여 쉽게 비교할 수 있게 해준다.
요약하면 좋은 모델의 ROC곡선은 면적이 넓고, 그렇지 못한 모델의 ROC는 면적이 거의 없게 표현된다.