Analisis dan Pemodelan Prediktif
Multinomial Logistic Regression
1 Logistics Regression
1.1 Multinomial Logistics
Regresi logistik multinomial (MLR) adalah metode statistik yang digunakan untuk memprediksi kemungkinan hasil dari sebuah variabel yang memiliki lebih dari dua kategori. MLR membantu kita dalam menentukan kelas mana yang paling mungkin terjadi berdasarkan beberapa faktor atau variabel lain. Misalnya, kategori produk: Advertising, Salespeople, Satisfaction, dan Competition. Model ini memprediksi probabilitas untuk setiap kategori.
Persamaan Regresi Logistik Multinomial:
Untuk kategori k dibandingkan dengan kategori baseline K (referensi):
\[ \log\big(P(Y = k \mid X)\big) = \beta_{0k} + \beta_{1k} X_1 + \beta_{2k} X_2 + \cdots + \beta_{pk} X_p \] atau setara dengan:
\[ P(Y = k \mid X) = \frac{\exp\big(\beta_{0k} + \beta_{1k} X_1 + \beta_{2k} X_2 + \cdots + \beta_{pk} X_p\big)} {1 + \sum_{j=1}^{K-1} \exp\big(\beta_{0j} + \beta_{1j} X_1 + \beta_{2j} X_2 + \cdots + \beta_{pj} X_p\big)} \]
Untuk kategori baseline K:
\[ P(Y = K \mid X) = \frac{1}{1 + \sum_{j=1}^{K-1} \exp\big(\beta_{0j} + \beta_{1j} X_1 + \beta_{2j} X_2 + \cdots + \beta_{pj} X_p\big)} \]
Keterangan :
\(P(Y = k \mid X)\) : probabilitas observasi termasuk kategori \((k)\) given prediktor \(X\)
\(X_1,X_2,…,X_p\): variabel independen (prediktor)
\((\beta_{0k},\beta_{1k}, \beta_{2k}, \dots, \beta_{pk})\) : koefisien model untuk kategori \((k)\)
\((K)\) : kategori baseline/referensi
\(k\)=1,2,…,\(K\) − 1: kategori yang dibandingkan dengan baseline
\(\log \left( \frac{P(Y = k \mid X)}{P(Y = K \mid X)} \right)\) : log-odds kategori \(k\) relatif terhadap baseline \(K\)
1.1.1 Interpretasi Koefisien
Koefisien \((\beta_{j})\) mewakili perubahan log-odds untuk perubahan satu unit dalam \((X_{j})\) dengan menganggap semua variabel lainnya konstan.
Untuk interpretasi yang lebih intuitif dalam hal probabilitas, gunakan rasio peluang (odds ratio):
\[ OR_j = e^{\beta_j} \] - OR > 1 : meningkatkan kemungkinan terjadinya kategori \(k\) (dibanding baseline)
OR = 1 : tidak ada efek
OR < 1 : menurunkan kemungkinan terjadinya kategori \(k\) (dibanding baseline)
1.1.2 Karakteristik Multinomial Logistic Regression
- Variabel dependen kategorikal dengan lebih dari dua kategori (≥3)
Kategori bersifat nominal (tidak berurutan)
Mutually exclusive (hanya bisa pilih satu kategori)
- Menggunakan baseline/reference category
Satu kategori dijadikan referensi
Kategori lain dibandingkan terhadap referensi
Model membuat K-1 persamaan untuk K kategori
- Variabel independen bisa numerik atau kategorikal
Numerik: digunakan langsung
Kategorikal: perlu dummy coding (K-1 dummy variables untuk K kategori)
Bisa kombinasi keduanya
- Menggunakan fungsi Softmax
Menghasilkan probabilitas untuk setiap kategori
Σ P(semua kategori) = 1 (100%)
Semua probabilitas positif (0 < P < 1)
- Koefisien β menunjukkan pengaruh terhadap LOG-ODDS
β mempengaruhi log-odds (logit) bukan probabilitas langsung
log(P(k)/P(baseline)) = β₀ + β₁X₁ + …
Untuk interpretasi lebih mudah: konversi ke Odds Ratio (OR = e^β)
Hubungan β dengan probabilitas bersifat non-linear
Studi Kasus: Regresi Logistik
Kita akan Memodelkan hubungan antara faktor-faktor pemasaran dan tingkat keberhasilan penjualan (Success_Level), serta memprediksi probabilitas kategori keberhasilan penjualan berdasarkan faktor-faktor tersebut.
Variabel Dependen (Target): Success_Level — Tingkat keberhasilan penjualan, dengan tiga kategori:
Low : Penjualan berada di level rendah
Medium : Penjualan berada di level menengah
High : Penjualan berada di level tinggi
Variabel independen (Prediktor):
Advertising : anggaran iklan (ribu dolar)
Salespeople : jumlah tenaga penjualan
Satisfaction : skor kepuasan pelanggan (1–10)
Competition : tingkat kompetisi pasar (1–10)
Metode Analisis:
- Digunakan Multinomial Logistic Regression karena target memiliki lebih dari dua kategori.
- Model ini memprediksi probabilitas setiap kategori Success_Level berdasarkan faktor-faktor pemasaran.
- Kategori referensi biasanya dipilih sebagai salah satu level target, misalnya High, agar koefisien untuk kategori lain (Low dan Medium) bisa dibandingkan terhadap kategori referensi.
library(DT)
library(readr)
# Baca CSV
data <- read_csv("C:/Users/Dwi Manullang/Downloads/2 Regression Models – Analysis and Predictive Modeling.csv")
# Tampilkan tabel interaktif
datatable(data,
options = list(pageLength = 10, # Jumlah baris per halaman
scrollX = TRUE)) # Scroll horizontal jika banyak kolomSolusi: Multinomial Logistic Regression
Untuk Mengembangkan model regresi logistik yang mampu memprediksi tiga tingkat keberhasilan (Low, Medium, High) berdasarkan empat variabel utama: Advertising, Salespeople, Satisfaction, dan Competition. kita menerapkan model Regresi Logistik Multinomial menggunakan semua variabel prediktor.
# =========================================================
# 1. Import Library
# =========================================================
library(readr)
library(dplyr)
library(nnet)
library(ggplot2)
library(caret)
# =========================================================
# 2. Baca Dataset Asli
# =========================================================
data_multi <- read_csv("C:/Users/Dwi Manullang/Downloads/2 Regression Models – Analysis and Predictive Modeling.csv")
# Lihat struktur awal dataset
glimpse(data_multi)## Rows: 200
## Columns: 6
## $ ...1 <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17…
## $ Advertising <dbl> 12.189438, 24.707628, 15.224423, 27.075435, 28.511682, 6.…
## $ Salespeople <dbl> 15.96815, 34.05897, 25.03414, 22.87574, 20.06433, 32.0061…
## $ Satisfaction <dbl> 9.874489, 2.233607, 9.147786, 6.186717, 4.559040, 5.04822…
## $ Competition <dbl> 3.135067, 7.178413, 3.032366, 3.866451, 2.565854, 8.21286…
## $ Success <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, …
## ...1 Advertising Salespeople Satisfaction
## Min. : 1.00 Min. : 5.016 Min. :10.16 Min. :1.004
## 1st Qu.: 50.75 1st Qu.:11.803 1st Qu.:15.89 1st Qu.:3.462
## Median :100.50 Median :17.052 Median :21.73 Median :5.555
## Mean :100.50 Mean :17.660 Mean :22.23 Mean :5.520
## 3rd Qu.:150.25 3rd Qu.:23.334 3rd Qu.:28.55 3rd Qu.:7.813
## Max. :200.00 Max. :29.857 Max. :34.99 Max. :9.970
## Competition Success
## Min. :1.011 Min. :0.00
## 1st Qu.:3.217 1st Qu.:1.00
## Median :5.429 Median :1.00
## Mean :5.442 Mean :0.92
## 3rd Qu.:7.797 3rd Qu.:1.00
## Max. :9.954 Max. :1.00
# =========================================================
# 3. Buat Variabel Success_Level dari Binary Success
# =========================================================
# Misal: berdasarkan Satisfaction untuk membentuk Low, Medium, High
data_multi <- data_multi %>%
mutate(
Success_Level = case_when(
Success == 0 ~ "Low",
Satisfaction < median(Satisfaction, na.rm = TRUE) ~ "Medium",
TRUE ~ "High"
),
Success_Level = factor(Success_Level, levels = c("Low", "Medium", "High"))
)
# Cek distribusi kategorinya
table(data_multi$Success_Level)##
## Low Medium High
## 16 87 97
# =========================================================
# 4. Bangun Model Multinomial Logistic Regression
# =========================================================
model_multi <- multinom(Success_Level ~ Advertising + Salespeople + Satisfaction + Competition,
data = data_multi)## # weights: 18 (10 variable)
## initial value 219.722458
## iter 10 value 83.266689
## iter 20 value 47.973789
## iter 30 value 47.879952
## final value 47.874833
## converged
# =========================================================
# 5. Ringkasan Model
# =========================================================
summary(model_multi)## Call:
## multinom(formula = Success_Level ~ Advertising + Salespeople +
## Satisfaction + Competition, data = data_multi)
##
## Coefficients:
## (Intercept) Advertising Salespeople Satisfaction Competition
## Medium -4.871081 0.2381164 0.3501024 -0.4528636 -0.3211557
## High -19.148419 0.2505982 0.3300009 2.3153378 -0.4462556
##
## Std. Errors:
## (Intercept) Advertising Salespeople Satisfaction Competition
## Medium 1.964124 0.06575758 0.09278041 0.2629275 0.1768685
## High 3.877467 0.08047526 0.10130048 0.4963220 0.2122703
##
## Residual Deviance: 95.74967
## AIC: 115.7497
# =========================================================
# 6. Hitung Odds Ratio
# =========================================================
odds_ratio <- exp(coef(model_multi))
odds_ratio## (Intercept) Advertising Salespeople Satisfaction Competition
## Medium 7.665073e-03 1.268857 1.419213 0.6358049 0.7253103
## High 4.830003e-09 1.284794 1.390969 10.1283440 0.6400202
# =========================================================
# 7. Evaluasi Model
# =========================================================
# Prediksi kelas
pred <- predict(model_multi, data_multi)
# Confusion Matrix
confusionMatrix(factor(pred), data_multi$Success_Level)## Confusion Matrix and Statistics
##
## Reference
## Prediction Low Medium High
## Low 7 5 2
## Medium 6 82 1
## High 3 0 94
##
## Overall Statistics
##
## Accuracy : 0.915
## 95% CI : (0.8674, 0.9497)
## No Information Rate : 0.485
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.8497
##
## Mcnemar's Test P-Value : 0.7313
##
## Statistics by Class:
##
## Class: Low Class: Medium Class: High
## Sensitivity 0.4375 0.9425 0.9691
## Specificity 0.9620 0.9381 0.9709
## Pos Pred Value 0.5000 0.9213 0.9691
## Neg Pred Value 0.9516 0.9550 0.9709
## Prevalence 0.0800 0.4350 0.4850
## Detection Rate 0.0350 0.4100 0.4700
## Detection Prevalence 0.0700 0.4450 0.4850
## Balanced Accuracy 0.6997 0.9403 0.9700
## Residual Deviance: 95.74967
## AIC: 115.7497
*Estimasi Model**:
| \[Kategori\] | \[(Intercept)\] | \[Advertising\] | \[Salespeople\] | \[Satisfaction\] | \[Competition\] |
|---|---|---|---|---|---|
| \(\text{Medium}\) | \[-4.871\] | \[+0.238\] | \[+0.350\] | \[-0.453\] | \[-0.321\] |
| \(\text{High}\) | \[-19.148\] | \[+0.251\] | \[+0.330\] | \[+2.315\] | \[-0.446\] |
Residual Deviance = 95.75
AIC = 115.75
Model konvergen setelah 30 iterasi.
Interpretasi Koefisien
| \[Variabel\] | \[Arah\] | \[Interpretasi\] |
|---|---|---|
| \(\text{Advertising}\) | \[+\] | \(\text{Setiap kenaikan 1 unit anggaran iklan meningkatkan peluang berada pada kategori Medium dan High dibanding Low.}\) |
| \(\text{Sales people}\) | \[+\] | \(\text{Lebih banyak tenaga penjualan → peluang keberhasilan lebih tinggi.)\) |
| \(\text{Satisfaction}\) | \(\text{+ (kuat pada High)}\) | \(\text{Kepuasan pelanggan adalah faktor dominan. Kenaikan satu unit meningkatkan peluang High Success lebih dari 10x lipat.}\) |
| $ | \[−\] | \(\text{Persaingan yang tinggi menurunkan peluang keberhasilan tinggi.}\) |
Odds Ratio (exp(β))
| \[Kategori\] | \[Advertising\] | \[Salespeople\] | \[Satisfaction\] | \[Competition\] |
|---|---|---|---|---|
| \(\text{Medium vs Low}\) | \[1.27\] | \[1.42\] | \[0.64\] | \[0.73\] |
| \(\text{High vs Low}\) | \[1.28\] | \[1.39\] | \[10.13\] | \[0.64\] |
Interpretasi numerik:
Peningkatan Advertising sebesar 1 unit → peluang High Success naik 28%.
Tambahan satu Salesperson → peluang High Success naik 39%.
Peningkatan Satisfaction → peluang High Success naik lebih dari 10 kali lipat.
Meningkatnya Competition justru menurunkan peluang keberhasilan tinggi.
Odds Ratio (exp(β))
| \[Low\] | \[Medium\] | \[High\] | |
|---|---|---|---|
| \(\text{Pred Low}\) | \[7\] | \[5\] | \[2\] |
| \(\text{Pred Medium}\) | \[6\] | \[82\] | \[1\] |
| \(\text{Pred High}\) | \[3\] | \[0\] | \[94\] |
Accuracy = 91.5%, Kappa = 0.85 , menunjukkan tingkat prediksi yang sangat baik dan reliabel.
- Probabilitas Prediksi (High Success vs Advertising)
Interpretasi:
Model sangat akurat memprediksi kategori Medium dan High.
Kelas Low relatif kecil sehingga lebih sulit dikenali.
Balanced Accuracy tinggi (sekitar 0.94–0.97).
Visualisasi
# ======================================================
# Visualisasi Interaktif Gabungan - Multinomial Logistic Regression
# ======================================================
library(plotly)
library(dplyr)
# Buat data probabilitas prediksi
prob_df <- data.frame(
Advertising = data$Advertising,
predict(model_multi, type = "probs")
)
# Tambahkan versi fit line dengan loess
fit_low <- loess(Low ~ Advertising, data = prob_df)
fit_med <- loess(Medium ~ Advertising, data = prob_df)
fit_high <- loess(High ~ Advertising, data = prob_df)
prob_df_fit <- data.frame(
Advertising = seq(min(prob_df$Advertising), max(prob_df$Advertising), length.out = 200)
)
prob_df_fit$Low <- predict(fit_low, newdata = prob_df_fit)
prob_df_fit$Medium <- predict(fit_med, newdata = prob_df_fit)
prob_df_fit$High <- predict(fit_high, newdata = prob_df_fit)
# Plot interaktif gabungan
fig <- plot_ly()
# Low
fig <- fig %>%
add_trace(data = prob_df,
x = ~Advertising, y = ~Low,
type = "scatter", mode = "markers",
name = "Low (data)", marker = list(color = "red", opacity = 0.4)) %>%
add_trace(data = prob_df_fit,
x = ~Advertising, y = ~Low,
type = "scatter", mode = "lines",
name = "Low (fit)", line = list(color = "red", width = 2))
# Medium
fig <- fig %>%
add_trace(data = prob_df,
x = ~Advertising, y = ~Medium,
type = "scatter", mode = "markers",
name = "Medium (data)", marker = list(color = "orange", opacity = 0.4)) %>%
add_trace(data = prob_df_fit,
x = ~Advertising, y = ~Medium,
type = "scatter", mode = "lines",
name = "Medium (fit)", line = list(color = "orange", width = 2))
# High
fig <- fig %>%
add_trace(data = prob_df,
x = ~Advertising, y = ~High,
type = "scatter", mode = "markers",
name = "High (data)", marker = list(color = "green", opacity = 0.4)) %>%
add_trace(data = prob_df_fit,
x = ~Advertising, y = ~High,
type = "scatter", mode = "lines",
name = "High (fit)", line = list(color = "green", width = 2))
# Layout gabungan
fig <- fig %>%
layout(
title = "Predicted Probability by Advertising (Multinomial Logistic Regression)",
xaxis = list(title = "Advertising Budget"),
yaxis = list(title = "Predicted Probability", range = c(0, 1)),
legend = list(orientation = 'h', y = -0.2),
annotations = list(
list(
text = paste0(
"<b>Logit Models:</b><br>",
"Medium: logit(p) = ", round(coef(model_multi)[1,1], 2),
" + ", round(coef(model_multi)[1,2], 2), "(Ad) + ",
round(coef(model_multi)[1,3], 2), "(Sales) + ",
round(coef(model_multi)[1,4], 2), "(Satis) + ",
round(coef(model_multi)[1,5], 2), "(Comp)<br>",
"High: logit(p) = ", round(coef(model_multi)[2,1], 2),
" + ", round(coef(model_multi)[2,2], 2), "(Ad) + ",
round(coef(model_multi)[2,3], 2), "(Sales) + ",
round(coef(model_multi)[2,4], 2), "(Satis) + ",
round(coef(model_multi)[2,5], 2), "(Comp)<br><br>",
"Residual Deviance = ", round(deviance(model_multi), 2),
"<br>AIC = ", round(AIC(model_multi), 2)
),
xref = "paper", yref = "paper",
x = 1, y = 0, showarrow = FALSE,
xanchor = "right", yanchor = "bottom",
font = list(color = "red", size = 10)
)
)
)
figInterpretasi:
Garis tren naik menunjukkan bahwa semakin besar Advertising Budget, semakin tinggi probabilitas perusahaan mencapai tingkat keberhasilan tinggi (High Success).
- Evaluasi Akurasi
Visualisasi heatmap confusion matrix dapat memperjelas proporsi prediksi benar/salah per kategori.
Kesimpulan
Berdasarkan hasil model multinomial logistik, variabel Advertising, Salespeople, dan Satisfaction terbukti berpengaruh positif terhadap tingkat keberhasilan perusahaan, sementara Competition memiliki pengaruh negatif. Faktor Satisfaction merupakan variabel paling dominan dengan odds ratio terbesar (≈10.13). Model menunjukkan good fit (AIC rendah, deviance kecil) dan akurasi tinggi (91.5%).
Tujuan Bagian Ini Menunjukkan perbedaan penerapan dan hasil antara Binary Logistic Regression dan Multinomial Logistic Regression menggunakan dataset yang sama, serta kapan masing-masing metode lebih tepat digunakan.
- Perbandingan Hasil Model
| \(\text{Aspek}\) | \(\text{Binary Logistic}\) | \(\text{Multinomial Logistic}\) | \(\text{Keterangan}\) |
|---|---|---|---|
| \(\text{Target}\) | 2 kategori (0/1) | 3 kategori (Low/Med/High) | Multinomial lebih detail |
| \(\text{Fungsi Logit}\) | 1 | 2 (vs baseline Low) | Membedakan Medium & High |
| \(\text{AIC}\) | 131.4 | 115.75 | Multinomial lebih baik |
| \(\text{Akurasi}\) | 88% | 91.5% | Multinomial lebih presisi |
| \(\text{Interpretasi}\) | Sukses vs gagal | Transisi tingkat keberhasilan | Lebih informatif |
| \(\text{Visualisasi}\) | Kurva sigmoid tunggal | 3 kurva probabilitas | Lebih kaya dan realistis |
| \(\text{Penggunaan}\) | Jika outcome hanya dua kategori | Jika outcome 3+ kategori nominal | Sesuai karakter data kamu |
- Interpretasi Bisnis
| \[Faktor\] | \(\text{Binary Model}\) | \(\text{Multinomial Model}\) | \(\text{Kesimpulan Praktis}\) |
|---|---|---|---|
| \(\text{Advertising}\) | Meningkatkan peluang sukses | Meningkatkan peluang High Success | Efek positif stabil di kedua model |
| \(\text{Salespeople}\) | Signifikan positif | Konsisten positif | Penambahan tenaga penjual → peluang meningkat |
| \(\text{Satisfaction}\) | Positif | Efek kuat ke High, lemah ke Medium | Kepuasan tinggi krusial untuk sukses maksimal |
| \(\text{Competition}\) | Negatif | Negatif di semua kategori | Persaingan tinggi menghambat peluang |
Implikasi:
Jika perusahaan ingin naik dari Medium → High Success, mereka harus fokus pada Satisfaction dan Advertising karena dua faktor itu paling besar efeknya dalam model multinomial.
- Kesimpulan Akhir
| \[Aspek\] | \(\text{Binary Logistic Regression}\) | \(\text{Multinomial Logistic Regression}\) |
|---|---|---|
| \(\text{Kapan digunakan}\) | Saat target hanya 2 kategori | Saat target ≥ 3 kategori nominal |
| \(\text{Kelebihan}\) | Sederhana, mudah ditafsirkan | Lebih akurat, bisa membedakan tiap level keberhasilan |
| \(\text{Kelemahan}\) | Informasi kategori lain hilang | Perlu lebih banyak data dan interpretasi |
| \(\text{Pada dataset kamu}\) | Cukup baik | Sangat cocok & akurat (AIC lebih kecil, akurasi lebih tinggi) |
- Kesimpulan umum:
Model Multinomial Logistic Regression lebih tepat untuk dataset keberhasilan perusahaan ini.
Ia menggambarkan hubungan variabel prediktor dengan tingkat keberhasilan secara bertahap.
Secara empiris, menghasilkan AIC lebih kecil, akurasi lebih tinggi, dan visualisasi yang merefleksikan dinamika bisnis lebih realistis daripada model biner.