Regresi Logistik Multinomial

Pendahuluan

Pengertian Regresi Logistik Multinomial

Regresi Logistik Multinomial adalah metode statistik yang digunakan untuk memprediksi variabel dependen kategorik dengan lebih dari dua kelas, seperti Success_Level (Low, Medium, High), berdasarkan beberapa variabel independen seperti advertising, salespeople, satisfaction, dan competition. Model ini memperkirakan probabilitas setiap kategori dan menunjukkan bagaimana perubahan pada faktor-faktor tersebut memengaruhi kemungkinan keberhasilan perusahaan pada tingkat tertentu. Metode ini banyak digunakan untuk analisis pengambilan keputusan di bidang bisnis, pemasaran, dan manajemen.

Rumus Regresi Logistik Multinomial

Secara umum, persamaan untuk kategori ke-j ditulis sebagai:

\[ \log\left(\frac{P(Y=j)}{P(Y=\text{base})}\right) = \beta_{0j} + \beta_{1j}X_1 + \beta_{2j}X_2 + ... + \beta_{pj}X_p \]

Keterangan:

  • \(( P(Y=j) )\) = peluang suatu observasi termasuk ke dalam kategori j
  • \(( P(Y=\text{base}) )\) = peluang kategori acuan (misalnya “Low”)
  • \(( \beta_{0j}, \beta_{1j}, ..., \beta_{pj} )\) = parameter model untuk kategori j

Model ini akan menghasilkan \(((k - 1))\) set koefisien, karena satu kategori dijadikan pembanding (kategori dasar).

Fungsi dari Regresi Logistik Multinomial

Regresi logistik multinomial digunakan untuk memprediksi hasil dengan lebih dari dua kategori yang tidak berurutan serta melihat pengaruh tiap variabel independen terhadap peluang masuk ke suatu kategori. Model ini umum diterapkan untuk menganalisis kepuasan pelanggan, preferensi produk, status pekerjaan, atau tingkat keberhasilan bisnis.

Tahapan Proses

##Import dan Eksplorasi Dataset

library(readr)
library(dplyr)
library(DT)
library(knitr)

# Membaca dataset dari file CSV dengan pemisah titik koma (;)
data_multi <- read_delim("multinomial_logistik_data.csv", delim = ";", show_col_types = FALSE)

# Membersihkan kolom numerik dengan menghapus tanda titik (.) yang berfungsi sebagai pemisah ribuan
data_multi <- data_multi %>%
  mutate(
    Advertising  = as.numeric(gsub("\\.", "", Advertising)),
    Salespeople  = as.numeric(gsub("\\.", "", Salespeople)),
    Satisfaction = as.numeric(gsub("\\.", "", Satisfaction)),
    Competition  = as.numeric(gsub("\\.", "", Competition)),
    Success_Level = factor(Success_Level, levels = c("Low", "Medium", "High"))
  )

# Menampilkan struktur data untuk melihat tipe variabel tiap kolom
cat("Struktur Dataset:\n")
## Struktur Dataset:
str(data_multi)
## tibble [200 × 5] (S3: tbl_df/tbl/data.frame)
##  $ Advertising  : num [1:200] 1.22e+15 2.47e+15 1.52e+14 2.71e+15 2.85e+15 ...
##  $ Salespeople  : num [1:200] 1.60e+15 3.41e+15 2.50e+15 2.29e+15 2.01e+15 ...
##  $ Satisfaction : num [1:200] 9.87e+15 2.23e+15 9.15e+15 6.19e+15 4.56e+15 ...
##  $ Competition  : num [1:200] 3.14e+15 7.18e+15 3.03e+15 3.87e+15 2.57e+14 ...
##  $ Success_Level: Factor w/ 3 levels "Low","Medium",..: 1 3 2 3 3 1 2 2 1 1 ...
# Menampilkan ringkasan statistik dari setiap variabel
cat("\nRingkasan Statistik Dataset:\n")
## 
## Ringkasan Statistik Dataset:
print(summary(data_multi))
##   Advertising         Salespeople         Satisfaction      
##  Min.   :1.667e+13   Min.   :1.599e+12   Min.   :9.721e+13  
##  1st Qu.:1.329e+15   1st Qu.:1.263e+15   1st Qu.:2.352e+15  
##  Median :1.975e+15   Median :1.991e+15   Median :4.640e+15  
##  Mean   :2.522e+15   Mean   :1.950e+15   Mean   :4.872e+15  
##  3rd Qu.:2.710e+15   3rd Qu.:2.812e+15   3rd Qu.:7.364e+15  
##  Max.   :9.692e+15   Max.   :3.478e+15   Max.   :9.970e+15  
##   Competition        Success_Level
##  Min.   :2.485e+13   Low   :66    
##  1st Qu.:2.315e+15   Medium:66    
##  Median :4.764e+15   High  :68    
##  Mean   :4.807e+15                
##  3rd Qu.:7.419e+15                
##  Max.   :9.930e+15
# Menampilkan 10 baris pertama dari dataset
kable(
  head(data_multi, 10), 
  caption = " Tabel 1. Tabel Dataset Regresi Logistik Multinomial",
  align = "c"
)
Tabel 1. Tabel Dataset Regresi Logistik Multinomial
Advertising Salespeople Satisfaction Competition Success_Level
1.218944e+15 1.596815e+15 9.874489e+15 3.135067e+15 Low
2.470763e+15 3.405897e+15 2.233607e+15 7.178413e+15 High
1.522442e+14 2.503414e+15 9.147786e+15 3.032366e+15 Medium
2.707544e+15 2.287574e+15 6.186717e+15 3.866451e+15 High
2.851168e+15 2.006433e+15 4.559040e+15 2.565854e+14 High
6.138912e+15 3.200616e+14 5.048222e+15 8.212866e+15 Low
1.820264e+15 1.910230e+15 7.358517e+15 2.316539e+15 Medium
2.731048e+15 1.720598e+15 1.742525e+15 8.404457e+15 Medium
1.878588e+15 1.426613e+15 4.053813e+15 3.978980e+15 Low
1.641537e+15 1.430429e+15 7.127088e+14 4.367524e+15 Low
# Membuat tabel interaktif agar data dapat dieksplorasi secara dinamis
datatable(
  data_multi,
  options = list(pageLength = 10, scrollX = TRUE),
  caption = htmltools::tags$caption(
    style = 'caption-side: top; text-align: center; font-weight: bold;',
    'Tabel 2. Tabel Interaktif Dataset Multinomial Logistic Regression'
  )
)

Pembangunan Model Regresi Logistik Multinomial

library(nnet)  # memanggil paket nnet yang berisi fungsi multinom()

# Membuat model regresi logistik multinomial dengan variabel Success_Level sebagai target
model_multi <- multinom(Success_Level ~ Advertising + Salespeople + Satisfaction + Competition,
                        data = data_multi)
## # weights:  18 (10 variable)
## initial  value 219.722458 
## final  value 219.722458 
## converged
# Menampilkan hasil ringkasan dari model yang telah dibangun
summary(model_multi)
## Call:
## multinom(formula = Success_Level ~ Advertising + Salespeople + 
##     Satisfaction + Competition, data = data_multi)
## 
## Coefficients:
##          (Intercept)   Advertising  Salespeople  Satisfaction   Competition
## Medium -2.345625e-32 -6.294079e-16 2.166003e-16 -5.775766e-16 -1.128020e-16
## High    4.691250e-32 -7.918943e-16 8.561553e-16  4.864593e-16 -3.219946e-16
## 
## Std. Errors:
##         (Intercept)  Advertising  Salespeople Satisfaction  Competition
## Medium          NaN 4.226550e-16 4.748291e-16 3.951824e-16 1.757905e-16
## High   1.273623e-31 1.316661e-16 1.807983e-16 8.430739e-17 6.919014e-17
## 
## Residual Deviance: 439.4449 
## AIC: 459.4449

Keterangan

Nilai koefisien positif menunjukkan peningkatan peluang masuk ke kategori tertentu dibanding kategori referensi, sedangkan koefisien negatif menandakan penurunan peluangnya.

Gabungan Hasil Koefisien dan p-value

##        Coefficients..Intercept. Coefficients.Advertising
## Medium            -2.345625e-32            -6.294079e-16
## High               4.691250e-32            -7.918943e-16
##        Coefficients.Salespeople Coefficients.Satisfaction
## Medium             2.166003e-16             -5.775766e-16
## High               8.561553e-16              4.864593e-16
##        Coefficients.Competition p_value..Intercept. p_value.Advertising
## Medium            -1.128020e-16                 NaN        1.364409e-01
## High              -3.219946e-16           0.7126205        1.805389e-09
##        p_value.Salespeople p_value.Satisfaction p_value.Competition
## Medium        6.482714e-01         1.438661e-01        5.210782e-01
## High          2.186055e-06         7.924006e-09        3.259297e-06

Interpretasi Koefisien

# Mengubah koefisien model menjadi nilai odds ratio
odds_ratio <- exp(coef(model_multi))

# Menampilkan hasil odds ratio dalam bentuk tabel
kable(
  odds_ratio,
  caption = "Tabel 3. Odds Ratio dari Model Regresi Logistik Multinomial"
)
Tabel 3. Odds Ratio dari Model Regresi Logistik Multinomial
(Intercept) Advertising Salespeople Satisfaction Competition
Medium 1 1 1 1 1
High 1 1 1 1 1

Keterangan

Model logistik menggunakan log-odds, sehingga koefisien dikonversi menjadi odds ratio dengan exp(coef()) agar lebih mudah dipahami. Odds ratio menunjukkan perubahan peluang saat variabel independen naik satu satuan. Contohnya, jika Satisfaction memiliki nilai 2, maka setiap kenaikan satu tingkat kepuasan menggandakan peluang perusahaan masuk ke kategori High dibanding Low.

Evaluasi Model

# Melakukan prediksi kategori menggunakan model yang telah dibangun
prediksi <- predict(model_multi, newdata = data_multi)

# Membuat confusion matrix untuk membandingkan hasil prediksi dengan data sebenarnya
conf_matrix <- table(Prediksi = prediksi, Aktual = data_multi$Success_Level)
kable(conf_matrix, caption = "Tabel 4. Confusion Matrix Model Regresi Logistik Multinomial")
Tabel 4. Confusion Matrix Model Regresi Logistik Multinomial
Low Medium High
Low 35 23 22
Medium 0 0 0
High 31 43 46

Hitung Akurasi

# Menghitung tingkat akurasi model berdasarkan kesesuaian prediksi dan data aktual
akurasi <- mean(prediksi == data_multi$Success_Level)
cat("\nAkurasi Model:", round(akurasi * 100, 2), "%\n")
## 
## Akurasi Model: 40.5 %

Keterangan

Nilai akurasi (%): menunjukkan tingkat performa model secara keseluruhan. Semakin besar nilai akurasi, semakin baik kemampuan model dalam mengklasifikasikan kategori dengan tepat.

Visualisasi Hasil

# Memuat library yang diperlukan
library(ggplot2)
library(plotly)
library(tidyr)
library(dplyr)

# Mengambil nilai probabilitas prediksi untuk setiap kategori hasil
prob_pred <- as.data.frame(predict(model_multi, type = "probs"))
prob_pred$Advertising <- data_multi$Advertising
prob_pred$Kategori <- data_multi$Success_Level

# Mengubah data ke format long agar mudah divisualisasikan
prob_long <- prob_pred %>%
  pivot_longer(cols = c("Low", "Medium", "High"),
               names_to = "Success_Level",
               values_to = "Probabilitas")

# Membuat plot dasar menggunakan ggplot untuk menampilkan hubungan variabel
p <- ggplot(prob_long, aes(x = Advertising, y = Probabilitas, color = Success_Level)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "loess", se = FALSE, size = 1) +
  theme_minimal(base_size = 12) +
  labs(
    title = "Regresi Logistik Multinomial: Probabilitas Setiap Kategori Keberhasilan",
    subtitle = "Keterkaitan antara Advertising Budget dan Probabilitas Success_Level",
    x = "Advertising Budget",
    y = "Probabilitas Prediksi",
    color = "Kategori"
  ) +
  scale_color_manual(values = c("High" = "pink", "Low" = "violet", "Medium" = "lightblue"))

# Mengubah visualisasi menjadi grafik interaktif
ggplotly(p, tooltip = c("x", "y", "color"))

Keterangan

Grafik menunjukkan pengaruh Advertising Budget terhadap peluang tiap kategori keberhasilan. Jika garis “High” meningkat, berarti semakin besar iklan → peluang sukses tinggi naik.

Makna Visualisasi Kurva LOESS

Visualisasi kurva LOESS menunjukkan bahwa garis ungu (Low) menurun seiring peningkatan Advertising, garis biru muda (Medium) sedikit naik di kisaran tengah, dan garis merah muda (High) meningkat tajam pada anggaran di atas 1500. Hal ini menandakan bahwa semakin besar anggaran iklan, semakin tinggi peluang perusahaan mencapai kategori keberhasilan High.

Kesimpulan

Model regresi logistik multinomial menghitung probabilitas tiap kategori keberhasilan berdasarkan faktor seperti Advertising, Satisfaction, dan Competition. Hasilnya menunjukkan bahwa Advertising dan Satisfaction meningkatkan peluang sukses (Medium dan High), sedangkan Competition tinggi menurunkannya. Model ini berguna untuk menganalisis faktor-faktor bisnis dan mendukung keputusan strategis berbasis probabilitas.

Referensi