Istilah segmentasi pelanggan tentu tidak asing lagi bagi pelaku bisnis. Mengingat segmentasi pelanggan ini bermanfaat untuk menyusun strategi pemasaran yang efektif dengan mengelompokkan konsumen berdasarkan katagori tertentu.
Segmentasi pelanggan adalah aktivitas mengelompokkan pelanggan berdasarkan katagori tertentu seperti perilaku, minat, demografi geografi, loyalitas, transaksi atau lainnya. Tujuan pengelompokkan ini untuk mempermudah bisnis menyusun strategi pemasaran yang lebih efektif.
Penelitian ini bertujuan untuk membuat klaster dari customer-customer berdasarkan karakteristik total_transaksi, total_quantity, dan total_amount. Pada penelitian ini customer akan dikelompokon menggunakan metode K-Means dan K-Medoids.
Hasil peng-klasteran dapat dijadikan sebagai rekomendasi untuk pimpinan dalam menyusun strategi yang lebih efektif.
Pada penelitian ini masih terdapat permasalahan outlier, sedangkan algoritma K-Means sensitive terhadap noise dan outlier, sehingga dikhawatirkan ada masalah yang disebabkan objek dengan nilai besar yang menyimpang dari distribusi data.
# Import library untuk data wrangling
library(tidyverse)
library(dplyr)
# Import library untuk visualisasi
library(factoextra) # Visualisasi hasil clustering
library(gridExtra) # Visualisasi karakteristik cluster
library(GGally) # Correlation matrix
library(ggiraphExtra)
library(sf) # Read data map
library(plotly) # Interactive Plotting
library(Rtsne)
# Machine Learning - Clustering
library(cluster)
library(factoextra)
library(mvnTest)
Data pada penelitian ini berisikan informasi mengenai Usia, Gender, Status, Income, dan Riwayat Transaksi, Quantity, serta Amount pada tahun 2022.
data_cluster <- read.csv("Data/dataset-clustering.csv", sep = ";") %>%
janitor::clean_names()
# Cek struktur data
glimpse(data_cluster)
## Rows: 447
## Columns: 8
## $ customerid <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,…
## $ age <int> 55, 60, 32, 31, 58, 23, 31, 37, 33, 34, 42, 2, 23, 58,…
## $ gender <int> 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, …
## $ marital_status <chr> "Married", "Married", "Married", "Married", "Married",…
## $ income <dbl> 5.12, 6.23, 9.17, 4.87, 3.57, 2.33, 4.57, 5.49, 9.92, …
## $ total_transaksi <int> 17, 13, 15, 10, 7, 10, 17, 14, 10, 14, 7, 16, 19, 12, …
## $ total_quantity <int> 60, 57, 56, 46, 27, 44, 57, 47, 44, 50, 28, 61, 68, 35…
## $ total_amount <int> 623300, 392300, 446200, 302500, 268600, 459100, 498800…
Definisi Variabel:
customerid
: No Unik Customerage
: Usia Customergender
: 0 Wanita, 1 Priamarital_status
: Married, Single (Blm menikah/Pernah
menikah)income
: Pendapatan per bulan dalam jutaan rupiahtotal_transaksi
: Jumlah Transaksi yang dilakukan pada
2022total_quantity
: Jumlah Quantity Produk yang dibeli
selama transaksitotal_amount
: Jumlah Uang yang dibelanjakan selama
transaksiDibagian ini variabel data akan disesuaikan tipe datanya.
data_cluster <- data_cluster %>%
# Ubah type data yang belum sesuai
mutate(gender = as.factor(gender),
marital_status = as.factor(marital_status),
total_amount = as.numeric(total_amount)
)
glimpse(data_cluster)
## Rows: 447
## Columns: 8
## $ customerid <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,…
## $ age <int> 55, 60, 32, 31, 58, 23, 31, 37, 33, 34, 42, 2, 23, 58,…
## $ gender <fct> 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, …
## $ marital_status <fct> Married, Married, Married, Married, Married, Married, …
## $ income <dbl> 5.12, 6.23, 9.17, 4.87, 3.57, 2.33, 4.57, 5.49, 9.92, …
## $ total_transaksi <int> 17, 13, 15, 10, 7, 10, 17, 14, 10, 14, 7, 16, 19, 12, …
## $ total_quantity <int> 60, 57, 56, 46, 27, 44, 57, 47, 44, 50, 28, 61, 68, 35…
## $ total_amount <dbl> 623300, 392300, 446200, 302500, 268600, 459100, 498800…
rownames(data_cluster) <- data_cluster$customerid
head(data_cluster)
Ekplorasi data dilakukan agar kita menjadi lebih paham dengan gambaran awal dari data yang akan digunakan.
data_cluster %>%
is.na() %>%
colSums()
## customerid age gender marital_status income
## 0 0 0 0 0
## total_transaksi total_quantity total_amount
## 0 0 0
Insight :
summary(data_cluster)
## customerid age gender marital_status income
## Min. : 1.0 Min. : 0.00 0:242 Married:341 Min. : 0.000
## 1st Qu.:112.5 1st Qu.:30.00 1:205 Single :106 1st Qu.: 4.175
## Median :224.0 Median :39.00 Median : 7.520
## Mean :224.0 Mean :39.78 Mean : 8.592
## 3rd Qu.:335.5 3rd Qu.:50.50 3rd Qu.:10.810
## Max. :447.0 Max. :72.00 Max. :71.300
## total_transaksi total_quantity total_amount
## Min. : 3.00 Min. :10.00 Min. : 92100
## 1st Qu.: 9.00 1st Qu.:32.00 1st Qu.:271750
## Median :11.00 Median :40.00 Median :354200
## Mean :11.23 Mean :40.93 Mean :362512
## 3rd Qu.:14.00 3rd Qu.:50.00 3rd Qu.:441200
## Max. :21.00 Max. :79.00 Max. :846700
Insight :
Terdapat perbedaan range dari variabel-variabel yang digunakan, hal ini mungkin dikarena oleh perbedaan satuan dari masing-masing variabel. Misalnya age(tahun) akan berbeda range nya dengan total_amount(rupiah).
Terdapat 242 customer bergender wanita dan 205 customer bergender pria, serta 341 customer sudah menikah dan 106 masih single.
Pada variabel age nilai minimumnya adalah 0, artinya ada customer dengan age 0, ini tidak wajar karena tidak mungkin bayi/anak usia 0 melakukan transaksi.
Cek data dengan usia dibawah 19 tahun (Pada Pasal 7 ayat 1 dituliskan bahwa perkawinan hanya diizinkan apabila pria dan wanita sudah mencapai umur 19 tahun)
data_cluster %>%
filter(age < 19)
Insight :
data_cluster <- data_cluster %>%
filter(age >= 18)
# Cek korelasi
ggcorr(data_cluster[,2:8], label = TRUE)
Insight :
Terdapat korelasi yang tinggi dan bersifat positif antara total_transaksi, total_quantity, dan total_amount yaitu sebesar 0.9, artinya jika seorang customer memiliki jumlah transaksi yang tinggi maka total quantity nya akan cenderung memiliki jumlah yang tinggi juga, begitu pula sebaliknya.
Terdapat korelasi yang sedang dan bersifat positif antara age dengan income.
Terdapat korelasi yang lemah dan bersifat positif antara age dengan total_transaksi.
Terdapat beberapa varibel yang tidak memiliki korelasi, nilai korelasi 0, yaitu antara income dengan total_transaksi, total_quantity, dan total_amount artinya tidak ada pengaruh/hubungan antara income seorang customer dengan banyaknya melakukan transaksi. Dan antara age dengan total_quantity dan total_amount artinya tidak ada pengaruh/hubungan antara umur seorang customer dengan banyaknya melakukan transaksi.
Variabel-variabel yang memiliki hubungan perlu diteliti apakah terdapat permasalahan multikolinearitas, multikolinearitas ini berarti terdapat hubungan antara variabel independennya.
Pemeriksaan masalah data yang akan dilakukan pada analasis ini adalah pemeriksaan multikolinearitas dan deteksi outlier.
Pengujian multikolinearitas ini untuk melihat apakah ada variabel yang memberikan informasi yang sama dengan variabel lain atau biasa disebut redundan. Untuk menguji multikolinearitas akan dilihat dari nilai Variance Inflation Factor (VIF). Model dikatakan memiliki multikolinearitas jika nilai VIF > 10 yang mengindikasikan bahwa hasil estimasi yang kurang baik[1]. Berikut adalah rumus untuk menghitung nilai VIF: \[ VIF_k = (1-R_k^2)^{-1} \] Dimana: \(R_k^2\): Koefisien determinasi \(X_k\) dengan variabel lainnya yang ada pada model \(k\): 1, 2,…,p; p adalah jumlah variabel
Adapun selain itu, nilai VIF dapat diperolah dengan mencari nilai diagonal pada matrix korelasi data yang sudah di invers-kan. Berikut adalah perhitungan dengan menggunakan function dari R:
CekVIF <- function(data) {
corr = as.matrix(cor(data))
VIF = diag(solve(corr))
return(VIF)
}
CekVIF(data_cluster[c(2,5,6,7,8)])
## age income total_transaksi total_quantity total_amount
## 1.321106 1.319299 4.774838 6.752583 5.865136
Insight :
Outlier adalah pengamatan yang sangat menyimpang dari pengamatan lain sehingga, menimbulkan kecurigaan yang dihasilkan oleh mekanisme yang berbeda[2].Pengecekan outlier akan dilihat melalui visualisasi dari Box-Plot.
# membagi jendela grafik menajdi 2 baris dan 3 kolom
par(mfrow=c(2,3))
# Looping Box-Plot
type <- c("age", "income", "total_transaksi", "total_quantity", "total_amount")
for (i in type){
boxplot(data_cluster[,i],
main = paste("Variabel", i))
}
Insight :
Untuk variabel age dan total_transaksi tidak terdapat data outlier.
Untuk variabel income, total_quantity dan total_amount terdapat outlier.
Dalam beberapa penelitian outlier diperlakukan dengan cara dibuang. Tapi memperlakukan outlier sebagai noise dapat mengakibatkan hilangnya informasi penting yang tersembunyi[3]. Di banyak bidang, outlier lebih penting daripada data normal, karena dapat menunjukkan perilaku menyimpang atau awal dari pola baru.
Namun demikian pada variabel income terdapat 2 outlier yang sangat besar yang dapat mengakibatkan range dari variabel income menjadi sangat besar. Maka dari itu outlier tersebut akan dikeluarkan..
data_cluster %>%
select(income) %>%
filter(income < 50) %>%
boxplot(main = "Variabel income")
Insight :
data_clean <- data_cluster %>%
filter(income < 50)
rownames(data_clean) <- data_clean$customerid
Selanjutnya akan dilanjutkan kedalam analis clustering dengan pendekatan K-Means Clustering.
Metode K-Means digunakan sebagai alternatif metode klaster untuk data dengan ukuran yang lebih besar. Hal ini dikarenakan metode ini memiliki kecepatan yang lebih tinggi jika dibandingkan dengan metode hirarki. Metode K-Means dapat digunakan untuk menjelaskan algoritma dalam penentuan suatu objek kedalam klaster tertentu berdasarkan rataan terdekat[4]. Dalam prosedur pembentukan K-Means Cluster terdapat langkah-langkah yang dapat dilakukan, antara lain:
Tentukan banyaknya klaster (k) yang akan dibentuk.
Random initialization: meletakkan \(k\) centroid secara random
Cluster assignment: assign masing-masing observasi ke cluster terdekat, berdasarkan perhitungan jarak
Centroid update: menggeser centroid ke rata-rata (means) dari cluster yang terbentuk
Ulangi langkah 3 dan 4 sampai tidak ada observasi yang clusternya berubah lagi
Pada analisis menggunakan metode k-means clustering data yang bisa digunakan hanya data yang bertipe numerical. Maka perlu dipilih terlebih dahulu data yang tipenya numerical.
data_kmeans <- data_clean %>%
select(age, income, total_transaksi, total_quantity, total_amount)
Bertujuan untuk menyamakan skala data atau menghilangkan kontras antar variabel yang memiliki satuan berbeda.
scale_data_kmeans <- scale(data_kmeans)
Menentukan jumlah klaster paling optimum untuk membagi customer. Pada dasarnya nilai k optimum dapat ditentukan sendiri oleh peneliti, selain itu nilai k dapat ditentukan juga menggunakan bantuan grafik Elbow berikut. Dimana k minimum akan didapat ketika grafik sudah tidak bergerak menurun dengan tajam.
set.seed(1000)
fviz_nbclust(x = scale_data_kmeans,
FUNcluster = kmeans,
method = 'wss',
k.max = 10)
RNGkind(sample.kind = "Rounding")
set.seed(1000)
customer_kmeans <- kmeans(x = scale_data_kmeans, centers = 5)
Visualisasi hasil pembagian klaster:
fviz_cluster(object = customer_kmeans, data = scale_data_kmeans)
Insight :
Dari hasil visualisasi nampak jelas bahwa tiap klaster memiliki daerah tertentu yang terpisah dari klaster lain.
Terlihat bahwa klaster 3 dan 5 saling tumpang tindih, namun itu bukan karena wilayah klaster nya sama melainkan keterbatasan dari visualisasi yang ditampilkan, karena hanya dapat menampilkan secara 2 Dimensi.
Hasil clustering menggunakan metode K-Means:
table(customer_kmeans$cluster)
##
## 1 2 3 4 5
## 71 129 95 69 78
Insight :
Klaster 1 berjumlah 71.
Klaster 2 berjumlah 129.
Klaster 3 berjumlah 95.
Klaster 4 berjumlah 69.
Klaster 5 berjumlah 78.
Dengan menggunakan visualisasi data, dapat memudahkan dalam melakukan profiling.
data_kmeans$Cluster <- customer_kmeans$cluster
ggRadar(
data = data_kmeans,
mapping = aes(colours = Cluster),
interactive = T
)
Insight :
Berdasarkan hasil diatas dapat diketahui bahwa karakteristik dari masing-masing klaster adalah sebagai berikut:
Klaster 1: Memiliki nilai total_transaksi, total_quantity dan total_amount relatif tinggi, sedangkan income dan age yang cukup rendah.
Klaster 2: Memiliki nilai total_transaksi, total_quantity dan total_amount sedang, sedangkan income dan age yang rendah.
Klaster 3: Memiliki nilai total_transaksi, total_quantity dan total_amount yang relatif rendah, serta nilai income dan age yang tinggi.
Klaster 4 : Memiliki nilai relatif rendah di semua aspek variabel.
Klaster 5 : Memiliki nilai relatif tinggi di semua aspek variabel.
Selain dengan visualisasi, berikut adalah nilai rata-rata dari masing-masing variabel di tiap cluster:
profil_kmeans <- data_kmeans %>%
group_by(Cluster) %>%
summarise_all(mean)
round(profil_kmeans, 2)
Insight :
Hasil yang didapat tidak berbeda dengan menggunakan visualisasi sebelumnya, dengan menggunakan summarise data karakteristik dari masing-masing klaster dapat dilihat melalui angka sehingga dapat diketahui nilai tertinggi dan terendah secara detail.
kmeans_clustering <- data_clean
kmeans_clustering$Cluster <- customer_kmeans$cluster
Dari hasil analisis dan pembahasan yang telah diuraikan sebelumnya, maka diperoleh kesimpulan sebagai berikut :
Berdasarkan nilai wss diperoleh jumlah klaster untuk kasus ini adalah sebanyak 5. Hal ini diketahui karena penurunan inersia setelah k = 5 tidak lagi signifikan (perubahan nilai nya kecil).
Berdasarkan jumlah k = 5, maka dibuat 5 klaster. Rincian dari ke 5 klaster adalah pada berikut :
ID Customer yang ada di Klaster 1:
kmeans_cluster1 <- kmeans_clustering %>%
arrange(Cluster) %>%
filter(Cluster == 1)
kmeans_cluster1[,"customerid"]
## [1] 1 3 7 8 10 13 19 34 44 46 47 67 72 76 88 89 102 106 108
## [20] 112 115 120 121 127 137 156 157 158 166 167 171 184 189 210 217 218 219 233
## [39] 235 240 245 260 263 276 281 283 299 303 310 319 321 326 329 347 348 365 370
## [58] 374 384 392 393 401 404 416 417 422 423 434 438 443 445
ID Customer yang ada di Klaster 2:
kmeans_cluster2 <- kmeans_clustering %>%
arrange(Cluster) %>%
filter(Cluster == 2)
kmeans_cluster2[,"customerid"]
## [1] 4 6 9 15 17 22 24 30 31 32 36 40 48 51 53 55 57 58
## [19] 66 69 70 75 77 83 87 90 93 103 107 109 114 118 119 122 123 124
## [37] 129 131 135 138 139 142 154 155 163 164 168 169 177 181 183 186 190 191
## [55] 195 196 199 202 207 209 211 213 215 216 221 224 226 229 236 237 239 241
## [73] 243 244 247 248 250 251 252 264 267 268 269 271 273 278 285 287 288 289
## [91] 295 296 298 300 304 305 307 315 332 335 338 339 341 345 350 353 355 358
## [109] 361 362 363 364 366 369 372 380 386 391 395 398 403 408 413 414 424 429
## [127] 431 435 440
ID Customer yang ada di Klaster 3:
kmeans_cluster3 <- kmeans_clustering %>%
arrange(Cluster) %>%
filter(Cluster == 3)
kmeans_cluster3[,"customerid"]
## [1] 5 11 21 26 27 28 33 35 38 41 49 64 68 71 78 80 81 82 91
## [20] 94 98 99 100 111 116 117 125 126 130 134 140 145 148 151 159 161 162 173
## [39] 175 176 182 188 193 197 214 220 223 225 228 249 254 257 258 265 266 274 275
## [58] 279 286 291 294 302 308 312 313 316 317 322 323 328 330 331 333 334 346 351
## [77] 354 359 360 368 373 375 382 388 394 399 402 407 410 418 425 428 433 436 442
ID Customer yang ada di Klaster 4:
kmeans_cluster4 <- kmeans_clustering %>%
arrange(Cluster) %>%
filter(Cluster == 4)
kmeans_cluster4[,"customerid"]
## [1] 25 50 52 56 59 61 65 79 104 110 136 143 144 146 153 170 179 180 185
## [20] 192 194 200 205 208 212 227 230 238 242 253 255 259 261 262 290 292 309 314
## [39] 318 320 324 325 337 343 344 349 367 371 381 383 385 387 389 390 396 397 400
## [58] 405 406 411 412 419 420 421 426 432 437 439 441
ID Customer yang ada di Klaster 5:
kmeans_cluster5 <- kmeans_clustering %>%
arrange(Cluster) %>%
filter(Cluster == 5)
kmeans_cluster5[,"customerid"]
## [1] 2 14 16 18 20 23 29 37 39 42 43 45 54 60 62 63 73 84 85
## [20] 86 92 95 96 97 105 132 133 141 147 149 150 152 160 165 172 174 178 187
## [39] 198 201 203 204 206 222 231 232 234 246 256 270 272 277 280 282 284 293 297
## [58] 301 306 311 327 336 340 342 352 356 357 376 377 378 379 409 415 427 430 444
## [77] 446 447
K-Medoids clustering atau Partitioning Around Medoids (PAM) adalah algoritma clustering yang mirip dengan K-Means. Algoritma yang digunakan dalam program PAM didasarkan pada pencarian objek perwakilan k di antara objek kumpulan data. Pada algoritma K-Medoids, objek perwakilan (centroid) disebut juga medoid dari kelompok (Kaufman dan Rousseeuw, 1987). K-Medoids memiliki kelebihan untuk mengatasi kelemahan pada pada algoritma K-Means yang sensitive terhadap noise dan outlier, yaitu dapat mengatasi objek dengan nilai yang sangat besar yang memungkinkan menyimpang pada dari distribusi data.
Dalam prosedur pembentukan K-Medoid Cluster terdapat langkah-langkah yang dapat dilakukan, antara lain:
Inisialisasikan pusat cluster sebanyak jumlah cluster (k).
Setiap data atau objek dialokasikan ke cluster terdekat menggunakan persamaan ukuran jarak Euclidian Distance.
Random initialization: meletakkan \(k\) medoid baru secara random.
Cluster assignment: Hitung jarak setiap objek yang terdapat pada masing-masing cluster dengan calon medoid baru, Assign masing-masing observasi ke cluster terdekat.
Centroid update: Hitung total simpangan (S) dengan menghitung nilai total jarak baru – total jarak lama. Jika didapatkan S < 0, tukarlah objek dengan data cluster untuk membuat sekumpulan k objek baru sebagai medoid.
. Ulangi langkah 3 sampai dengan 5 hingga tidak terjadi perubahan medoid.
data_kmedoids <- data_clean %>%
select(age, income, total_transaksi, total_quantity, total_amount)
Bertujuan untuk menyamakan skala data atau menghilangkan kontras antar variabel yang memiliki satuan berbeda.
scale_data_kmedoid <- scale(data_kmeans)
Menentukan jumlah klaster paling optimum untuk membagi customer. Pada dasarnya nilai k optimum dapat ditentukan sendiri oleh peneliti, selain itu nilai k dapat ditentukan juga menggunakan bantuan grafik Elbow berikut. Dimana k minimum akan didapat ketika grafik sudah tidak bergerak menurun dengan tajam.
set.seed(1000)
fviz_nbclust(x = scale_data_kmedoid,
FUNcluster = pam,
method = 'wss',
k.max = 10)
RNGkind(sample.kind = "Rounding")
set.seed(1000)
customer_kmedoid <- pam(x = scale_data_kmedoid, k = 5, metric = "euclidean", stand = FALSE)
Visualisasi hasil pembagian klaster:
fviz_cluster(object = customer_kmedoid, data = scale_data_kmedoid)
Insight :
Dari hasil visualisasi nampak jelas bahwa tiap klaster memiliki daerah tertentu yang terpisah dari klaster lain.
Terlihat bahwa klaster 2, 4 dan 5 saling tumpang tindih, namun itu bukan karena wilayah klaster nya sama melainkan keterbatasan dari visualisasi yang ditampilkan, karena hanya dapat menampilkan secara 2 Dimensi.
Hasil clustering menggunakan metode K-Medoids:
table(customer_kmedoid$clustering)
##
## 1 2 3 4 5
## 79 78 121 96 68
Insight :
Klaster 1 berjumlah 79.
Klaster 2 berjumlah 78.
Klaster 3 berjumlah 121.
Klaster 4 berjumlah 96.
Klaster 5 berjumlah 68.
kmedoid_clustering <- data_clean
kmedoid_clustering$Cluster <- customer_kmedoid$clustering
kmedoid_clustering[customer_kmedoid$id.med,c(9,2,5,6,7,8)]
Insight :
Medoid/centroid Klaster 1 adalah Customer dengan ID 112.
Medoid/centroid Klaster 2 adalah Customer dengan ID 62.
Medoid/centroid Klaster 3 adalah Customer dengan ID 307.
Medoid/centroid Klaster 4 adalah Customer dengan ID 258.
Medoid/centroid Klaster 4 adalah Customer dengan ID 50.
Medoid ini bisa menjadi gambaran/perwakilan dari Klaster tersebut, namun agar lebih detail akan dibuatkan visualisasi.
Dengan menggunakan visualisasi data, dapat memudahkan dalam melakukan profiling.
ggRadar(
data = kmedoid_clustering[,2:9],
mapping = aes(colours = Cluster),
interactive = T
)
Insight :
Berdasarkan hasil diatas dapat diketahui bahwa karakteristik dari masing-masing klaster adalah sebagai berikut:
Klaster 1: Memiliki nilai total_transaksi, total_quantity dan total_amount tinggi, sedangkan income dan age yang cukup rendah.
Klaster 2: Memiliki nilai relatif tinggi di semua aspek variabel.
Klaster 3: Memiliki nilai total_transaksi, total_quantity dan total_amount sedang, sedangkan income dan age yang rendah.
Klaster 4 : Memiliki nilai total_transaksi, total_quantity dan total_amount yang relatif rendah, serta nilai income dan age yang tinggi.
Klaster 5 : Memiliki nilai relatif rendah di semua aspek variabel.
Dari hasil analisis dan pembahasan yang telah diuraikan sebelumnya, maka diperoleh kesimpulan sebagai berikut :
Berdasarkan nilai wss diperoleh jumlah klaster untuk kasus ini adalah sebanyak 5. Hal ini diketahui karena penurunan inersia setelah k = 5 tidak lagi signifikan (perubahan nilai nya kecil).
Berdasarkan jumlah k = 5, maka dibuat 5 klaster. Rincian dari ke 5 klaster adalah pada berikut :
ID Customer yang ada di Klaster 1:
kmedoid_cluster1 <- kmedoid_clustering %>%
arrange(Cluster) %>%
filter(Cluster == 1)
kmedoid_cluster1[,"customerid"]
## [1] 1 3 7 8 10 13 19 34 44 46 47 67 72 76 88 89 102 106 108
## [20] 112 114 115 118 120 121 124 127 131 137 156 157 158 166 167 171 184 189 210
## [39] 217 218 219 229 233 235 240 245 247 260 263 264 273 276 281 283 299 303 310
## [58] 319 321 326 329 347 348 365 370 374 384 392 393 401 404 416 417 422 423 434
## [77] 438 443 445
ID Customer yang ada di Klaster 2:
kmedoid_cluster2 <- kmedoid_clustering %>%
arrange(Cluster) %>%
filter(Cluster == 2)
kmedoid_cluster2[,"customerid"]
## [1] 2 14 16 18 20 23 29 37 39 42 43 45 54 60 62 63 73 84 85
## [20] 86 92 95 96 97 105 132 133 141 147 149 150 152 160 165 172 174 178 187
## [39] 198 201 203 204 206 222 231 232 234 246 256 270 272 277 280 282 284 293 297
## [58] 301 306 311 327 336 340 342 352 356 357 376 377 378 379 409 415 427 430 444
## [77] 446 447
ID Customer yang ada di Klaster 3:
kmedoid_cluster3 <- kmedoid_clustering %>%
arrange(Cluster) %>%
filter(Cluster == 3)
kmedoid_cluster3[,"customerid"]
## [1] 4 6 9 15 17 22 24 30 31 32 36 40 48 51 53 55 57 58
## [19] 66 69 70 75 77 83 87 90 93 103 107 109 119 122 123 129 135 138
## [37] 139 142 154 155 163 164 168 169 177 181 183 186 190 191 195 196 199 202
## [55] 207 209 211 213 215 216 221 224 226 236 237 239 241 243 244 248 250 251
## [73] 252 267 268 269 271 278 285 287 288 289 295 296 298 300 304 305 307 315
## [91] 332 335 338 339 341 345 350 353 355 358 361 362 363 364 366 369 372 380
## [109] 386 391 395 398 403 408 413 414 424 429 431 435 440
ID Customer yang ada di Klaster 4:
kmedoid_cluster4 <- kmedoid_clustering %>%
arrange(Cluster) %>%
filter(Cluster == 4)
kmedoid_cluster4[,"customerid"]
## [1] 5 11 21 26 27 28 33 35 38 41 49 61 64 68 71 78 80 81 82
## [20] 91 94 98 99 100 111 116 117 125 126 130 134 140 145 148 151 159 161 162
## [39] 173 175 176 182 188 193 197 214 220 223 225 228 249 254 257 258 265 266 274
## [58] 275 279 286 291 294 302 308 312 313 316 317 322 323 328 330 331 333 334 346
## [77] 351 354 359 360 368 373 375 382 388 394 399 402 407 410 418 425 428 433 436
## [96] 442
ID Customer yang ada di Klaster 4:
kmedoid_cluster5 <- kmedoid_clustering %>%
arrange(Cluster) %>%
filter(Cluster == 5)
kmedoid_cluster5[,"customerid"]
## [1] 25 50 52 56 59 65 79 104 110 136 143 144 146 153 170 179 180 185 192
## [20] 194 200 205 208 212 227 230 238 242 253 255 259 261 262 290 292 309 314 318
## [39] 320 324 325 337 343 344 349 367 371 381 383 385 387 389 390 396 397 400 405
## [58] 406 411 412 419 420 421 426 432 437 439 441
Dari hasil analisis dan pembahasan yang telah diuraikan sebelumnya, Analisis menggunakan metode K-Means dan K-Medoids memberikan hasil yang berbeda.
Klaster yang terbentuk dengan menggunakan metode K-Means dan metode K-Medoids sama, yaitu 5 Klaster.
Baik metode K-Means Klaster dan metode K-Medoids Klaster mampu dengan jelas membedakan klaster dari variabel age, income, total_transaksi, total_quantity, dan total_amount.
Terdapat perbedaan customer di klaster pada kedua metode, dengan:
metode K-Means: Klaster 1 berjumlah 71 customer, Klaster 2 berjumlah 129 customer, Klaster 3 berjumlah 95 customer, Klaster 4 berjumlah 69 customer, dan Klaster 5 berjumlah 78 customer. Sedangkan,
metode K-Medoids: Klaster 1 berjumlah 79 customer, Klaster 2 berjumlah 78 customer, Klaster 3 berjumlah 121 customer, Klaster 4 berjumlah 96 customer, dan Klaster 5 berjumlah 68 customer.
Secara keseluruhan hasil clustering dengan menggunakan metode K-Means dan metode K-Medoids cukup mirip, namun dikarenakan data yang dimiliki terdapat outlier maka direkomendasikan untuk menggunakan metode K-Medoids. Medode K-Medoids memiliki kelebihan untuk mengatasi kelemahan pada algoritma K-Means yang sensitive terhadap noise dan outlier.
Akan memudahkan, apabila kita melihat kembali visualisasi karakteristik dari hasil clustering dengan menggunakan metode K-Medoids
ggRadar(
data = kmedoid_clustering[,2:9],
mapping = aes(colours = Cluster),
interactive = T
)
Insight :
Klaster 1: Merupakan kelompok customer yang paling banyak belanja ini bagus untuk keuntungan bisnis, namun perlu diperhatikan bahwa customer klaster 1 ini memiliki income yang masih kecil dan usia relatif masih muda. Klaster 1 ini masih perlu dikembangkan dengan treatment yang bisa menguntungkan bisnis dan customer, misalnya dengan mengadakan program kemitraan/affiliate. Dengan begitu customer bisa memiliki income lebih tinggi namun tetap bisa loyal berbelanja, dan karena customer pada klaster ini masih muda biasanya akan lebih semangat.
Klaster 2: Merupakan kelompok customer yang memiliki frekuensi belanja tinggi, income tinggi dan usia dewasa. Customer pada klaster ini sangat ideal untuk keberlangsungan bisnis. Maka dari itu, sebaiknya customer di klaster ini perlu dimaintain dengan baik agar tetap loyal dan belanja lebih banyak lagi.
Klaster 3: Customer di kelompok ini mirip dengan customer klaster 1, bedanya frekuensi belanja lebih sedikit. Strategi yang bisa digunakan di klaster 1 mungkin bisa berhasil di klaster 3 ini juga, namun demikian jika diurutkan prioritas nya masih lebih baik fokus di klaster 1.
Klaster 4 : Merupakan kelompok customer yang memiliki frekuensi belanja relatif rendah, namun memiliki income tinggi dan usia dewasa. Klaster 4 ini masih memiliki potensi untuk meningkatkan belanja, secara customer di klaster ini memiliki income yang tinggi. Maka diperlukan stategi untuk menarik minat customer klaster ini untuk berbelanja, misalnya dengan memberikan voucher atau diskon yang menarik.
Klaster 5 : Customer di klaster ini memiliki daya beli rendah dan income rendah, sehingga tidak terlalu berpengaruh terhadap bisnis. Klaster ini bisa menjadi prioritas terakhir apabila ingin dikembangkan.
[1] Jhonson, R.A. and Wichern, D.W. Applied Multivariate Statistical Analysis 6th Edition. New Jersey: Prentice Hill. Inc, 2005.
[2] Montgomery, D. C., Peck, E. A., & Vining, G. G. Introduction to Linear Regression Analysis, 2012.
[3] Hawkins, Douglas M. Identification of outliers. Vol. 11. London: Chapman and Hall, 1980.
[4] Jiang, S. Y., & An, Q. B. Clustering-based outlier detection method, 2008.