오분류에 대한 추정치는 모델이 잘못된 분류를 얼마나 많이 하는지 측정하는 지표입니다.
분류 모델의 성능을 평가할 때 오분류율(misclassification rate) 또는 오차 행렬(confusion matrix)을 사용하여
각 클래스에 대한 예측 오류를 분석할 수 있습니다.
오분류 추정치는 모델이 얼마나 정확하게 분류하는지 또는 잘못 분류하는지를 이해하는 데 중요한 역할을 합니다.
오분류에 대한 추정치
오분류율은 전체 예측 중 잘못된 예측의 비율을 의미합니다. 분류의 정확도를 측정할 때, 정확도(accuracy)와 오분류율을 함께 살펴보는 것이 일반적입니다.
- 오분류율 계산: 1 - Accuracy = (FN + FP) / (TN + TP + FN + FP)
- 정확도(정분류율) : 정확도= (TN + TP) / (TN + TP + FN + FP)
-
- : 올바르게 예측된 양성 사례 수 (True Positives) : 실제도 양성이고 예측도 양성인 경우
- TN: 올바르게 예측된 음성 사례 수 (True Negatives) : 실제도 음성이고 예측도 음성인 경우
- : 틀리게 예측된 양성 사례 수 (False Positives) : 실제는 음성인데 양성으로 잘못 예측한 경우
- FN: 틀리게 예측된 음성 사례 수 (False Negatives) : 실제는 양성인데 음성으로 잘못 예측한 경우
from sklearn.metrics import precision_score, recall_score, f1_score
# 정밀도, 재현율, F1 스코어 계산
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
print(f"정밀도: {precision:.2f}")
print(f"재현율: {recall:.2f}")
print(f"F1 스코어: {f1:.2f}")
F1 스코어 해석 기준
- 0.9 - 1.0: 매우 우수한 성능. 정밀도와 재현율이 모두 높은 상태로, 거의 완벽한 예측.
- 0.8 - 0.9: 좋은 성능. 대부분의 경우에서 높은 정확도로 예측할 수 있음.
- 0.7 - 0.8: 평균 이상의 성능. 예측이 꽤 좋은 편이지만, 더 개선될 여지가 있음.
- 0.6 - 0.7: 평균 성능. 어느 정도 예측은 가능하지만, 오분류가 꽤 많을 수 있음.
- 0.5 - 0.6 이하: 낮은 성능. 정밀도와 재현율 중 하나 이상이 낮아서 전반적인 예측 성능이 떨어짐.
- F1 스코어가 0.8 이상이면 일반적으로 좋은 모델로 간주됩니다.
- 특히 데이터가 불균형할 때 F1 스코어는 유용한 평가 지표로, 정밀도와 재현율의 균형을 평가할 수 있습니다.
AR(Accuracy Rate) = (TP + TN) / n
Accuracy Rate 해석
정확도는 모델이 전체 샘플에서 정확하게 예측한 비율을 나타내며, 0에서 1 사이의 값을 가집니다. 값이 1에 가까울수록 모델의 성능이 좋음을 의미합니다.
정확도의 한계
정확도는 데이터가 불균형할 때 유용하지 않을 수 있습니다.
예를 들어, 95%가 음성 클래스인 데이터셋에서 모두 음성으로 예측하면 정확도는 높게 나오지만,
양성 클래스에 대해 전혀 올바른 예측을 하지 못하게 됩니다. 이러한 경우, F1 스코어나 ROC-AUC와 같은 다른 지표도
함께 고려하는 것이 좋습니다.
1. ROC Curve (수신자 조작 특성 곡선)
ROC Curve는 민감도 (Sensitivity)와 1 - 특이도 (Specificity)를 기반으로 모델의 성능을 시각화한 그래프입니다.
모델의 예측 확률 임계값(threshold)을 변화시키면서 True Positive Rate (TPR)와 False Positive Rate (FPR)의 관계를
그립니다.
ROC Curve의 해석
ROC Curve에서 대각선(FPR = TPR)은 랜덤 모델의 성능을 의미합니다.
즉, ROC Curve가 이 대각선보다 높이 위치할수록, 모델의 성능이 우수함을 나타냅니다.
- 왼쪽 위 모서리에 가까울수록 좋은 모델입니다.
이는 높은 TPR과 낮은 FPR을 의미하므로, 양성을 잘 예측하면서도 잘못된 예측이 적음을 의미합니다.
2. AUROC (Area Under the ROC Curve)
AUROC는 ROC Curve 아래의 면적을 계산한 값입니다. 0에서 1 사이의 값을 가지며, 1에 가까울수록 성능이 우수합니다.
- AUROC = 1: 완벽한 모델 (모든 양성, 음성을 정확하게 분류).
- AUROC = 0.5: 랜덤 모델과 동일한 성능 (ROC Curve가 대각선과 일치).
- AUROC < 0.5: 성능이 무작위보다 낮은 경우 (예측이 부정확).
AUROC의 해석
- AUROC이 0.7~0.8이면 보통 성능이 좋다고 판단하며, 0.8~0.9는 훌륭한 모델, 0.9 이상이면 거의 완벽한 모델로 간주됩니다.
- 데이터가 불균형할 때도 AUROC는 성능 평가 지표로 유용합니다. **정확도(AR)**가 높은 경우라도 데이터의 양성, 음성 예측에 대한 민감도와 특이도를 고려하여 모델의 전반적인 성능을 평가할 수 있기 때문입니다.
from sklearn.metrics import roc_curve, auc
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# 예시 데이터 생성 및 분할
X, y = make_classification(n_samples=1000, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 로지스틱 회귀 모델 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# ROC Curve 및 AUROC 계산
y_pred_proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
roc_auc = auc(fpr, tpr)
# ROC Curve 시각화
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, color="blue", label=f"ROC Curve (AUROC = {roc_auc:.2f})")
plt.plot([0, 1], [0, 1], color="gray", linestyle="--") # 랜덤 모델의 대각선
plt.xlabel("False Positive Rate (1 - Specificity)")
plt.ylabel("True Positive Rate (Sensitivity)")
plt.title("ROC Curve")
plt.legend(loc="lower right")
plt.show()
이 지표들은 모델의 양성, 음성 예측 능력을 동시에 평가할 수 있어, 데이터가 불균형할 때도 유용하게 사용됩니다.
이익도표
이익도표 (Profit Chart)는 분류 모델이 예측할 때 얻는 이익을 평가하는 도구로,
특히 마케팅, 금융, 의료 등 고객 세그먼트나 캠페인 효과를 측정할 때 사용됩니다.
이익도표를 통해 모델의 예측 결과가 실제로 얼마나 수익을 창출할 수 있는지를 시각적으로 이해할 수 있습니다.
이익도표의 구성 요소
이익도표는 일반적으로 누적 이익(Naive Gain)과 모델의 예측 이익을 보여주는 곡선으로 구성됩니다.
- 누적 이익 (Cumulative Gain):
가장 간단한 기준으로, 예측 없이 데이터를 무작위로 선택했을 때 얻을 수 있는 이익입니다. - 모델의 예측 이익 (Predicted Gain):
분류 모델을 사용하여 예측했을 때 얻을 수 있는 이익을 나타냅니다. 예측이 효과적이라면 이 곡선은 무작위 이익보다 위에 위치해야 합니다.
이익도표의 주요 지표
- x축: 대상의 누적 비율 (예: 상위 10%, 상위 20%…).
- y축: 얻을 수 있는 누적 이익. 이는 주로 금액 또는 성공 사례 수로 표시됩니다.
- 랜덤 모델의 직선: 랜덤 모델의 성능을 나타내는 기준선이며, 이선과 비교하여 모델의 성능이 더 높은지 평가합니다.
이익도표의 해석
- 초기 구간에서의 가파른 상승:
이익도표에서 모델의 곡선이 x축의 초기 구간에서 가파르게 상승한다면, 이는 모델이 소수의 데이터로도 높은 수익을 얻을 수 있음을 의미합니다.
즉, 상위 고객을 잘 예측하고 있다는 뜻입니다. - 곡선이 랜덤 기준선을 초과하는 범위:
모델이 효과적이라면, 모델 곡선은 랜덤 기준선보다 위에 위치하며, 이 차이가 클수록 더 높은 성능을 나타냅니다. - 곡선이 평평해지는 지점:
곡선이 평평해질수록 모델의 예측 능력이 줄어들며, 추가 예측이 더 이상 의미 있는 이익을 제공하지 못함을 나타냄.
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
# 예시 데이터 생성 및 분할
X, y = make_classification(n_samples=1000, n_classes=2, weights=[0.8, 0.2], random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 모델 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# 예측 확률 계산 및 데이터프레임 생성
y_proba = model.predict_proba(X_test)[:, 1]
df = pd.DataFrame({'Actual': y_test, 'Predicted_Probability': y_proba})
# 데이터 구간화
df['Rank'] = pd.qcut(df['Predicted_Probability'], q=10, labels=False, duplicates='drop')
gain_table = df.groupby('Rank').apply(
lambda x: pd.Series({
'Total': len(x),
'Positive': x['Actual'].sum(),
'Response Rate': x['Actual'].mean(),
})
).sort_index(ascending=False)
# 기준 반응률 및 향상도 계산
baseline_response_rate = df['Actual'].mean()
gain_table['Lift'] = gain_table['Response Rate'] / baseline_response_rate
# 결과 출력
print("기준 반응률:", baseline_response_rate)
print(gain_table[['Total', 'Positive', 'Response Rate', 'Lift']])
단계별 예제 계산
예를 들어, 1000명의 고객 데이터가 있고, 그중 200명이 실제로 긍정적(양성 반응)을 보였다고 가정해 봅시다. 모델이 각 고객의 반응 확률을 예측했으며, 이 예측 결과를 상위 10%, 20% 등으로 구간화하여 반응률과 향상도를 계산합니다.
- 기준 반응률 계산: 기준 반응률 20/100 =
- 상위 10% 구간에서의 반응률 및 향상도:
- 상위 10% 구간에 속하는 고객 100명 중 실제로 양성 반응을 보인 고객이 30명이라고 가정합니다.
- 반응률: 30/100=
- 향상도(Lift): 0.3/0.2=1.5
- 상위 20% 구간에서의 반응률 및 향상도:
- 상위 20% 구간에 속하는 고객 200명 중 양성 반응을 보인 고객이 50명이라고 가정합니다.
- 반응률: 50/200
- 향상도(Lift): 0.25/0.2=
이렇게 각 구간의 반응률과 향상도를 계산하여, 모델이 상위 구간에서 높은 반응률을 가지면,
모델이 상위 고객을 잘 예측하고 있다고 해석할 수 있습니다.
= 이익도표의 각 등급은 예측확률에 따라 매겨진 순위이기 때문에, 상위 등급에서 더 높은 반응률을 보이는게
더 좋은 모형
--- 등급별로 향상도가 급격하게 변동할 수록 좋은 모형이라고 할 수 없고,
각 등급별로 향상도가 들쭉날쭉하면 좋은 모형이라고 볼 수 없다.----
장점:
- 수익 극대화에 유용:
마케팅, 금융 등에서 효율적인 타겟팅으로 비용 대비 효과를 극대화할 수 있습니다. - 모델 성능을 직관적으로 이해:
모델이 실제로 얼마나 이익을 제공하는지 쉽게 시각화할 수 있어, 비즈니스 의사결정에 도움이 됩니다. - 효율적인 리소스 사용:
상위 고객이나 주요 대상에 집중할 수 있어, 불필요한 비용을 줄이고 수익을 높일 수 있습니다.
단점:
- 특정 분야에 특화:
주로 마케팅, 금융, 의료 등 수익이나 성과가 중요한 분야에 한정된 경우가 많습니다. - 불확실성:
예측의 정확도에 따라 이익도표가 실제 이익과 일치하지 않을 수 있습니다. - 모델 해석의 한계:
예측 모델이 이익도표 상에서 어느 부분에서 성능이 떨어지는지에 대한 구체적인 원인을 분석하기 어렵습니다.
'데이터분석' 카테고리의 다른 글
앙상블 기법 (1) | 2024.11.10 |
---|---|
분류분석 (0) | 2024.11.09 |
데이터 분할 시 양이 충분하지 않은 경우 (1) | 2024.11.08 |
비모수 검정법 (0) | 2024.11.06 |
데이터 스케일링 및 모델 특성 선택법 (3) | 2024.11.06 |