728x90
분류 (Classification)
- 어떤 대상을 정해진 범주에 구분해 넣는 작업
- 주어진 특성에 따라 어떤 대상을 범주(target)로 구분하는 방법
- 레이블 또는 타겟이 범주형일때 사용
- 범주가 2개인 경우 이진 분류 (Binary Classification)
- 범주가 세개 이상인 경우 다중 분류 (MultiClass Classification)
혼동 행렬(Confusion Matrix)
- sklearn.metrics.confusion_matrix
- 예측 값이 실제 값과 일치하는지 분류하는 분류표
- 표의 한쪽 열에는 예측한 범주, 다른 한쪽은 실제 범주를 나타냄
- 이진 분류의 경우 예측한 범주와 실제 범주에 따라 4가지 지표로 볼 수 있음
- True Positive : Positive로 예측된 결과가 맞음
- False Negative : Negative로 예측된 결과가 틀림
- False Positive : Positive로 예측된 결과가 틀림
- True Negative : Negative로 예측된 결과가 맞음
(1) 혼동 행렬 계산
from sklearn.metrics import confusion_matrix
confusion_matrix(df['실제값'], df['예측값'])
(2) 혼동 행렬 계산 결과 저장
tn, fp, fn, tp = confusion_matrix(df['실제값'], df['예측값']).ravel()
print('True Negative :', tn)
print('False Positive :', fp)
print('False Negative :', fn)
print('True Positive :', tp)
정확도(Accuracy)
- sklearn.metrics.accuracy_score
- (𝑇𝑃+𝑇𝑁)/(𝑇𝑃+𝐹𝑁+𝐹𝑃+𝑇𝑁)
- 전체 데이터 중 올바르게 분류 한 비율
(tp + tn) / (tp + fn + fp + tn)
from sklearn.metrics import accuracy_score
accuracy_score(df['실제값'], df['예측값'])
재현률(Recall)
- sklearn.metrics.recall_score
- 𝑇𝑃/(𝑇𝑃+𝐹𝑁)
- 실제 전체 긍정 수에서 참 긍정의 비율
tp / (tp + fn)
from sklearn.metrics import recall_score
recall_score(df['실제값'], df['예측값'])
정밀도(Precision)
- sklearn.metrics.precision_score
- 𝑇𝑃/(𝑇𝑃+𝐹𝑃)
- 예측한 전체 긍정 중 참 긍정의 비율
tp / (tp + fp)
from sklearn.metrics import precision_score
precision_score(df['실제값'], df['예측값'])
F1 Score
- sklearn.metrics.f1_score
- 2𝑇𝑃/(2𝑇𝑃+𝐹𝑃+𝐹𝑁)
- 정밀도와 재현율의 조화 평균
- 정밀도과 재현율이 0에 가까울수록 F1 score도 동일하게 낮은 값을 갖도록 하기 위함
2 * tp / (2 * tp + fp + fn)
from sklearn.metrics import f1_score
f1_score(df['실제값'], df['예측값'])
RoC(Receiver operating characteristic) Curve
- sklearn.metrics.roc_curve
- 거짓 긍정 비율(FPR)과 참 긍정 비율(TPR) 간의 관계
from sklearn.metrics import roc_curve
fpr, tpr, thresholds = roc_curve(df['실제값'], df['예측값'])
# 처음과 마지막 값은 그래프를 그리기 위해 사용되는 값
print('FPR', fpr[1:-1])
print('TPR', tpr[1:-1])
print('thresholds', thresholds[1:-1])
AUC(Area Under the Curve)
- sklearn.metrics.roc_auc_score
- Curve 영역의 면적
- 1에 가까울수록 성능이 좋음
from sklearn.metrics import roc_auc_score
roc_auc_score(df['실제값'], df['예측값'])
from sklearn.metrics import auc
auc(fpr, tpr) # X축, Y축
RoC Cruve 시각화
import matplotlib.pyplot as plt
plt.figure(figsize=(6, 6))
plt.plot(fpr, tpr, label=f'Roc Curve (AUC : {auc(fpr, tpr)} )')
plt.plot([0, 1], [0, 1], color="gray", linestyle="--")
plt.legend()

from sklearn.metrics import classification_report
print(classification_report(df['실제값'], df['예측값']))

회귀 (Regression)
- 독립변수(특성)과 종속변수(레이블)간 관계를 모델링하는 방법
- 레이블 또는 타겟이 연속형일때 사용
- 독립변수와 종속변수의 관계를 기반으로 최적의 회귀 계수를 찾음
R Squared
- sklearn.metrics.r2_score
- 실제 값의 분산 대비 예측 값의 분산 비율(최고 : 1, 최악 : 음수)
- 모델 예측 성능(설명력)을 평가하는 목적
import numpy as np
1 - (np.sum(np.square(df['실제값'] - df['예측값'])) / np.sum(np.square(df['실제값'] - df['실제값'].mean())))
from sklearn.metrics import r2_score
r2_score(df['실제값'], df['예측값'])
Mean Absolute Error
- sklearn.metrics.mean_absolute_error
- 실제 값과 예측 값의 차이를 절대값으로 변환해 평균 계산
- 오차의 크기를 그래도 반영하여 오차 평균 크기를 확인
- 작을수록 좋지만 너무 작으면 과적합일 수 있음
np.mean(np.abs(df['실제값'] - df['예측값']))
from sklearn.metrics import mean_absolute_error
mean_absolute_error(df['실제값'], df['예측값'])
Mean Squared Error
- sklearn.metrics.mean_squared_error(squared=True)
- 실제 값과 예측 값의 차이를 제곱해서 평균 계산
- 작을수록 좋지만 너무 작으면 과적합일 수 있음
- 큰 오차를 더 크게, 작은 오차는 더 작게 평가하여 이상치에 민감
np.mean(np.square(df['실제값'] - df['예측값']))
from sklearn.metrics import mean_squared_error
mean_squared_error(df['실제값'], df['예측값'])
Root Mean Squared Error
- sklearn.metrics.mean_squared_error(squared=False)
- 오차의 평균 크기를 확인하는 목적, 모델 간 잔차 비교 가능
- 이상치에 덜 민감함
- 큰 오류값 차이에 대해 크게 패널티를 주기 때문
- MSE의 크기를 줄이기 위한 목적으로 사용
np.sqrt(np.mean(np.square(df['실제값'] - df['예측값'])))
from sklearn.metrics import mean_squared_error
mean_squared_error(df['실제값'], df['예측값'], squared=False)
MSLE
- MSE방식에 로그를 적용한 것
- 결정 값이 클수록 오류값도 커지기 때문에 일부 큰 오류값들로 인해 전체 오류값이 커지는 것을 막아줌
from sklearn.metrics import mean_squared_log_error
mean_squared_log_error(df['실제값'], df['예측값'])
RMSLE
- 아웃라이어에 덜 민감함 (robust)
- 값의 변동폭이 크지 않음
- 상대적 Error를 측정함
- 예측값 = 100, 실제값 = 90일 때, RMSLE = 0.1053, RMSE = 10
- 예측값 = 10,000, 실제값 = 9,000일 때, RMSLE = 0.1053, RMSE = 1,000
- Under Estimation에 큰 패널티를 부여
from sklearn.metrics import mean_squared_log_error
mean_squared_log_error(df['실제값'], df['예측값'], squared=False)
데이터 분할
- 모델을 올바르게 학습시키기 위해서는 데이터를 분할
- 모든 데이터를 학습에 사용한 경우 일반화 성능 확인 불가
- 데이터의 일부를 학습에서 제외해서 학습이 완료된 모델을 통해 평가를 진행
- 현재 모델이 학습하지 않은 데이터에 대해 잘 예측할 수 있는지 확인
- 전체 데이터의 75%를 학습 데이터로 25%를 평가 데이터로 분할
- 학습 데이터만 머신 러닝 모델의 학습에 사용
- 평가 데이터를 이용하여 머신 러닝 모델의 성능을 평가
from sklearn.model_selection import train_test_split
train_test_split(
*arrays, # 분리하고자하는 데이터
test_size=0.25, # 테스트 데이터 비율
shuffle=True, # 데이터 셔플 적용 유무
stratify=False, # 층화 분리 적용 유무
random_state=None # 시드값
)728x90
'Activity > SK AI Dream Camp' 카테고리의 다른 글
| [SK] SK 데이터 분석을 활용한 파이썬 기초 (0) | 2025.06.30 |
|---|