Menu
CoddyTech

ROC 곡선

Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 25번째.

각 임계값은 각각의 재현율과 오탐을 만듭니다. ROC 곡선은 이를 모두 한 번에 보여 줍니다:

왼쪽 아래 모서리에서 오른쪽 위로 올라가는 파란색 계단형 곡선이 점선으로 표시된 회색 동전 던지기 대각선보다 훨씬 위에 있습니다. 주황색 점은 임계값 0.8, 0.5, 0.2를 나타내며 위쪽과 오른쪽으로 이동합니다. 곡선 아래 영역은 음영 처리되어 있습니다: AUC = 0.914

가로축: 위양성률, 즉 건강한 환자 중 양성으로 분류된 비율입니다. 세로축: 재현율. 임계값을 낮추면 (1, 1) 쪽으로 올라갑니다.

from sklearn.metrics import roc_curve, roc_auc_score

proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, proba)  # tpr은 재현율이다
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")

이 값은 곡선 아래 면적인 AUC, 즉 0.914를 출력합니다. 1은 완벽한 값이고, 0.5는 동전 던지기와 같습니다. 곡선이 높을수록 같은 오탐 수에서 더 많은 것을 잡아냅니다.

challenge icon

챌린지

중급

벚나무 농장에서는 서리가 내릴 수 있는 밤에 서리 방지용 불을 피웁니다. 시작 코드에서는 두 가지 서리 모델인 logistic과 knn을 학습시키고 차트를 설정합니다.

  1. draw_roc(model, name)을 작성하세요. 이 함수는 ax에 모델의 ROC 곡선을 그리고, name을 레이블로 표시하며, 아래와 같이 AUC를 출력합니다.
  2. 두 모델에 대해 함수를 호출하고, coin toss라고 레이블을 붙인 점선 대각선과 범례를 추가한 다음 차트를 표시하세요.

산사태 모델의 경우:

logistic AUC: 0.869
k-NN AUC: 0.924

그런 다음 Coddy가 차트를 설명합니다. Coddy의 차트는 다음과 같습니다.

산사태 경고라는 제목의 ROC 곡선: 계단형 파란색 logistic 곡선과 모서리가 몇 개 없는 주황색 k-NN 곡선이 있으며, 둘 다 점선 초록색 동전 던지기 대각선보다 훨씬 위에 있고 범례가 있음

직접 해보기

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, roc_auc_score

# 벚나무 농장의 봄철 밤마다 한 행씩 기록: frost의 1은 새벽이 오기 전에 서리가 내렸음을 의미합니다
nights = pd.read_csv("frost.csv")
features = ["temp_6pm_c", "humidity_pct", "wind_kmh", "cloud_pct"]
X_train, X_test, y_train, y_test = train_test_split(
    nights[features], nights["frost"], test_size=0.25, random_state=0, stratify=nights["frost"])
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 서리 예측 모델 두 개
logistic = LogisticRegression(max_iter=1000)
logistic.fit(X_train, y_train)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

fig, ax = plt.subplots()
ax.set_title("Frost Warnings")
ax.set_xlabel("False positive rate")
ax.set_ylabel("Recall")

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러