Data Science 4.Model Evaluation
이번 포스트는 Model을 평가하는 방법 (Model Evaluation) 대해 다룬다.
Model Evaluation
모델 평가의 목적 : 진짜 성능을 측정하자
- Training 성능이 아니라 Unseen Data에서의 성능을 보는 것
- 여러 모델 중에서 테스트 데이터에서 가장 잘하는 모델을 선택
- Training을 잘한다고 좋은 모델은 아님
- OverFitting 위험이 존재
Evaluation Metrics
어떻게 모델의 성능을 측정할까?
Bias (편향)
- 너무 단순해서 생기는 오류
- underfitting, 데이터 패턴을 잡지 못한다.
Variance (분산)
- 데이터에 너무 민감해서 생기는 오류
- overfitting, 노이즈까지 학습
Confusion Matrix

의미
- TP : 맞춘 Positive
- FP : 틀린 Positive (Type 1 Error)
- FN : 놓친 Positive (Type 2 Error)
문제마다 FP / FN 중요도가 다르다.
1. 정확도 (Accuracy) \(Accuracy=\frac{TP+TN}{TP+TN+FP+FN}\)
- 전체 중에서 맞춘 비율
- 클래스가 균형일 때,
- FN / FN의 중요도가 동일할 때 사용
- 클래스가 불균형일 때는 사용하면 안된다.
- 99% 정상, 1% 이상인 경우
- 전부 정상이라고 해도 정확도는 99%
- 쓰레기 모델이지만 좋아보임.
2. 정확도 (신뢰도) (Precision) \(Precision=\frac{TP}{TP+FP}\)
- 내가 Positive라고 한 것 중 몇개가 진짜 Positive인가
- FP를 줄이는게 중요한 상황에 쓰임
- 스팸 필터, 금융 사기
- 정상인데 막으면 안되는 경우
3. 탐지율(Recall) \(Recall=\frac{TP}{TP+FN}\)
- 실제 Positive 중에 몇 개를 잡았냐
- FN을 줄이는 게 중요한 상황에 쓰임
- 암 진단, 이상 탐지
- 놓치면 큰일 나는 경우
F1-Score
\[F1 = 2 \cdot \frac{Precision \cdot Recall}{Precision + Recall}\]- Precision과 Recall을 균형 있게 고려한 값
- 단순 평균이 아닌 harmonic mean 사용
- 둘 중 하나라도 낮으면 F1 도 크게 떨어진다.
- 불균형하면 강하게 페널티
F1-score 사용 경우
- 하나의 metric으로 보고 싶을 때
- class imbalance가 있을 때
- FP, FN 이 둘 다 중요할 때
Evaluation Methods
Holdout Method
- 가장 기본적인 평가 방식 : 데이터를 한 번만 둘로 나누는 것
- Training set : 모델 학습용
- Test set : 학습에는 안 쓰고, 마지막 평가만 하는 용도
- 방법
- 데이터를 한 번 분할한다.
- Training set으로 모델을 만든다.
- Test Set으로 성능을 잰다.
- 장점 : 구현이 쉽고, 빠르고, 큰 데이터에서는 꽤 괜찮게 작동한다.
- 단점 : 결과를 나눈 방식에 너무 의존한다. / 데이터를 낭비한다.
- 평가 결과가 split 운에 따라 흔들릴 수 있다.
- High Variance
K-Fold Cross Validation
Holdout의 약점을 줄이기 위해 나온 방법
- 데이터를 한 번만 나누지 말고, 여러 번 나눠서 평균 성능을 보자
- 방법
- 데이터를 k개의 Fold로 나눈다.
- 첫 번째 조각을 validation/test처럼 쓰고, 나머지 4개로 학습
- 두 번째 조각을 validation/test…
- …
- 총 K번 학습/평가
- 최종 성능 = 여러 번 평가한 성능의 평균
- 장점 : 결과가 더 안정적, 데이터 낭비가 적다.
- 단점 : K번 학습해야 하기 때문에 계산량이 더 큼
LOOCV (Leave-One-Out Cross Validation)
- 데이터가 아주 적을 때 극단적으로 사용하는 경우
- 한 번에 딱 1개만 test로 빼자
- 일반적인 K-fold에서는 매번 (k-1)/k 만큼 학습에 사용
- 거의 모든 데이터가 전부 학습에 사용
- 데이터가 적은데 학습 세트까지 작아지면 모델 성능이 비관적으로 나올 가능성이 크다.
- LOOCV 방법
- 데이터가 n개면 1개는 test, 나머지 n-1개는 training
- 한 데이터 포인트를 남겨두고 나머지로 학습
- 총 n번 반복하고 모든 데이터에 대한 반복
- 평균 error 계산
- 데이터가 n개면 1개는 test, 나머지 n-1개는 training
- 장점 : 매번 거의 모든 데이터를 학습에 사용, 데이터가 적을 때 아주 효율적, 성능 추정에서 training data 부족 문제를 줄일 수 있다.
- 단점 : 계산량이 매우 크다. / Test Set이 매번 1개뿐
Stratified Cross Validation
- 문제 상황 : 클래스 비율이 한쪽으로 심하게 치우져 있다.
- Class Imbalance 상황
- Class Imblance 상황에서 랜덤 Split의 문제
- 어떤 fold 에는 minority class 가 거의 없을 수 있다.
- Fold마다 class Distribution이 달라진다.
- Fold 간의 성능 차이가 커지고 평균 성능이 믿기 어려워지는 상황
- 핵심 아이디어 : 각 Fold가 전체 클래스 비율을 최대한 비슷하게 유지하도록 나눔
- 예를 들어 전체가 90% negative / 10% positive
- 각 fold도 대략 90% negative / 10% positive
Bootstrap
Bootstrap : Sampling with Replacement
- 데이터가 적으면 평가가 불안정해진다.
- 문제상황
- 데이터가 적어서 모델이 제대로 학습을 못함
- 성능 추정이 들쭉날쭉함
- Holdout / CV 하면 학습 데이터 더 줄어든다.
- 데이터를 여러 번 복제해서 여러 개 dataset처럼 쓰자
Bootstrap
-
하나의 데이터셋으로부터 여러 개의 데이터셋을 만들어서 사용
-
복원 추출 : 뽑은 데이터를 다시 넣고 또 뽑는다.
- 특정 split에 의존 안 함.
- training size를 유지
- 더 안정적인 성능을 추정
0.632 Bootstrap
\[Acc = 0.368 \cdot Acc_{train} + 0.632 \cdot Acc_{OOB}\]- training accuracy : 너무 optimistic (과적합 느낌)
- test accuracy : 너무 pessimistic (데이터 적어서)
train은 덜 믿고, OOB를 더 믿는다.
train (36.8%) , OOB (63.2%)
- 장점 : 최대한 데이터 활용, 성능 추정 안정적, 분산까지 추정 가능
\[(1 - \frac{1}{n})^n\]왜 0.632인가?
- 이 데이터가 한 번도 안 뽑힐 확률
- 약 36.8% 데이터는 선택 안 됨.
- 63.2% 최소 1번 이상 선택
Statistical Tests
문제상황 :
Model A가 평균 Accuracy가 더 높다. 그러면 A가 진짜 더 좋은 모델일까?
- 항상 그렇지 않다.
- 데이터 샘플링 randomness
- noise
- 모델 variance
T-Test
- 이 차이가 statistically meaningful 한가?
- 평균 차이가 0인지 아닌지 검정
- 각 Fold 마다
- 가설 검정 = 0 : 차이가 없다.
- 가설 검정 != 0 : 차이가 있다.
T-statistic \(t = \frac{\bar{d}}{s_d / \sqrt{k}}\)
- 차이가 크고 + 변동이 작으면 -> t가 크다
- 차이가 작거나 + 변동이 크면 -> t가 작다
P-value
\[p = \text{H0}\]p-value: 이게 우연일 확률
기준
| p-value | 해석 |
|---|---|
| < 0.05 | 의미 있음 (reject H₀) |
| > 0.05 | 의미 없음 (fail to reject H₀) |
- 평균이 더 높다고 좋은 모델이 아니다.
- 통계적으로 유의미해야 좋은 모델이다.
Ensemble
왜 서로 다른 모델들은 성능이 다를까?
- 모델마다 데이터를 바라보는 방식이 다르다.
- Naive Bayes : 특징들이 서로 독립적이라고 가정
- Logistic Regression / Perceptron /Linear SVM
- 데이터를 대체로 선형 경계로 나눌 수 있다고 가정
- Decision Tree
- 여러 번 조건 분기를 하면 복잡한 경계도 만들 수 있다고 봄
Complexity
- 복잡한 모델 : 데이터를 세밀하게 맞추기 가능, 다만 과적합 위험 존재
Objective
- 최적화 목표가 다르다.
Sensitivity to noise / outliers
- 노이즈나 이상치에 얼마나 민감한가
Bias
- 모델이 현실을 얼마나 강하게 단순화되느냐
- Bias 가 높은 모델의 특징
- 가정이 너무 강하다 : 현실 데이터 충분히 표현하지 못함.
- 복잡합 패턴을 못 잡는다 : 데이터가 곡선 형태로 나뉘는데 직선만 쓰겠다고 하면 잘 못 맞춘다.
- underfitting : 훈련 데이터조차 잘 못 맞춤
Variance
- 훈련 데이터가 조금 바뀌었을 때 모델이 얼마나 흔들리느냐
- Variance가 높은 모델의 특징
- 데이터에 따라 결과가 많이 바뀜
- noise / outlier에 민감
- Overfitting
\[\text{Error} = \text{Bias}^2 + \text{Variance} + \text{Irreducible Noise}\]예측 에러는 어디서 오는가?
Bias
- 모델의 평균적인 예측이 정답과 얼마나 떨어져 있는가
- 모델이 근복적으로 잘못된 방향으로 배우는 오차
왜 제곱인가
- MSE 전개 -> 주로 제곱 형태로 나옴
Variance
- 모델 예측이 훈련 데이터에 따라 얼마나 들쭉날쭉한가
- 데이터 샘플링이 바뀔 때 예측이 얼마나 흔들리는가
Irreducibile Noise
- 줄일 수 없는 잡음
- 측정 오차
- 데이터 자체의 불확실성
- 본질적으로 랜덤한 요소
Bias and Variance of Classifiers
1. Basic Classifier
- Decision Tree
- Bias : Low , Variance : High
- 복잡한 경계도 잘 만들 수 있다. bias가 낮다.
- 잘 맞출 수는 있는데 불안정하다.
- Navie Bayes
- Bias : High , Variance : Low
- 독립 가정이 너무 강해서 현실을 단순화를 많이 함
- 안정적이지만 표현력이 약하다.
2. Linear Classifiers
- Logisitc Regression
- Bias : Medium / Variance : Low
- 선형 경계를 쓰기에 유연하지는 않다.
- Perceptron
- Bias : Medium to High / Variance : Low to Medium
- perceptron 도 선형 모델이라 단순한 편이다.
- Linear SVM
- Bias : Medium / Variance : Medium
- 선형 경계지만 margin을 최대화 perceptron보다 더 robust 한 경향이 있다.
3. Advanced SVM
- Soft-Margin SVM
- Bias : Medium to Low / Variance : Medium
- 조금 틀리는 걸 허용하면서 더 현실적인 경계를 만든다.
- Nonlinear SVM
- Bias : Low / Variance : Medium to High
- 표현력이 매우 커지므로 bias는 낮고, 모델이 복잡해져서 분산이 더 올라간다.
Ensemble Learning
- 하나의 모델만 믿지 말고, 여러 모델을 합쳐서 더 강한 예측기를 만들자
- Weak Model
- 개별적으로는 완벽하지 않지만 어느 정도 쓸 만한 예측은 하는 모델
- 여러 모델을 합치면 좋아지는가?
- Accuracy 향상
- Overfitting 완화
- robust performance
왜 앙상블이 성능을 올릴까?
- Ensemble이 건드리는 것 : Variance
-
Variance 계산 \(Var(f_{ens}) = Var\left(\frac{1}{k} \sum f_i\right) = \frac{1}{k^2} \sum Var(f_i)\)
- 모델 개수 k가 많아질수록 Variance가 줄어든다.
언제 ensemble이 다양한가?
- 만약 모델들이 다 똑같다면?
- 평균을 해도 Variance는 그대로
- 모델 간 Correlation이 낮아야 한다.
- k 증가 : Variance 감소
- p (상관도) 증가 : variance 감소 효과 줄어듬
Bagging
-
Bagging = Bootstrap + Aggregating
- Parallel (모델은 독립적으로 학습)
- 여러 모델을 독립적으로 병렬 학습
- 마지막에 평균/투표
- variance를 줄이는 데 강하다.
- 대표 예 : Random Forest
- Decision Tree + Bagging
과정
- Bootstrap Sampling : 복원 추출로 여러 dataset 생성
- 각 dataset으로 모델 학습
- 결과 평균
Boosting
-
이전 모델의 실수를 다음 모델이 보완
- Sequential (모델들이 서로 의존)
- 이전 모델이 틀린 걸 다음 모델이 더 집중해서 학습
- 모델들이 순차적으로 쌓임
- Bias가 줄이는 데 강한 경우가 많다.
- 대표 예 : AdaBoost, Gradient Boosting, XGBoost
과정
- 모델 1 학습
- 틀린 데이터 찾기
- 그 데이터의 중요도를 향상
- 다음 모델이 더 집중해서 학습
AdaBoost
-
Boosting 의 대표 알고리즘
- 모든 데이터 동일 weight
- 모델 학습
- 틀린 데이터 weight 증가
- 다음 모델이 hard sample 집중
-
모델 가중치 \(\alpha_m = \frac{1}{2} \log \frac{1 - \epsilon_m}{\epsilon_m}\)
-
최종 예측 \(F(x) = sign\left(\sum \alpha_m f_m(x)\right)\)