Logistic Regression

"Bapaknya Klasifikasi Modern"

1. Apa itu Logistic Regression?

Jangan tertipu namanya! Meskipun ada kata "Regression", algoritma ini digunakan untuk KLASIFIKASI (terutama Binary Classification: Ya/Tidak, 1/0).

Jika Linear Regression menghasilkan garis lurus yang bisa bernilai minus tak hingga sampai positif tak hingga, Logistic Regression "men-geprek" garis itu menggunakan fungsi Sigmoid supaya hasilnya selalu di antara 0 dan 1 (Probabilitas).

2. Visualisasi: The Sigmoid Curve

Threshold 0.5
1.0 (Ya)
0.0 (Tidak)

Fungsi Sigmoid ($\sigma$) mengubah input $z$ (apapun nilainya) menjadi peluang $0$ sampai $1$.
Jika $\sigma(z) > 0.5 \rightarrow$ Prediksi Kelas 1.
Jika $\sigma(z) < 0.5 \rightarrow$ Prediksi Kelas 0.

3. Matematika: Logit & Log Loss

1. Fungsi Sigmoid
$$ \hat{y} = \frac{1}{1 + e^{-(mx + c)}} $$
2. Cost Function (Log Loss)
$$ -\frac{1}{N} \sum [y \log(\hat{y}) + (1-y) \log(1-\hat{y})] $$
Log Loss: Kita tidak pakai MSE (Kuadrat Error) karena kurvanya bergelombang (non-convex). Log Loss menjamin kurva berbentuk mangkok (convex) supaya mudah di-optimasi.

4. Simulasi Perhitungan

Kasus: Lulus Ujian? ($x=$ Jam Belajar)

Model kita: $z = 1.5x - 3$. (Jika belajar dikit, $z$ negatif. Jika banyak, $z$ positif).

Jam Belajar ($x$) Nilai Linear ($z$) Probabilitas ($\sigma(z)$) Keputusan (>0.5)
1 Jam $1.5(1) - 3 = -1.5$ $\frac{1}{1+e^{1.5}} \approx 0.18$ TIDAK LULUS
2 Jam $1.5(2) - 3 = 0$ $\frac{1}{1+e^{0}} = 0.50$ RAGU-RAGU
3 Jam $1.5(3) - 3 = +1.5$ $\frac{1}{1+e^{-1.5}} \approx 0.82$ LULUS

5. Implementasi Python (Scikit-Learn)

from sklearn.linear_model import LogisticRegression
import numpy as np

# 1. Data [Jam Belajar] -> [Lulus: 0/1]
X = np.array([[1], [1.5], [2], [2.5], [3], [4]])
y = np.array([0, 0, 0, 1, 1, 1])

# 2. Model
model = LogisticRegression()
model.fit(X, y)

# 3. Prediksi (Belajar 2.2 Jam)
jam_baru = [[2.2]]
prediksi = model.predict(jam_baru)
probabilitas = model.predict_proba(jam_baru)

print(f"Prediksi: {'Lulus' if prediksi[0] == 1 else 'Gagal'}")
print(f"Peluang Gagal: {probabilitas[0][0]:.2f}")
print(f"Peluang Lulus: {probabilitas[0][1]:.2f}")