Lewati ke konten utama

Tutorial Regresi Logistik di R

Pelajari segala hal tentang regresi logistik: bagaimana bedanya dari regresi linear, cara memfitting dan mengevaluasi model ini di R dengan fungsi glm() dan lainnya!
Diperbarui 28 Sep 2026  · 14 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Jalankan dan edit kode dari Tutorial ini secara online

Jalankan kode

Regresi logistik adalah model yang sederhana namun kuat untuk memprediksi keluaran biner—apakah sesuatu akan terjadi atau tidak. Ini adalah tipe model klasifikasi untuk pembelajaran mesin terawasi.

Regresi logistik digunakan di hampir setiap industri—pemasaran, layanan kesehatan, ilmu sosial, dan lainnya—dan merupakan bagian penting dari perangkat data scientist mana pun.

Untuk memaksimalkan tutorial ini, Anda perlu pemahaman dasar cara kerja R. Mengetahui model terkait, regresi linear, juga membantu. Baca Tutorial Regresi Linear di R untuk mempelajarinya.

Tinjauan Regresi Logistik

Misalkan Anda ingin memprediksi apakah hari ini akan cerah atau tidak. Ada dua kemungkinan keluaran: "cerah" atau "tidak cerah". Variabel keluaran juga dikenal sebagai "variabel target" atau "variabel dependen".

Ada banyak variabel yang dapat memengaruhi keluaran seperti ‘temperatur sehari sebelumnya’, ‘tekanan udara’, dan sebagainya. Variabel yang memengaruhi ini dikenal sebagai fitur, variabel independen, atau prediktor—semua istilah tersebut memiliki arti yang sama. 

Contoh lain termasuk apakah pelanggan akan membeli produk Anda atau tidak, apakah sebuah email adalah spam atau bukan, apakah suatu transaksi bersifat penipuan atau tidak, dan apakah suatu obat akan menyembuhkan pasien atau tidak.  

Bagaimana regresi logistik bekerja?

Regresi logistik mencari kecocokan terbaik antara variabel prediktor dan target untuk memprediksi probabilitas variabel target termasuk ke suatu kelas/kategori berlabel. 

Regresi linear berusaha menemukan garis lurus terbaik yang memprediksi keluaran dari fitur. Model ini membentuk persamaan seperti

y_predictions = intercept + slope * features

dan menggunakan optimisasi untuk mencari nilai intercept dan slope yang paling baik.

Regresi logistik bekerja serupa, kecuali ia melakukan regresi pada probabilitas keluaran berupa kategori. Ia menggunakan fungsi sigmoid (fungsi distribusi kumulatif dari distribusi logistik) untuk mentransformasikan sisi kanan persamaan tersebut.

y_predictions = logistic_cdf(intercept + slope * features)

Sekali lagi, model menggunakan optimisasi untuk mencari nilai intercept dan slope yang paling baik.

Karena algoritme untuk regresi logistik sangat mirip dengan persamaan regresi linear, ia menjadi bagian dari keluarga model yang disebut "generalized linear models". Inilah mengapa regresi logistik memiliki kata "regresi" dalam namanya, meskipun ia adalah model klasifikasi.

Fungsi sigmoid menyerupai kurva berbentuk S pada gambar di bawah. Ia menerima input bernilai riil dan mengonversinya antara 0 hingga 1 (dengan mengecilkan dari kedua sisi, yaitu nilai negatif ke 0 dan nilai positif yang sangat tinggi ke 1). Lebih jauh, ambang batas (cut-off threshold) adalah faktor penentu yang mengelompokkan keluaran ke dalam kategori atau kelas ketika diterapkan di atas probabilitas ini.

image4.png

Konsep yang kompleks paling mudah dipahami dengan contoh, jadi mari kita ambil analogi untuk menjelaskan cara kerja algoritme RL. Misalkan model RL ditugaskan untuk mengidentifikasi transaksi penipuan dengan melihat berbagai indikator penipuan, seperti lokasi pengguna, jumlah pembelian, alamat IP, dan sebagainya. Tujuannya adalah menentukan kemungkinan apakah suatu transaksi sah atau penipuan—yang menjadi variabel target.

Model menetapkan bobot pada prediktor berdasarkan dampaknya terhadap variabel target dan menggabungkannya untuk menghitung skor ternormalisasi atau probabilitas penipuan. 

Dataset

Kita akan menggunakan dataset kampanye pemasaran langsung oleh sebuah institusi perbankan Portugal menggunakan panggilan telepon. Kampanye ini bertujuan menjual langganan deposito berjangka bank yang direpresentasikan oleh variabel y (berlangganan atau tidak). Tujuan model regresi logistik adalah memprediksi apakah seorang pelanggan akan membeli langganan atau tidak berdasarkan variabel prediktor, yaitu atribut pelanggan seperti informasi demografis.

image1.png

kamus data untuk dataset ini dan banyak dataset berguna lainnya dapat ditemukan di situs web Datacamp.

Variabel

Deskripsi

Rincian

age

usia pelanggan

 

job

jenis pekerjaan

kategorikal: "admin.","blue-collar","entrepreneur","housemaid","management","retired","self-employed","services","student","technician","unemployed","unknown"

marital

status perkawinan

kategorikal: "divorced","married","single","unknown"; catatan: "divorced" berarti bercerai atau duda/janda

education

gelar tertinggi pelanggan

kategorikal: "basic.4y","basic.6y","basic.9y","high.school","illiterate","professional.course","university.degree","unknown"

default

memiliki kredit gagal bayar?

kategorikal: "no","yes","unknown"

housing

memiliki pinjaman perumahan?

kategorikal: "no","yes","unknown"

loan

memiliki pinjaman pribadi?

kategorikal: "no","yes","unknown"

contact

jenis komunikasi kontak

kategorikal: "cellular","telephone"

month

bulan kontak terakhir dalam setahun

kategorikal: "jan", "feb", "mar", ..., "nov", "dec"

day_of_week

hari kontak terakhir dalam sepekan

kategorikal: "mon","tue","wed","thu","fri"

campaign

jumlah kali klien dihubungi selama kampanye ini

numerik, termasuk kontak terakhir

pdays

jumlah hari sejak klien terakhir dihubungi pada kampanye sebelumnya

numerik; 999 berarti klien belum pernah dihubungi sebelumnya

previous

jumlah kontak yang dilakukan sebelum kampanye ini dan untuk klien ini

numerik

poutcome

hasil kampanye pemasaran sebelumnya

kategorikal: "failure","nonexistent","success"

emp.var.rate

laju variasi ketenagakerjaan - indikator triwulanan

numerik

cons.price.idx

indeks harga konsumen - indikator bulanan

numerik

cons.conf.idx

indeks kepercayaan konsumen - indikator bulanan

numerik

euribor3m

suku bunga euribor 3 bulan - indikator harian

numerik

nr.employed

jumlah karyawan - indikator triwulanan

numerik

y

apakah klien berlangganan deposito berjangka?

biner: "yes","no"

Alur Kerja Regresi Logistik

Alur kerja pembelajaran mesin lengkap dibahas dalam infografik Panduan Pemula untuk Alur Kerja Machine Learning. Di sini kita akan fokus pada langkah persiapan data dan pemodelan. Secara khusus, kita akan membahas:

  • Membagi data menjadi set pelatihan dan pengujian
  • Memfitting (melatih) model
  • Membuat prediksi
  • Mengevaluasi kinerja model
  • Penyetelan hyperparameter

Paket Regresi Logistik

Di R, ada dua alur kerja populer untuk memodelkan regresi logistik: base-R dan tidymodels.

Alur kerja base-R lebih sederhana dan mencakup fungsi seperti glm() dan summary() untuk memfitting model dan menghasilkan ringkasan model.

Alur kerja tidymodels memudahkan pengelolaan banyak model dan menyediakan antarmuka yang konsisten untuk bekerja dengan berbagai tipe model.

Tutorial ini akan menggunakan alur kerja tidymodels.

Visualisasikan Data

Impor paket tidymodels dengan memanggil fungsi library(). 

Dataset berada dalam berkas CSV dengan format bergaya Eropa (koma untuk desimal dan titik koma untuk pemisah). Kita akan membacanya dengan read_csv2() dari paket readr. 

Konversikan variabel target, y, menjadi variabel factor untuk pemodelan. 

Menggunakan fungsi ggplot(), plot jumlah tiap pekerjaan relatif terhadap y.

library(readr)
library(tidymodels)

# Read the dataset and convert the target variable to a factor
bank_df <- read_csv2("bank-full.csv")
bank_df$y = as.factor(bank_df$y)

# Plot job occupation against the target variable
ggplot(bank_df, aes(job, fill = y)) +
    geom_bar() +
    coord_flip()

image5.png

Membagi Data

Mari kita bagi dataset menjadi set pelatihan untuk memfitting model dan set uji untuk evaluasi model agar memastikan model yang dilatih bekerja pada dataset yang belum pernah dilihat.

Pembagian data menjadi set pelatihan dan uji dapat dilakukan menggunakan fungsi initial_split() dan atribut prop yang menentukan proporsi data pelatihan.

# Split data into train and test
set.seed(421)
split <- initial_split(bank_df, prop = 0.8, strata = y)
train <- split %>% 
         training()
test <- split %>% 
        testing()

Memfitting dan Mengevaluasi Model

Untuk membuat model, deklarasikan model logistic_reg(). Ini memerlukan argumen mixture dan penalty yang mengontrol jumlah regularisasi. Nilai mixture sebesar 1 menunjukkan model lasso dan 0 menunjukkan regresi ridge. Nilai di antaranya juga diperbolehkan. Argumen penalty menunjukkan kekuatan regularisasi.

Perhatikan bahwa Anda perlu memberikan bilangan floating point bertipe "double" ke mixture dan penalty

Tetapkan "engine" (perangkat lunak backend yang digunakan untuk menjalankan perhitungan) dengan set_engine(). Ada beberapa pilihan: Engine default adalah "glm", yang melakukan regresi logistik klasik. Ini sering disukai oleh ahli statistik karena Anda mendapatkan p-value untuk setiap koefisien, sehingga lebih mudah memahami pentingnya masing-masing koefisien.

Di sini kita akan menggunakan engine "glmnet". Ini disukai oleh ilmuwan pembelajaran mesin karena memungkinkan regularisasi, yang dapat meningkatkan prediksi, terutama jika Anda memiliki banyak fitur. (Di Python, paket scikit-learn secara bawaan menyertakan beberapa regularisasi dalam regresi logistik.)

Panggil metode fit() untuk melatih model pada data pelatihan yang dibuat pada langkah sebelumnya. Fungsi ini menerima formula sebagai argumen pertama. Di sisi kiri formula, gunakan variabel target (dalam kasus ini y). Di sisi kanan, Anda dapat menyertakan fitur apa pun yang Anda inginkan. Tanda titik berarti "gunakan semua variabel yang tidak ditulis di sisi kiri formula". Untuk informasi lebih lanjut tentang penulisan formula, baca Tutorial Formula R.

# Train a logistic regression model
model <- logistic_reg(mixture = double(1), penalty = double(1)) %>%
  set_engine("glmnet") %>%
  set_mode("classification") %>%
  fit(y ~ ., data = train)

# Model summary
tidy(model)

Keluaran ditunjukkan di bawah, dengan kolom estimate mewakili koefisien dari prediktor.

# A tibble: 43 × 3
   term              estimate penalty
   <chr>                <dbl>   <dbl>
 1 (Intercept)      -2.59           0
 2 age              -0.000477       0
 3 jobblue-collar   -0.183          0
 4 jobentrepreneur  -0.206          0
 5 jobhousemaid     -0.270          0
 6 jobmanagement    -0.0190         0
 7 jobretired        0.360          0
 8 jobself-employed -0.101          0
 9 jobservices      -0.105          0
10 jobstudent        0.415          0
# ... with 33 more rows
# ℹ Use `print(n = ...)` to see more rows

Membuat prediksi

Buat prediksi pada data pengujian menggunakan fungsi predict(). Anda dapat memilih tipe prediksi.

  • type = "class" mengembalikan nilai target paling mungkin untuk setiap observasi. Di sini, akan mengembalikan "yes" atau "no" tergantung apakah model menilai klien kemungkinan akan berlangganan deposito berjangka atau tidak.
  • type = "prob" mengembalikan probabilitas setiap nilai target untuk setiap observasi. Di sini, akan mengembalikan probabilitas "yes" dan probabilitas "no" (yang jumlahnya satu untuk setiap observasi).
# Class Predictions
pred_class <- predict(model,
                      new_data = test,
                      type = "class")

# Class Probabilities
pred_proba <- predict(model,
                      new_data = test,
                      type = "prob")

Evaluasi model menggunakan fungsi accuracy() dengan argumen truth sebagai y dan argumen estimate berupa prediksi dari langkah sebelumnya.

results <- test %>%
           select(y) %>%
           bind_cols(pred_class, pred_proba)

accuracy(results, truth = y, estimate = .pred_class)

Penyetelan Hyperparameter

Alih-alih memberikan nilai spesifik ke argumen mixture dan penalty ("hyperparameter"), Anda dapat mengoptimalkan kemampuan prediksi model dengan melakukan tuning. 

Idenya adalah Anda menjalankan model berkali-kali dengan nilai hyperparameter yang berbeda, dan melihat mana yang memberikan prediksi terbaik.

  • Dalam fungsi logistic_reg(), setel argumen mixture dan penalty ke panggilan tune().
  • Gunakan fungsi grid_regular() untuk mendefinisikan kisi nilai yang mungkin untuk mixture dan penalty.
  • Fungsi workflow() membuat objek untuk menyimpan detail model, yang diperlukan saat Anda menjalankannya berkali-kali. 
  • Pilih model terbaik menggunakan fungsi select_best(). Anda dapat memilih dari berbagai metrik yang mendefinisikan mana yang "terbaik". Di sini, kita akan menggunakan metrik "receiver operating characteristic area under the curve" (ROC AUC).
# Define the logistic regression model with penalty and mixture hyperparameters
log_reg <- logistic_reg(mixture = tune(), penalty = tune(), engine = "glmnet")

# Define the grid search for the hyperparameters
grid <- grid_regular(mixture(), penalty(), levels = c(mixture = 4, penalty = 3))

# Define the workflow for the model
log_reg_wf <- workflow() %>%
  add_model(log_reg) %>%
  add_formula(y ~ .)

# Define the resampling method for the grid search
folds <- vfold_cv(train, v = 5)

# Tune the hyperparameters using the grid search
log_reg_tuned <- tune_grid(
  log_reg_wf,
  resamples = folds,
  grid = grid,
  control = control_grid(save_pred = TRUE)
)

select_best(log_reg_tuned, metric = "roc_auc")
# A tibble: 1 × 3
       penalty mixture .config              
         <dbl>   <dbl> <chr>                
1 0.0000000001       0 Preprocessor1_Model01

Metrik Evaluasi Lainnya

Menggunakan hyperparameter terbaik:

  1. Mari latih model regresi logistik
  2. Gunakan untuk menghasilkan prediksi pada set uji
  3. Buat confusion matrix menggunakan nilai sebenarnya dan estimasi
# Fit the model using the optimal hyperparameters
log_reg_final <- logistic_reg(penalty = 0.0000000001, mixture = 0) %>%
                 set_engine("glmnet") %>%
                 set_mode("classification") %>%
                 fit(y~., data = train)

# Evaluate the model performance on the testing set
pred_class <- predict(log_reg_final,
                      new_data = test,
                      type = "class")
results <- test %>%
  select(y) %>%
  bind_cols(pred_class, pred_proba)

# Create confusion matrix
conf_mat(results, truth = y,
         estimate = .pred_class)
Truth
Prediction   no  yes
       no  7838  738
       yes  147  320

Anda dapat menghitung precision (positive predictive value, jumlah true positive dibagi jumlah prediksi positif) dengan fungsi precision().

precision(results, truth = y,
          estimate = .pred_class)
# A tibble: 1 × 3
  .metric   .estimator .estimate
  <chr>     <chr>          <dbl>
1 precision binary         0.914

Demikian pula, Anda dapat menghitung recall (sensitivitas, jumlah true positive dibagi jumlah positif aktual) dengan fungsi recall().

recall(results, truth = y,
          estimate = .pred_class)
# A tibble: 1 × 3
  .metric .estimator .estimate
  <chr>   <chr>          <dbl>
1 recall  binary         0.982

Mari pahami variabel yang memengaruhi keputusan pembelian langganan. Dalam skenario regresi logistik, koefisien menentukan seberapa sensitif variabel target terhadap masing-masing prediktor. Semakin tinggi nilai koefisien, semakin tinggi pula pentingnya. Urutkan variabel secara menurun berdasarkan nilai absolut koefisiennya dan tampilkan hanya koefisien dengan nilai absolut lebih besar dari 0,5.

coeff <- tidy(log_reg_final) %>% 
  arrange(desc(abs(estimate))) %>% 
  filter(abs(estimate) > 0.5)
# A tibble: 10 × 3
   term            estimate      penalty
   <chr>              <dbl>        <dbl>
 1 (Intercept)       -2.59  0.0000000001
 2 poutcomesuccess    2.08  0.0000000001
 3 monthmar           1.62  0.0000000001
 4 monthoct           1.08  0.0000000001
 5 monthsep           1.03  0.0000000001
 6 contactunknown    -1.01  0.0000000001
 7 monthdec           0.861 0.0000000001
 8 monthjan          -0.820 0.0000000001
 9 housingyes        -0.550 0.0000000001
10 monthnov          -0.517 0.0000000001

Plot pentingnya fitur menggunakan fungsi ggplot().

ggplot(coeff, aes(x = term, y = estimate, fill = term)) + geom_col() + coord_flip()

image2.png

Naik ke Tingkat Berikutnya

Dengan ini, kita telah sampai di akhir tutorial yang mendemonstrasikan cara melatih dan mengevaluasi model regresi logistik menggunakan paket tidymodels. Tutorial ini juga membahas cara menafsirkan hasil model dan memplotnya seperti pentingnya fitur. 

Jika Anda ingin mempelajari lebih jauh tentang pemodelan AI menggunakan tidymodels, silakan lihat kursus Modeling with tidymodels in R. Untuk pemodelan menggunakan pendekatan base-R, lihat kursus Introduction to Regression in R, Intermediate Regression in R, dan Generalized Linear Models in R.

Topik
R
Data Science

Kursus R

Kursus

Pengantar R

4 jam
3.1M
Kuasai dasar analisis data di R, termasuk vectors, lists, dan data frames, lalu praktikkan R dengan data sets nyata.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya