Regresi Logistik

Klasifikasi melalui probabilitas dengan fungsi logistik dan ambang keputusan.

Daftar isi

Regresi logistik adalah model klasifikasi paling dasar yang mengubah skor linear menjadi probabilitas, sehingga prediksinya bukan langsung label, melainkan keyakinan atas setiap kelas. Topik ini membahas fungsi logistik sebagai jembatan dari skor ke probabilitas, ambang keputusan yang mengubah probabilitas menjadi kelas, dan pergeseran ambang sebagai tuas yang mengatur presisi serta recall. Praktiknya melatih LogisticRegression pada dataset breast cancer, membaca keluaran probabilitasnya, dan menghitung metrik pada tiga ambang berbeda. Setelah topik ini dipahami, ambang keputusan dapat dipilih secara sadar menurut biaya kesalahan, bukan sekadar mengikuti nilai bawaannya.

Dari skor linear ke probabilitas#

Regresi logistik menggunakan struktur linear yang sama dengan regresi linear. Untuk satu sampel dengan fitur x1x_1 sampai xpx_p, model menghitung skor z=w1x1+⋯+wpxp+bz = w_1 x_1 + \cdots + w_p x_p + b, lalu skor itu dipetakan ke rentang probabilitas oleh fungsi logistik:

σ(z)=11+e−z \sigma(z) = \frac{1}{1 + e^{-z}}

Fungsi ini berbentuk huruf S. Skor z=0z = 0 dipetakan ke probabilitas 0.5, skor positif besar mendekati 1, dan skor negatif besar mendekati 0. Keluarannya selalu berada di antara 0 dan 1 apa pun besar skornya, sehingga aman dibaca sebagai probabilitas kelas positif, yaitu P(y=1∣x)\mathrm{P}(y = 1 \mid x). Meskipun namanya mengandung kata regresi, model ini digunakan untuk klasifikasi. Kata regresi tersebut merujuk pada regresi terhadap log-odds, yakni logaritma perbandingan peluang kelas positif terhadap kelas negatif.

Koefisiennya pun terbaca dalam bahasa yang sama. Kenaikan satu satuan pada fitur xjx_j menggeser log-odds sebesar wjw_j dengan fitur lain tetap, dan log-odds yang positif berarti peluang kelas positif makin besar. Karena fungsi logistiknya melengkung, perubahan probabilitas per satu satuan fitur tidak tetap dan bergantung pada posisi skor saat itu.

Ambang keputusan dan biaya kesalahan#

Model mengeluarkan probabilitas, sedangkan tugas klasifikasi menuntut satu label. Pemisah keduanya adalah ambang keputusan (decision threshold). Kelas 1 diprediksi apabila probabilitasnya tidak di bawah ambang, dan sisanya diprediksi kelas 0. Nilai bawaan 0.5 hanyalah titik tengah yang berarti dua kelas diperlakukan sama penting, dan tidak ada dalih matematis yang menjadikannya wajib. Ambang boleh digeser sesuai biaya kesalahan pada ranah masalah.

Pergeseran ambang menggerakkan pasangan presisi dan recall pada kelas positif. Ambang yang dinaikkan membuat model menuntut keyakinan lebih tinggi sebelum menyatakan kelas positif, sehingga presisi cenderung naik sementara recall turun, dan sebaliknya. Pada skrining medis, misalnya, kesalahan yang paling mahal adalah kasus sakit yang lolos tanpa terdeteksi, sehingga ambang diperendah demi recall walaupun sebagian pemeriksaan lanjutan ternyata sia-sia. Pilihan semacam ini adalah keputusan ranah masalah, dan metrik presisi serta recall pada data uji menjadi alat ukurnya.

Praktik pada dataset breast cancer#

Dataset load_breast_cancer memuat 569 sampel tumor dengan tiga puluh fitur pengukuran sel dan dua kelas, yaitu 0 untuk ganas dan 1 untuk jinak. Skala fiturnya berbeda jauh satu sama lain, misalnya luas sel bernilai ribuan sementara fitur bentuk bernilai pecahan. Karena itu fitur diskalakan dengan StandardScaler di dalam Pipeline. Penskalaan menyetarakan rentang seluruh fitur, membantu solver konvergen lebih cepat, dan memungkinkan besar koefisien antar fitur dibandingkan.

python proba-breast-cancer.py
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

pd.set_option("display.width", 80)

X, y = load_breast_cancer(return_X_y=True)
X_latih, X_uji, y_latih, y_uji = train_test_split(
    X, y, test_size=0.2, random_state=42
)

model = make_pipeline(
    StandardScaler(), LogisticRegression(max_iter=5000, random_state=42)
)
model.fit(X_latih, y_latih)

proba = model.predict_proba(X_uji)
print("Lima baris pertama data uji:")
for i in range(5):
    p0, p1 = proba[i]
    print(f"  sampel {i}: P(ganas) = {p0:.4f}, P(jinak) = {p1:.4f}")

baris = []
for ambang in (0.3, 0.5, 0.7):
    prediksi = (proba[:, 1] >= ambang).astype(int)
    baris.append(
        {
            "ambang": ambang,
            "akurasi": accuracy_score(y_uji, prediksi),
            "presisi": precision_score(y_uji, prediksi, zero_division=0),
            "recall": recall_score(y_uji, prediksi, zero_division=0),
        }
    )
tabel = pd.DataFrame(baris).set_index("ambang")
print()
print("Metrik kelas jinak pada tiga ambang keputusan:")
print(tabel.to_string(float_format=lambda v: f"{v:.4f}"))
text Keluaran
Lima baris pertama data uji:
  sampel 0: P(ganas) = 0.1136, P(jinak) = 0.8864
  sampel 1: P(ganas) = 1.0000, P(jinak) = 0.0000
  sampel 2: P(ganas) = 0.9969, P(jinak) = 0.0031
  sampel 3: P(ganas) = 0.0005, P(jinak) = 0.9995
  sampel 4: P(ganas) = 0.0001, P(jinak) = 0.9999

Metrik kelas jinak pada tiga ambang keputusan:
        akurasi  presisi  recall
ambang                          
0.3      0.9825   0.9726  1.0000
0.5      0.9737   0.9722  0.9859
0.7      0.9561   0.9853  0.9437

Keluaran probabilitas memperlihatkan dua tingkat keyakinan yang berbeda. Sampel 1 dan 2 diprediksi ganas dengan keyakinan hampir sempurna, sedangkan sampel 0 berada pada wilayah yang lebih longgar dengan P(jinak) 0.8864. Tabel metrik kemudian memperlihatkan efek pergeseran ambang. Pada ambang 0.3, recall kelas jinak mencapai 1.0000 dengan presisi 0.9726, artinya seluruh tumor jinak tertangkap dengan sedikit prediksi jinak yang keliru. Pada ambang 0.7, presisi naik menjadi 0.9853 tetapi recall turun ke 0.9437, dan akurasi keseluruhan ikut menurun dari 0.9825 menjadi 0.9561.

Tabel tersebut baru bermakna apabila dibaca bersama ranah masalahnya. Menurunkan ambang memperbanyak sampel yang dinyatakan jinak, sehingga risiko tumor ganas yang lolos sebagai jinak ikut membesar, dan kesalahan jenis itulah yang paling mahal pada skrining medis. Karena kelas positif pada dataset ini adalah jinak, arah pergeseran yang menguntungkan skrining berlawanan dengan contoh pada bagian sebelumnya. Agar lebih sedikit tumor ganas yang dinyatakan jinak, ambang justru dinaikkan. Angka pada tabel memberi batas kuantitatifnya, yaitu seberapa banyak presisi yang dikorbankan untuk setiap kenaikan recall, sehingga pemilihan ambang menjadi keputusan yang terukur.

Kesalahan umum#

  • Membaca label prediksi tanpa melihat probabilitasnya. Prediksi P(jinak) 0.51 dan 0.9999 sama-sama berlabel jinak, tetapi keyakinannya berbeda jauh dan sampel pertama patut ditinjau ulang. Penyebabnya adalah keluaran predict yang hanya menyodorkan label akhir. Perbaikannya, baca predict_proba terlebih dahulu, khususnya pada sampel yang keyakinannya dekat ambang.
  • Menggeser ambang tanpa mengukur ulang metrik. Setiap pergeseran mengubah pasangan presisi dan recall, sehingga angka lama pada ambang bawaan langsung tidak berlaku. Kesalahan ini muncul karena angka lama memang sudah tersedia dan terlihat cukup. Perbaikannya, hitung ulang metrik pada data uji setiap kali ambang berpindah, sebagaimana tabel tiga ambang di atas.
  • Memaksirkan koefisien pada fitur yang belum diskalakan. Rentang fitur yang berbeda jauh membuat satu satuan fitur tidak setara, sehingga perbandingan besar koefisien menyesatkan. Perbaikannya, skala fitur dengan StandardScaler terlebih dahulu, seperti pada praktik topik ini, agar pembacaan log-odds antar fitur dapat dibandingkan.

Ringkasan#

  • Fungsi logistik σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}} memetakan skor linear ke rentang (0, 1), sehingga model mengeluarkan probabilitas kelas, bukan label langsung.
  • Label lahir dari ambang keputusan, dan 0.5 hanyalah bawaan yang boleh digeser menurut biaya kesalahan pada ranah masalah.
  • Koefisien dibaca sebagai perubahan log-odds per satu satuan fitur dengan fitur lain tetap.
  • Menggeser ambang menggerakkan pasangan presisi dan recall pada kelas positif, sehingga setiap pilihan ambang dievaluasi ulang pada data uji.

Referensi#