S29L02 – ROC, AUC – 최적 모델 평가

html

ROC 곡선과 AUC를 이용한 머신 러닝 모델 평가: 종합 가이드

머신 러닝 분야에서 데이터셋에 적합한 모델을 선택하는 것은 정확하고 신뢰할 수 있는 예측을 달성하는 데 매우 중요합니다. 모델을 평가하고 비교하는 가장 효과적인 방법 중 하나는 수신자 조작 특성 (ROC) 곡선곡선 아래 면적 (AUC)을 이용하는 것입니다. 이 가이드는 ROC 곡선을 이해하고, AUC를 계산하며, 이 지표들을 사용하여 이진 분류 작업에 가장 성능이 우수한 모델을 선택하는 방법을 깊이 있게 다룹니다. 다양한 머신 러닝 알고리즘을 사용하여 이러한 개념을 구현하는 방법을 보여주는 Jupyter Notebook을 사용한 실용적인 예제를 단계별로 설명하겠습니다.


목차

  1. ROC 곡선 및 AUC 소개
  2. 정확도보다 AUC을 선택하는 이유
  3. 데이터셋 개요
  4. 데이터 전처리
  5. 모델 훈련 및 평가
    1. K-최근접 이웃 (KNN)
    2. 로지스틱 회귀
    3. 가우시안 나이브 베이즈
    4. 서포트 벡터 머신 (SVM)
    5. 의사 결정 트리
    6. 랜덤 포레스트
    7. AdaBoost
    8. XGBoost
  6. 최고의 모델 선택
  7. 결론
  8. 자료

ROC 곡선 및 AUC 소개

ROC 곡선이란?

수신자 조작 특성 (ROC) 곡선은 이진 분류기 시스템의 진단 능력을 분류 임계값이 변할 때 어떻게 나타내는지를 보여주는 그래픽 표현입니다. ROC 곡선은 두 가지 매개변수를 플롯합니다:

  • 정양성 비율 (TPR): 민감도 또는 재현율로도 알려져 있으며, 실제 양성을 올바르게 식별한 비율을 측정합니다.
  • 위양성 비율 (FPR): 실제 음성을 잘못 양성으로 식별한 비율을 측정합니다.

ROC 곡선은 민감도와 특이도 (1 - FPR) 간의 균형을 다양한 임계값 설정에서 시각화할 수 있게 합니다.

AUC 이해하기

곡선 아래 면적 (AUC)은 모델이 양성과 음성 클래스 간을 구별하는 전반적인 능력을 정량화합니다. AUC 값은 0에서 1 사이입니다:

  • AUC = 1: 완벽한 분류기.
  • AUC = 0.5: 구별 능력 없음 (무작위 추측과 동일).
  • AUC < 0.5: 반대로 예측 (무작위보다 더 나쁨).

AUC 값이 높을수록 더 성능이 우수한 모델을 나타냅니다.


정확도보다 AUC을 선택하는 이유

정확도는 전체 예측 중 올바른 예측의 비율을 측정하지만, 특히 클래스 불균형인 경우 혼란을 줄 수 있습니다. 예를 들어, 데이터의 95%가 한 클래스에 속한다면, 그 클래스만을 예측하는 모델은 95%의 정확도를 달성하지만 소수 클래스를 포착하지 못합니다.

반면에, AUC는 모든 분류 임계값에서 모델의 성능을 고려하여 더 세밀한 평가를 제공하므로 불균형한 데이터셋에 대해 더 신뢰할 수 있는 지표입니다.


데이터셋 개요

분석을 위해, 우리는 Kaggle의 날씨 데이터셋을 사용할 것입니다. 이 데이터셋은 다양한 호주 지역에서 매일 기록된 여러 기상 관련 속성을 포함하고 있습니다.

목표: 오늘의 기상 조건을 바탕으로 내일 비가 올지 여부(RainTomorrow)를 예측하는 것입니다.

유형: 이진 분류 (Yes/No).


데이터 전처리

효과적인 데이터 전처리는 견고한 머신 러닝 모델을 구축하는 기초입니다. 단계별 분석은 다음과 같습니다:

1. 라이브러리 및 데이터 가져오기

2. 특징과 타겟 분리

3. 결측치 처리

a. 수치형 특징

b. 범주형 특징

4. 범주형 변수 인코딩

a. 타겟에 대한 라벨 인코딩

b. 특징 인코딩

5. 특징 선택

모델의 복잡성을 줄이고 성능을 향상시키기 위해 카이제곱 (Chi2) 검정을 사용하여 상위 10개의 특징을 선택합니다.

6. 데이터셋 분할

7. 특징 스케일링

특징을 표준화하면 각 특징이 결과에 동등하게 기여하도록 보장합니다.


모델 훈련 및 평가

여러 분류 모델을 훈련시키고 정확도AUC를 사용하여 그 성능을 평가할 것입니다.

K-최근접 이웃 (KNN)

출력:

KNN ROC 곡선

로지스틱 회귀

출력:

로지스틱 회귀 ROC 곡선

참고: 수렴 경고가 발생하면 max_iter를 늘리거나 데이터를 표준화하는 것을 고려하세요.

가우시안 나이브 베이즈

출력:

가우시안 나이브 베이즈 ROC 곡선

서포트 벡터 머신 (SVM)

출력:

SVM ROC 곡선

의사 결정 트리

출력:

의사 결정 트리 ROC 곡선

랜덤 포레스트

출력:

랜덤 포레스트 ROC 곡선

AdaBoost

출력:

AdaBoost ROC 곡선

XGBoost

출력:

XGBoost ROC 곡선

최고의 모델 선택

모든 모델을 평가한 후, 다음과 같은 정확도를 관찰했습니다:

모델 정확도 AUC
K-최근접 이웃 0.82 0.80
로지스틱 회귀 0.84 0.86
가우시안 나이브 베이즈 0.81 0.81
SVM 0.84 0.86
의사 결정 트리 0.78 0.89
랜덤 포레스트 0.84 0.85
AdaBoost 0.84 0.86
XGBoost 0.85 0.87

주요 관찰 결과:

  1. XGBoost는 가장 높은 정확도(85%)와 강력한 AUC(0.87)를 기록하며 최고 성능을 나타냅니다.
  2. 로지스틱 회귀, SVM, 및 AdaBoost도 약 84%의 정확도와 0.86의 AUC로 훌륭한 성능을 보여줍니다.
  3. 의사 결정 트리는 가장 낮은 정확도(78%)를 보이지만, 상대적으로 높은 AUC(0.89)를 가지고 있어 예측 정확도는 낮더라도 클래스 구분에 잠재력이 있음을 나타냅니다.

결론: 정확도가 직관적인 지표를 제공하는 반면, AUC는 다양한 임계값에서 모델의 성능에 대한 더 깊은 통찰을 제공합니다. 이 시나리오에서 XGBoost는 높은 정확도와 강력한 구분 능력을 균형 있게 유지하며 가장 신뢰할 수 있는 모델로 돋보입니다.


결론

머신 러닝 모델을 평가하려면 다면적인 접근이 필요합니다. 정확도만을 의존하는 것은 클래스 불균형이 있는 데이터셋에서 특히 오해의 소지가 있을 수 있습니다. ROC 곡선AUC는 모델의 성능을 보다 포괄적으로 평가하여 클래스 간을 효과적으로 구분하는 능력을 강조합니다.

이 가이드에서는 데이터를 전처리하고, 여러 분류 모델을 훈련시키며, ROC 곡선과 AUC를 사용하여 이를 평가하는 방법을 살펴보았습니다. Jupyter Notebook을 사용한 실용적인 구현을 통해 각 모델의 강점을 보여주었으며, 궁극적으로 제공된 데이터셋을 기반으로 강우를 예측하는 데 XGBoost가 우수한 선택임을 입증했습니다.


자료


ROC 곡선과 AUC를 이해하고 활용함으로써 데이터 과학자와 머신 러닝 실무자들은 모델 선택 시 더 정보에 기반한 결정을 내릴 수 있으며, 이를 통해 예측 작업에서 더 높은 성능과 신뢰성을 보장할 수 있습니다.

Share your love