Perkembangan teknologi digital dan pesatnya pertumbuhan e-commerce telah mendorong meningkatnya aktivitas transaksi secara online dalam beberapa tahun terakhir. Perusahaan retail kini tidak hanya mengandalkan toko fisik, tetapi juga memanfaatkan platform digital untuk memperluas jangkauan pasar dan meningkatkan pendapatan. Dalam proses tersebut, setiap transaksi yang terjadi menghasilkan berbagai data penting yang merekam perilaku dan pola pembelian pelanggan. Data transaksi ini memiliki potensi besar untuk diolah menjadi informasi strategis yang dapat membantu perusahaan memahami kebutuhan pelanggan dan meningkatkan daya saing.
Salah satu dataset yang banyak digunakan dalam penelitian dan analisis perilaku pelanggan adalah Online Retail Dataset dari UCI Machine Learning Repository yang juga tersedia di Kaggle. Dataset ini berisi transaksi penjualan dari sebuah perusahaan retail berbasis di Inggris yang menjual produk hadiah secara online antara bulan Desember 2010 hingga Desember 2011. Di dalamnya terdapat informasi penting seperti invoice number, stock code, deskripsi barang, jumlah barang, harga satuan, tanggal transaksi, negara, hingga identitas pelanggan (CustomerID). Kelengkapan informasi tersebut menjadikan dataset ini ideal untuk berbagai analisis, mulai dari kontrol kualitas data hingga segmentasi pelanggan.
Meskipun data yang dimiliki perusahaan sangat besar dan kaya informasi, tidak semua perusahaan mampu mengoptimalkan pemanfaatannya. Banyak perusahaan yang hanya menyimpan data tanpa mengolahnya menjadi insight yang bermanfaat. Padahal, pemahaman terhadap perilaku pelanggan menjadi elemen penting dalam membangun strategi pemasaran yang efektif. Pelanggan memiliki perilaku dan karakteristik yang berbeda—ada yang sering bertransaksi, ada yang membeli dalam jumlah besar, ada yang jarang, dan ada yang memberikan nilai pembelian yang tinggi. Tanpa segmentasi yang tepat, perusahaan akan kesulitan memberikan treatment atau strategi pemasaran yang sesuai untuk masing-masing kelompok pelanggan.
Salah satu metode analisis yang dapat digunakan untuk memahami pola tersebut adalah analisis clustering, khususnya K-Means Clustering. Metode ini mengelompokkan pelanggan ke dalam beberapa cluster berdasarkan kemiripan perilaku pembelian mereka, seperti frekuensi transaksi, kuantitas pembelian, total pengeluaran, dan rata-rata harga produk yang dibeli. Melalui segmentasi ini, perusahaan dapat mengidentifikasi kelompok pelanggan bernilai tinggi, pelanggan setia, pelanggan yang berpotensi churn, hingga pelanggan dengan pengeluaran rendah. Informasi tersebut sangat berharga untuk merancang strategi pemasaran yang lebih personal, meningkatkan retensi pelanggan, dan memaksimalkan profit.
Dengan demikian, analisis clustering pada Online Retail Dataset menjadi langkah penting untuk mendukung pengambilan keputusan berbasis data (data-driven decision making). Melalui identifikasi cluster pelanggan, perusahaan dapat memahami perilaku konsumen secara lebih mendalam dan menyusun strategi pemasaran yang lebih efektif serta efisien.
Rumusan masalah yang terbentuk dari data Online Retail Dataset dari UCI Machine Learning Repository sebagai berikut:
Bagaimana menentukan jumlah cluster yang optimal untuk mengelompokkan pelanggan pada Online Retail Dataset?
Bagaimana proses penerapan metode K-Means dapat mengelompokkan pelanggan berdasarkan perilaku transaksi mereka?
Apa karakteristik masing-masing cluster pelanggan yang terbentuk dari hasil analisis K-Means?
Tujuan yang telah disesuikan dengan rumusan masalah yang terbentuk dari data Online Retail Dataset dari UCI Machine Learning Repository sebagai berikut:
Menentukan jumlah cluster yang optimal dalam segmentasi pelanggan pada Online Retail Dataset.
Menerapkan metode K-Means untuk mengelompokkan pelanggan berdasarkan pola transaksi seperti frekuensi, kuantitas pembelian, dan total pengeluaran.
Mengidentifikasi dan menjelaskan karakteristik masing-masing cluster pelanggan yang terbentuk sebagai dasar pengambilan keputusan strategi pemasaran.
Analisis multivariat merupakan sekumpulan teknik statistik yang digunakan untuk menganalisis data yang memiliki lebih dari satu variabel dependen maupun independen secara simultan. Menurut Hair et al. (2019), analisis multivariat berfungsi untuk memahami hubungan kompleks antar variabel dan untuk mengidentifikasi pola dalam kumpulan data yang besar. Metode dalam analisis multivariat dapat berupa teknik eksploratori (exploratory), konfirmatori (confirmatory), maupun prediktif (predictive). Penggunaan analisis multivariat menjadi sangat penting pada konteks bisnis dan pemasaran karena mampu mengungkap struktur data yang tidak terlihat melalui analisis univariat maupun bivariat.
Clustering adalah salah satu teknik analisis multivariat eksploratori yang bertujuan mengelompokkan objek berdasarkan kemiripan karakteristik. Johnson & Wichern (2018) menjelaskan bahwa clustering menempatkan objek ke dalam kelompok (cluster) sehingga objek dalam cluster yang sama memiliki tingkat kesamaan yang tinggi, sedangkan objek antar cluster memiliki perbedaan yang besar. Proses clustering lebih difokuskan pada struktur alami (natural grouping) dalam data tanpa variabel dependen, sehingga termasuk metode unsupervised multivariate analysis. Teknik ini banyak digunakan dalam psikologi, pemasaran, biologi, dan analisis perilaku konsumen.
K-Means merupakan salah satu metode clustering non-hierarki paling populer dalam analisis multivariat. Menurut Rencher & Christensen (2012), K-Means bekerja dengan cara membagi data ke dalam k cluster melalui proses minimisasi variasi dalam cluster dan memaksimalkan perbedaan antar cluster. Metode ini menggunakan jarak Euclidean sebagai dasar pengelompokan sehingga variabel-variabel yang digunakan harus distandarisasi terlebih dahulu untuk menghindari bias akibat perbedaan skala. Keunggulan K-Means adalah efisiensinya dalam menangani data berukuran besar serta kemampuannya menghasilkan cluster dengan struktur yang jelas dan mudah diinterpretasikan.
Standarisasi merupakan langkah penting dalam analisis multivariat, terutama ketika menggunakan teknik berbasis jarak seperti K-Means, analisis diskriminan, dan analisis faktor. Hair et al. (2019) menegaskan bahwa perbedaan skala antar variabel dapat menyebabkan variabel tertentu mendominasi perhitungan jarak, sehingga proses standarisasi seperti Z-score (mean = 0 dan standar deviasi = 1) diperlukan untuk memastikan semua variabel memiliki kontribusi yang seimbang dalam analisis. Standarisasi membantu meningkatkan keakuratan hasil cluster dan mempermudah interpretasi.
Dalam pemasaran modern, segmentasi pelanggan merupakan salah satu penerapan analisis multivariat yang paling umum. Dillon & Goldstein (1984) menyatakan bahwa teknik multivariat seperti clustering dapat mengelompokkan pelanggan berdasarkan perilaku, preferensi, dan pola pembelian sehingga perusahaan dapat menyusun strategi pemasaran yang lebih tepat sasaran. Segmentasi berbasis data transaksi, seperti frekuensi pembelian, total pengeluaran, dan intensitas belanja, memungkinkan perusahaan memahami kelompok pelanggan bernilai tinggi, pelanggan yang berpotensi churn, maupun kelompok pelanggan reguler.
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
data <- read_excel("D:/Coolyeah/Semester 5/ANMUL/Online Retail_Data Praktikum ANMUL.xlsx", sheet = 1)
head(data)
## # A tibble: 6 × 8
## InvoiceNo StockCode Description Quantity InvoiceDate UnitPrice
## <chr> <chr> <chr> <dbl> <dttm> <dbl>
## 1 536365 85123A WHITE HANGING HEAR… 6 2010-12-01 08:26:00 2.55
## 2 536365 71053 WHITE METAL LANTERN 6 2010-12-01 08:26:00 3.39
## 3 536365 84406B CREAM CUPID HEARTS… 8 2010-12-01 08:26:00 2.75
## 4 536365 84029G KNITTED UNION FLAG… 6 2010-12-01 08:26:00 3.39
## 5 536365 84029E RED WOOLLY HOTTIE … 6 2010-12-01 08:26:00 3.39
## 6 536365 22752 SET 7 BABUSHKA NES… 2 2010-12-01 08:26:00 7.65
## # ℹ 2 more variables: CustomerID <dbl>, Country <chr>
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'tidyr' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.1
## Warning: package 'purrr' was built under R version 4.4.1
## Warning: package 'dplyr' was built under R version 4.4.3
## Warning: package 'stringr' was built under R version 4.4.1
## Warning: package 'forcats' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.1 ✔ stringr 1.5.1
## ✔ ggplot2 4.0.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
data_clean <- data %>%
filter(!is.na(CustomerID),
Quantity > 0,
UnitPrice > 0)
data_customer <- data_clean %>%
group_by(CustomerID) %>%
summarise(
total_transaksi = n(),
total_quantity = sum(Quantity),
total_spending = sum(Quantity * UnitPrice),
rata_rata_harga = mean(UnitPrice)
)
head(data_customer)
## # A tibble: 6 × 5
## CustomerID total_transaksi total_quantity total_spending rata_rata_harga
## <dbl> <int> <dbl> <dbl> <dbl>
## 1 12346 1 74215 77184. 1.04
## 2 12347 182 2458 4310 2.64
## 3 12348 31 2341 1797. 5.76
## 4 12349 73 631 1758. 8.29
## 5 12350 17 197 334. 3.84
## 6 12352 85 536 2506. 15.9
library(dplyr)
library(ggplot2)
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.4.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
# Standarisasi data numerik
data_scaled <- scale(data_customer[, -1])
# Tentukan jumlah cluster optimal
fviz_nbclust(data_scaled, kmeans, method = "wss") +
ggtitle("Menentukan Jumlah Cluster Optimal (Metode Elbow)")
# Jalankan K-Means (misal k = 3)
set.seed(123)
kmeans_result <- kmeans(data_scaled, centers = 3, nstart = 25)
# Lihat hasil clustering
kmeans_result
## K-means clustering with 3 clusters of sizes 4315, 18, 5
##
## Cluster means:
## total_transaksi total_quantity total_spending rata_rata_harga
## 1 -0.03441264 -0.05003712 -0.05106253 -0.025696695
## 2 8.35889467 12.01620821 12.01431576 0.007903432
## 3 -0.39390944 -0.07631448 0.81542704 22.147795709
##
## Clustering vector:
## [1] 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [186] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [223] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [260] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [297] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1
## [334] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [371] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [408] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [445] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [482] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [519] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [556] 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [593] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [630] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [667] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [704] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [741] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [778] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [815] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [852] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [889] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [926] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [963] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1
## [1000] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1037] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1074] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1111] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1148] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1185] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1222] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1259] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1
## [1296] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1333] 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1370] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1407] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1
## [1444] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1481] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1518] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1555] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1592] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1629] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1666] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1
## [1703] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1740] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1777] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1814] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1851] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1
## [1888] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1925] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1962] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [1999] 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2036] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2073] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2110] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2147] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1
## [2184] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2221] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2258] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2295] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2332] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2369] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2406] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2443] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2480] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2517] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1
## [2554] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2591] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2628] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2665] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2702] 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2739] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2776] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2813] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2850] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2887] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2924] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2961] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [2998] 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3035] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3072] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3109] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3146] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1
## [3183] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3220] 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3257] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3294] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3331] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3368] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3405] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3442] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3479] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3516] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3553] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3590] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3627] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3664] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3701] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1
## [3738] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1
## [3775] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3812] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3849] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3886] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3923] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3960] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [3997] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [4034] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [4071] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [4108] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [4145] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [4182] 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [4219] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [4256] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [4293] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [4330] 1 1 1 1 1 1 1 1 1
##
## Within cluster sum of squares by cluster:
## [1] 2808.236 3857.304 1740.816
## (between_SS / total_SS = 51.5 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
# Tambahkan hasil cluster ke data_customer
data_customer$cluster <- as.factor(kmeans_result$cluster)
# Jumlah anggota tiap cluster
table(data_customer$cluster)
##
## 1 2 3
## 4315 18 5
# Rata-rata variabel per cluster
aggregate(
data_customer[, -c(1, 6)],
by = list(cluster = data_customer$cluster),
mean
)
## cluster total_transaksi total_quantity total_spending rata_rata_harga
## 1 1 83.84751 938.7977 1595.254 3.588652
## 2 2 2004.11111 61826.0556 110053.719 4.738161
## 3 3 1.60000 806.2000 9384.328 762.176000
fviz_cluster(kmeans_result, data = data_scaled,
geom = "point",
ellipse.type = "norm",
ggtheme = theme_minimal()) +
ggtitle("Visualisasi Hasil K-Means Clustering")
Dataset awal terdiri dari berbagai transaksi pelanggan dengan variabel seperti Invoice, StockCode, Quantity, UnitPrice, CustomerID, dan InvoiceDate. Pada tahap awal dilakukan pembersihan data dengan menghapus:
Langkah ini penting untuk memastikan hanya transaksi valid yang digunakan. Hasil pembersihan menunjukkan bahwa hanya transaksi dengan nilai positif dan identitas pelanggan lengkap yang masuk ke proses analisis selanjutnya. Hal ini membuat data menjadi lebih relevan dan akurat untuk tujuan segmentasi pelanggan.
Selanjutnya dilakukan pengelompokan data berdasarkan CustomerID, kemudian dihitung beberapa ukuran agregat yang merepresentasikan perilaku setiap pelanggan, meliputi:
Variabel-variabel ini menjadi dasar untuk memahami perilaku belanja konsumen dan menjadi input utama dalam analisis K-Means Clustering.
Karena variabel yang digunakan memiliki skala yang berbeda, dilakukan standarisasi menggunakan metode Z-score. Standarisasi dilakukan pada seluruh variabel numerik kecuali CustomerID. Proses ini penting karena algoritma K-Means menggunakan jarak Euclidean, sehingga perbedaan skala dapat menyebabkan bias dalam pembentukan cluster.
Metode Elbow (WSS) digunakan untuk menentukan jumlah cluster optimal. Grafik WSS menunjukkan perubahan penurunan nilai within-cluster sum of squares untuk setiap nilai k. Titik siku (elbow) pada grafik menjadi indikator jumlah cluster yang ideal.
Berdasarkan visualisasi elbow plot, jumlah cluster optimal berada pada k = 3, karena setelah titik ini penurunan WSS mulai melambat.
Proses K-Means dijalankan dengan parameter:
Hasil clustering menunjukkan bahwa pelanggan berhasil dikelompokkan ke dalam tiga cluster dengan ukuran berbeda. Setiap cluster memiliki karakteristik unik berdasarkan pola transaksi dan nilai pembelian. Setelah itu, hasil cluster ditambahkan ke dataset pelanggan untuk dianalisis lebih lanjut.
Fungsi table() digunakan untuk melihat distribusi pelanggan dalam ketiga cluster. Hasilnya menunjukkan bahwa setiap cluster memiliki jumlah anggota yang berbeda, mencerminkan variasi perilaku pembelian pelanggan dalam dataset.
Untuk memahami lebih dalam karakteristik tiap cluster, dihitung nilai rata-rata variabel berikut: 1. total_transaksi, 2. total_quantity, 3. total_spending, 4. rata_rata_harga.
Cluster 1: pelanggan dengan frekuensi transaksi rendah dan pengeluaran relatif kecil.
Cluster 2: pelanggan dengan pembelian menengah baik dari sisi kuantitas maupun pengeluaran.
Cluster 3: pelanggan dengan total pengeluaran dan frekuensi transaksi tertinggi (pelanggan bernilai tinggi).
Visualisasi menggunakan fviz_cluster menunjukkan pemisahan yang cukup jelas antar cluster. Setiap titik mewakili pelanggan, dan cluster digambarkan dengan ellipse yang menunjukkan area penyebaran setiap kelompok. Visualisasi ini membantu memperkuat interpretasi bahwa ketiga cluster memang memiliki karakteristik yang berbeda, baik dari segi jumlah pembelian maupun total pengeluaran.
Hasil analisis menunjukkan bahwa metode K-Means berhasil mengelompokkan pelanggan pada Online Retail Dataset ke dalam tiga segmentasi utama berdasarkan pola transaksi mereka. Dengan menggunakan variabel seperti total pengeluaran, frekuensi transaksi, dan kuantitas pembelian, K-Means mampu mengidentifikasi perbedaan perilaku di antara pelanggan.
Pembahasan utama dari hasil clustering adalah sebagai berikut: 1. Cluster pelanggan bernilai rendah: Cluster ini mencakup pelanggan dengan transaksi sedikit, pembelian kuantitas rendah, dan pengeluaran minimal. Kelompok ini dapat dianggap sebagai pelanggan biasa atau pelanggan yang tidak sering berbelanja. 2. Cluster pelanggan menengah: Pelanggan dalam cluster ini memiliki tingkat pembelian yang moderat. Mereka bertransaksi cukup sering dan memberikan kontribusi stabil terhadap penjualan. Cluster ini potensial untuk ditingkatkan melalui strategi upselling dan retensi. 3. Cluster pelanggan bernilai tinggi: Kelompok ini merupakan pelanggan penting karena memiliki total pembelian, frekuensi transaksi, dan pengeluaran tertinggi. Mereka merupakan target ideal untuk program loyalitas atau penawaran eksklusif.
Dengan hasil cluster seperti ini, perusahaan retail dapat meningkatkan efektivitas strategi pemasaran, memberikan penawaran yang lebih personal, serta mengoptimalkan pengelolaan hubungan pelanggan. Segmen pelanggan bernilai tinggi bisa diprioritaskan untuk retensi, sementara pelanggan bernilai rendah dapat diberikan promosi untuk meningkatkan aktivitas pembelian. Secara keseluruhan, penggunaan analisis multivariat K-Means terbukti efektif untuk membantu memahami struktur perilaku pelanggan dan mendukung pengambilan keputusan berbasis data.
Berdasarkan hasil analisis menggunakan metode K-Means pada Online Retail Dataset, diperoleh beberapa kesimpulan sesuai dengan rumusan masalah yang telah dirumuskan sebelumnya:
Jumlah cluster optimal yang digunakan dalam segmentasi pelanggan adalah tiga cluster: Penentuan jumlah cluster diperoleh melalui metode Elbow yang menunjukkan titik siku (elbow point) pada k = 3, sehingga jumlah tersebut dianggap paling representatif dalam menggambarkan variasi perilaku pelanggan.
Metode K-Means berhasil mengelompokkan pelanggan berdasarkan pola transaksi mereka: Dengan menggunakan variabel total transaksi, total kuantitas pembelian, total pengeluaran, dan rata-rata harga, proses clustering memberikan pengelompokan yang terstruktur. Setiap pelanggan dikelompokkan berdasarkan kemiripan perilaku pembelian setelah melalui tahap pembersihan data, pembentukan variabel agregat, dan standarisasi.
Setiap cluster yang terbentuk memiliki karakteristik pelanggan yang berbeda: Hasil perhitungan rata-rata variabel pada tiap cluster menunjukkan bahwa: Cluster pertama berisi pelanggan dengan aktivitas pembelian rendah, Cluster kedua mencerminkan pelanggan dengan tingkat pembelian menengah, dan Cluster ketiga terdiri dari pelanggan bernilai tinggi dengan frekuensi transaksi, kuantitas pembelian, dan total pengeluaran tertinggi.
Perbedaan karakteristik ini menunjukkan bahwa segmentasi pelanggan melalui analisis K-Means memberikan informasi yang bermanfaat untuk memahami perilaku konsumen dan dapat menjadi dasar dalam pengambilan keputusan strategi pemasaran yang lebih efektif.
Dillon, W. R., & Goldstein, M. (1984). Multivariate analysis: Methods and applications. John Wiley & Sons.
Hair, J. F., Black, W. C., Babin, B. J., & Anderson, R. E. (2019). Multivariate data analysis (8th ed.). Cengage Learning.
Johnson, R. A., & Wichern, D. W. (2018). Applied multivariate statistical analysis (7th ed.). Pearson.
MacQueen, J. (1967). Some methods for classification and analysis of multivariate observations. In Proceedings of the Fifth Berkeley Symposium on Mathematical Statistics and Probability (Vol. 1, pp. 281–297). University of California Press.
Rencher, A. C., & Christensen, W. F. (2012). Methods of multivariate analysis (3rd ed.). Wiley.
Tan, P.-N., Steinbach, M., & Kumar, V. (2019). Introduction to data mining (2nd ed.). Pearson.
Kotler, P., & Keller, K. L. (2016). Marketing management (15th ed.). Pearson.
UCI Machine Learning Repository. (n.d.). Online retail data set. University of California, Irvine.
Kaggle. (n.d.). Online Retail Data Set from UCI ML Repo. Retrieved from https://www.kaggle.com/