2025. 3. 20. 16:29ㆍ데이터 분석/데이터 사이언스
7.3 모델 성능 평가 (Model Performance Evaluation)
머신러닝 모델의 성능을 평가하는 것은 모델이 얼마나 정확한 예측을 수행하는지 판단하는 중요한 과정이다.
모델 성능 평가 방법은 예측하는 문제 유형(회귀 또는 분류)에 따라 다르게 적용된다.
이 장에서는 회귀 모델과 분류 모델의 성능 평가 지표를 각각 다룬다.
7.3.1 회귀 모델 성능 평가 지표
회귀(Regression) 모델은 연속적인 수치를 예측하는 문제에 사용된다.
예를 들어, 주택 가격 예측, 기온 예측, 매출 예측 등이 이에 해당한다.
대표적인 회귀 모델 평가 지표는 다음과 같다:
- 평균 제곱근 오차(RMSE, Root Mean Squared Error)
- 평균 절대 오차(MAE, Mean Absolute Error)
- 결정 계수(R² Score, Coefficient of Determination)
1) 평균 제곱근 오차 (RMSE, Root Mean Squared Error)
RMSE는 예측 값과 실제 값의 차이를 제곱하여 평균을 구한 후, 제곱근을 취한 값이다.
값이 작을수록 모델의 예측 오류가 적다는 것을 의미한다.
RMSE 공식:
RMSE = sqrt( (1/n) * Σ (y_true - y_pred)² )
- y_true: 실제 값
- y_pred: 모델의 예측 값
- n: 샘플 개수
📌 Python 코드 예제 (RMSE 계산)
from sklearn.metrics import mean_squared_error
import numpy as np
# 실제 값과 예측 값
y_true = np.array([3, 5, 2.5, 7])
y_pred = np.array([2.8, 4.9, 3, 6.8])
# RMSE 계산
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
print("RMSE:", rmse)
✅ RMSE 특징
- 오류가 클수록 더 크게 반영 (제곱 연산)
- 이상치(Outlier)에 민감
2) 평균 절대 오차 (MAE, Mean Absolute Error)
MAE는 예측 값과 실제 값의 차이의 절대값을 평균낸 값이다.
MAE 공식:
MAE = (1/n) * Σ |y_true - y_pred|
📌 Python 코드 예제 (MAE 계산)
from sklearn.metrics import mean_absolute_error
# MAE 계산
mae = mean_absolute_error(y_true, y_pred)
print("MAE:", mae)
✅ MAE 특징
- 이상치(Outlier)에 영향을 덜 받음
- RMSE보다 해석이 쉬움 (실제 오차 크기와 동일한 단위)
3) 결정 계수 (R² Score, Coefficient of Determination)
R² Score는 모델이 실제 데이터를 얼마나 잘 설명하는지 나타내는 지표이다.
값이 1에 가까울수록 모델의 설명력이 높고, 0에 가까울수록 설명력이 낮다.
값이 0 이하일 경우, 평균값을 예측하는 단순 모델보다 성능이 떨어짐을 의미한다.
R² Score 공식:
R² = 1 - (Σ (y_true - y_pred)²) / (Σ (y_true - mean(y_true))²)
📌 Python 코드 예제 (R² Score 계산)
from sklearn.metrics import r2_score
# R² Score 계산
r2 = r2_score(y_true, y_pred)
print("R² Score:", r2)
✅ R² Score 특징
- 1에 가까울수록 모델이 데이터를 잘 설명함
- 0이면 모델이 단순한 평균값을 예측하는 것과 동일한 성능을 가짐
- 0보다 작으면 평균값을 예측하는 단순 모델보다 성능이 낮음을 의미
7.3.2 분류 모델 성능 평가 지표
분류(Classification) 모델은 데이터를 특정 카테고리(클래스)로 분류하는 문제에 사용된다.
예를 들어, 스팸 메일 분류, 질병 진단, 고객 이탈 예측 등이 이에 해당한다.
대표적인 분류 모델 평가 지표는 다음과 같다:
- 정확도(Accuracy)
- 정밀도(Precision)
- 재현율(Recall)
- F1-Score
1) 정확도 (Accuracy)
정확도는 전체 데이터 중에서 맞게 분류된 샘플의 비율을 의미한다.
정확도 공식:
Accuracy = (TP + TN) / (TP + TN + FP + FN)
- TP (True Positive): 실제 값이 1이고 예측도 1
- TN (True Negative): 실제 값이 0이고 예측도 0
- FP (False Positive): 실제 값이 0인데 1로 예측
- FN (False Negative): 실제 값이 1인데 0으로 예측
📌 Python 코드 예제 (정확도 계산)
from sklearn.metrics import accuracy_score
# 실제 값과 예측 값
y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred = [1, 0, 1, 0, 0, 1, 1, 0]
# 정확도 계산
accuracy = accuracy_score(y_true, y_pred)
print("Accuracy:", accuracy)
✅ 정확도의 한계
- 데이터 불균형 문제에 취약
- 예) 암 환자 예측 (환자가 5%만 존재) → 무조건 "암 없음"으로 예측하면 95% 정확도
2) 정밀도 (Precision)와 재현율 (Recall)
정밀도(Precision): 모델이 1이라고 예측한 것 중 실제로 1인 비율
Precision = TP / (TP + FP)
재현율(Recall, 민감도): 실제 1인 데이터 중 모델이 1로 맞춘 비율
Recall = TP / (TP + FN)
📌 Python 코드 예제 (Precision, Recall 계산)
from sklearn.metrics import precision_score, recall_score
# 정밀도 계산
precision = precision_score(y_true, y_pred)
print("Precision:", precision)
# 재현율 계산
recall = recall_score(y_true, y_pred)
print("Recall:", recall)
✅ Precision vs Recall 차이점
- Precision이 높으면 잘못된 양성 예측(FP)이 적음
- Recall이 높으면 실제 양성(TP)을 놓치지 않음
3) F1-Score
F1-Score는 정밀도(Precision)와 재현율(Recall)의 조화 평균(Harmonic Mean)이다.
F1-Score 공식:
F1-Score = 2 * (Precision * Recall) / (Precision + Recall)
📌 Python 코드 예제 (F1-Score 계산)
from sklearn.metrics import f1_score
# F1-Score 계산
f1 = f1_score(y_true, y_pred)
print("F1-Score:", f1)
✅ F1-Score 특징
- Precision과 Recall의 균형을 맞추는 지표
- 데이터 불균형이 있는 경우 유용