Penelitian ini menggunakan data sekunder yang diperoleh dari Online Shoppers Purchasing Intention Dataset yang tersedia pada UCI Machine Learning Repository. Dataset ini dikembangkan oleh Sakar et al. (2019) dan berisi data perilaku pengunjung situs e-commerce selama satu sesi kunjungan (session) yang digunakan untuk memprediksi apakah pengunjung melakukan pembelian atau tidak. Dataset terdiri atas 12.330 observasi dengan 18 variabel, yang mencakup karakteristik aktivitas pengunjung pada situs e-commerce, perilaku penelusuran halaman, informasi teknis pengguna, serta keputusan pembelian sebagai variabel respon.
Variabel yang tersedia dalam dataset meliputi Administrative, Administrative Duration, Informational, Informational Duration, Product Related, Product Related Duration, Bounce Rates, Exit Rates, Page Values, Special Day, Month, Operating Systems, Browser, Region, Traffic Type, Visitor Type, Weekend, dan Revenue. Variabel-variabel tersebut menggambarkan aktivitas pengunjung selama mengakses situs, seperti jumlah dan durasi kunjungan pada berbagai jenis halaman, tingkat keluar halaman (exit rate), nilai halaman (page value), waktu kunjungan, hingga karakteristik teknis pengguna.
Pada penelitian ini, variabel Revenue digunakan sebagai variabel respon yang menunjukkan keputusan pembelian konsumen, sedangkan variabel prediktor yang digunakan dalam model akhir diperoleh melalui proses seleksi variabel menggunakan metode Stepwise Akaike Information Criterion (AIC). Hasil seleksi menunjukkan bahwa variabel Product Related Duration, Exit Rates, Page Values, Month, Operating Systems, dan Visitor Type merupakan variabel yang dipertahankan dalam model regresi logistik biner.
Variabel yang digunakan dalam penelitian ini terdiri atas satu variabel respon dan enam variabel prediktor yang diperoleh melalui proses seleksi variabel menggunakan metode Stepwise Akaike Information Criterion (AIC). Variabel respon yang digunakan adalah Revenue, yaitu keputusan pembelian pengunjung pada situs e-commerce yang dikategorikan menjadi dua kelompok, yaitu melakukan pembelian (Beli) dan tidak melakukan pembelian (Tidak_Beli).
| Variabel | Keterangan |
|---|---|
| Y Revenue | Keputusan pembelian konsumen. Bernilai 1 (Beli) jika terjadi transaksi dan 0 (Tidak Beli) jika tidak terjadi transaksi. |
| X1 Product Related Duration | Total waktu (dalam detik) yang dihabiskan pengunjung pada halaman yang berkaitan dengan produk. Nilai yang lebih tinggi menunjukkan minat yang lebih besar terhadap produk yang ditawarkan. |
| X2 Exit Rates | Persentase rata-rata pengunjung yang meninggalkan situs dari halaman tertentu. Nilai yang lebih tinggi menunjukkan kecenderungan pengunjung untuk keluar dari situs tanpa melanjutkan aktivitas. |
| X3 Page Values | Nilai rata-rata halaman web berdasarkan kontribusinya terhadap terjadinya transaksi. Nilai yang lebih tinggi menunjukkan halaman tersebut lebih berpotensi menghasilkan pembelian. |
| X4 Month | Bulan kunjungan konsumen ke situs e-commerce yang menunjukkan faktor musiman dalam perilaku pembelian konsumen. |
| X5 Operating Systems | Kode sistem operasi yang digunakan pengunjung ketika mengakses situs e-commerce. Nilai 1–8 merupakan kategori sistem operasi yang berbeda dan diperlakukan sebagai variabel kategorik (factor) dalam pemodelan. |
| X6 Visitor Type | Tipe pengunjung situs yang terdiri atas Returning Visitor, New Visitor, dan Other. Variabel ini menggambarkan karakteristik pengunjung berdasarkan riwayat kunjungan sebelumnya. |
Penelitian ini menggunakan data sekunder yang diperoleh dari repositori UCI Machine Learning Repository yaitu Online Shoppers Purchasing Intention Dataset. Setelah dilakukan proses pembersihan data diperoleh 12.205 observasi yang digunakan dalam analisis. Variabel respon merupakan variabel Revenue yaitu keputusan pembelian konsumen yang dikategorikan menjadi Beli dan Tidak Beli.
# Load packages yang diperlukan
library(tidyverse)
library(caret)
library(pROC)
library(ResourceSelection)
library(DescTools)
library(car)
library(knitr)
library(kableExtra)
library(ggplot2)# Load dataset dari UCI ML Repository
# Pastikan file "online_shoppers_intention.csv" sudah tersedia di direktori kerja
# data <- read.csv("online_shoppers_intention.csv", stringsAsFactors = TRUE)
#
# Preprocessing: hapus missing values
# data <- na.omit(data)
#
# Konversi variabel kategorik
# data$Revenue <- factor(data$Revenue, levels = c(FALSE, TRUE), labels = c("Tidak_Beli", "Beli"))
# data$OperatingSystems <- as.factor(data$OperatingSystems)
# data$Month <- as.factor(data$Month)
# data$VisitorType <- as.factor(data$VisitorType)
#
# cat("Jumlah observasi setelah pembersihan:", nrow(data), "\n")| Revenue | Jumlah Observasi | Proporsi |
|---|---|---|
| Tidak Beli | 10.297 | 84,37% |
| Beli | 1.908 | 15,63% |
Distribusi menunjukkan bahwa data bersifat tidak seimbang, karena jumlah pengunjung yang tidak melakukan pembelian jauh lebih besar dibandingkan pengunjung yang melakukan pembelian.
Data pelatihan (Training set) sebesar 80% yaitu 9.765 observasi dan data pengujian (Testing set) sebesar 20% yaitu 2.440 observasi.
Model regresi logistik biner:
\[\ln\frac{\pi(x)}{1-\pi(x)} = \beta_0 + \beta_1X_1 + \beta_2X_2 + \beta_3X_3 + \beta_4X_4 + \beta_5X_5 + \beta_6X_6 \tag{18}\]
Dengan:
| Variabel | Mean | SD | Minimum | Maksimum |
|---|---|---|---|---|
| Product Related Duration | 1.194,746 | 1.913,669 | 0 | 63.973,522 |
| Exit Rates | 0,043 | 0,049 | 0 | 0,200 |
| Page Values | 5,889 | 18,568 | 0 | 361,764 |
Berdasarkan Tabel 5, menunjukkan adanya variasi yang cukup besar pada perilaku pengunjung situs web. Variabel Product Related Duration memiliki rata-rata waktu kunjungan sebesar 1.194,746 detik dengan simpangan baku mencapai 1.913,669 detik. Nilai maksimum yang sangat tinggi yaitu 63.973,522 detik, mengindikasikan bahwa terdapat sebagian kecil pengunjung yang menghabiskan waktu jauh lebih lama dibandingkan mayoritas pengunjung dalam melihat halaman produk. Pada variabel Page Values yang memiliki rata-rata sebesar 5,889 dengan simpangan baku 18,568 dan nilai maksimum mencapai 361,764 menunjukkan adanya perbedaan dalam nilai halaman yang dihasilkan oleh masing-masing pengunjung. Sementara itu, variabel Exit Rates memiliki rata-rata sebesar 0,043 dengan simpangan baku 0,049 yang menunjukkan bahwa sebagian besar pengunjung meninggalkan situs pada tingkat yang relatif rendah. Besarnya variasi pada ketiga variabel tersebut mengindikasikan adanya karakteristik perilaku pengguna yang beragam, sehingga variabel-variabel ini berpotensi menjadi prediktor penting dalam menjelaskan keputusan pembelian (Revenue).
Model regresi logistik biner awal dibentuk menggunakan seluruh variabel prediktor yang tersedia dalam dataset, yaitu Administrative, Administrative Duration, Informational, Informational Duration, Product Related, Product Related Duration, Bounce Rates, Exit Rates, Page Values, Special Day, Month, Operating Systems, Browser, Region, Traffic Type, Visitor Type, dan Weekend.
# Model awal dengan seluruh variabel prediktor
# model_awal <- glm(Revenue ~ Administrative + AdministrativeDuration +
# Informational + InformationalDuration +
# ProductRelated + ProductRelatedDuration +
# BounceRates + ExitRates + PageValues +
# SpecialDay + Month + OperatingSystems +
# Browser + Region + TrafficType + VisitorType + Weekend,
# data = train, family = binomial)
#
# summary(model_awal)
# cat("AIC Model Awal:", AIC(model_awal), "\n")| Variabel | P-value | Keterangan |
|---|---|---|
| Administrative | 0,261 | Tidak signifikan |
| Administrative Duration | 0,497 | Tidak signifikan |
| Informational | 0,385 | Tidak signifikan |
| Informational Duration | 0,704 | Tidak signifikan |
| Product Related | 0,585 | Tidak signifikan |
| Product Related Duration | 0,008 | Signifikan |
| Bounce Rates | 0,326 | Tidak signifikan |
| Exit Rates | 2,66×10⁻⁹ | Signifikan |
| Page Values | 2×10⁻¹⁶ | Signifikan |
| Special Day | 0,959 | Tidak signifikan |
| Month | 2,2×10⁻¹⁶ | Signifikan |
| Operating Systems | 0,003 | Signifikan |
| Browser | 0,219 | Tidak signifikan |
| Region | 0,201 | Tidak signifikan |
| Traffic Type | 0,444 | Tidak signifikan |
| Visitor Type | 4,76×10⁻³ | Signifikan |
| Weekend | 0,134 | Tidak signifikan |
Berdasarkan Tabel 6, menunjukkan bahwa tidak semua variabel memberikan kontribusi yang signifikan terhadap peluang terjadinya pembelian (Revenue). Model awal menghasilkan nilai AIC sebesar 5883,1. Oleh karena itu dilakukan seleksi variabel menggunakan metode stepwise berdasarkan Akaike Information Criterion (AIC) untuk memperoleh model yang lebih sederhana namun tetap memiliki kemampuan prediksi yang baik.
Seleksi variabel dilakukan menggunakan metode Stepwise AIC dengan pendekatan forward dan backward secara simultan. Metode ini bertujuan memperoleh model terbaik berdasarkan nilai Akaike Information Criterion (AIC) terkecil. Hasil seleksi stepwise menghasilkan model dengan delapan variabel prediktor, yaitu Informational, Product Related Duration, Exit Rates, Page Values, Month, Operating Systems, Visitor Type, dan Weekend.
# Seleksi variabel menggunakan Stepwise AIC
# model_step <- step(model_awal, direction = "both", trace = FALSE)
# summary(model_step)
# cat("AIC Model Stepwise:", AIC(model_step), "\n")| Variabel | P-value | Keterangan |
|---|---|---|
| Informational | 0,147 | Tidak signifikan |
| Product Related Duration | 4,89×10⁻¹⁰ | Signifikan |
| Exit Rates | 2×10⁻¹⁶ | Signifikan |
| Page Values | 2×10⁻¹⁶ | Signifikan |
| Month | < 2,2×10⁻¹⁶ | Signifikan |
| Operating Systems | 0,003 | Signifikan |
| Visitor Type | 0,003 | Signifikan |
| Weekend | 0,144 | Tidak signifikan |
Berdasarkan Tabel 7, model hasil Stepwise menghasilkan nilai AIC sebesar 5871,678, lebih kecil dibandingkan model awal yang memiliki nilai AIC sebesar 5883,1. Penurunan nilai AIC menunjukkan bahwa model hasil seleksi memiliki keseimbangan yang lebih baik antara kompleksitas model dan kemampuan prediksi.
Dilakukan penyederhanaan model dengan mempertahankan variabel-variabel yang signifikan secara statistik pada taraf signifikansi 5%. Model akhir terdiri atas enam variabel yaitu: Product Related Duration, Exit Rates, Page Values, Month, Operating Systems, dan Visitor Type.
Model akhir memiliki AIC sebesar 5871,97, yang sangat dekat dengan model stepwise yang memiliki nilai AIC sebesar 5871,678 sehingga masih mampu mempertahankan kualitas model dengan jumlah variabel yang lebih sedikit.
Model regresi logistik biner yang diperoleh dapat dituliskan sebagai berikut:
\[\ln\frac{\pi(x)}{1-\pi(x)} = -1,288 + 0,000108 \cdot X_1 - 18,24 \cdot X_2 + 0,07754 \cdot X_3 - 0,1236 \cdot X_5 + \text{Month} + \text{Visitor Type}\]
dengan \(\pi(x)\) menyatakan probabilitas seorang pengunjung melakukan pembelian. Variabel Month dan Visitor Type merupakan variabel kategorik yang direpresentasikan dalam bentuk variabel dummy sehingga koefisiennya berbeda untuk setiap kategori dibandingkan kategori referensi.
# Model akhir dengan 6 variabel signifikan
# model_akhir <- glm(Revenue ~ ProductRelatedDuration + ExitRates + PageValues +
# Month + OperatingSystems + VisitorType,
# data = train, family = binomial)
#
# summary(model_akhir)
# cat("AIC Model Akhir:", AIC(model_akhir), "\n")| Variabel | P-value | Keterangan |
|---|---|---|
| Product Related Duration | 4,89×10⁻¹⁰ | Signifikan |
| Exit Rates | 2×10⁻¹⁶ | Signifikan |
| Page Values | 2×10⁻¹⁶ | Signifikan |
| Month | < 2,2×10⁻¹⁶ | Signifikan |
| Operating Systems | 0,003 | Signifikan |
| Visitor Type | 0,003 | Signifikan |
Uji linearitas logit dilakukan menggunakan metode Box-Tidwell untuk mengevaluasi apakah variabel prediktor kontinu memiliki hubungan linear dengan logit probabilitas pembelian. Variabel yang diuji meliputi Product Related Duration, Exit Rates, dan Page Values. Hasil pengujian disajikan pada Tabel 9.
# Uji Linearitas Logit dengan Box-Tidwell
# train_bt <- train %>%
# mutate(
# PRD_log = ProductRelatedDuration * log(ProductRelatedDuration + 1),
# ER_log = ExitRates * log(ExitRates + 1e-6),
# PV_log = PageValues * log(PageValues + 1)
# )
#
# model_bt <- glm(Revenue ~ ProductRelatedDuration + ExitRates + PageValues +
# PRD_log + ER_log + PV_log +
# Month + OperatingSystems + VisitorType,
# data = train_bt, family = binomial)
#
# summary(model_bt)| Variabel | Estimasi | Z-value | P-value | Kesimpulan |
|---|---|---|---|---|
| Product Related Duration_log | -6,7×10⁻⁵ | -3,020 | 0,002529 | Tidak linear |
| Exit Rates_log | -6,452 | -1,805 | 0,071028 | Linear |
| Page Value_log | -0,05068 | -26,273 | <2×10⁻¹⁶ | Tidak linear |
Berdasarkan Tabel 9, menunjukkan bahwa hubungan antara Product Related Duration dan peluang pembelian tidak mengikuti pola linear sederhana pada skala logit. Durasi kunjungan yang semakin lama pada halaman produk memang cenderung menunjukkan ketertarikan yang lebih tinggi terhadap produk, namun peningkatan waktu kunjungan tidak selalu menghasilkan peningkatan peluang pembelian yang konstan. Pada kondisi tertentu, tambahan waktu kunjungan dapat memberikan pengaruh yang semakin kecil atau bahkan berbeda terhadap keputusan pembelian pelanggan.
Pada variabel Page Values, nilai p-value yang sangat kecil menunjukkan bahwa hubungan antara Page Values dan probabilitas pembelian bersifat nonlinier. Hal ini mengindikasikan bahwa peningkatan nilai halaman tidak selalu diikuti oleh peningkatan peluang pembelian dalam proporsi yang sama. Pada nilai tertentu dapat terjadi efek kejenuhan (diminishing return), yaitu peningkatan nilai halaman hanya memberikan tambahan pengaruh yang relatif kecil terhadap peluang pembelian.
Pada variabel Exit Rates masih memenuhi asumsi linearitas logit. Artinya perubahan nilai Exit Rates memiliki hubungan yang relatif konsisten terhadap perubahan logit probabilitas pembelian. Semakin tinggi Exit Rates, kecenderungan pelanggan untuk meninggalkan situs meningkat sehingga peluang terjadinya pembelian menurun secara relatif stabil pada skala logit.
Meskipun terdapat indikasi pelanggaran asumsi linearitas logit pada dua variabel kontinu, model regresi logistik yang dibangun tetap menunjukkan performa prediksi yang baik. Hal ini ditunjukkan oleh nilai AUC sebesar 0,8975 yang termasuk kategori baik serta Brier Score sebesar 0,0799 yang menunjukkan kualitas kalibrasi model yang baik. Oleh karena itu, model masih layak digunakan untuk tujuan prediksi dan interpretasi perilaku pembelian pelanggan, meskipun hubungan nonlinier pada beberapa variabel perlu menjadi perhatian dalam pengembangan model yang lebih kompleks di masa mendatang.
Sebelum dilakukan pemodelan regresi logistik biner, dilakukan pengujian multikolinearitas untuk mengetahui apakah terdapat hubungan yang kuat antarvariabel prediktor yang digunakan dalam model. Pengujian dilakukan menggunakan nilai Generalized Variance Inflation Factor (GVIF), dengan kriteria bahwa nilai GVIF Adjusted kurang dari 5 menunjukkan tidak adanya masalah multikolinearitas.
Variabel Month dan Visitor Type merupakan variabel kategorik yang direpresentasikan oleh beberapa variabel dummy dalam model regresi logistik. Namun, pada pengujian multikolinearitas menggunakan Generalized Variance Inflation Factor (GVIF), masing-masing variabel diperlakukan sebagai satu faktor sehingga hanya menghasilkan satu nilai GVIF yang mewakili seluruh kategori dummy.
| Variabel | GVIF Adjusted | Status |
|---|---|---|
| Product Related Duration | 1,062 | Tidak ada multikolinearitas |
| Exit Rates | 1,053 | Tidak ada multikolinearitas |
| Page Values | 1,030 | Tidak ada multikolinearitas |
| Month | 1,006 | Tidak ada multikolinearitas |
| Operating Systems | 1,029 | Tidak ada multikolinearitas |
| Visitor Type | 1,033 | Tidak ada multikolinearitas |
Berdasarkan Tabel 10, seluruh variabel memiliki nilai GVIF Adjusted kurang dari 5 dengan rentang antara 1,006 hingga 1,062. Hasil ini mengindikasikan bahwa tidak terdapat multikolinearitas antar variabel prediktor dalam model. Dengan demikian, keenam variabel yaitu Product Related Duration, Exit Rates, Page Values, Month, Operating Systems, dan Visitor Type dapat digunakan secara bersama-sama dalam pemodelan regresi logistik biner karena masing-masing variabel memberikan informasi yang relatif berbeda dalam menjelaskan keputusan pembelian konsumen.
# Uji Hosmer-Lemeshow
# library(ResourceSelection)
# hosmerlem <- hoslem.test(train$Revenue == "Beli",
# fitted(model_akhir), g = 10)
# print(hosmerlem)| Metrik | Nilai |
|---|---|
| Chi-squared | 113,8265 |
| P-value | 0 |
Berdasarkan Tabel 11, uji Hosmer-Lemeshow menunjukkan p-value < 0,05 yang mengindikasikan kalibrasi tidak sempurna. Hal ini merupakan fenomena umum pada dataset berukuran besar (N > 10.000) karena uji tersebut sangat sensitif terhadap deviasi kecil. Oleh karena itu, evaluasi model juga mempertimbangkan nilai AUC dan Brier Score yang menunjukkan performa model yang baik.
# Hitung Pseudo R-squared
# library(DescTools)
# PseudoR2(model_akhir, which = c("McFadden", "Nagelkerke", "CoxSnell"))| Metrik | Nilai |
|---|---|
| McFadden | 0,3131 |
| r2ML (Cox-Snell) | 0,2365 |
| r2CU (Nagelkerke) | 0,4095 |
Berdasarkan Tabel 12, nilai McFadden R² sebesar 0,3131 yang menunjukkan bahwa model memiliki kemampuan yang cukup baik dalam menjelaskan variasi keputusan pembelian konsumen. Dalam regresi logistik, nilai McFadden R² antara 0,20 hingga 0,40 umumnya dianggap menunjukkan kecocokan model yang baik. Sementara itu, nilai Nagelkerke R² sebesar 0,4095 menunjukkan bahwa sekitar 40,95% variasi keputusan pembelian dapat dijelaskan oleh variabel-variabel dalam model.
Hasil ringkasan nilai Odds Ratio (OR), interval kepercayaan 95%, dan p-value dari variabel-variabel prediktor pada model regresi logistik biner disajikan pada Tabel 13. Nilai OR digunakan untuk mengukur besarnya perubahan peluang (odds) pembelian akibat perubahan variabel prediktor dengan asumsi variabel lain tetap.
# Hitung Odds Ratio dan Confidence Interval
# or_table <- exp(cbind(OR = coef(model_akhir), confint(model_akhir)))
# print(round(or_table, 4))| Variabel | Odds Ratio | CI 95% | P-Value | Signifikansi |
|---|---|---|---|---|
| Product Related Duration | 1,00 | 1,00 – 1,00 | 0 | Signifikan |
| Exit Rates | 0 | 0 – 0 | 0 | Signifikan |
| Page Values | 1,08 | 1,08 – 1,09 | 0 | Signifikan |
| Month December | 0,55 | 0,37 – 0,81 | 0,002 | Signifikan |
| Month February | 0,19 | 0,05 – 0,67 | 0,009 | Signifikan |
| Month July | 0,97 | 0,61 – 1,56 | 0,912 | Tidak Signifikan |
| Month June | 0,75 | 0,42 – 1,35 | 0,336 | Tidak Signifikan |
| Month March | 0,53 | 0,37 – 0,79 | 0,002 | Signifikan |
| Month May | 0,55 | 0,38 – 0,79 | 0,001 | Signifikan |
| Month November | 1,66 | 1,17 – 2,36 | 0,004 | Signifikan |
| Month October | 0,88 | 0,57 – 1,36 | 0,555 | Tidak Signifikan |
| Month September | 0,98 | 0,62 – 1,55 | 0,942 | Tidak Signifikan |
| Operating Systems | 0,88 | 0,81 – 0,96 | 0,004 | Signifikan |
| Visitor Type Other | 0,72 | 0,23 – 2,33 | 0,588 | Tidak Signifikan |
| Visitor Type Returning Visitor | 0,72 | 0,60 – 0,87 | 0,001 | Signifikan |
Berdasarkan Tabel 13, variabel Product Related Duration, Exit Rates, Page Values, Operating Systems, beberapa kategori Month, dan Visitor Type Returning Visitor berpengaruh signifikan terhadap keputusan pembelian karena memiliki p-value kurang dari 0,05.
Variabel Page Values memiliki OR sebesar 1,08 yang menunjukkan bahwa setiap kenaikan satu satuan nilai Page Values meningkatkan peluang pembelian sebesar 8%, dengan asumsi variabel lain tetap. Selain itu, kategori Month November memiliki OR sebesar 1,66 yang menunjukkan bahwa peluang pembelian pada bulan November sekitar 1,66 kali lebih besar dibandingkan kategori bulan referensi (bulan Agustus).
Sebaliknya, variabel Exit Rates memiliki OR yang sangat kecil (mendekati nol), yang mengindikasikan bahwa peningkatan Exit Rates secara signifikan menurunkan peluang terjadinya pembelian. Variabel Operating Systems memiliki OR sebesar 0,88, yang berarti setiap kenaikan satu kategori sistem operasi menurunkan peluang pembelian sekitar 11,6%. Demikian pula, kategori Visitor Type Returning Visitor memiliki OR sebesar 0,72, yang menunjukkan bahwa peluang pembelian pengunjung yang kembali (returning visitor) lebih rendah dibandingkan kategori referensi (new visitor).
Untuk variabel Month, kategori December, February, March, dan May memiliki OR kurang dari satu dan signifikan secara statistik, sehingga menunjukkan peluang pembelian yang lebih rendah dibandingkan bulan referensi (bulan Agustus). Sementara itu, kategori July, June, October, dan September tidak berpengaruh signifikan terhadap keputusan pembelian karena memiliki p-value lebih besar dari 0,05.
Variabel Product Related Duration memiliki Odds Ratio sebesar 1,00. Nilai tersebut menunjukkan bahwa setiap penambahan satu detik durasi kunjungan pada halaman produk cenderung meningkatkan peluang pembelian. Meskipun peningkatannya sangat kecil untuk setiap satu detik tambahan, akumulasi durasi kunjungan yang lebih lama dapat meningkatkan peluang terjadinya pembelian.
# Prediksi probabilitas pada data testing
# pred_prob <- predict(model_akhir, newdata = test, type = "response")
#
# # Hitung Brier Score
# brier_score <- mean((pred_prob - as.numeric(test$Revenue == "Beli"))^2)
# cat("Brier Score:", round(brier_score, 4), "\n")
#
# # Calibration Plot
# cal_df <- data.frame(pred = pred_prob,
# obs = as.numeric(test$Revenue == "Beli"))
# cal_df <- cal_df %>%
# mutate(bin = cut(pred, breaks = seq(0, 1, by = 0.1), include.lowest = TRUE)) %>%
# group_by(bin) %>%
# summarise(mean_pred = mean(pred),
# mean_obs = mean(obs))
#
# ggplot(cal_df, aes(x = mean_pred, y = mean_obs)) +
# geom_point(size = 3, color = "#2980b9") +
# geom_line(color = "#2980b9") +
# geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "gray50") +
# labs(title = "Calibration Plot",
# x = "Rata-rata Probabilitas Prediksi",
# y = "Proporsi Kejadian Aktual") +
# theme_minimal()Brier Score yang diperoleh adalah 0,0799. Nilai yang mendekati 0 menunjukkan bahwa probabilitas yang diprediksi model cukup dekat dengan kondisi aktual. Hal ini mengindikasikan bahwa model memiliki kalibrasi yang baik dalam memprediksi peluang pembelian, yang juga didukung oleh Calibration Plot di mana titik-titik prediksi cenderung mengikuti garis diagonal.
Gambar 1. Calibration Plot — Titik-titik prediksi cenderung mengikuti garis diagonal, menunjukkan kalibrasi model yang baik.
# ROC Curve dan AUC
# library(pROC)
# roc_obj <- roc(test$Revenue, pred_prob)
# auc_val <- auc(roc_obj)
# cat("AUC:", round(auc_val, 4), "\n")
#
# plot(roc_obj,
# col = "#2980b9",
# lwd = 2,
# main = paste("ROC Curve (AUC =", round(auc_val, 4), ")"),
# print.auc = TRUE)
# abline(a = 0, b = 1, lty = 2, col = "gray50")Berdasarkan analisis, diperoleh nilai AUC sebesar 0,8975 yang berada pada kategori baik karena berada pada rentang 0,8–0,9. Nilai tersebut menunjukkan bahwa model memiliki kemampuan diskriminasi yang tinggi dalam mengklasifikasikan kedua kelompok pengunjung.
Kurva ROC yang berada jauh di atas garis diagonal mengindikasikan bahwa performa model jauh lebih baik dibandingkan klasifikasi secara acak. Nilai AUC sebesar 0,8975 menunjukkan bahwa model memiliki peluang sekitar 89,75% untuk memberikan skor probabilitas pembelian yang lebih tinggi kepada pengunjung yang benar-benar melakukan pembelian dibandingkan pengunjung yang tidak melakukan pembelian.
Gambar 2. ROC Curve — Kurva berada jauh di atas garis diagonal dengan AUC = 0,8975.
# Confusion Matrix pada threshold 0.5
# pred_class_05 <- ifelse(pred_prob >= 0.5, "Beli", "Tidak_Beli")
# cm_05 <- confusionMatrix(factor(pred_class_05, levels = c("Tidak_Beli","Beli")),
# test$Revenue)
# print(cm_05)
#
# # Threshold Optimal (Youden Index)
# youden_idx <- which.max(roc_obj$sensitivities + roc_obj$specificities - 1)
# threshold_opt <- roc_obj$thresholds[youden_idx]
# cat("Threshold Optimal:", round(threshold_opt, 4), "\n")
#
# # Confusion Matrix pada threshold optimal
# pred_class_opt <- ifelse(pred_prob >= threshold_opt, "Beli", "Tidak_Beli")
# cm_opt <- confusionMatrix(factor(pred_class_opt, levels = c("Tidak_Beli","Beli")),
# test$Revenue)
# print(cm_opt)| Prediksi | Aktual Tidak Beli | Aktual Beli |
|---|---|---|
| Tidak Beli | 2048 | 236 |
| Beli | 36 | 145 |
Berdasarkan Tabel 14, pada threshold standar sebesar 0,5 model berhasil mengklasifikasikan sebanyak 2.048 pengunjung yang tidak melakukan pembelian secara benar dan 145 pengunjung yang melakukan pembelian secara benar. Namun demikian, masih terdapat 236 pengunjung yang sebenarnya melakukan pembelian tetapi diprediksi tidak membeli (false negative), serta 36 pengunjung yang sebenarnya tidak melakukan pembelian tetapi diprediksi membeli (false positive).
Hasil ini menunjukkan bahwa model memiliki kemampuan yang sangat baik dalam mengidentifikasi pengunjung yang tidak melakukan pembelian, tetapi masih kurang optimal dalam mendeteksi pengunjung yang melakukan pembelian. Hal ini ditunjukkan oleh nilai sensitivitas sebesar 0,9827 yang sangat tinggi, sedangkan nilai spesifisitas sebesar 0,3806. Meskipun akurasi model mencapai 88,97%, penggunaan threshold 0,5 cenderung menghasilkan klasifikasi yang lebih berpihak pada kelas mayoritas.
| Prediksi | Aktual Tidak Beli | Aktual Beli |
|---|---|---|
| Tidak Beli | 1735 | 78 |
| Beli | 349 | 303 |
Berdasarkan Tabel 15, penggunaan threshold optimal sebesar 0,154 menghasilkan perubahan pola klasifikasi. Jumlah pengunjung yang berhasil diidentifikasi sebagai pembeli meningkat menjadi 303 observasi, sedangkan jumlah pengunjung yang sebenarnya melakukan pembelian tetapi diprediksi tidak membeli menurun menjadi 78 observasi.
| Threshold | Akurasi | Sensitivitas | Spesifisitas |
|---|---|---|---|
| 0,5 | 0,8897 | 0,9827 | 0,3806 |
| 0,1541 (Optimal) | 0,8268 | 0,8325 | 0,7953 |
Berdasarkan Tabel 16, penggunaan threshold 0,5 menghasilkan akurasi yang lebih tinggi yaitu sebesar 88,97%. Namun, tingginya akurasi tersebut disertai dengan spesifisitas yang rendah sehingga model kurang baik dalam mengidentifikasi pengunjung yang melakukan pembelian. Sebaliknya, penggunaan threshold optimal sebesar 0,1541 menghasilkan akurasi yang sedikit lebih rendah yaitu 82,68%, tetapi mampu meningkatkan keseimbangan antara sensitivitas dan spesifisitas. Oleh karena itu, threshold optimal lebih disarankan karena memberikan kemampuan yang lebih baik dalam mendeteksi pengunjung yang berpotensi melakukan pembelian.
# Distribusi probabilitas prediksi
# dist_df <- data.frame(
# prob = pred_prob,
# kelas = test$Revenue
# )
#
# ggplot(dist_df, aes(x = prob, fill = kelas)) +
# geom_density(alpha = 0.5) +
# geom_vline(xintercept = 0.5, linetype = "dashed", color = "red", size = 0.8,
# aes(label = "Threshold = 0.5")) +
# geom_vline(xintercept = 0.154, linetype = "dashed", color = "#2980b9", size = 0.8) +
# scale_fill_manual(values = c("Tidak_Beli" = "#e74c3c", "Beli" = "#2980b9"),
# name = "Kelas") +
# annotate("text", x = 0.53, y = 4, label = "Threshold = 0,5", color = "red", size = 3.5) +
# annotate("text", x = 0.18, y = 4, label = "Threshold = 0,154", color = "#2980b9", size = 3.5) +
# labs(title = "Distribusi Probabilitas Prediksi",
# x = "Probabilitas Prediksi",
# y = "Densitas") +
# theme_minimal()Distribusi probabilitas prediksi menunjukkan bahwa sebagian besar pengunjung yang tidak melakukan pembelian memiliki probabilitas prediksi yang rendah dan terkonsentrasi pada rentang mendekati nol. Sebaliknya, pengunjung yang melakukan pembelian cenderung memiliki probabilitas prediksi yang lebih tinggi dengan sebaran yang lebih luas.
Threshold optimal berada pada nilai yang lebih rendah dibandingkan threshold standar (0,154 vs 0,5), yang menunjukkan bahwa penggunaan threshold 0,154 mampu memberikan keseimbangan yang lebih baik antara sensitivitas dan spesifisitas dalam proses klasifikasi.
Meskipun masih terdapat tumpang tindih distribusi antara kedua kelompok pada rentang probabilitas tertentu, secara umum model mampu memisahkan pengunjung yang melakukan pembelian dan yang tidak melakukan pembelian dengan cukup baik. Hal ini sejalan dengan nilai AUC sebesar 0,8975 yang menunjukkan bahwa model memiliki kemampuan diskriminasi yang baik.
Gambar 3. Distribusi Probabilitas Prediksi — Kelompok Beli dan Tidak Beli beserta garis threshold standar (0,5) dan threshold optimal (0,154).
| # Kesimpulan {#conclusion} |
|---|
| # Ketersediaan Data {#data-availability .unnumbered} |
| Data yang digunakan dalam penelitian ini merupakan data sekunder yang tersedia secara publik melalui Online Shoppers Purchasing Intention Dataset pada UCI Machine Learning Repository dan dapat diakses pada: https://archive.ics.uci.edu/dataset/468/online+shoppers+purchasing+intention+dataset |
Laudon, K.C.; Traver, C.G. E-Commerce: Business, Technology, Society, 16th ed.; Pearson: New York, USA, 2020.
Chen, H.; Chiang, R.H.L.; Storey, V.C. Business Intelligence and Analytics: From Big Data to Big Impact. MIS Quarterly 2012, 36, 1165–1188.
Koufaris, M. Applying the Technology Acceptance Model and Flow Theory to Online Consumer Behavior. Information Systems Research 2002, 13, 205–223.
Hosmer, D.W.; Lemeshow, S.; Sturdivant, R.X. Applied Logistic Regression, 3rd ed.; Wiley: Hoboken, NJ, USA, 2013.
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.
Islam, T.; Nur, K.; Abujar, S.; Hossain, S.A. Prediction of Online Shopping Intention: An Application of Machine Learning. In Proceedings of the International Conference on Recent Advances in Computer Systems (RACS 2019), Hail, Saudi Arabia, 2019.