Sessi 11: Evaluasi Model Klasifikasi (Metrik Kritis)
Fokus: Memahami dan mengimplementasikan metrik evaluasi model klasifikasi biner, termasuk Confusion Matrix, Akurasi, Presisi, Recall, dan F1-Score. Penekanan pada pemilihan metrik yang tepat dalam studi kasus ilmiah (e.g., diagnosis).
A. The Confusion Matrix (Matriks Kebingungan)
Confusion Matrix adalah fondasi dari semua metrik evaluasi klasifikasi. Matriks ini menyajikan visualisasi kinerja algoritma klasifikasi dengan membandingkan nilai kelas yang diprediksi dengan nilai kelas aktual. Matriks ini terbagi menjadi empat kuadran hasil:
1. Komponen Dasar
- True Positive (TP): Model memprediksi positif, dan hasil aktualnya positif (Benar Positif).
- True Negative (TN): Model memprediksi negatif, dan hasil aktualnya negatif (Benar Negatif).
- False Positive (FP): Model memprediksi positif, tetapi hasil aktualnya negatif (*Type I Error* - Galat Tipe I).
- False Negative (FN): Model memprediksi negatif, tetapi hasil aktualnya positif (*Type II Error* - Galat Tipe II).
Penting untuk Mhs Fisika/Matematika: Dalam pengujian hipotesis, FP adalah menolak hipotesis nol (H0) yang benar, sementara FN adalah gagal menolak H0 yang salah.
2. Visualisasi Matriks
Meskipun ini adalah tabel, implementasi di Python (menggunakan seaborn.heatmap) akan memvisualisasikannya menjadi *heatmap* yang intuitif.
| Aktual | ||
|---|---|---|
| Prediksi | Positif (P) | Negatif (N) |
| Positif (P') | TP | FP |
| Negatif (N') | FN | TN |
B. Metrik Utama Berbasis Confusion Matrix
Metrik-metrik ini dihitung dari nilai-nilai TP, TN, FP, dan FN.
1. Akurasi (Accuracy)
Akurasi mengukur proporsi total prediksi yang benar (TP + TN) dari semua kasus. Ini adalah metrik yang paling intuitif, tetapi bisa menyesatkan pada *dataset* yang tidak seimbang (*imbalanced*).
2. Presisi (Precision)
Presisi menjawab: "Dari semua yang diprediksi positif, berapa banyak yang benar-benar positif?". Presisi penting ketika biaya False Positive (FP) sangat tinggi.
3. Recall (Sensitivitas / Tingkat Keberhasilan)
*Recall* (Sensitivitas) menjawab: "Dari semua yang seharusnya positif, berapa banyak yang berhasil diprediksi positif?". Recall penting ketika biaya False Negative (FN) sangat tinggi (e.g., gagal mendeteksi kanker atau cacat material).
4. F1-Score
F1-Score adalah rata-rata harmonis dari Presisi dan Recall. Metrik ini berguna ketika kita membutuhkan keseimbangan antara Presisi dan Recall, terutama pada *dataset* yang tidak seimbang.
C. Studi Kasus Implementasi: Evaluasi Klasifikasi Biner
Melanjutkan model Regresi Logistik dari Sessi 10, kita akan menggunakan Scikit-learn untuk menghitung dan memvisualisasikan metrik-metrik tersebut.
Langkah 1: Import dan Menghitung Matriks
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, classification_report
# --- Data Persiapan Ulang (Seperti Sessi 10) ---
data = {
'mean radius': [17.99, 20.57, 19.69, 11.42, 20.29, 12.45, 18.25, 13.71, 13.00, 12.43],
'mean texture': [10.38, 17.77, 21.25, 20.38, 14.34, 15.70, 19.98, 20.83, 21.89, 23.36],
'diagnosis': [1, 1, 1, 0, 1, 0, 1, 0, 1, 0] # 1=Malignant (Ganas), 0=Benign (Jinak)
}
df = pd.DataFrame(data)
X = df[['mean radius', 'mean texture']]
y = df['diagnosis']
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(
X_scaled, y, test_size=0.3, random_state=42
)
model_logreg = LogisticRegression(random_state=42)
model_logreg.fit(X_train, y_train)
y_pred = model_logreg.predict(X_test)
# --- TAHAP EVALUASI (Sessi 11) ---
# 1. Hitung Confusion Matrix
cm = confusion_matrix(y_test, y_pred)
print("--- Confusion Matrix ---")
print(cm)
# Output Matriks (Contoh Fiktif: [[TN, FP], [FN, TP]])
# [[1, 1],
# [0, 1]]
# Interpretasi: TN=1, FP=1, FN=0, TP=1
# 2. Hitung Metrik Utama
acc = accuracy_score(y_test, y_pred)
prec = precision_score(y_test, y_pred)
rec = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print("\n--- Ringkasan Metrik Kunci ---")
print(f"Akurasi: {acc:.3f}")
print(f"Presisi: {prec:.3f}")
print(f"Recall: {rec:.3f}")
print(f"F1-Score: {f1:.3f}")
Langkah 2: Menggunakan Classification Report
Cara paling ringkas dan profesional untuk melihat semua metrik secara sekaligus adalah dengan menggunakan classification_report.
print("\n--- Classification Report ---")
print(classification_report(y_test, y_pred))
# Interpretasi Classification Report:
# Nilai metrik (Presisi, Recall, F1) disajikan untuk setiap kelas (0 dan 1).
# Pada kasus medis (diagnosis), kita seringkali lebih peduli pada metrik kelas '1' (Malignant/Ganas).
# Jika Recall (Sensitivitas) untuk kelas 1 rendah, berarti model sering gagal mendeteksi kasus positif yang sebenarnya (FN tinggi).
D. Kasus Kritis: Kapan Akurasi Gagal?
Bayangkan *dataset* di mana hanya 1% pasien yang memiliki penyakit (kelas Positif=1) dan 99% sehat (kelas Negatif=0).
Jika model selalu memprediksi **Negatif**, maka Akurasi model tersebut adalah **99%**. Akurasi terlihat sangat tinggi, tetapi model ini sama sekali tidak berguna karena ia gagal mendeteksi semua kasus penyakit yang sebenarnya (Recall 0%).
Dalam skenario ini, Akurasi menyesatkan. Metrik seperti Recall, Presisi, atau F1-Score menjadi wajib untuk menilai kinerja model secara valid, terutama ketika *dataset* Anda tidak seimbang (*imbalanced*).