Sessi 10: Regresi Logistik dan Klasifikasi Biner
Fokus: Transisi dari prediksi nilai kontinu (Regresi Linear) ke prediksi probabilitas dan kategori diskret (Klasifikasi). Memahami fungsi sigmoid sebagai kunci pemodelan probabilitas.
A. Regresi Logistik: Model Klasifikasi Berbasis Probabilitas
Meskipun namanya Regresi Logistik, model ini digunakan untuk masalah klasifikasi, khususnya klasifikasi biner (dua kelas, misalnya: Ya/Tidak, Sehat/Sakit, Sukses/Gagal). Perbedaan utamanya dari Regresi Linear adalah outputnya dikonversi menjadi probabilitas.
1. Konsep Probabilitas (Logit)
Regresi Logistik menggunakan fungsi linear yang sama seperti RLS, tetapi hasil dari fungsi linear (sering disebut *Log-Odds* atau *logit*) kemudian dilewatkan ke fungsi aktivasi non-linear, yaitu **Fungsi Sigmoid**.
Nilai z ini bisa berkisar dari -∞ hingga +∞. Agar menjadi probabilitas (0 hingga 1), kita menggunakan fungsi sigmoid.
2. Fungsi Sigmoid (Fungsi Logistik)
Fungsi Sigmoid memampatkan (*squashes*) nilai z ke dalam rentang [0, 1]. Output P(Y) kemudian diinterpretasikan sebagai **probabilitas** kelas positif (misalnya, $P(Y=1)$).
- Jika z sangat besar (positif), P(Y=1) mendekati 1.
- Jika z sangat kecil (negatif), P(Y=1) mendekati 0.
B. Studi Kasus Implementasi: Klasifikasi Biner Kanker Payudara (Breast Cancer Wisconsin - UCI)
Kita akan menggunakan *dataset* **Breast Cancer Wisconsin (Diagnostic)** dari UCI untuk memprediksi apakah suatu sel bersifat ganas (Malignant, 1) atau jinak (Benign, 0) berdasarkan fitur-fitur yang diukur.
Langkah 1: Persiapan Data (Pre-processing Wajib)
Karena Regresi Logistik bekerja optimal dengan data terstandarisasi, kita **wajib** melakukan Standardisasi (Z-Score) pada fitur numerik.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
# Data fiktif disederhanakan (Asumsi sudah dibersihkan)
# Fitur: Radius Rata-rata (mean radius), Tekstur Rata-rata (mean texture)
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)
# Pilih Fitur (X) dan Target (y)
X = df[['mean radius', 'mean texture']]
y = df['diagnosis']
# Wajib: Standardisasi (Z-Score)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
X_scaled_df = pd.DataFrame(X_scaled, columns=X.columns)
# Split Data (70/30)
X_train, X_test, y_train, y_test = train_test_split(
X_scaled_df, y, test_size=0.3, random_state=42
)
print(f"Data Training: {len(X_train)} baris, Data Testing: {len(X_test)} baris")
Langkah 2: Pelatihan Model Regresi Logistik
# 1. Inisialisasi dan Latih Model
model_logreg = LogisticRegression(random_state=42)
model_logreg.fit(X_train, y_train)
# 2. Ambil Koefisien dan Intersep (Interpretasi Log-Odds)
intersep_log = model_logreg.intercept_[0]
koefisien_log = model_logreg.coef_[0]
print("\n--- Hasil Model Regresi Logistik ---")
print(f"Intersep (β₀): {intersep_log:.3f}")
print(f"Koefisien (β₁ - Radius): {koefisien_log[0]:.3f}")
print(f"Koefisien (β₂ - Tekstur): {koefisien_log[1]:.3f}")
# Interpretasi Koefisien:
# Nilai koefisien yang positif (e.g., Radius) berarti peningkatan fitur tersebut
# akan meningkatkan Log-Odds (probabilitas) diagnosis Malignant (1).
Langkah 3: Prediksi Probabilitas dan Keputusan
Regresi Logistik memberikan dua jenis *output*: probabilitas (*predict_proba*) dan kelas biner (*predict*).
# Prediksi Probabilitas (P(Y=0) dan P(Y=1))
proba_pred = model_logreg.predict_proba(X_test)
print("\nProbabilitas prediksi 3 data pertama:")
print(pd.DataFrame(proba_pred[:3], columns=['P(Benign=0)', 'P(Malignant=1)']).round(3))
# Prediksi Kelas Biner (Keputusan berdasarkan Threshold 0.5)
y_pred = model_logreg.predict(X_test)
print(f"\nPrediksi Kelas untuk Data Testing: {y_pred}")
# Evaluasi Sederhana (Akurasi)
akurasi = accuracy_score(y_test, y_pred)
print(f"Akurasi Model Regresi Logistik: {akurasi:.3f}")
C. Perbedaan Kunci: Regresi Linear vs. Regresi Logistik
| Fitur | Regresi Linear | Regresi Logistik |
|---|---|---|
| Jenis Masalah | Regresi (Memprediksi nilai kontinu, e.g., Harga, Suhu, Kuat Tekan). | Klasifikasi (Memprediksi kategori diskret/probabilitas, e.g., Ya/Tidak, 0/1). |
| Output (Ŷ) | Nilai riil (-∞ hingga +∞). | Probabilitas [0, 1]. |
| Fungsi Utama | Fungsi Linear (Garis Lurus). | Fungsi Sigmoid (memampatkan garis lurus ke rentang [0, 1]). |
| Metrik Error | MSE, RMSE, R2. | Akurasi, Presisi, *Recall*, F1-Score (akan dibahas di Sessi 11). |