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 |
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.
## 1 2 3 4 5 6
## 5.487514e-06 6.238652e-04 5.487514e-06 9.297267e-05 7.726763e-03 2.198264e-02
pred <- factor(
ifelse(prob > 0.5, TRUE, FALSE),
levels = levels(data2$Revenue)
)
roc_obj <- roc(response = data2$Revenue, predictor = prob)
auc(roc_obj)## Area under the curve: 0.9563
## Nilai AUC: 0.9563
# Plot ROC
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(roc_obj), 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(roc_obj), 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
Kurva ROC berada jauh di atas garis diagonal yang merepresentasikan model acak, sehingga menunjukkan bahwa model memiliki kemampuan diskriminasi yang baik dalam membedakan kategori variabel dependen.
| 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 |
Berdasarkan kurva ROC, diperoleh pula nilai threshold optimal sebesar 0.0775 dengan sensitivitas sebesar 88.16% dan spesifisitas sebesar 92.32%. Nilai threshold ini dipilih karena memberikan keseimbangan terbaik antara kemampuan model dalam mendeteksi kelas positif maupun negatif, sehingga digunakan sebagai dasar dalam pembentukan confusion matrix pada tahap evaluasi selanjutnya.
best_cut <- coords(
roc_obj, "best",
ret = c("threshold", "sensitivity", "specificity")
)
# ==========================================
# THRESHOLD OPTIMAL
# ==========================================
cutoff <- as.numeric(best_cut$threshold)
data.frame(
Threshold = round(best_cut["threshold"], 4),
Sensitivity = round(best_cut["sensitivity"], 4),
Specificity = round(best_cut["specificity"], 4)
) %>%
kable(
caption = "Tabel 9. Threshold Optimal",
col.names = c("Cutoff", "Sensitivity", "Specificity"),
align = c("c","c","c"),
row.names = FALSE
) %>%
kable_styling(
bootstrap_options = c("striped","hover"),
full_width = TRUE,
position = "center"
) %>%
row_spec(0, background = "#1a3a4a", color = "white", bold = TRUE) %>%
row_spec(1, background = "#e8f5f0", bold = TRUE)| Cutoff | Sensitivity | Specificity |
|---|---|---|
| 0.0775 | 0.8816 | 0.9232 |
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.
pred_opt <- factor(
ifelse(prob > cutoff, TRUE, FALSE),
levels = levels(data2$Revenue)
)
table(Aktual = data2$Revenue, Prediksi = pred_opt)## Prediksi
## Aktual FALSE TRUE
## FALSE 853 71
## TRUE 9 67
| Prediksi: FALSE | Prediksi: TRUE | |
|---|---|---|
| Aktual: FALSE | 853 | 9 |
| Aktual: TRUE | 71 | 67 |
accuracy_opt <- mean(pred_opt == data2$Revenue, na.rm = TRUE)
cat("Akurasi Model:", round(accuracy_opt * 100, 2), "%\n")## Akurasi Model: 92 %
Berdasarkan confusion matrix pada Tabel, model berhasil mengklasifikasikan dengan benar sebanyak 853 observasi pada kelas tidak membeli dan 67 observasi pada kelas membeli. Sementara itu, terdapat 71 false positive dan 9 false negative.
# ==========================================
# METRIK EVALUASI (Threshold Optimal = 0.0775)
# ==========================================
TN <- as.numeric(table(Aktual = data2$Revenue, Prediksi = pred_opt)[1,1])
FP <- as.numeric(table(Aktual = data2$Revenue, Prediksi = pred_opt)[1,2])
FN <- as.numeric(table(Aktual = data2$Revenue, Prediksi = pred_opt)[2,1])
TP <- as.numeric(table(Aktual = data2$Revenue, Prediksi = pred_opt)[2,2])
sensitivity <- TP / (TP + FN)
specificity <- TN / (TN + FP)
precision <- TP / (TP + FP)
NPV <- TN / (TN + FN)
F1 <- 2 * (precision * sensitivity) / (precision + sensitivity)
balanced_acc <- (sensitivity + specificity) / 2
hasil_evaluasi <- data.frame(
Metrik = c("Akurasi", "Sensitivitas", "Spesifisitas",
"Precision", "NPV", "F1-Score", "Balanced Accuracy"),
Nilai = round(c(accuracy_opt, sensitivity, specificity,
precision, NPV, F1, balanced_acc) * 100, 2)
)
print(hasil_evaluasi)## Metrik Nilai
## 1 Akurasi 92.00
## 2 Sensitivitas 88.16
## 3 Spesifisitas 92.32
## 4 Precision 48.55
## 5 NPV 98.96
## 6 F1-Score 62.62
## 7 Balanced Accuracy 90.24
hasil_evaluasi %>%
kable(
caption = "Tabel 11. Hasil Evaluasi Model pada Threshold Optimal (0.0775)",
col.names = c("Metrik", "Nilai (%)"),
align = c("l", "c"),
row.names = FALSE
) %>%
kable_styling(
bootstrap_options = c("striped","hover"),
full_width = TRUE,
position = "center"
) %>%
row_spec(0, background = "#1a3a4a", color = "white", bold = TRUE)| Metrik | Nilai (%) |
|---|---|
| Akurasi | 92.00 |
| Sensitivitas | 88.16 |
| Spesifisitas | 92.32 |
| Precision | 48.55 |
| NPV | 98.96 |
| F1-Score | 62.62 |
| Balanced Accuracy | 90.24 |
Model menunjukkan performa yang baik dengan akurasi sebesar 92,0%, yang berarti sebagian besar observasi berhasil diklasifikasikan dengan benar. Sensitivitas sebesar 88,2% menunjukkan kemampuan model dalam mendeteksi pengunjung yang melakukan pembelian, sedangkan spesifisitas sebesar 92,3% menunjukkan kemampuan yang baik dalam mengidentifikasi pengunjung yang tidak melakukan pembelian.
Precision sebesar 48,6% menunjukkan bahwa dari seluruh prediksi positif, sekitar setengahnya benar-benar merupakan pembeli, yang masih wajar mengingat data tidak seimbang dengan proporsi kelas positif sebesar 7,6%. F1-score sebesar 62,9% menunjukkan keseimbangan antara precision dan recall.
Secara keseluruhan, balanced accuracy sebesar 90,3% mengindikasikan bahwa model memiliki performa yang stabil pada kedua kelas.
0,5524 Nagelkerke R²
92% Akurasi
0,9563 AUC
0,0775 Treshold Optimal
Berdasarkan hasil regresi logistik biner pada dataset Online Shoppers Purchasing Intention, variabel PageValues, ExitRates, dan ProductRelated_Duration berpengaruh signifikan terhadap keputusan pembelian (Revenue), sedangkan VisitorType tidak signifikan. Secara umum, hasil ini menunjukkan bahwa keputusan pembelian lebih dipengaruhi oleh perilaku pengguna selama sesi berlangsung dibandingkan karakteristik pengunjung. Di antara seluruh variabel, PageValues merupakan faktor yang paling dominan, yang mengindikasikan bahwa semakin besar kontribusi suatu halaman terhadap transaksi, semakin tinggi pula peluang terjadinya pembelian.
Variabel ExitRates berpengaruh signifikan dengan arah negatif terhadap keputusan pembelian, yang berarti semakin tinggi tingkat pengguna meninggalkan website pada suatu halaman, semakin kecil kemungkinan mereka melakukan pembelian. Sebaliknya, ProductRelated_Duration berpengaruh positif dan signifikan, menunjukkan bahwa semakin lama pengguna mengeksplorasi halaman produk, semakin besar peluang terjadinya pembelian. Kedua variabel ini menggambarkan pentingnya keterlibatan pengguna selama menjelajahi website dalam mendorong terjadinya transaksi.
Sementara itu, VisitorType tidak berpengaruh signifikan terhadap keputusan pembelian. Ketidaksignifikan ini diduga dipengaruhi oleh ketidakseimbangan data, di mana Returning Visitor mendominasi sebesar 90,2% dibandingkan New Visitor yang hanya 9,8%. Selain itu, status pengunjung tidak selalu mencerminkan niat membeli karena baik pengunjung baru maupun lama tetap dapat melakukan atau tidak melakukan pembelian bergantung pada pengalaman dan ketertarikannya selama mengakses website. Secara keseluruhan, temuan ini menegaskan bahwa keputusan pembelian pada platform e-commerce lebih dipengaruhi oleh perilaku pengguna selama sesi kunjungan dibandingkan karakteristik pengunjung.
Penelitian ini menerapkan regresi logistik biner pada Online Shoppers Purchasing Intention Dataset untuk mengidentifikasi faktor yang memengaruhi keputusan pembelian e-commerce.
Temuan Utama:
PageValues, ExitRates, dan ProductRelated_Duration berpengaruh signifikan terhadap keputusan pembelian, sedangkan VisitorType tidak signifikan.
Keputusan pembelian lebih dipengaruhi oleh perilaku pengguna selama sesi dibandingkan karakteristik pengunjung.
Model memiliki performa baik dengan Nagelkerke R² = 0,5524 dan AUC = 0,9563.
Evaluasi pada threshold optimal 0,0775 menghasilkan akurasi 92,0%, sensitivitas 88,2%, dan balanced accuracy 90,3%.
Implikasi Praktis:
📈 Tingkatkan PageValues — optimalkan halaman produk dan checkout agar lebih efektif mendorong transaksi.
📉 Turunkan ExitRates — perbaiki UX/UI agar pengunjung tidak cepat meninggalkan situs.
⏱️ Perpanjang ProductRelated_Duration — buat konten produk lebih menarik dan informatif.
Keterbatasan:
Data hanya 1000 observasi dari dataset asli
Terdapat ketidakseimbangan kelas yang cukup ekstrem
Disarankan penggunaan full data & teknik balancing pada penelitian lanjutan
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.