Abstrak Penelitian ini bertujuan untuk melakukan segmentasi customer berdasarkan perilaku penggunaan kartu kredit menggunakan beberapa metode clustering, yaitu K-Means, K-Median, DBSCAN, Mean Shift, dan Fuzzy C-Means. Dataset yang digunakan terdiri dari 8950 data dengan 17 variabel numerik yang merepresentasikan aktivitas transaksi customer. Tahapan analisis meliputi preprocessing data, penerapan metode clustering, serta evaluasi kinerja menggunakan silhouette score. Hasil evaluasi kemudian divisualisasikan untuk mempermudah interpretasi karakteristik masing-masing cluster. Hasil penelitian diharapkan dapat memberikan insight yang berguna dalam mendukung pengambilan keputusan bisnis. Kata kunci: Clustering, Kartu Kredit, K-Means, DBSCAN, Segmentasi Customer
BAB 1 Pendahuluan Sektor perbankan saat ini menghadapi tantangan dalam mengelola data transaksi yang masif seiring meningkatnya pembayaran digital. Bank Indonesia mencatat bahwa hingga akhir tahun 2025, volume transaksi kartu kredit mencapai 466,6 juta transaksi dengan nilai total sebesar Rp 422,7 triliun, di mana jumlah kartu yang beredar terus meningkat mencapai 18,77 juta unit. Besarnya data tersebut menuntut strategi pemasaran yang lebih personal melalui segmentasi nasabah yang tepat guna mengidentifikasi perbedaan perilaku transaksi, seperti nasabah yang dominan dalam penarikan tunai (cash advance) dibandingkan nasabah yang aktif dalam pembelanjaan ritel.
Metode analisis multivariat, terutama clustering, menjadi solusi untuk mengelompokkan nasabah berdasarkan kemiripan karakteristik perilaku tanpa memerlukan label data di awal. Penggunaan algoritma seperti K-Means telah menjadi standar dalam segmentasi, namun algoritma lain seperti DBSCAN atau Fuzzy C-Means seringkali diperlukan untuk menangani kompleksitas data yang memiliki outlier atau batas kelompok yang tumpang tindih, sehingga sangat cocok digunakan untuk data bank. Secara garis besar, penelitian ini bertujuan membandingkan lima metode clustering pada Credit Card Dataset untuk menentukan model segmentasi paling optimal guna membantu perbankan memahami profil risiko dan preferensi belanja nasabah secara mendalam.
Berdasarkan latar belakang tersebut, rumusan masalah dalam penelitian ini adalah: 1. Bagaimana karakteristik deskriptif data perilaku nasabah pada Credit Card Dataset? 2. Manakah metode clustering yang paling optimal di antara K-Means, K-Medians, DBSCAN, Mean Shift, dan Fuzzy C-Means berdasarkan evaluasi Silhouette Coefficient? 3. Bagaimana profil segmen nasabah yang terbentuk dari hasil metode clustering terbaik?
Tujuan dari penelitian ini adalah: 1. Mendeskripsikan statistik deskriptif dari variabel transaksi dan penggunaan kartu kredit nasabah. 2. Menentukan metode clustering paling efektif melalui perbandingan performa lima algoritma berbeda. 3. Mengidentifikasi karakteristik unik dari setiap kelompok nasabah pada metode terbaik untuk kebutuhan strategi pemasaran
BAB 2 Metodologi Penelitian A. Penjelasan Dataset Dataset yang digunakan dalam penelitian ini adalah credit card transaction yang diperoleh dari platform kaggle. Link dataset: https://www.kaggle.com/datasets/arjunbhasin2013/ccdata?resource=download Dataset ini berisi ringkasan perilaku penggunaan kartu kredit dari sekitar 8950 pemegang kartu kredit aktif. Data ini mencakup berbagai dimensi perilaku transaksi seperti total pembelian, frekuensi pembayaran, limit kartu kredit, jumlah pembayaran, hingga kebiasaan penarikan tunai. Dataset ini cocok sekali untuk clustering karena memiliki berbagai variabel perilaku nasabah yang bervariatif dan dataset tidak memiliki label.
data <- read.csv("CC GENERAL.csv")
dim(data)
## [1] 8950 18
str(data)
## 'data.frame': 8950 obs. of 18 variables:
## $ CUST_ID : chr "C10001" "C10002" "C10003" "C10004" ...
## $ BALANCE : num 40.9 3202.5 2495.1 1666.7 817.7 ...
## $ BALANCE_FREQUENCY : num 0.818 0.909 1 0.636 1 ...
## $ PURCHASES : num 95.4 0 773.2 1499 16 ...
## $ ONEOFF_PURCHASES : num 0 0 773 1499 16 ...
## $ INSTALLMENTS_PURCHASES : num 95.4 0 0 0 0 ...
## $ CASH_ADVANCE : num 0 6443 0 206 0 ...
## $ PURCHASES_FREQUENCY : num 0.1667 0 1 0.0833 0.0833 ...
## $ ONEOFF_PURCHASES_FREQUENCY : num 0 0 1 0.0833 0.0833 ...
## $ PURCHASES_INSTALLMENTS_FREQUENCY: num 0.0833 0 0 0 0 ...
## $ CASH_ADVANCE_FREQUENCY : num 0 0.25 0 0.0833 0 ...
## $ CASH_ADVANCE_TRX : int 0 4 0 1 0 0 0 0 0 0 ...
## $ PURCHASES_TRX : int 2 0 12 1 1 8 64 12 5 3 ...
## $ CREDIT_LIMIT : num 1000 7000 7500 7500 1200 1800 13500 2300 7000 11000 ...
## $ PAYMENTS : num 202 4103 622 0 678 ...
## $ MINIMUM_PAYMENTS : num 140 1072 627 NA 245 ...
## $ PRC_FULL_PAYMENT : num 0 0.222 0 0 0 ...
## $ TENURE : int 12 12 12 12 12 12 12 12 12 12 ...
colSums(is.na(data))
## CUST_ID BALANCE
## 0 0
## BALANCE_FREQUENCY PURCHASES
## 0 0
## ONEOFF_PURCHASES INSTALLMENTS_PURCHASES
## 0 0
## CASH_ADVANCE PURCHASES_FREQUENCY
## 0 0
## ONEOFF_PURCHASES_FREQUENCY PURCHASES_INSTALLMENTS_FREQUENCY
## 0 0
## CASH_ADVANCE_FREQUENCY CASH_ADVANCE_TRX
## 0 0
## PURCHASES_TRX CREDIT_LIMIT
## 0 1
## PAYMENTS MINIMUM_PAYMENTS
## 0 313
## PRC_FULL_PAYMENT TENURE
## 0 0
data$CUST_ID <- NULL
data$MINIMUM_PAYMENTS[is.na(data$MINIMUM_PAYMENTS)] <-
median(data$MINIMUM_PAYMENTS, na.rm = TRUE)
data$CREDIT_LIMIT[is.na(data$CREDIT_LIMIT)] <-
median(data$CREDIT_LIMIT, na.rm = TRUE)
colSums(is.na(data))
## BALANCE BALANCE_FREQUENCY
## 0 0
## PURCHASES ONEOFF_PURCHASES
## 0 0
## INSTALLMENTS_PURCHASES CASH_ADVANCE
## 0 0
## PURCHASES_FREQUENCY ONEOFF_PURCHASES_FREQUENCY
## 0 0
## PURCHASES_INSTALLMENTS_FREQUENCY CASH_ADVANCE_FREQUENCY
## 0 0
## CASH_ADVANCE_TRX PURCHASES_TRX
## 0 0
## CREDIT_LIMIT PAYMENTS
## 0 0
## MINIMUM_PAYMENTS PRC_FULL_PAYMENT
## 0 0
## TENURE
## 0
K-means K-Means merupakan algoritma unsupervised learning yang bekerja dengan cara mengelompokkan data ke dalam sejumlah cluster berdasarkan kemiripan fitur. Algoritma ini memulai proses dengan menentukan pusat cluster secara acak, kemudian secara iteratif memperbarui posisi pusat cluster berdasarkan rata-rata posisi data dalam masing-masing kelompok hingga konvergen. Kelebihan utama K-Means adalah kesederhanaannya, efisiensi komputasi, dan kemampuannya dalam menangani dataset berukuran besar (Budiyanto, 2025). Walaupun efisien, k-means tetap memiliki kekurangan dimana sangat sensitif terhadap centroid awal dan keberadaan outliers yang dapat memengaruhi nilai rata-rata
K-median K-median merupakan pengembangan dari algoritma K-means yang hadir karena ketidak robustan K-means terhadap nilai outlier. K-median bekerja bekerja dengan cara meminimalkan jarak Manhattan antara titik data dengan pusat cluster (median) yang telah ditentukan. Keunggulan dari K-Medians adalah sifatnya lebih robust terhadap keberadaan outliers dibandingkan dengan K-Means, karena nilai median tidak mudah bergeser oleh nilai ekstrim. Namun, algoritma ini membutuhkan waktu komputasi yang lebih lama karena proses penghitungan median pada setiap iterasi lebih kompleks dibandingkan penghitungan rata-rata.
DBSCAN Density-based Spatial Clustering of Applications with Noise yang disingkat DBSCAN adalah adalah sebuah algoritma clustering yang dikembangkan berdasarkan tingkat kerapatan data (density-based). Dimana algoritma ini menumbuhkan daerah yang memiliki kerapatan tinggi menjadi cluster-cluster, dan menemukan cluster-cluster tersebut pada bentuk bebas dalam sebuah ruang database dengan memanfaatkan noise(Rudianto,2011). Kelebihan paling signifikan dari DBSCAN adalah kemampuannya dalam mendeteksi dan memisahkan titik data yang dianggap sebagai noise secara otomatis. Sedangkan kelemahan dari algoritma terletak pada dataset yang memiliki tingkat kepadatan yang bervariasi karena parameter eps yang tepat akan sangat sulit untuk ditentukan.
Mean Shift Algoritma Mean Shift merupakan suatu teknik pengelompokan data yang memfokuskan pada penemuan titik pusat atau “nodes” melalui sebaran data yang menggunakan metode pergeseran jendela untuk mengidentifikasi wilayah-wilayah dengan tingkat kepadatan data yang tinggi(Aranguren etal., 2025). Algoritma ini tidak memerlukan penentuan jumlah cluster di awal, melainkan ditentukan oleh parameter bandwidth yang mendefinisikan ukuran area pencarian kepadatan. Keunggulan utama Mean Shift adalah kemampuannya dalam menemukan jumlah kelompok secara otomatis dan menangani bentuk cluster yang kompleks atau tidak beraturan. Namun, algoritma ini memiliki kelemahan pada efisiensi waktu komputasi yang sangat tinggi, terutama pada dataset berukuran besar karena proses pergeseran dilakukan setiap titik data secara berulang sampai mendapat titik stasioner.
Fuzzy C-means Fuzzy C-Means Clustering (FCM) adalah salah satu teknik pengelompokan yang merupakan pengembangan dari algoritma K-Means. FCM mengelompokkan data menjadi anggota dari seluruh kelas atau cluster yang terbentuk dengan derajat keanggotaan berkisar antara 0 hingga 1, sehingga hasil pengelompokan tidak bersifat kaku. Tingkat keanggotaan ini menentukan sejauh mana data hadir dalam suatu kelas atau cluster. Kelebihan utama FCM adalah kemampuannya dalam menangani data yang memiliki overlapping yang tinggi yang sering ditemukan pada perilaku nasabah kartu kredit. Kelemahan dari FCM terletak pada sensitivitas pada parameter fuzzifier, nilai optimum lokal, dan nilai outliers.
BAB 3 Hasil dan Pembahasan A. Karakteristik Data Dataset yang digunakan merupakan kartu kredit yang terdiri dari 8950 observasi dengan 17 variabel numerik setelah menghapus variabel identitas (CUST_ID). Variabel tersebut mencerminkan aktivitas transaksi customer, seperti jumlah pembelian, frekuensi transaksi, penggunaan cash advance, serta batas kredit. Penentuan jumlah cluster optimal pada metode K-Means dilakukan menggunakan Elbow Method. Metode ini bertujuan untuk mengidentifikasi jumlah cluster yang paling sesuai dengan melihat perubahan nilai Within-Cluster Sum of Squares (WCSS) terhadap jumlah cluster yang digunakan. Dari grafik yang diperoleh, titik elbow turun signifikan berada pada nilai k=3. Oleh karena itu, jumlah cluster yang digunakan dalam penelitian ini adalah sebanyak 3 cluster. Pemilihan ini dianggap optimal karena mampu memberikan keseimbangan antara kompleksitas model dan kualitas hasil clustering.
data_scaled <- scale(data)
summary(data_scaled)
## BALANCE BALANCE_FREQUENCY PURCHASES ONEOFF_PURCHASES
## Min. :-0.7516 Min. :-3.70306 Min. :-0.46953 Min. :-0.356914
## 1st Qu.:-0.6900 1st Qu.: 0.04904 1st Qu.:-0.45098 1st Qu.:-0.356914
## Median :-0.3320 Median : 0.51805 Median :-0.30044 Median :-0.334021
## Mean : 0.0000 Mean : 0.00000 Mean : 0.00000 Mean : 0.000000
## 3rd Qu.: 0.2352 3rd Qu.: 0.51805 3rd Qu.: 0.05004 3rd Qu.:-0.009056
## Max. : 8.3970 Max. : 0.51805 Max. :22.48225 Max. :24.199714
## INSTALLMENTS_PURCHASES CASH_ADVANCE PURCHASES_FREQUENCY
## Min. :-0.45455 Min. :-0.46676 Min. :-1.22169
## 1st Qu.:-0.45455 1st Qu.:-0.46676 1st Qu.:-1.01407
## Median :-0.35614 Median :-0.46676 Median : 0.02404
## Mean : 0.00000 Mean : 0.00000 Mean : 0.00000
## 3rd Qu.: 0.06366 3rd Qu.: 0.06435 3rd Qu.: 1.06215
## Max. :24.42552 Max. :22.00989 Max. : 1.26977
## ONEOFF_PURCHASES_FREQUENCY PURCHASES_INSTALLMENTS_FREQUENCY
## Min. :-0.6786 Min. :-0.9169
## 1st Qu.:-0.6786 1st Qu.:-0.9169
## Median :-0.3993 Median :-0.4976
## Mean : 0.0000 Mean : 0.0000
## 3rd Qu.: 0.3270 3rd Qu.: 0.9701
## Max. : 2.6733 Max. : 1.5991
## CASH_ADVANCE_FREQUENCY CASH_ADVANCE_TRX PURCHASES_TRX CREDIT_LIMIT
## Min. :-0.6753 Min. :-0.4760 Min. :-0.59176 Min. :-1.2214
## 1st Qu.:-0.6753 1st Qu.:-0.4760 1st Qu.:-0.55153 1st Qu.:-0.7954
## Median :-0.6753 Median :-0.4760 Median :-0.31016 Median :-0.4107
## Mean : 0.0000 Mean : 0.0000 Mean : 0.00000 Mean : 0.0000
## 3rd Qu.: 0.4351 3rd Qu.: 0.1101 3rd Qu.: 0.09213 3rd Qu.: 0.5512
## Max. : 6.8201 Max. :17.5469 Max. :13.81024 Max. : 7.0097
## PAYMENTS MINIMUM_PAYMENTS PRC_FULL_PAYMENT TENURE
## Min. :-0.59865 Min. :-0.36218 Min. :-0.52552 Min. :-4.1225
## 1st Qu.:-0.46627 1st Qu.:-0.28895 1st Qu.:-0.52552 1st Qu.: 0.3607
## Median :-0.30267 Median :-0.22829 Median :-0.52552 Median : 0.3607
## Mean : 0.00000 Mean : 0.00000 Mean : 0.00000 Mean : 0.0000
## 3rd Qu.: 0.05803 3rd Qu.:-0.02409 3rd Qu.:-0.03712 3rd Qu.: 0.3607
## Max. :16.92133 Max. :32.39093 Max. : 2.89329 Max. : 0.3607
install.packages("factoextra")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(factoextra)
## Loading required package: ggplot2
## Welcome to factoextra!
## Want to learn more? See two factoextra-related books at https://www.datanovia.com/en/product/practical-guide-to-principal-component-methods-in-r/
wss <- numeric(10)
for (k in 1:10) {
kmeans_model <- kmeans(data_scaled, centers = k, nstart = 10)
wss[k] <- kmeans_model$tot.withinss
}
## Warning: Quick-TRANSfer stage steps exceeded maximum (= 447500)
## Warning: Quick-TRANSfer stage steps exceeded maximum (= 447500)
plot(1:10, wss, type="b", pch=19,
xlab="Number of Clusters (K)",
ylab="Within Sum of Squares",
main="Elbow Method")
set.seed(123)
kmeans_res <- kmeans(data_scaled, centers = 3, nstart = 25)
kmeans_res$size
## [1] 1252 1592 6106
data_clean <- data
data_scaled <- scale(data_clean)
set.seed(123)
kmeans_res <- kmeans(data_scaled, centers = 3, nstart = 25)
data_clean$cluster <- kmeans_res$cluster
aggregate(. ~ cluster, data = data_clean, mean)
## cluster BALANCE BALANCE_FREQUENCY PURCHASES ONEOFF_PURCHASES
## 1 1 2197.2962 0.9814382 4233.0433 2697.6639
## 2 2 3997.5648 0.9589119 385.7445 249.3551
## 3 3 800.3458 0.8346257 501.9338 250.2237
## INSTALLMENTS_PURCHASES CASH_ADVANCE PURCHASES_FREQUENCY
## 1 1535.8586 455.6035 0.9487009
## 2 136.4671 3870.2915 0.2334496
## 3 252.0316 332.2923 0.4633495
## ONEOFF_PURCHASES_FREQUENCY PURCHASES_INSTALLMENTS_FREQUENCY
## 1 0.6692586 0.7393329
## 2 0.1112212 0.1452328
## 3 0.1305307 0.3447197
## CASH_ADVANCE_FREQUENCY CASH_ADVANCE_TRX PURCHASES_TRX CREDIT_LIMIT PAYMENTS
## 1 0.06282976 1.523163 56.112620 7687.660 4118.0778
## 2 0.44779385 12.408920 5.642588 6686.561 3019.4119
## 3 0.06845561 1.214379 8.584507 3267.912 908.7619
## MINIMUM_PAYMENTS PRC_FULL_PAYMENT TENURE
## 1 1210.7015 0.30107763 11.91693
## 2 1791.4624 0.03323114 11.35490
## 3 523.1099 0.15491204 11.47773
Cluster 1 (Nasabah Premium / Heavy Spenders): Ini adalah kelompok “Sultan”. Mereka memiliki limit kredit tertinggi (CREDIT_LIMIT: 7687) dan menggunakannya untuk berbelanja secara masif (PURCHASES: 4233.04), didominasi oleh pembelian tunai/sekaligus (ONEOFF_PURCHASES: 3269.77). Frekuensi transaksi belanja mereka sangat tinggi (56 kali transaksi), dan mereka rajin melunasi tagihannya (PRC_FULL_PAYMENT: 30.1%).
Cluster 2 (Nasabah Ketergantungan Tarik Tunai / Risiko Gagal Bayar): Kelompok ini memiliki saldo hutang paling besar (BALANCE: 3997.56). Ciri utama mereka adalah sangat jarang belanja (PURCHASES: 385.74) tapi sangat sering dan banyak melakukan tarik tunai (CASH_ADVANCE: 3870.29 dengan frekuensi transaksi tarik tunai mencapai 12.4 kali). Persentase bayar lunas mereka sangat memprihatinkan, hanya 3.3%, menandakan bahwa mereka hanya sanggup membayar tagihan minimum.
Cluster 3 (Nasabah Konservatif / Skala Kecil): Ini adalah kelompok nasabah mayoritas yang sangat berhati-hati dalam menggunakan kartu kreditnya. Saldo hutang (BALANCE), jumlah belanja (PURCHASES), jumlah tarik tunai (CASH_ADVANCE), maupun limit kredit mereka adalah yang paling rendah di antara semua kelompok.
library(cluster)
kmedian_res <- pam(data_scaled, k = 3)
data_clean$cluster_kmedian <- kmedian_res$clustering
aggregate(. ~ cluster_kmedian, data = data_clean, mean)
## cluster_kmedian BALANCE BALANCE_FREQUENCY PURCHASES ONEOFF_PURCHASES
## 1 1 1970.5229 0.8706077 304.1274 240.0402
## 2 2 2170.0223 0.9770865 3722.9337 2473.3694
## 3 3 485.4676 0.8318649 697.4393 145.0658
## INSTALLMENTS_PURCHASES CASH_ADVANCE PURCHASES_FREQUENCY
## 1 64.28942 1534.7129 0.1837498
## 2 1249.95774 686.1336 0.9360998
## 3 552.79655 146.8169 0.7858398
## ONEOFF_PURCHASES_FREQUENCY PURCHASES_INSTALLMENTS_FREQUENCY
## 1 0.10809954 0.0802396
## 2 0.71594856 0.6387192
## 3 0.07700437 0.7182066
## CASH_ADVANCE_FREQUENCY CASH_ADVANCE_TRX PURCHASES_TRX CREDIT_LIMIT PAYMENTS
## 1 0.21220342 5.1330400 3.628745 4255.616 1524.4982
## 2 0.07901759 2.0754098 49.117377 7360.001 3852.2579
## 3 0.02872995 0.5324284 14.867647 3275.932 890.0883
## MINIMUM_PAYMENTS PRC_FULL_PAYMENT TENURE cluster
## 1 957.1420 0.03016068 11.43222 2.683847
## 2 1065.9655 0.26886408 11.85770 1.407213
## 3 515.7917 0.30986858 11.47474 2.940422
Berdasarkan tabel di atas, kita dapat memberikan profil pada masing-masing kelompok pengguna kartu kredit: Cluster 1 (Pengguna Tunai/Berhutang): Kelompok ini memiliki rata-rata transaksi tarik tunai (CASH_ADVANCE: 1534.71) yang cukup tinggi, namun intensitas belanja barang (PURCHASES: 304.12) sangat rendah. Mereka juga memiliki tingkat pelunasan tagihan penuh (PRC_FULL_PAYMENT: 3%) yang paling kecil, mengindikasikan kecenderungan untuk memutar hutang.
Cluster 2 (Pengguna Premium/Aktif): Ini adalah kelompok nasabah premium. Mereka memiliki batas kredit paling besar (CREDIT_LIMIT: 7736) dan rata-rata pengeluaran belanja paling tinggi (PURCHASES: 3722.93), baik untuk pembelian sekaligus maupun cicilan. Frekuensi dan jumlah transaksi mereka jauh mengungguli cluster lain.
Cluster 3 (Pengguna Konservatif/Suka Mencicil): Kelompok ini memiliki saldo (BALANCE) dan batas kredit paling rendah. Meskipun nominal transaksinya kecil, frekuensi cicilan mereka (PURCHASES_INSTALLMENTS_FREQUENCY: 0.718) adalah yang tertinggi, dan tingkat persentase bayar lunas (PRC_FULL_PAYMENT: 30.9%) paling baik di antara ketiganya.
install.packages("dbscan")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(dbscan)
##
## Attaching package: 'dbscan'
## The following object is masked from 'package:stats':
##
## as.dendrogram
kNNdistplot(data_scaled, k = 5)
abline(h = 2, col = "red", lty = 2)
dbscan_res <- dbscan(data_scaled, eps = 2, minPts = 5)
table(dbscan_res$cluster)
##
## 0 1 2
## 599 8346 5
data_clean$cluster_dbscan <- dbscan_res$cluster
aggregate(. ~ cluster_dbscan, data = data_clean, mean)
## cluster_dbscan BALANCE BALANCE_FREQUENCY PURCHASES ONEOFF_PURCHASES
## 1 0 4294.736 0.9286868 4651.0622 3031.342
## 2 1 1364.508 0.8735070 738.8218 416.563
## 3 2 8264.250 1.0000000 5298.0660 1981.172
## INSTALLMENTS_PURCHASES CASH_ADVANCE PURCHASES_FREQUENCY
## 1 1620.7586 3642.3525 0.6989683
## 2 322.5062 788.2971 0.4750725
## 3 3316.8940 0.0000 1.0000000
## ONEOFF_PURCHASES_FREQUENCY PURCHASES_INSTALLMENTS_FREQUENCY
## 1 0.4511946 0.5304255
## 2 0.1843874 0.3521435
## 3 0.5666668 1.0000000
## CASH_ADVANCE_FREQUENCY CASH_ADVANCE_TRX PURCHASES_TRX CREDIT_LIMIT PAYMENTS
## 1 0.3070211 11.459098 51.94992 9428.748 7545.314
## 2 0.1228894 2.661514 11.98215 4135.803 1314.865
## 3 0.0000000 0.000000 106.40000 11720.000 3625.814
## MINIMUM_PAYMENTS PRC_FULL_PAYMENT TENURE cluster cluster_kmedian
## 1 3346.6093 0.2019630 11.22204 1.564274 1.659432
## 2 664.2914 0.1503439 11.53822 2.613468 1.770309
## 3 2624.1779 0.0000000 12.00000 1.000000 2.000000
Berbeda dengan K-Means, DBSCAN memberikan wawasan yang sangat unik karena memisahkan data ekstrim (noise) dari data normal. Berikut adalah profilnya:
Cluster 0 (Noise / Pengguna Ekstrim): Kelompok ini berisi pengguna kartu kredit dengan perilaku yang sangat variatif dan ekstrim. Rata-rata penarikan tunai mereka (CASH_ADVANCE: 3642.35) sangat tinggi, dan pembayaran yang mereka lakukan (PAYMENTS: 7545.31) juga paling besar di antara semuanya. Algoritma DBSCAN mendeteksi mereka sebagai anomali karena transaksinya jauh di atas pengguna rata-rata.
Cluster 1 (Pengguna Mayoritas / Standar): Ini adalah cluster utama yang mewakili mayoritas nasabah dengan profil paling padat. Perilaku mereka cenderung moderat/standar. Rata-rata saldo (BALANCE: 1364.51), belanja (PURCHASES: 738.82), dan limit kredit (CREDIT_LIMIT: 4135.80) mereka berada di tingkat paling wajar.
Cluster 2 (Pengguna “Heavy Installments”): Ini adalah kelompok padat sekunder yang sangat spesifik. Mereka memiliki saldo (BALANCE) dan limit kredit terbesar, serta volume belanja (PURCHASES: 5298.07) yang sangat tinggi. Karakteristik paling menonjol dari kelompok ini adalah mereka tidak pernah menarik tunai sama sekali (CASH_ADVANCE = 0) dan frekuensi pembelian cicilan mereka menyentuh 100% sempurna (PURCHASES_INSTALLMENTS_FREQUENCY = 1.00). Kelompok ini adalah surga bagi bank karena mereka sangat aktif mencicil tanpa gagal (Tenure penuh 12 bulan).
install.packages("meanShiftR")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(meanShiftR)
set.seed(123)
sample_data <- data_scaled[sample(1:nrow(data_scaled), 2000), ]
ms_res <- meanShift(sample_data)
table(ms_res$assignment)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 23 2 6 4 32 2 19 8 709 140 31 1 3 1 40 25 4 6 15 1
## 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
## 3 17 3 16 40 1 1 4 1 12 1 4 2 22 13 1 1 2 16 1
## 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
## 1 2 1 1 49 4 6 2 4 9 2 13 1 3 16 1 9 1 2 2
## 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
## 6 1 1 8 4 3 6 10 2 6 1 1 4 2 1 21 1 1 1 1
## 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
## 1 4 3 6 3 1 6 1 8 1 4 1 1 16 14 1 1 1 1 3
## 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
## 1 1 3 1 1 1 1 1 1 1 14 1 1 1 11 1 1 1 2 2
## 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
## 18 1 1 12 1 1 8 2 1 1 1 2 2 2 1 1 1 1 1 1
## 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
## 1 3 1 4 1 1 1 1 1 1 1 1 16 1 2 1 1 9 5 1
## 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
## 4 1 1 3 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 3
## 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
## 1 1 1 1 1 1 1 5 4 1 8 1 1 1 1 1 3 3 1 5
## 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
## 1 1 1 1 1 1 1 1 1 1 1 1 2 1 4 1 1 1 1 2
## 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
## 1 5 1 1 1 2 1 10 1 1 1 1 1 1 2 1 1 1 1 1
## 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280
## 1 1 1 1 1 1 1 1 1 1 3 1 1 3 1 1 1 1 1 1
## 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
## 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1
## 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320
## 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
## 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
## 1 1 1 1 1 1 1 1 3 1 1 1 1 3 1 1 1 1 1 1
## 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380
## 1 1 1 1 2 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400
## 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 401 402 403 404 405 406 407 408 409 410 411 412 413
## 1 1 1 1 1 1 1 1 1 1 1 1 1
Berdasarkan output distribusi anggota cluster, didapatkan hasil yang sangat unik: Jumlah Cluster yang Terbentuk: Algoritma ini memecah 2000 sampel data menjadi 413 cluster yang berbeda. Distribusi Sangat Timpang (Skewed): Terdapat satu cluster raksasa, yaitu Cluster 9 yang menampung dominasi 709 nasabah. Diikuti oleh beberapa cluster berukuran sedang seperti Cluster 10 (140 nasabah), Cluster 45 (49 nasabah), dan Cluster 15 & 25 (masing-masing 40 nasabah). Sisa ratusan cluster lainnya adalah “Micro-clusters” yang mayoritas hanya berisi 1 hingga 2 orang nasabah saja.
install.packages("e1071")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(e1071)
##
## Attaching package: 'e1071'
## The following object is masked from 'package:ggplot2':
##
## element
fcm_res <- cmeans(data_scaled, centers = 3)
table(fcm_res$cluster)
##
## 1 2 3
## 1064 4524 3362
data_clean$cluster_fcm <- fcm_res$cluster
aggregate(. ~ cluster_fcm, data = data_clean, mean)
## cluster_fcm BALANCE BALANCE_FREQUENCY PURCHASES ONEOFF_PURCHASES
## 1 1 1370.637 0.7877393 765.6158 475.7088
## 2 2 1756.081 0.8392079 212.6551 170.5639
## 3 3 1367.990 0.9568239 2142.1822 1197.0639
## INSTALLMENTS_PURCHASES CASH_ADVANCE PURCHASES_FREQUENCY
## 1 290.72190 915.1487 0.6190647
## 2 42.22267 1428.7124 0.1355990
## 3 945.48244 393.7190 0.9269788
## ONEOFF_PURCHASES_FREQUENCY PURCHASES_INSTALLMENTS_FREQUENCY
## 1 0.2220045 0.40174289
## 2 0.0738987 0.05926577
## 3 0.3692641 0.76327824
## CASH_ADVANCE_FREQUENCY CASH_ADVANCE_TRX PURCHASES_TRX CREDIT_LIMIT PAYMENTS
## 1 0.11538582 2.736842 11.02350 4666.009 1557.886
## 2 0.19915512 4.777851 2.33046 3970.021 1389.388
## 3 0.05526243 1.353361 32.53450 5145.396 2251.177
## MINIMUM_PAYMENTS PRC_FULL_PAYMENT TENURE cluster cluster_kmedian
## 1 752.3566 0.21406708 11.22556 2.833647 2.135338
## 2 847.8936 0.04754567 11.43722 2.710212 1.122458
## 3 870.1778 0.27747832 11.71743 2.224271 2.507139
## cluster_dbscan
## 1 0.9238722
## 2 0.9657383
## 3 0.8935158
Hasil pemisahan menggunakan FCM menghasilkan 3 kelompok dengan karakteristik yang cukup berimbang dan memiliki kemiripan pola dengan K-Means: Cluster 1 (Pengguna Moderat / Transaksi Seimbang): Kelompok ini adalah pengguna kartu kredit rata-rata yang menggunakan kartunya secara seimbang. Mereka melakukan belanja (PURCHASES: 765.62) dan sesekali melakukan tarik tunai (CASH_ADVANCE: 915.15). Tingkat persentase pelunasan tagihan penuh mereka juga berada di tengah-tengah (21.4%). Cluster 2 (Pengguna Tarik Tunai / Risiko Tinggi): Mirip dengan temuan di K-Means, ini adalah kelompok nasabah yang lebih memilih menjadikan kartu kredit sebagai pinjaman dana segar. Transaksi tarik tunai mereka (CASH_ADVANCE: 1428.71) sangat mendominasi dibandingkan belanja barang (PURCHASES: 212.66). Nasabah di kelompok ini memiliki tingkat pelunasan tagihan paling buruk (PRC_FULL_PAYMENT hanya 4.8%). Cluster 3 (Pengguna Aktif Belanja / Shoppers): Ini adalah segmen pengguna kartu kredit yang ideal bagi bank. Frekuensi belanja mereka luar biasa tinggi (PURCHASES_FREQUENCY: 92.7%), dan nominal transaksinya adalah yang terbesar di antara cluster lain (PURCHASES: 2142.18). Sebaliknya, intensitas tarik tunai mereka sangat rendah, dan memiliki tingkat kesanggupan membayar lunas paling baik (27.7%).
C. EVALUASI DAN MEMILIH METODE TERBAIK
set.seed(123)
sample_idx <- sample(1:nrow(data_scaled), 2000)
data_sample <- data_scaled[sample_idx, ]
kmeans_s <- kmeans_res$cluster[sample_idx]
kmedian_s <- kmedian_res$clustering[sample_idx]
fcm_s <- fcm_res$cluster[sample_idx]
db_s <- dbscan_res$cluster[sample_idx]
library(cluster)
# KMeans
sil_kmeans <- silhouette(kmeans_s, dist(data_sample))
mean(sil_kmeans[, 3])
## [1] 0.2563846
# KMedian
sil_kmedian <- silhouette(kmedian_s, dist(data_sample))
mean(sil_kmedian[, 3])
## [1] 0.1499752
# Fuzzy
sil_fcm <- silhouette(fcm_s, dist(data_sample))
mean(sil_fcm[, 3])
## [1] 0.0885775
DBSCAN
db_nonzero <- db_s != 0
sil_dbscan <- silhouette(db_s[db_nonzero], dist(data_sample)[db_nonzero, db_nonzero])
mean(sil_dbscan[, 3])
## [1] 0.4301532
evaluation <- data.frame(
Method = c("K-Means", "K-Median", "Fuzzy C-Means", "DBSCAN"),
Silhouette = c(0.256, 0.149, 0.088, 0.430)
)
library(ggplot2)
ggplot(evaluation, aes(x = Method, y = Silhouette)) +
geom_bar(stat = "identity") +
geom_text(aes(label = round(Silhouette, 3)), vjust = -0.5) +
ggtitle("Perbandingan Metode Clustering berdasarkan Silhouette Score") +
xlab("Metode Clustering") +
ylab("Nilai Silhouette") +
ylim(0, 0.5)
Untuk mengukur seberapa baik kualitas cluster yang dihasilkan oleh
masing-masing algoritma, evaluasi dilakukan menggunakan metrik
Silhouette Score. Nilai Silhouette mengukur dua hal sekaligus: seberapa
dekat sebuah data dengan data lain di dalam cluster yang sama (kohesi),
dan seberapa jauh data tersebut dari cluster tetangganya (separasi).
Rentang nilainya adalah dari -1 hingga 1, di mana nilai yang mendekati 1
menunjukkan pengelompokan yang sangat baik.
Berdasarkan bar chart “Perbandingan Metode Clustering berdasarkan Silhouette Score”, diperoleh hasil pemeringkatan sebagai berikut: DBSCAN: 0.430 (Tertinggi) K-Means: 0.256 K-Median: 0.149 Fuzzy C-Means: 0.088 (Terendah)
Metode Mean Shift tidak diikutsertakan dalam perbandingan visual ini karena mengalami indikasi over-segmentation dengan membentuk 413 micro-clusters, sehingga tidak relevan untuk dibandingkan dengan metode lain yang membentuk 3 cluster utama
Nilai Tinggi pada DBSCAN (0.430): Meskipun DBSCAN mendapatkan skor tertinggi yang secara metrik matematis mengungguli metode lainnya, analisis lebih lanjut pada karakteristik clustering-nya menunjukkan kelemahan praktis. Metode ini cenderung menghasilkan satu cluster utama yang sangat padat dan mengklasifikasikan sejumlah besar data yang bervariasi sebagai pencilan atau noise (Cluster 0). Dalam konteks bisnis, ini kurang optimal untuk segmentasi karena tidak mampu memecah mayoritas nasabah ke dalam kelompok-kelompok profil yang beragam.
Keseimbangan dan Interpretasi K-Means (0.256): K-Means memperoleh skor terbaik kedua setelah DBSCAN dan terbukti secara signifikan lebih baik dari K-Median (0.149). Walaupun skor kohesinya lebih rendah dari DBSCAN (karena algoritma K-Means “dipaksa” menarik dan memasukkan seluruh outliers ke dalam cluster terdekatnya), metode ini secara praktis jauh lebih unggul. K-Means berhasil menghasilkan distribusi cluster yang jauh lebih seimbang dan membagi nasabah menjadi 3 segmen profil yang jelas serta mudah diinterpretasikan.
Nilai Rendah pada Fuzzy C-Means (0.088): FCM mendapatkan skor Silhouette terendah. Hal ini sangat wajar secara teoritis karena FCM adalah metode soft-clustering (sebuah titik data bisa menjadi anggota dari beberapa cluster sekaligus dengan nilai probabilitas). Sifat “batas yang kabur” (fuzziness) ini menyebabkan banyak titik data yang berada di area tumpang tindih (overlap) antar cluster, sehingga metrik Silhouette (yang mengukur ketegasan batas) akan memberikan penalti dan menghasilkan skor yang rendah.
Meskipun secara objektif DBSCAN memiliki nilai Silhouette Score tertinggi, K-Means ditetapkan sebagai metode terbaik secara keseluruhan untuk dataset pengelompokan pengguna kartu kredit ini. DBSCAN dinilai kurang optimal untuk keperluan segmentasi pemasaran karena kecenderungannya menumpuk data mayoritas pada satu cluster utama dan membuang variansi lainnya sebagai noise. Sebaliknya, K-Means sangat direkomendasikan karena terbukti menghasilkan cluster yang lebih proporsional, relevan, dan sangat mudah diinterpretasikan (actionable) untuk merancang strategi bisnis (seperti penargetan nasabah premium, penyesuaian limit kredit, atau penawaran cicilan)
Berikut merupakan visualisasi EDA dari 2 metode clustering terbaik: a. Analisis Visualisasi Metode K-means
library(factoextra)
fviz_cluster(kmeans_res, data = data_scaled)
Berdasarkan hasil visualisasi pada Gambar 1, algoritma K-Means berhasil membagi nasabah ke dalam tiga cluster dengan batas-batas yang cukup jelas. Penggunaan dua komponen utama (Dim1 dan Dim2) mampu merangkum variansi data sebesar 47,6%. Berdasarkan hasil visualisasi cluster 1 yang berwarna merah, mencirikan kelompok nasabah dengan nilai transaksi (Purchases) atau limit kredit (Credit Limit) yang jauh lebih tinggi dibandingkan kelompok lainnya. Sedangkan untuk cluster 2 yang berwarna hijau dan cluster 3 yang berwarna biru terkonsentrasi di area kiri bawah, menunjukkan kelompok mayoritas nasabah yang memiliki saldo dan aktivitas transaksi pada tingkat rendah hingga menengah.
pca_res <- prcomp(data_scaled)
pca_data <- data.frame(pca_res$x[,1:2])
pca_data$cluster <- as.factor(dbscan_res$cluster)
pca_data_clean <- pca_data[pca_data$cluster != 0, ]
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
hull_data <- pca_data %>%
group_by(cluster) %>%
slice(chull(PC1, PC2))
library(ggplot2)
ggplot() +
geom_polygon(data = hull_data,
aes(x = PC1, y = PC2, fill = cluster, group = cluster),
alpha = 0.3) +
geom_point(data = pca_data,
aes(x = PC1, y = PC2, color = cluster),
alpha = 0.6) +
ggtitle("Cluster Plot DBSCAN") +
theme_minimal()
Visualisasi Cluster Plot menggunakan metode DBSCAN pada Gambar 2
menunjukkan karakteristik pengelompokan yang berbasis pada kepadatan
data (density-based). Berbeda dengan metode partisi yang membagi ruang
secara kaku, DBSCAN berhasil mengidentifikasi area dengan kepadatan
tinggi yang direpresentasikan oleh Cluster 1 (hijau) dan Cluster 2
(biru) sebagai kelompok nasabah dengan pola transaksi yang cenderung
serupa atau tipikal. Sementara itu, area luas pada Cluster 0 (merah)
yang menyelimuti titik-titik lainnya mengindikasikan kemampuan algoritma
dalam menjangkau data yang tersebar jauh dari pusat kepadatan utama atau
dianggap sebagai pencilan (outliers). Hal ini membuktikan fleksibilitas
DBSCAN dalam memisahkan kelompok nasabah umum dari nasabah dengan
perilaku transaksi anomali tanpa harus memaksakan jumlah cluster sejak
awal proses analisis.
BAB 4 Kesimpulan dan Saran Kesimpulan: Berdasarkan hasil analisis perbandingan lima metode clustering pada Credit Card Dataset, penelitian ini menyimpulkan bahwa karakteristik data perilaku nasabah kartu kredit sangat bervariatif yang tercermin dari 17 variabel transaksi yang digunakan. Melalui pengujian menggunakan metode Elbow, ditentukan bahwa jumlah pengelompokan yang paling optimal adalah sebanyak tiga cluster. Dari sisi evaluasi performa, meskipun metode DBSCAN memperoleh nilai Silhouette Coefficient tertinggi sebesar 0,430, metode K-Means dengan skor 0,256 ditetapkan sebagai algoritma terbaik untuk tujuan segmentasi bisnis. Hal ini dikarenakan K-Means mampu menghasilkan distribusi kelompok yang lebih proporsional dan mudah diinterpretasikan dibandingkan DBSCAN yang cenderung mengonsolidasikan mayoritas nasabah ke dalam satu kelompok besar dan mengabaikan variansi lainnya sebagai noise. Hasil identifikasi profil pada metode K-Means berhasil memetakan tiga segmen nasabah yang unik. Segmen pertama adalah “Nasabah Premium” yang memiliki limit kredit serta volume belanja tertinggi dengan tingkat pelunasan tagihan yang sangat baik. Segmen kedua dikategorikan sebagai “Nasabah Risiko Tinggi” yang memiliki ketergantungan besar pada fitur tarik tunai (cash advance) dengan saldo hutang tinggi namun kemampuan pelunasan tagihan yang rendah. Sementara itu, segmen ketiga merupakan “Nasabah Konservatif” yang menjadi kelompok mayoritas dengan karakteristik penggunaan kartu kredit yang sangat terbatas baik dari sisi limit maupun volume transaksi. Di sisi lain, metode Mean Shift dan Fuzzy C-Means dinilai kurang efektif untuk dataset ini karena adanya indikasi over-segmentation serta tingkat tumpang tindih (overlap) antar cluster yang sangat tinggi.
Saran: Berdasarkan hasil penelitian yang telah dilakukan, terdapat beberapa saran yang dapat diberikan, yaitu: 1. Penelitian selanjutnya dapat mencoba menggabungkan metode PCA sebelum clustering untuk melihat apakah reduksi dimensi dapat meningkatkan nilai Silhouette Coefficient pada metode berbasis jarak seperti K-Means. 2. Untuk penelitian berikutnya, disarankan melakukan tuning parameter yang lebih mendalam pada algoritma DBSCAN (khususnya nilai epsilon) agar dapat memecah cluster utama menjadi segmen yang lebih spesifik. 3. Pihak manajemen perbankan dapat menggunakan hasil segmentasi ini untuk merancang strategi pemasaran yang personal, seperti program cicilan khusus untuk kelompok konservatif atau pengawasan risiko kredit yang lebih ketat bagi nasabah dengan intensitas tarik tunai yang tinggi.
Daftar Pustaka Abdi, H., & Williams, L. J. (2020). Principal component analysis. Wiley Interdisciplinary Reviews: Computational Statistics, 12(2), e1480. https://doi.org/10.1002/wics.1480 Garson, G. D. (2023). Factor Analysis and Principal Component Analysis: Statistical Associates Blue Book Series. Statistical Associates Publishing. Shrestha, N. (2021). Factor analysis as a tool for survey analysis. American Journal of Applied Mathematics and Statistics, 9(1), 4–11. https://doi.org/10.12691/ajams-9-1-2 UCI Machine Learning Repository. (2024). Student Performance Dataset. https://archive.ics.uci.edu/dataset/320/student+performance James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An Introduction to Statistical Learning: With Applications in R (2nd ed.). Springer. Bezdek, J. C. (1981). Pattern Recognition with Fuzzy Objective Function Algorithms. Springer US. Comaniciu, D., & Meer, P. (2002). Mean shift: A robust approach toward feature space analysis. IEEE Transactions on Pattern Analysis and Machine Intelligence, 24(5), 603-619. Ester, M., Kriegel, H. P., Sander, J., & Xu, X. (1996). A density-based algorithm for discovering clusters in large spatial databases with noise. In Proceedings of the Second International Conference on Knowledge Discovery and Data Mining (KDD-96) (pp. 226-231). Han, J., Kamber, M., & Pei, J. (2011). Data Mining: Concepts and Techniques (3rd ed.). Morgan Kaufmann. Kaufman, L., & Rousseeuw, P. J. (1990). Finding Groups in Data: An Introduction to Cluster Analysis. John Wiley & Sons. Rousseeuw, P. J. (1987). Silhouettes: a graphical aid to the interpretation and validation of cluster analysis. Journal of Computational and Applied Mathematics, 20, 53-65.