Menu
CoddyTech

Kurva ROC

Termasuk bagian Pembelajaran Terawasi dalam perjalanan Machine Learning di Coddy. Pelajaran 25 dari 58.

Setiap threshold memiliki recall dan false alarm masing-masing. Kurva ROC menampilkan semuanya sekaligus:

Kurva bertangga berwarna biru yang menanjak dari sudut kiri bawah ke sudut kanan atas, jauh di atas garis diagonal putus-putus berwarna abu-abu untuk lemparan koin. Titik-titik oranye menandai threshold 0.8, 0.5, dan 0.2, bergerak ke atas dan ke kanan. Area di bawahnya diarsir: AUC = 0.914

Pada sumbu horizontal: tingkat positif palsu, proporsi pasien sehat yang ditandai. Pada sumbu vertikal: recall. Ambang batas yang lebih rendah bergerak menuju (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 adalah recall
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")

Ini mencetak 0.914, yaitu AUC: luas di bawah kurva. Nilai 1 sempurna, sedangkan 0.5 seperti lempar koin. Kurva yang lebih tinggi menangkap lebih banyak dengan jumlah alarm palsu yang sama.

challenge icon

Tantangan

Sedang

Kebun ceri menyalakan api penghangat untuk mencegah embun beku pada malam yang mungkin membeku. Kode awal melatih dua model embun beku, logistic dan knn, lalu menyiapkan grafik.

  1. Tulis draw_roc(model, name): fungsi ini menggambar kurva ROC model pada ax, dengan label name, lalu mencetak AUC-nya seperti di bawah.
  2. Panggil fungsi itu untuk kedua model, tambahkan garis diagonal putus-putus berlabel coin toss dan legenda, lalu tampilkan grafik.

Untuk model tanah longsor:

logistic AUC: 0.869
k-NN AUC: 0.924

Lalu Coddy menjelaskan grafikmu. Grafiknya terlihat seperti ini:

Kurva ROC berjudul Peringatan Tanah Longsor: kurva logistic biru bertangga dan kurva k-NN oranye dengan sedikit sudut, keduanya jauh di atas garis diagonal putus-putus coin toss berwarna hijau, dengan legenda

Coba sendiri

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

# Satu baris untuk setiap malam musim semi di kebun ceri: 1 pada frost berarti embun beku terbentuk sebelum fajar
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)

# Dua model prediksi embun beku
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")

# Tulis kodemu di bawah ini
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pembelajaran Terawasi

Latihan sendiri: Compiler Python online