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**.

Fungsi Linear (Logit): z = β0 + β1X1 + β2X2 + ...

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)$).

Fungsi Sigmoid: P(Y=1) = 1 / (1 + e-z)
  • 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).