Perkembangan teknologi informasi dan internet mendorong pertumbuhan pesat e-commerce sebagai bagian penting ekonomi digital, yang memungkinkan transaksi lebih mudah dan efisien tanpa batas geografis. Berdasarkan Worldpay Global Payments Report, nilai transaksi pembayaran digital global meningkat signifikan dari USD 1,7 triliun pada tahun 2014 menjadi USD 18,7 triliun pada tahun 2024.
Namun, tidak semua kunjungan pada situs e-commerce menghasilkan pembelian. Berdasarkan Online Shoppers Purchasing Intention Dataset:
15,5% sesi kunjungan menghasilkan transaksi pembelian.
84,5% sesi kunjungan tidak menghasilkan transaksi pembelian.
Kondisi ini menunjukkan adanya kesenjangan antara jumlah pengunjung dan konversi pembelian, sehingga analisis purchasing intention menjadi penting untuk memahami perilaku konsumen.
Berbagai penelitian telah menggunakan metode statistik dan machine learning untuk memprediksi keputusan pembelian konsumen. Namun, sebagian besar penelitian berfokus pada performa model dan akurasi prediksi, sedangkan interpretasi pengaruh variabel terhadap keputusan pembelian masih relatif terbatas.
Salah satu metode yang dapat digunakan untuk memenuhi kebutuhan interpretasi tersebut adalah regresi logistik biner. Metode ini sesuai untuk memodelkan keputusan pembelian dan memungkinkan interpretasi pengaruh variabel melalui nilai odds ratio.
Penelitian ini bertujuan mengidentifikasi faktor-faktor yang memengaruhi purchasing intention, membangun model regresi logistik biner, mengevaluasi kinerja model menggunakan confusion matrix, accuracy, dan AUC, serta menginterpretasikan pengaruh variabel menggunakan odds ratio.
Online Shoppers Purchasing Intention Dataset
UCI Machine Learning Repository
Variabel yang digunakan dalam penelitian ini ditampilkan pada tabel berikut:
| Variabel | Tipe | Deskripsi |
|---|---|---|
Revenue |
Respon (Biner) | Keputusan pembelian (TRUE = membeli, FALSE = tidak) |
PageValues |
Prediktor (Numerik) | Nilai halaman berdasarkan kontribusinya terhadap transaksi |
ExitRates |
Prediktor (Numerik) | Persentase sesi yang keluar dari halaman tertentu |
ProductRelated_Duration |
Prediktor (Numerik) | Durasi kunjungan pada halaman produk (detik) |
VisitorType |
Prediktor (Kategorik) | Tipe pengunjung (Returning, New) |
📌 Metode Utama
Penelitian ini menggunakan regresi logistik biner untuk memodelkan hubungan antara variabel prediktor dan keputusan pembelian (Revenue). Metode ini dipilih karena variabel respon bersifat biner, yaitu membeli (TRUE) dan tidak membeli (FALSE).
## LOAD PACKAGES
library(car)
library(ResourceSelection)
library(rcompanion)
library(pROC)
library(readxl)
library(ggplot2)
library(dplyr)
library(tidyr)
library(knitr)
library(kableExtra)
library(scales)# PREPROCESSING
data2$Revenue <- as.factor(data2$Revenue)
data2$VisitorType <- as.factor(data2$VisitorType)
data2$ProductRelated <-
data2$ExitRates <- as.numeric(data2$ExitRates)
data2$PageValues <- as.numeric(data2$PageValues)
data2$ProductRelated_Duration <- as.numeric(data2$ProductRelated_Duration)
str(data2)## tibble [1,000 × 8] (S3: tbl_df/tbl/data.frame)
## $ ProductRelated : num [1:1000] 0.2 0.1 0.2 0.14 0.05 ...
## $ BounceRates : num [1:1000] 0.2 0 0.2 0.05 0.02 ...
## $ ExitRates : num [1:1000] 0.2 0.1 0.2 0.14 0.05 ...
## $ PageValues : num [1:1000] 0 0 0 0 0 0 0 0 0 0 ...
## $ VisitorType : Factor w/ 2 levels "New_Visitor",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ Weekend : logi [1:1000] FALSE FALSE FALSE FALSE TRUE FALSE ...
## $ Revenue : Factor w/ 2 levels "FALSE","TRUE": 1 1 1 1 1 1 1 1 1 1 ...
## $ ProductRelated_Duration: num [1:1000] 0 64 0 2.67 627.5 ...
Analisis deskriptif dilakukan untuk memberikan gambaran awal mengenai karakteristik data serta hubungan antara variabel penjelas dengan variabel respon.
df_rev <- as.data.frame(table(data2$Revenue)) %>%
rename(Revenue = Var1, Frekuensi = Freq) %>%
mutate(Proporsi = Frekuensi / sum(Frekuensi),
Label = paste0(Frekuensi, "\n(", round(Proporsi * 100, 1), "%)"))
ggplot(df_rev, aes(x = Revenue, y = Frekuensi, fill = Revenue)) +
geom_col(width = 0.55, show.legend = FALSE) +
geom_text(aes(label = Label), vjust = -0.4, size = 4,
color = pal_primary, fontface = "bold") +
scale_fill_manual(values = c("FALSE" = pal_muted, "TRUE" = pal_accent2)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.15))) +
labs(title = "Distribusi Variabel Revenue",
subtitle = "Proporsi sesi kunjungan yang berujung pembelian vs tidak",
x = "Revenue", y = "Frekuensi") +
theme_laporan()Gambar 1. Distribusi Frekuensi Variabel Revenue
⚠️ Class Imbalance: Dari 1.000 observasi, sebanyak 924 (92,4%) tidak melakukan pembelian dan hanya 76 (7,6%) yang melakukan pembelian. Ketidakseimbangan kelas ini perlu diperhatikan dalam proses pemodelan.
data_long <- pivot_longer(
data2,
cols = c(PageValues, ExitRates, ProductRelated_Duration),
names_to = "Variabel",
values_to = "Nilai"
)
ggplot(data_long, aes(x = Revenue, y = Nilai, fill = Revenue)) +
geom_boxplot(alpha = 0.85) +
facet_wrap(~Variabel, scales = "free") +
scale_fill_manual(values = c(
"FALSE" = pal_muted,
"TRUE" = pal_accent
)) +
labs(
title = "Boxplot Variabel Penjelas berdasarkan Revenue",
x = "Revenue",
y = "Nilai"
) +
theme_laporan()Gambar 2. Boxplot Variabel Prediktor berdasarkan Revenue
📊 Interpretasi: Variabel PageValues
dan ProductRelated_Duration cenderung memiliki nilai yang
lebih tinggi pada kelompok yang melakukan pembelian (TRUE),
sedangkan ExitRates cenderung lebih rendah. Pola ini
menunjukkan bahwa pengunjung yang menghabiskan waktu lebih lama untuk
mengeksplorasi produk dan menghasilkan nilai halaman yang lebih tinggi
memiliki kecenderungan lebih besar untuk melakukan transaksi.
plot_vt <- data2 %>%
group_by(VisitorType) %>%
summarise(n = n()) %>%
mutate(prop = n / sum(n),
label = paste0(n, "\n(", scales::percent(prop), ")"))
ggplot(plot_vt, aes(x = VisitorType, y = n, fill = VisitorType)) +
geom_col(show.legend = FALSE) +
geom_text(aes(label = label),
vjust = -0.3,
size = 4,
color = pal_primary,
fontface = "bold") +
scale_fill_manual(values = c(
"New_Visitor" = pal_muted,
"Returning_Visitor" = pal_primary
)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.15))) +
labs(
title = "Distribusi Visitor Type",
x = "Visitor Type",
y = "Frekuensi"
) +
theme_laporan()Gambar 3. Distribusi Variabel Visitor Type
🔄 Interpretasi: Sebagian besar pengunjung merupakan
Returning Visitor, yang menunjukkan bahwa situs memiliki
tingkat kunjungan ulang yang tinggi. Sementara itu, proporsi
New Visitor relatif lebih kecil dibandingkan pengunjung
yang kembali mengakses situs.
plot_data <- data2 %>%
group_by(VisitorType, Revenue) %>%
summarise(n = n(), .groups = "drop") %>%
group_by(VisitorType) %>%
mutate(prop = n / sum(n),
Label = paste0(round(prop * 100, 1), "%"))
ggplot(plot_data, aes(x = VisitorType, y = prop, fill = Revenue)) +
geom_col(width = 0.6) +
geom_text(aes(label = Label),
position = position_stack(vjust = 0.5),
size = 3.5,
color = "white") +
scale_fill_manual(values = c(
"FALSE" = pal_muted,
"TRUE" = pal_accent
)) +
scale_y_continuous(labels = scales::percent) +
labs(
title = "Proporsi Transaksi berdasarkan Visitor Type",
x = "Visitor Type",
y = "Proporsi",
fill = "Revenue"
) +
theme_laporan()Gambar 4. Proporsi Transaksi Berdasarkan Tipe Pengunjung
👥 Interpretasi: Sebagian besar sesi pada kedua tipe
pengunjung tidak menghasilkan pembelian (FALSE). Meskipun
demikian, New Visitor menunjukkan proporsi pembelian yang
lebih tinggi dibandingkan Returning Visitor, sehingga
VisitorType berpotensi berkaitan dengan peluang terjadinya
transaksi.
Uji multikolinearitas dilakukan untuk mengetahui ada tidaknya hubungan linear yang kuat antarvariabel prediktor dalam model. Salah satu indikator yang digunakan adalah Variance Inflation Factor (VIF). Suatu variabel dikatakan tidak mengalami masalah multikolinearitas apabila memiliki nilai VIF kurang dari 10.
## Uji Multikolinearitas (VIF)
model_vif <- glm(
Revenue ~ PageValues + ExitRates + ProductRelated_Duration + VisitorType,
data = data2,
family = binomial
)
vif_result <- vif(model_vif)
vif_result## PageValues ExitRates ProductRelated_Duration
## 1.019759 1.094616 1.045574
## VisitorType
## 1.043867
| Variabel | Nilai VIF | Status |
|---|---|---|
| PageValues | 1.0198 | ✔ Tidak ada multikolinearitas |
| ExitRates | 1.0946 | ✔ Tidak ada multikolinearitas |
| ProductRelated_Duration | 1.0456 | ✔ Tidak ada multikolinearitas |
| VisitorType | 1.0439 | ✔ Tidak ada multikolinearitas |
✅ Seluruh variabel memiliki VIF < 10 (bahkan mendekati 1), sehingga tidak terdapat masalah multikolinearitas antarvariabel prediktor. Semua variabel dapat dilanjutkan ke tahap analisis berikutnya.
model <- glm(
Revenue ~ PageValues + ExitRates + ProductRelated_Duration + VisitorType,
data = data2,
family = binomial(link = "logit")
)
summary(model)##
## Call:
## glm(formula = Revenue ~ PageValues + ExitRates + ProductRelated_Duration +
## VisitorType, family = binomial(link = "logit"), data = data2)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.839e+00 5.207e-01 -5.453 4.96e-08 ***
## PageValues 1.379e-01 1.484e-02 9.288 < 2e-16 ***
## ExitRates -4.715e+01 1.452e+01 -3.248 0.00116 **
## ProductRelated_Duration 2.946e-04 1.011e-04 2.914 0.00357 **
## VisitorTypeReturning_Visitor 1.567e-01 4.995e-01 0.314 0.75372
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 537.78 on 999 degrees of freedom
## Residual deviance: 276.70 on 995 degrees of freedom
## AIC: 286.7
##
## Number of Fisher Scoring iterations: 8
Model yang terbentuk dinyatakan sebagai:
\[\log\frac{\hat{\pi}(x)}{1 - \hat{\pi}(x)} = -2{,}84 + 1{,}38\,\text{PageValues} - 47{,}15\,\text{ExitRates} + 0{,}000295\,\text{ProductRelated_Duration} + 1{,}57\,\text{VisitorType}\]
Uji signifikansi simultan dilakukan menggunakan Likelihood Ratio Test (LRT) untuk mengetahui apakah variabel prediktor secara bersama-sama berpengaruh terhadap variabel respon.
Hipotesis:
PageValues,
ExitRates, ProductRelated_Duration, dan
VisitorType secara simultan tidak berpengaruh terhadap
purchasing intention pelanggan e-commerce.| Statistik G | df | p-value |
|---|---|---|
| 261.08 | 4 | 2.668e-55 |
✅ Keputusan: Nilai statistik G =
261,08 dengan p-value < 0,001 < α
(0,05). Hipotesis nol ditolak — variabel PageValues,
ExitRates, ProductRelated_Duration, dan
VisitorType secara simultan berpengaruh
signifikan terhadap purchasing intention pelanggan
e-commerce.
Uji signifikansi parsial dilakukan menggunakan uji Wald untuk mengetahui pengaruh masing-masing variabel prediktor terhadap variabel respon.
Hipotesis (untuk setiap variabel prediktor):
dengan \(i = 1, 2, 3, 4\) yang
merepresentasikan variabel PageValues,
ExitRates, ProductRelated_Duration, dan
VisitorType.
| Variabel | Koefisien | Std. Error | z-value | p-value | Signifikan |
|---|---|---|---|---|---|
| (Intercept) | -2.839295 | 0.520719 | -5.4526 | 4.963e-08 | ✔ Ya |
| PageValues | 0.137854 | 0.014842 | 9.2880 | 1.572e-20 | ✔ Ya |
| ExitRates | -47.152201 | 14.516446 | -3.2482 | 1.161e-03 | ✔ Ya |
| ProductRelated_Duration | 0.000295 | 0.000101 | 2.9142 | 3.566e-03 | ✔ Ya |
| VisitorTypeReturning_Visitor | 0.156706 | 0.499483 | 0.3137 | 7.537e-01 | ✘ Tidak |
📌 Kesimpulan Uji Parsial:
Interpretasi odds ratio difokuskan pada variabel-variabel yang terbukti signifikan dalam model
## (Intercept) PageValues
## 5.846686e-02 1.147808e+00
## ExitRates ProductRelated_Duration
## 3.327049e-21 1.000295e+00
## VisitorTypeReturning_Visitor
## 1.169651e+00
## 2.5 % 97.5 %
## (Intercept) 1.919453e-02 1.500855e-01
## PageValues 1.116864e+00 1.183892e+00
## ExitRates 1.486763e-34 5.230754e-10
## ProductRelated_Duration 1.000096e+00 1.000500e+00
## VisitorTypeReturning_Visitor 4.603508e-01 3.321790e+00
| Variabel | Odds Ratio | CI Bawah (95%) | CI Atas (95%) | p-value | Sig. |
|---|---|---|---|---|---|
| (Intercept) | 0.058467 | 0.019195 | 0.150085 | 4.963e-08 | ✔ |
| PageValues | 1.147808 | 1.116864 | 1.183892 | 1.572e-20 | ✔ |
| ExitRates | 0.000000 | 0.000000 | 0.000000 | 1.161e-03 | ✔ |
| ProductRelated_Duration | 1.000295 | 1.000096 | 1.000500 | 3.566e-03 | ✔ |
| VisitorTypeReturning_Visitor | 1.169651 | 0.460351 | 3.321790 | 7.537e-01 | ✘ |
Interpretasi Odds Ratio (variabel signifikan):
Uji kelayakan model dilakukan menggunakan Hosmer–Lemeshow Goodness of Fit Test untuk mengetahui apakah model regresi logistik yang dibentuk telah sesuai dengan data observasi.
##
## Hosmer and Lemeshow goodness of fit (GOF) test
##
## data: as.numeric(data2$Revenue) - 1, fitted(model)
## X-squared = 12.034, df = 8, p-value = 0.1497
| χ² | df | p-value | Keputusan |
|---|---|---|---|
| 12.0337 | 8 | 0.1497 | H₀ Diterima — Model Fit |
✅ Nilai p-value = 0,1497 > 0,05, sehingga H₀ diterima. Model regresi logistik sudah sesuai (fit) dengan data observasi dan layak digunakan untuk analisis selanjutnya.
Ukuran Pseudo R-Square digunakan untuk mengevaluasi kemampuan model regresi logistik dalam menjelaskan variabilitas variabel respon.
## $Models
##
## Model: "glm, Revenue ~ PageValues + ExitRates + ProductRelated_Duration + VisitorType, binomial(link = \"logit\"), data2"
## Null: "glm, Revenue ~ 1, binomial(link = \"logit\"), data2"
##
## $Pseudo.R.squared.for.model.vs.null
## Pseudo.R.squared
## McFadden 0.485479
## Cox and Snell (ML) 0.229781
## Nagelkerke (Cragg and Uhler) 0.552417
##
## $Likelihood.ratio.test
## Df.diff LogLik.diff Chisq p.value
## -4 -130.54 261.08 2.6674e-55
##
## $Number.of.observations
##
## Model: 1000
## Null: 1000
##
## $Messages
## [1] "Note: For models fit with REML, these statistics are based on refitting with ML"
##
## $Warnings
## [1] "None"
| Ukuran | Nilai | Catatan |
|---|---|---|
| McFadden R² | 0.4855 | Peningkatan fit dibanding null model sangat baik |
| Cox & Snell R² | 0.2298 | Kemampuan penjelasan variasi (pendekatan likelihood) |
| Nagelkerke R² | 0.5524 | Model menjelaskan ~55,2% variasi keputusan pembelian |
Kinerja klasifikasi model regresi logistik dievaluasi menggunakan confusion matrix dan nilai akurasi. Confusion matrix digunakan untuk membandingkan hasil prediksi model dengan kondisi aktual sehingga dapat diketahui jumlah observasi yang diklasifikasikan dengan benar maupun salah.
prob <- predict(model, type = "response")
pred <- ifelse(prob > 0.5, TRUE, FALSE)
cm <- table(Aktual = data2$Revenue, Prediksi = pred)
cm## Prediksi
## Aktual FALSE TRUE
## FALSE 914 10
## TRUE 41 35
| Prediksi: FALSE | Prediksi: TRUE | |
|---|---|---|
| Aktual: FALSE | 914 | 10 |
| Aktual: TRUE | 41 | 35 |
## Akurasi Model: 94.9 %
914 True Negative
35 True Positive
10 False Positive
41 False Negative
94,9% Akurasi Keseluruhan
Selanjutnya, evaluasi dapat dilakukan dengan menggunakan Receiver Operating Characteristic (ROC) curve dan Area Under the Curve (AUC). ROC curve digunakan untuk menggambarkan kemampuan model dalam membedakan antara kelas positif (pengguna melakukan pembelian) dan negatif (pengguna tidak melakukan pembelian) pada berbagai nilai ambang (threshold), sedangkan AUC digunakan sebagai ukuran ringkasan dari performa klasifikasi model.
roc_obj <- roc(data2$Revenue, prob)
auc_val <- auc(roc_obj)
cat("Nilai AUC:", round(auc_val, 4), "\n")## Nilai AUC: 0.9563
# Plot ROC yang lebih stylish
roc_df <- data.frame(
Spesifisitas = 1 - roc_obj$specificities,
Sensitivitas = roc_obj$sensitivities
)
ggplot(roc_df, aes(x = Spesifisitas, y = Sensitivitas)) +
geom_ribbon(aes(ymin = 0, ymax = Sensitivitas),
fill = pal_accent2, alpha = 0.15) +
geom_line(color = pal_accent2, linewidth = 1.2) +
geom_abline(slope = 1, intercept = 0, linetype = "dashed",
color = pal_muted, linewidth = 0.7) +
annotate("label",
x = 0.72, y = 0.28,
label = paste0("AUC = ", round(auc_val, 4)),
fill = "#ffffff", color = pal_primary,
size = 4.5, fontface = "bold",
label.padding = unit(0.5, "lines")) +
scale_x_continuous(labels = scales::percent_format()) +
scale_y_continuous(labels = scales::percent_format()) +
labs(title = "Kurva ROC — Regresi Logistik Biner",
subtitle = paste0("AUC = ", round(auc_val, 4), " — Kemampuan diskriminasi sangat baik"),
x = "1 − Spesifisitas (False Positive Rate)",
y = "Sensitivitas (True Positive Rate)") +
theme_laporan()Gambar 5. Kurva ROC Model Regresi Logistik Biner
| Kriteria | Nilai | Kategori | Interpretasi |
|---|---|---|---|
| AUC (Area Under the Curve) | 0.9563 | Sangat Baik (AUC ≥ 0,90) | Model sangat mampu membedakan pengunjung yang membeli vs tidak membeli |
0,5524 Nagelkerke R²
94,9% Akurasi
0,9563 AUC
0,1497 Hosmer-Lemeshow p-value
Hasil regresi logistik biner menunjukkan bahwa PageValues, ExitRates, dan ProductRelated_Duration berpengaruh signifikan terhadap keputusan pembelian, sedangkan VisitorType tidak signifikan. Temuan ini menunjukkan bahwa keputusan pembelian lebih dipengaruhi oleh perilaku pengguna selama sesi kunjungan dibandingkan karakteristik pengunjung.
PageValues berpengaruh positif terhadap peluang pembelian, yang menunjukkan bahwa halaman dengan kontribusi lebih besar terhadap transaksi cenderung meningkatkan kemungkinan pengguna melakukan pembelian. Sebaliknya, ExitRates berpengaruh negatif, sehingga semakin tinggi tingkat pengguna yang meninggalkan halaman, semakin kecil peluang terjadinya transaksi. Selain itu, ProductRelated_Duration berpengaruh positif, yang menunjukkan bahwa semakin lama pengguna mengeksplorasi halaman produk, semakin besar kemungkinan mereka melakukan pembelian.
Secara keseluruhan, hasil penelitian menunjukkan bahwa metrik perilaku pengguna (behavioral metrics) merupakan faktor penting dalam memprediksi keputusan pembelian pada platform e-commerce. Oleh karena itu, pengelola platform perlu mengoptimalkan kualitas halaman, meningkatkan keterlibatan pengguna, dan mengurangi tingkat keluar (exit rate) untuk meningkatkan konversi penjualan.
Penelitian ini menerapkan regresi logistik biner pada Online Shoppers Purchasing Intention Dataset untuk mengidentifikasi faktor-faktor yang memengaruhi keputusan pembelian pelanggan e-commerce.
Temuan Utama:
PageValues, ExitRates, dan ProductRelated_Duration berpengaruh signifikan terhadap keputusan pembelian (Revenue), sedangkan VisitorType tidak signifikan.
Keputusan pembelian lebih dipengaruhi oleh perilaku pengguna selama sesi dibandingkan karakteristik pengunjung. Semakin tinggi keterlibatan pengguna → semakin besar peluang pembelian.
Model menunjukkan performa sangat baik: Nagelkerke R² = 0,5524, akurasi = 94,9%, dan AUC = 0,9563.
Implikasi Praktis bagi Pengelola E-Commerce:
Worldpay. 10 years of cash, cards and crypto: Worldpay’s Global Payments Report tracks a decade of transformation. Available online: https://www.worldpay.com/en-AU/press-releases/10-years-cash-cards-crypto-worldpays-global-payments-report (accessed on 8 June 2026).
Sakar, C.O.; Polat, S.O.; Katircioglu, M.; Kastro, Y. Real-Time Prediction of Online Shoppers’ Purchasing Intention Using Multilayer Perceptron and LSTM Recurrent Neural Networks. Neural Computing and Applications 2019, 31, 6893–6908.
Satu, M.S.; Islam, S.F. Modeling online customer purchase intention behavior applying different feature engineering and classification techniques. Research Square 2023, submitted.
Yin, Y.; Li, X. Application of Machine Learning Algorithms for Predicting Online Shoppers’ Purchase Intention. In Proceedings of the 2025 2nd International Conference on Digital Economy and Computer Science (DECS ’25), Wuhan, China, 17–19 October 2025.
Wong, M.M.; Su, W. Segmenting online shoppers: A combined cluster and logistic regression approach for forecasting purchase behavior. IEEE Access 2025, 13, 79467–79478.
Hosmer, D.W.; Lemeshow, S.; Sturdivant, R.X. Applied Logistic Regression, 3rd ed.; Wiley: Hoboken, NJ, USA, 2013.
Google Analytics Help Center. Available online: https://support.google.com/analytics (accessed on 5 June 2026).
Laporan ini dibuat menggunakan R Markdown. Data bersumber dari UCI Machine Learning Repository.