Teknik klasifikasi merupakan bagian penting dari aplikasi machine learning dan data mining. Sekitar 70% permasalahan data science adalah masalah klasifikasi. Ada banyak masalah klasifikasi yang tersedia, tetapi regresi logistik umum digunakan dan merupakan metode regresi yang bermanfaat untuk menyelesaikan masalah klasifikasi biner. Kategori lain dari klasifikasi adalah klasifikasi Multinomial, yang menangani kasus ketika beberapa kelas terdapat pada variabel target. Misalnya, dataset IRIS adalah contoh yang sangat terkenal dari klasifikasi multikelas. Contoh lainnya adalah mengklasifikasikan kategori artikel/blog/dokumen.
Regresi logistik dapat digunakan untuk berbagai masalah klasifikasi, seperti deteksi spam. Contoh lainnya meliputi: prediksi diabetes, apakah pelanggan tertentu akan membeli produk tertentu; apakah pelanggan akan churn atau tidak, apakah pengguna akan mengeklik tautan iklan tertentu atau tidak, dan banyak contoh lainnya.
Regresi Logistik adalah salah satu algoritma Machine Learning paling sederhana dan paling umum digunakan untuk klasifikasi dua kelas. Algoritma ini mudah diimplementasikan dan dapat digunakan sebagai baseline untuk masalah klasifikasi biner apa pun. Konsep dasar fundamentalnya juga konstruktif dalam deep learning. Regresi logistik menggambarkan dan mengestimasi hubungan antara satu variabel biner dependen dan variabel-variabel independen.
Untuk menjalankan sendiri semua contoh kode dalam tutorial ini dengan mudah, Anda dapat membuat workbook DataLab secara gratis yang sudah terpasang Python dan berisi semua contoh kode. Untuk latihan lebih lanjut tentang regresi logistik, lihat latihan di kursus Credit Risk Modeling in R kami, yang memiliki banyak contoh dunia nyata.
Apa itu Regresi Logistik?
Regresi logistik adalah metode statistik untuk memprediksi kelas biner. Hasil atau variabel target bersifat dikotomis. Dikotomis berarti hanya ada dua kelas yang mungkin. Misalnya, ini dapat digunakan untuk masalah deteksi kanker. Metode ini menghitung probabilitas terjadinya suatu peristiwa.
Ini adalah kasus khusus dari regresi linear di mana variabel target bersifat kategorikal. Metode ini menggunakan log odds sebagai variabel dependen. Regresi Logistik memprediksi probabilitas terjadinya kejadian biner dengan memanfaatkan fungsi logit.
Persamaan Regresi Linear:
![]()
Di mana y adalah variabel dependen dan x1, x2 ... hingga Xn adalah variabel penjelas.
Fungsi Sigmoid:

Menerapkan fungsi Sigmoid pada regresi linear:

Properti Regresi Logistik:
- Variabel dependen pada regresi logistik mengikuti Distribusi Bernoulli.
- Estimasi dilakukan melalui maximum likelihood.
- Tidak ada R Square, kelayakan model dihitung melalui Concordance, KS-Statistics.
Regresi Linear vs. Regresi Logistik
Regresi linear memberikan output kontinu, tetapi regresi logistik memberikan output diskret. Contoh output kontinu adalah harga rumah dan harga saham. Contoh output diskret adalah memprediksi apakah pasien mengidap kanker atau tidak dan memprediksi apakah pelanggan akan churn. Regresi logistik diestimasi menggunakan pendekatan maximum likelihood estimation (MLE), sedangkan regresi linear biasanya diestimasi menggunakan ordinary least squares (OLS), yang juga dapat dianggap sebagai kasus khusus MLE ketika galat dalam model berdistribusi normal.

Maximum Likelihood Estimation vs. Metode Least Squares
MLE adalah metode memaksimalkan "likelihood", sedangkan OLS adalah metode pendekatan meminimalkan jarak. Memaksimalkan fungsi likelihood menentukan parameter yang paling mungkin menghasilkan data yang diamati. Dari sudut pandang statistik, MLE menetapkan mean dan varians sebagai parameter dalam menentukan nilai parametrik spesifik untuk model tertentu. Kumpulan parameter ini dapat digunakan untuk memprediksi data yang dibutuhkan dalam distribusi normal.
Estimasi Ordinary Least Squares dihitung dengan memfitting garis regresi pada titik data yang diberikan yang memiliki jumlah kuadrat deviasi minimum (least square error). Keduanya digunakan untuk mengestimasi parameter model regresi linear. MLE mengasumsikan fungsi massa probabilitas bersama, sementara OLS tidak memerlukan asumsi stokastik apa pun untuk meminimalkan jarak.
Fungsi sigmoid
Fungsi sigmoid, juga disebut fungsi logistik, menghasilkan kurva berbentuk ‘S’ yang dapat mengambil angka bernilai real apa pun dan memetakkannya ke nilai antara 0 dan 1. Jika kurva menuju tak hingga positif, y yang diprediksi akan menjadi 1, dan jika kurva menuju tak hingga negatif, y yang diprediksi akan menjadi 0. Jika output fungsi sigmoid lebih dari 0,5, kita dapat mengklasifikasikan hasil sebagai 1 atau YA, dan jika kurang dari 0,5, kita dapat mengklasifikasikannya sebagai 0 atau TIDAK. Misalnya, jika outputnya 0,75, kita dapat mengatakan dalam istilah probabilitas bahwa ada peluang 75 persen seorang pasien akan menderita kanker.


Jenis-jenis Regresi Logistik
Jenis-jenis Regresi Logistik:
- Regresi Logistik Biner: Variabel target hanya memiliki dua kemungkinan keluaran seperti Spam atau Bukan Spam, Kanker atau Tidak Kanker.
- Regresi Logistik Multinomial: Variabel target memiliki tiga atau lebih kategori nominal, seperti memprediksi jenis Wine.
- Regresi Logistik Ordinal: variabel target memiliki tiga atau lebih kategori ordinal, seperti penilaian restoran atau produk dari 1 hingga 5.
Pembangunan Model di Scikit-learn
Mari kita bangun model prediksi diabetes menggunakan classifier regresi logistik.
Pertama, mari muat dataset Pima Indian Diabetes yang diperlukan menggunakan fungsi read CSV dari pandas. Anda dapat mengunduh data dari tautan berikut: https://www.kaggle.com/uciml/pima-indians-diabetes-database atau memilih dataset dari DataCamp: https://www.datacamp.com/datalab/datasets. Dataset siap pakai memberi Anda opsi untuk melatih model di DataLab, Jupyter notebook gratis DataCamp di cloud.
Memuat data
Kita akan menyederhanakan kolom dengan memberikan col_names ke fungsi pandas read_csv().
#import pandas
import pandas as pd
col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
# load dataset
pima = pd.read_csv("pima-indians-diabetes.csv", header=None, names=col_names)
pima.head()
Memilih fitur
Di sini, Anda perlu membagi kolom yang diberikan menjadi dua jenis variabel yaitu variabel dependen (atau variabel target) dan variabel independen (atau variabel fitur).
#split dataset in features and target variable
feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']
X = pima[feature_cols] # Features
y = pima.label # Target variable
Membagi data
Untuk memahami kinerja model, membagi dataset menjadi himpunan pelatihan dan himpunan pengujian adalah strategi yang baik.
Mari bagi dataset menggunakan fungsi train_test_split(). Anda perlu memberikan 3 parameter: features, target, dan ukuran test_set. Selain itu, Anda dapat menggunakan random_state untuk memilih rekaman secara acak.
# split X and y into training and testing sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=16)
Di sini, Dataset dipecah menjadi dua bagian dengan rasio 75:25. Artinya 75% data akan digunakan untuk pelatihan model dan 25% untuk pengujian model.
Pengembangan model dan prediksi
Pertama, impor modul LogisticRegression dan buat objek classifier regresi logistik menggunakan fungsi LogisticRegression() dengan random_state untuk reprodusibilitas.
Kemudian, latih model Anda pada himpunan train menggunakan fit() dan lakukan prediksi pada himpunan test menggunakan predict().
# import the class
from sklearn.linear_model import LogisticRegression
# instantiate the model (using the default parameters)
logreg = LogisticRegression(random_state=16)
# fit the model with data
logreg.fit(X_train, y_train)
y_pred = logreg.predict(X_test)
Evaluasi Model menggunakan Confusion Matrix
Confusion matrix adalah tabel yang digunakan untuk mengevaluasi kinerja model klasifikasi. Anda juga dapat memvisualisasikan kinerja suatu algoritme. Bagian fundamental dari confusion matrix adalah jumlah prediksi yang benar dan salah yang dijumlahkan per kelas.
# import the metrics class
from sklearn import metrics
cnf_matrix = metrics.confusion_matrix(y_test, y_pred)
cnf_matrix
array([[115, 8],
[ 30, 39]])
Di sini, Anda dapat melihat confusion matrix dalam bentuk objek array. Dimensi matriks ini adalah 2*2 karena model ini merupakan klasifikasi biner. Anda memiliki dua kelas 0 dan 1. Nilai diagonal merepresentasikan prediksi yang akurat, sedangkan elemen non-diagonal adalah prediksi yang tidak akurat. Pada output, 115 dan 39 adalah prediksi yang benar, dan 30 dan 8 adalah prediksi yang salah.
Memvisualisasikan confusion matrix menggunakan heatmap
Mari visualisasikan hasil model dalam bentuk confusion matrix menggunakan matplotlib dan seaborn.
Di sini, Anda akan memvisualisasikan confusion matrix menggunakan Heatmap.
# import required modules
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
class_names=[0,1] # name of classes
fig, ax = plt.subplots()
tick_marks = np.arange(len(class_names))
plt.xticks(tick_marks, class_names)
plt.yticks(tick_marks, class_names)
# create heatmap
sns.heatmap(pd.DataFrame(cnf_matrix), annot=True, cmap="YlGnBu" ,fmt='g')
ax.xaxis.set_label_position("top")
plt.tight_layout()
plt.title('Confusion matrix', y=1.1)
plt.ylabel('Actual label')
plt.xlabel('Predicted label')
Text(0.5,257.44,'Predicted label');
Metrik evaluasi confusion matrix
Mari evaluasi model menggunakan classification_report untuk akurasi, presisi, dan recall.
from sklearn.metrics import classification_report
target_names = ['without diabetes', 'with diabetes']
print(classification_report(y_test, y_pred, target_names=target_names))
precision recall f1-score support
without diabetes 0.79 0.93 0.86 123
with diabetes 0.83 0.57 0.67 69
accuracy 0.80 192
macro avg 0.81 0.75 0.77 192
weighted avg 0.81 0.80 0.79 192
Anda mendapatkan tingkat klasifikasi sebesar 80%, yang dianggap sebagai akurasi yang baik.
Precision: Precision berkaitan dengan ketepatan, yaitu seberapa akurat model Anda. Dengan kata lain, dapat dikatakan, ketika model membuat prediksi, seberapa sering prediksi tersebut benar. Dalam kasus prediksi Anda, ketika model regresi logistik Anda memprediksi pasien akan menderita diabetes, prediksi itu benar 73% dari waktu.
Recall: Jika terdapat pasien yang mengidap diabetes dalam himpunan uji dan model regresi logistik Anda dapat mengidentifikasinya 57% dari waktu.
Kurva ROC
Receiver Operating Characteristic (ROC) curve adalah plot antara true positive rate dan false positive rate. Kurva ini menunjukkan pertukaran antara sensitivitas dan spesifisitas.
y_pred_proba = logreg.predict_proba(X_test)[::,1]
fpr, tpr, _ = metrics.roc_curve(y_test, y_pred_proba)
auc = metrics.roc_auc_score(y_test, y_pred_proba)
plt.plot(fpr,tpr,label="data 1, auc="+str(auc))
plt.legend(loc=4)
plt.show()

Skor AUC untuk kasus ini adalah 0,88. Skor AUC 1 merepresentasikan classifier yang sempurna, dan 0,5 merepresentasikan classifier yang tidak berguna.
Sumber kode tersedia di DataLab: Understanding Logistic Regression in Python.
Kelebihan
Karena sifatnya yang efisien dan langsung, metode ini tidak memerlukan daya komputasi yang tinggi, mudah diimplementasikan, mudah ditafsirkan, dan banyak digunakan oleh analis serta ilmuwan data. Selain itu, tidak memerlukan penskalaan fitur. Regresi logistik memberikan skor probabilitas untuk setiap observasi.
Kekurangan
Regresi logistik tidak mampu menangani banyak fitur/variabel kategorikal. Metode ini rentan terhadap overfitting. Selain itu, metode ini tidak dapat menyelesaikan masalah non-linear, sehingga memerlukan transformasi fitur non-linear. Regresi logistik tidak akan berkinerja baik dengan variabel independen yang tidak berkorelasi dengan variabel target dan sangat mirip atau saling berkorelasi satu sama lain.
Kesimpulan
Dalam tutorial ini, Anda membahas banyak detail tentang regresi logistik. Anda telah mempelajari apa itu regresi logistik, bagaimana membangun model terkait, bagaimana memvisualisasikan hasil, serta beberapa latar belakang teoretis. Anda juga membahas beberapa konsep dasar seperti fungsi sigmoid, maximum likelihood, confusion matrix, kurva ROC.
Semoga sekarang Anda dapat memanfaatkan teknik Regresi Logistik untuk menganalisis dataset Anda sendiri. Terima kasih telah membaca tutorial ini!
Jika Anda ingin mempelajari lebih lanjut tentang Regresi Logistik, ikuti kursus Machine Learning with scikit-learn dari DataCamp. Anda juga dapat memulai perjalanan menjadi machine learning engineer dengan mendaftar pada career track Machine Learning Scientist with Python.


