튜토리얼
03. Logistic Regression

03. Logistic Regression & 평가지표 완전정복

Sigmoid, Cross-Entropy, Confusion Matrix, ROC/PR Curve


학습 목표

이 튜토리얼을 완료하면 다음을 할 수 있습니다:

  1. Sigmoid 함수Log-Loss (Binary Cross-Entropy) 수식 이해
  2. 로지스틱 회귀의 원리와 Gradient Descent 학습 과정 이해
  3. Confusion Matrix의 TP, FP, TN, FN 완벽 이해
  4. Precision, Recall, F1-Score 계산 및 Trade-off 분석
  5. ROC Curve, AUC, PR Curve 해석 능력
  6. Decision Threshold 최적화를 통한 비즈니스 요구사항 충족
  7. 불균형 데이터 문제와 class_weight 대응 방법 이해

핵심 개념

1. 로지스틱 회귀란?

이진 분류(Binary Classification) 문제를 해결하는 알고리즘입니다.

선형 조합을 Sigmoid 함수에 통과시켜 확률로 변환:

P(y=1|x) = σ(z) = 1 / (1 + e^(-z))

여기서 z = wᵀx + b (선형 조합)

Sigmoid 함수 특성

특성설명
출력 범위(0, 1) → 확률로 해석 가능
중심값σ(0) = 0.5
미분σ'(z) = σ(z)(1 - σ(z))
점근선z → ∞ 이면 σ(z) → 1, z → -∞ 이면 σ(z) → 0

Sigmoid 함수는 출력값이 항상 0과 1 사이이므로, 이를 확률로 해석할 수 있습니다. Threshold(기본값 0.5)를 기준으로 클래스를 결정합니다.


2. Log-Loss (Binary Cross-Entropy)

L(w) = -(1/n) Σ[yᵢlog(p̂ᵢ) + (1-yᵢ)log(1-p̂ᵢ)]

손실 함수의 직관적 이해

실제 값예측 확률손실해석
y=1p=0.9낮음잘 예측 (좋음)
y=1p=0.1높음확신 있게 틀림 (큰 페널티)
y=0p=0.1낮음잘 예측 (좋음)
y=0p=0.9높음확신 있게 틀림 (큰 페널티)
⚠️

Log-Loss는 확신을 가지고 틀릴수록 손실이 기하급수적으로 증가합니다. 따라서 모델이 잘못된 예측에 높은 확률을 부여하지 않도록 학습됩니다.


3. Confusion Matrix 완전 이해

                  Predicted
                 Neg    Pos
Actual   Neg     TN     FP
         Pos     FN     TP
항목의미설명
TNTrue Negative실제 음성을 음성으로 정확히 예측
FPFalse Positive실제 음성을 양성으로 잘못 예측 (Type I Error)
FNFalse Negative실제 양성을 음성으로 잘못 예측 (Type II Error)
TPTrue Positive실제 양성을 양성으로 정확히 예측
🚫

의료 진단 예시 (유방암 데이터):

  • FN (False Negative): 악성 종양을 양성으로 오진 → 치명적! 치료 기회를 놓침
  • FP (False Positive): 양성 종양을 악성으로 오진 → 불필요한 추가 검사 필요

따라서 암 진단에서는 **Recall(민감도)**이 매우 중요합니다.


4. 평가 지표 정리

지표공식의미
Accuracy(TP+TN) / All전체 정확도
PrecisionTP / (TP+FP)양성 예측 중 실제 양성 비율 ("양성이라고 예측했을 때 맞을 확률")
RecallTP / (TP+FN)실제 양성 중 양성 예측 비율 ("실제 양성을 놓치지 않을 확률")
F1-Score2PR / (P+R)Precision과 Recall의 조화평균
SpecificityTN / (TN+FP)실제 음성 중 음성 예측 비율

5. ROC Curve & AUC

  • ROC Curve: TPR(True Positive Rate) vs FPR(False Positive Rate)를 모든 threshold에서 플롯
  • AUC: ROC 곡선 아래 면적
AUC 값해석
1.0완벽한 분류기
0.9-1.0우수
0.8-0.9양호
0.7-0.8보통
0.5랜덤 추측 수준
from sklearn.metrics import roc_curve, auc, roc_auc_score
 
fpr, tpr, thresholds = roc_curve(y_test, y_proba)
roc_auc = auc(fpr, tpr)

ROC-AUC는 threshold에 독립적이므로 서로 다른 모델을 비교하는 데 적합합니다.


6. Precision-Recall Curve

  • 불균형 데이터에서 ROC보다 유용
  • AP (Average Precision): PR 곡선 아래 면적
from sklearn.metrics import precision_recall_curve, average_precision_score
 
precision, recall, thresholds = precision_recall_curve(y_test, y_proba)
ap = average_precision_score(y_test, y_proba)

7. Precision-Recall Trade-off

Threshold를 조정하면 Precision과 Recall이 반비례 관계로 변화합니다:

Threshold 변화양성 예측PrecisionRecall
↑ (예: 0.5→0.7)조건 까다로움↑ (FP 감소)↓ (FN 증가)
↓ (예: 0.5→0.3)조건 느슨함↓ (FP 증가)↑ (FN 감소)

비즈니스 상황별 Threshold 선택

상황중요 지표Threshold이유
암 진단Recall낮게FN 최소화 (암을 놓치면 안 됨)
스팸 필터Precision높게FP 최소화 (정상 메일 보호)
균형F1-Score최적점Precision/Recall 조화
# F1 최대화 threshold 찾기
f1_scores = 2 * (precision * recall) / (precision + recall + 1e-10)
best_idx = np.argmax(f1_scores)
best_threshold = thresholds[best_idx]

코드 요약

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import (
    accuracy_score, precision_score, recall_score, f1_score,
    confusion_matrix, classification_report,
    roc_auc_score, average_precision_score
)
 
# 학습
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
 
# 예측
y_pred = model.predict(X_test)
y_proba = model.predict_proba(X_test)[:, 1]
 
# 평가
print(f"Accuracy:  {accuracy_score(y_test, y_pred):.4f}")
print(f"Precision: {precision_score(y_test, y_pred):.4f}")
print(f"Recall:    {recall_score(y_test, y_pred):.4f}")
print(f"F1:        {f1_score(y_test, y_pred):.4f}")
print(f"ROC-AUC:   {roc_auc_score(y_test, y_proba):.4f}")
 
# 상세 리포트
print(classification_report(y_test, y_pred))

불균형 데이터 처리

# class_weight 사용 (소수 클래스에 높은 가중치)
model = LogisticRegression(class_weight='balanced')
 
# 또는 직접 지정
model = LogisticRegression(class_weight={0: 1, 1: 10})

class_weight='balanced'는 클래스 빈도의 역수로 가중치를 자동 계산합니다. 소수 클래스의 샘플에 더 큰 가중치를 부여하여 모델이 소수 클래스를 더 잘 학습하도록 합니다.


평가 지표 선택 가이드

상황권장 지표이유
균형 데이터Accuracy, F1전반적 성능 평가 가능
불균형 데이터Precision, Recall, AUCAccuracy는 오해 유발
모델 비교ROC-AUCThreshold 독립적
불균형 + 양성 중요PR-AUC양성 클래스에 집중

면접 질문 맛보기

  1. Precision과 Recall의 트레이드오프를 설명하세요
  2. ROC-AUC와 PR-AUC는 언제 사용하나요?
  3. class_weight='balanced'는 어떻게 동작하나요?
  4. Log-Loss가 MSE보다 분류 문제에 적합한 이유는?

더 많은 면접 질문은 Premium Interviews (opens in a new tab)에서 확인하세요.


실습 노트북

Breast Cancer 데이터셋으로 위 개념들을 직접 실습해보세요:

노트북에서는 추가로 다음 내용을 다룹니다:

  • Sigmoid 함수와 Log-Loss의 시각화
  • 로지스틱 회귀 from Scratch 구현 (Gradient Descent)
  • 다양한 Threshold에서의 성능 비교 실험
  • PCA를 활용한 Decision Boundary 시각화
  • 불균형 데이터 생성 및 class_weight 효과 비교
  • 연습문제 (Cost-Sensitive Learning, 다른 알고리즘 비교 등)

이전: 02. Linear Regression | 다음: 04. Decision Tree