성능 평가 측도 (Performance Measures)
- 단일 지표가 아니라 목적(불량 검출처럼 놓치면 안 되는 상황 등)에 맞는 지표를 골라야 하며,
- 분류는 절단점과 ROC/AUC로,
- 회귀는 오차 기반 지표로 평가하고,
- 신뢰할 수 있는 평가를 위해 데이터 분할·교차검증을 거쳐야 한다.
1. 분류 성능 평가 측도
1.1. 혼동 행렬
- 혼동 행렬 (Confusion Matrix), 정오행렬
- 주로 분류(Classification) 모델의 성능을 평가할 때 쓰는 표
- 실제 범주와 예측 범주를 교차한 행렬로, 모든 성능 지표의 기초가 된다.
- 이진 분류의 경우 2×2 행렬 형태를 가진다.
단순히 “얼마나 맞췄나(정확도)“만 보는 것이 아니라, “어떻게 틀렸나”를 파악한다. 이를 통해 비즈니스 목적에 맞춰 모델을 튜닝할 수 있다.
- 구성 요소
- T (True) / F (False): 예측이 맞았으면 True, 틀렸으면 False
- P (Positive) / N (Negative): 모델이 Positive(양성)로 예측했으면 P, Negative(음성)로 예측했으면 N
| 실제 \ 예측 | 예측 양성 Positive/+/1 | 예측 음성 Negative/−/0 |
|---|---|---|
| 실제 양성 Positive/+/1 | TP; True Positive 참긍정, 진양성 | FN; False Negative 거짓부정, 위음성(미탐) |
| 실제 음성 Negative/−/0 | FP; False Positive 거짓긍정, 위양성(오탐) | TN; True Negative 참부정, 진음성 |
cf. 혼동 행렬과 유사한 논리를 사용하는 개념
1.2. 주요 지표
혼동행렬의 수치를 조합하여 다양한 성능 지표를 계산한다.
(1) 전체적 지표
-
오분류율
- (전체 데이터 중 잘못 분류한 비율)
-
정분류율, 정확도 (Accuracy)
-
(전체 데이터 중 올바르게 분류한 비율)
-
데이터 불균형(Imbalanced Data)이 심할 경우 신뢰하기 어렵다.
-
예: 99명이 정상, 1명이 암일 때 무조건 정상이라고 찍어도 정확도는 99%
-
(2) 조건부 지표
상황에 따라 어떤 지표를 우선할지가 달라진다.
-
정밀도 (Precision)
-
-
(양성으로 예측한 것 중 실제로 양성인 비율)
-
예: 스팸 메일 필터링 (정상 메일을 스팸으로 분류하면 안 된다.)
-
-
재현율 (Recall), 민감도 (Sensitivity), TPR
-
-
(실제로 양성인 것 중 맞게 예측한 비율)
-
Precision과 Recall은 trade-off 관계
-
예: 질병 진단 (실제 환자를 정상으로 분류하면 안 된다.)
-
-
특이도 (Specificity), TNR
- (실제로 음성인 것 중 맞게 예측한 비율)
-
제1종 오류 (Type I Error, FPR)
-
제2종 오류 (Type II Error, FNR)
(3) 복합 지표
-
-score, -measure, 값
-
(정밀도와 재현율의 조화평균)
-
데이터 불균형이 심할 때 정확도보다 더 선호된다.
-
-
균형 정확도
- (재현율과 특이도의 기하평균)
(4) ROC 곡선
- 절단점(Cuf-off)
- 0.9로 설정하면 확률이 90% 이상일 때만 양성으로 판단하므로, 양성 판정에 신중해진다. (FPR과 TPR이 모두 낮아짐)
- 0.1로 설정하면 확률이 10%만 넘어도 양성으로 판단하므로, 양성 판정을 남발하게 된다. (FPR과 TPR이 모두 높아짐)
- 임계값을 1에서부터 0까지 점진적으로 내리면서, 각 임계값마다 계산되는 (FPR, TPR) 값을 그래프 위의 좌표로 찍어 선으로 연결한 것이 바로 ROC 곡선이다.
- ROC 곡선 (Receiver Operating Characteristic Curve; 수신기 작동 특성 곡선)
- FPR, TPR을 임계값에 따라 그린 곡선
- 가능한 모든 임계값(절단점)에 대해 계산
-
X축: FPR (False Positive Rate), 제1종 오류
- 실제 음성(Negative)인 대상 중에서 모델이 양성(Positive)으로 잘못 예측한 비율
- FPR이 0에 가까울수록 모델이 음성 데이터를 음성으로 잘 맞춘다는 의미
-
Y축: TPR (True Positive Rate), Recall/Sensitivity
- 실제 양성(Positive)인 대상 중에서 모델이 양성으로 올바르게 예측한 비율
- TPR이 1에 가까울수록 모델이 양성 데이터를 잘 잡아낸다는 의미
-
ROC 곡선의 해석 방법
- 좌상단 (0, 1) 방향으로 굽어질수록 우수한 모델이다. 이는 잘못 분류하는 비율은 낮으면서(FPR=0), 올바르게 분류하는 비율은 높다(TPR=1)는 것을 뜻한다.
- 대각선 ( 직선)은 무작위로 추측(Random Guessing)하는 경우의 성능을 의미한다. 무작위 모델은 ROC 곡선이 이 대각선에 가깝게 그려진다.
- 극단적인 케이스로, 항상 positive라고 하면 TPR=FPR=1, 항상 negative라고 하면 TPR=FPR=0이 된다.
-
ROC 곡선 사용 시 유의할 점
- 클래스 불균형(Class Imbalance): 데이터 중 양성 데이터가 극단적으로 적고 음성 데이터가 대부분인 상황(예: 희귀 질병 진단, 금융 사기 탐지 등)에서는 ROC 곡선이 모델의 실제 성능보다 과도하게 낙관적으로 보일 수 있다.
- 이럴 때는 PR 곡선(Precision-Recall Curve, 정밀도-재현율 곡선)을 함께 검토하는 것이 대안이 될 수 있다.
(5) AUC
- AUC (Area Under ROC Curve)
- ROC 곡선 자체는 선으로 표현되기 때문에 여러 모델의 성능을 정량적으로 직접 비교하기 어려울 때가 있어, 이를 보완하기 위해 ROC 곡선 아래의 면적을 계산한 값
- AUC 값은 항상 0.5에서 1 사이의 값을 가진다.
- 0.5: 무작위 예측 수준으로, 분류기로서의 가치가 거의 없음을 의미한다.
- 1.0: 이론상 가능한 이상적인 예측 분류
2. 모델링 과정
학습데이터 → 전처리 → 모델링 → 검증의 흐름에서, 일반화 오류 추정과 하이퍼파라미터 튜닝 방법이 단계적으로 제시된다.
cf. 모델 파라미터
모델 파라미터/가중치/편향 (Model Parameters)
-
모델이 학습 과정에서 데이터로부터 자동으로 학습하는 값
- 신경망의 가중치(weight)와 편향(bias)
- 선형회귀의 회귀계수
- CNN의 필터(커널) 값
-
이 값들은 사람이 직접 설정하지 않고, 학습 알고리즘(예: 경사하강법)이 손실 함수를 최소화하면서 점진적으로 조정
2.1. 하이퍼파라미터 (Hyperparameters)
-
학습을 시작하기 전에 사람이 직접 설정하는 값들로, 학습 과정 자체를 제어
- 학습률(LR; learning rate)
- 배치 크기(batch size)
- 에폭 수(epochs)
- 신경망: 층 수, 각 층의 뉴런 수
- 옵티마이저(optimizer) 종류(Adam, SGD 등)
- 드롭아웃(dropout) 비율
- 정규화 강도(L1/L2 regularization)
- CNN: 필터 크기, 채널 개수
-
하이퍼파라미터는 학습 데이터로부터 직접 학습되지 않고, 보통 검증 데이터셋에서의 성능을 보면서 그리드 서치, 랜덤 서치, 베이지안 최적화 같은 방법으로 튜닝
-
cf.
- Hyperparameter Optimization
- AutoML
3. 검증을 위한 데이터셋 분할
-
데이터셋 분할 (Dataset Splitting)
- 머신러닝 및 딥러닝 모델의 학습과 객관적인 성능 평가를 위해 전체 데이터를 서로 다른 역할을 하는 하위 데이터셋으로 나누는 과정이다.
-
데이터 구성
- 훈련(Training) 데이터와 테스트(Test) 데이터로 분리하여 학습 및 검증
-
dataset 분할
- train 80%, validation 10%에 test 10% 등
- 테스트 데이터는 절대 모델 학습이나 튜닝에 사용되지 않아야 한다.
3.1. 데이터셋의 구성 요소
일반적으로 다음과 같이 세 가지 데이터셋으로 분할한다.
-
학습 데이터셋 (Training Set)
- 역할: 모델을 학습(가중치 업데이트)시키는 데 직접 사용되는 데이터입니다.
- 비중: 전체 데이터 중 가장 큰 비중을 차지합니다.
-
검증 데이터셋 (Validation Set)
- 역할: 학습 중인 모델의 성능을 중간 검증하는 데 사용됩니다.
- 용도: 모델의 과적합(Overfitting) 여부를 판단하고, 모델의 하이퍼파라미터(예: 학습률, 레이어 수 등)를 조정 및 튜닝하는 기준이 됩니다.
-
테스트 데이터셋 (Test Set)
- 역할: 학습과 튜닝이 모두 끝난 최종 모델의 ‘일반화 성능(Unseen Data에 대한 성능)‘을 평가하는 데 사용됩니다.
- 주의사항: 모델 학습 및 튜닝 과정에 절대 관여해서는 안 되며, 오직 마지막 평가 단계에서 한 번만 사용해야 합니다.
3.2. 대표적인 분할 비율
데이터의 양과 상황에 따라 다르지만, 일반적으로 다음과 같은 비율이 주로 사용된다.
-
분할 전략
- 학습 데이터만으로 검증 (과적합 위험)
- → Train/Test (훈련/테스트) 분할
- → Train/Validation/Test (훈련/검증/테스트) 분할
- → 교차 검증 (Cross-Validation)
- (k-fold: validation fold를 돌아가며 사용)
- 뒤로 갈수록 일반화 성능 추정이 신뢰도가 높아진다.
-
학습 : 검증 : 테스트
- 60 : 20 : 20 또는 80 : 10 : 10
-
학습 : 테스트
- 검증 단계를 생략하고 간단히 구성할 때
- 70 : 30 또는 80 : 20
-
cf. 빅데이터 환경 (수백만 개의 데이터)
- 검증과 테스트에 각각 1%씩만 할당하고,
- 나머지 98%를 학습에 사용하기도 한다.
3.3. 분할 시 주의할 점
-
데이터 누수(Data Leakage) 방지
- 테스트 데이터의 정보가 학습 과정(예: 스케일링, 결측치 대체 등)에 반영되지 않도록 철저히 분리해야 한다.
-
층화 추출(Stratified Split)
- 분류(Classification) 문제의 경우, 원본 데이터의 클래스(라벨) 비율이 학습, 검증, 테스트 데이터셋에 고르게 유지되도록 분할하는 것이 좋다.
-
랜덤성 확보
- 데이터가 특정 순서대로 정렬되어 있는 경우가 많으므로, 분할 전에 데이터를 무작위로 섞는(Shuffle) 과정이 필요하다.
3.4. 분할 도구
- Scikit-learn의 train_test_split
- 파이썬 환경에서 데이터를 다룰 때 사실상의 표준(De facto standard)으로 사용되는 라이브러리이다.
- 테이블 형태의 데이터(Pandas DataFrame, NumPy Array)를 나눌 때 매우 편리하다.
from sklearn.model_selection import train_test_split
# X: 입력 특성(Feature), y: 타겟 레이블(Target)
# 전체 데이터의 20%를 테스트 데이터셋으로 분할
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
random_state=42, # 결과 재현을 위한 난수 초깃값
stratify=y # 분류(Classification) 문제에서 클래스 비율을 균등하게 유지
)- 주요 옵션
- test_size (또는 train_size)
- 분할할 비율을 지정한다.
- random_state
- 코드를 다시 실행해도 동일하게 분할되도록 제어하는 seed 값이다.
- stratify
- 타겟 데이터의 클래스 분포 비율을 유지하며 분할하여 데이터 불균형 문제를 완화해 준다. (분류 문제에서 필수 권장)
- test_size (또는 train_size)
4. 회귀(Regression) 성능 평가
| 지표 | 정의 | 특징 |
|---|---|---|
| MAE | (1/n)Σ|yᵢ−ŷᵢ| | 절대 오차의 평균 |
| MAPE | (1/n)Σ(|yᵢ−ŷᵢ|/|yᵢ|)×100% | 실제 값 대비 상대 오차 |
| MSE | (1/n)Σ(yᵢ−ŷᵢ)² | 제곱으로 부호 영향 제거 |
| RMSE | √MSE | MAE와 유사하나 일치하진 않음 |
| R² (결정계수) | 1 − SSE/SST | 모델이 설명하는 분산 비율, 1에 가까울수록 좋음 |
MAPE는 단위에 무관한 상대 오차라 서로 다른 스케일의 모델 비교에 유용하고, MSE/RMSE는 큰 오차에 더 큰 패널티를 준다.
- 슬라이드 예시 데이터 기준
- MAE = 2.93, MAPE = 12.21%, MSE = 11.73, RMSE = 3.425