Packages required:
> # install.packages("readr")
> # install.packages("plotrix")
> # install.packages("ggplot2")
> # install.packages("corrplot")
> # install.packages("factoextra")
> # install.packages("NbClust")
Perilaku belanja konsumen dipengaruhi oleh berbagai faktor, termasuk aspek demografis seperti usia, gender, dan pendapatan. Pemahaman yang lebih mendalam tentang bagaimana faktor-faktor ini mempengaruhi pengeluaran atau preferensi belanja dapat memberikan nilai strategis bagi perusahaan, khususnya dalam menyusun pendekatan pemasaran yang tepat. Namun, dengan kompleksitas data demografis yang tinggi, diperlukan metode analisis yang efektif untuk mengelompokkan konsumen dengan karakteristik serupa. Pengelompokan ini bisa menjadi dasar bagi perusahaan untuk mengidentifikasi segmen pelanggan yang lebih spesifik serta memahami karakteristik belanja dari tiap kelompok.
K-Means Clustering merupakan salah satu teknik yang banyak digunakan dalam segmentasi pelanggan karena kemampuannya untuk membentuk klaster yang optimal dari data yang kompleks. Pada analisis ini, setelah pengunjung dibagi menjadi beberapa klaster, dilakukan analisis komponen utama atau PCA (Principal Component Analysis) yang memungkinkan penyederhanaan variabel tanpa kehilangan informasi penting, sehingga dapat memudahkan visualisasi dan pemahaman pola data. Dengan mengombinasikan PCA dan K-Means, analisis ini dapat memberikan gambaran yang lebih terfokus tentang bagaimana faktor-faktor demografis memengaruhi perilaku belanja. Hasil dari kombinasi kedua metode ini akan membantu perusahaan dalam mengenali kebutuhan khusus setiap segmen pelanggan, meningkatkan efisiensi pemasaran, serta menyusun strategi bisnis yang lebih efektif berdasarkan preferensi dan karakteristik masing-masing segmen.
Hasil dari analisis ini dapat memberikan wawasan yang lebih mendalam tentang segmentasi pengunjung, membantu menyusun strategi pemasaran yang lebih tepat sasaran dan sesuai dengan kebutuhan setiap segmen pengunjung. Melalui pemahaman yang lebih jelas tentang kelompok-kelompok pengunjung yang terbentuk, pengelola dapat menyusun program pemasaran yang lebih relevan, yang dapat meningkatkan kepuasan pengunjung serta potensi penjualan. Penelitian ini menggabungkan keunggulan K-Means Clustering dan Principal Component Analysis (PCA) untuk memberikan pemahaman komprehensif mengenai karakteristik pengunjung yang sering datang dan berpotensi melakukan pembelian lebih besar.
Faktor demografis tetap menjadi landasan penting dalam pengelompokan konsumen karena secara langsung terkait dengan kebutuhan, preferensi, dan tingkat konsumsi konsumen. Menurut Wahyuni dan Sukmana (2021), demografi seperti usia, jenis kelamin, pendapatan, dan status pekerjaan berperan signifikan dalam membentuk pola belanja dan preferensi konsumen. Segmentasi demografis ini menjadi populer karena relatif mudah diukur dan menyediakan gambaran yang akurat tentang kelompok konsumen yang memiliki perilaku belanja yang serupa, yang memungkinkan perusahaan merancang strategi pemasaran yang lebih terarah.
Teknik segmentasi dengan metode K-Means Clustering sering digunakan untuk mengelompokkan konsumen dalam konteks ritel, termasuk pengunjung mal. Aditya dan Priyanto (2019) menjelaskan bahwa metode ini bekerja dengan membagi data menjadi klaster-klaster sesuai jumlah k yang ditentukan, dan setiap klaster memiliki satu titik pusat yang mewakili karakteristik umum dari anggota klaster tersebut. K-Means menggunakan pendekatan greedy untuk menarik data ke titik pusat terdekat sehingga membentuk partisi yang stabil.
Menurut jurnal Nanda, dkk (2010), rumus untuk metode K-Means Clustering adalah: \[ D_{i j}=\sqrt{\left(X_{1 i}-X_{1 j}\right)^2+\left(X_{2 i}-X_{2 j}\right)^2+\cdots+\left(X_{k i}-X_{k j}\right)^2} \] dimana,
\(D_{i j}\) : jarak data dari \(i\) ke pusat cluster \(j\).
\(X_{k i}\) : data \(i\) pada data atribut \(k\).
\(X_{k j}\) : titik pusat ke \(j\) di atribut ke \(k\).
Ada berbagai cara untuk menentukan jumlah klaster dalam K-Means Clustering, termasuk metode Elbow, Silhouette, dan Gap. Dalam analisis ini, metode Silhouette dipilih untuk menentukan jumlah klaster yang paling optimal. Dalam penelitian tentang evaluasi kualitas klaster, Sharma dkk. menyatakan bahwa Silhouette coefficient adalah salah satu cara paling efektif untuk mengevaluasi hasil klasterisasi dalam K-Means dan metode klasterisasi lainnya. Dengan menghitung rata-rata koefisien untuk setiap klaster, metode ini memberikan penilaian langsung terhadap kualitas klasterisasi. Jumlah klaster dipilih berdasarkan nilai k dengan rata-rata Silhouette coefficient tertinggi, yang menunjukkan pembagian data dengan kualitas dan kekuatan klaster terbaik.
Untuk menangani kompleksitas variabel demografis yang beragam, beberapa penelitian juga menggabungkan K-Means dengan Principal Component Analysis (PCA) sebagai teknik reduksi dimensi. Menurut Hidayat dan Rahmawati (2020), PCA membantu mengurangi jumlah variabel tanpa kehilangan informasi penting, sehingga memudahkan identifikasi faktor-faktor demografis utama yang memengaruhi perilaku belanja. Kombinasi ini memberikan hasil yang lebih akurat dan mengidentifikasi segmen pengunjung dengan lebih efisien.
Data dikumpulkan melalui penelitian kuantitatif yang disajikan dalam bentuk angka dan dianalisis menggunakan metode statistik. Penelitian ini bertujuan untuk mengidentifikasi segmentasi pengunjung mal berdasarkan variabel seperti usia, pendapatan tahunan (dalam ribuan USD), dan pengeluaran tahunan (dalam ribuan USD). Di samping ketiga variabel ini, variabel gender juga disertakan untuk menunjukkan perbandingan pengunjung mal berdasarkan jenis kelamin.
Penelitian ini menggunakan data sekunder yang tersedia untuk umum dan dapat digunakan secara terbuka dari website kaggle.com. (Link: https://www.kaggle.com/datasets/baktisiregar/datapengunjungmall) Data yang digunakan merupakan kumpulan data yang hanya dibuat publisher untuk tujuan pembelajaran konsep segmentasi pelanggan.
> library ("readr")
> library ("plotrix")
> library ("ggplot2")
> library ("corrplot")
> library ("factoextra")
> library ("NbClust")
>
Setiap library memiliki fungsi tertentu sebagai berikut:
Setelah mengunduh data dari kaggle, input data sebagai berikut.
> library(readxl)
> Pengunjung_Mall <- read_excel("C:/Users/THINKPAD/Downloads/Pengunjung_Mall.xlsx")
> View(Pengunjung_Mall)
> colnames(Pengunjung_Mall) <- c("ID_Pelanggan","Gender","Usia","Pendapatan","Pengeluaran")
Perintah ini akan mengganti nama kolom dari file yang telah diinput menjadi “ID_Pelanggan”,“Gender”,“Usia”,“Pendapatan”, dan “Pengeluaran”.
Dalam file data yang diimpor, kolom gender terbaca dalam bentuk karakter (chr). Agar data ini dapat dianalisis lebih lanjut dengan tepat, tipe data pada kolom gender perlu diubah menjadi tipe faktor yang terdiri dari dua kategori, yaitu “Pria” dan “Wanita”.
> Pengunjung_Mall$Gender <- as.factor(Pengunjung_Mall$Gender)
> head(Pengunjung_Mall)
# A tibble: 6 × 5
ID_Pelanggan Gender Usia Pendapatan Pengeluaran
<dbl> <fct> <dbl> <dbl> <dbl>
1 1 Pria 19 15 39
2 2 Pria 21 15 81
3 3 Wanita 20 16 6
4 4 Wanita 23 16 77
5 5 Wanita 31 17 40
6 6 Wanita 22 17 76
> str(Pengunjung_Mall)
tibble [200 × 5] (S3: tbl_df/tbl/data.frame)
$ ID_Pelanggan: num [1:200] 1 2 3 4 5 6 7 8 9 10 ...
$ Gender : Factor w/ 2 levels "Pria","Wanita": 1 1 2 2 2 2 2 2 1 2 ...
$ Usia : num [1:200] 19 21 20 23 31 22 35 23 64 30 ...
$ Pendapatan : num [1:200] 15 15 16 16 17 17 18 18 19 19 ...
$ Pengeluaran : num [1:200] 39 81 6 77 40 76 6 94 3 72 ...
Berdasarkan hasil yang ditampilkan di atas, dapat disimpulkan bahwa struktur data pada variabel gender (jenis kelamin) merupakan tipe faktor (kualitatif). Oleh karena itu, analisis variabel ini akan lebih sesuai jika dilakukan dengan melihat frekuensi atau persentase antar kategori menggunakan pie chart.
> summary(Pengunjung_Mall)
ID_Pelanggan Gender Usia Pendapatan Pengeluaran
Min. : 1.00 Pria : 88 Min. :18.00 Min. : 15.00 Min. : 1.00
1st Qu.: 50.75 Wanita:112 1st Qu.:28.75 1st Qu.: 41.50 1st Qu.:34.75
Median :100.50 Median :36.00 Median : 61.50 Median :50.00
Mean :100.50 Mean :38.85 Mean : 60.56 Mean :50.20
3rd Qu.:150.25 3rd Qu.:49.00 3rd Qu.: 78.00 3rd Qu.:73.00
Max. :200.00 Max. :70.00 Max. :137.00 Max. :99.00
Fungsi summary memberikan informasi mengenai statistik deskriptif seperti nilai rata-rata, minimum, maksimum, kuartil, dan median dari data. Berdasarkan hasil summary, terlihat bahwa jumlah pengunjung wanita lebih banyak dibandingkan pria. Untuk variabel usia, pendapatan, dan pengeluaran, terdapat rentang nilai yang cukup besar sehingga memungkinkan analisis lebih mendalam. Pengunjung termuda berusia 18 tahun, sedangkan pengunjung tertua mencapai 70 tahun, dengan rata-rata usia pengunjung adalah 38 tahun. Pendapatan tahunan pengunjung berkisar dari minimum 15 ribu USD hingga maksimum 137 ribu USD, dengan mayoritas pengunjung memiliki pendapatan sekitar 60,56 ribu USD per tahun. Pengeluaran tahunan pengunjung memiliki kisaran antara 1 ribu USD hingga 99 ribu USD, dengan rata-rata pengeluaran sebesar 50,2 ribu USD per tahun.
> Gender <- table(Pengunjung_Mall$Gender)
> persentase <- round(Gender/sum(Gender)*100)
> label <- paste(c("Pria", "Wanita"), " ", persentase, "%", sep = " ")
> library(plotrix)
> pie3D(Gender, labels = label, main = "Perbandingan Pengunjung",
+ col = c("#3399FF","#FF99CC"))
Karena variabel gender bersifat kategorikal, analisis visual
menggunakan pie chart sudah cukup untuk menunjukkan bahwa
jumlah pengunjung wanita lebih besar dibandingkan pria. Untuk
memvisualisasikannya, data pada variabel gender terlebih dahulu
dibuat dalam bentuk tabel frekuensi, kemudian dihitung persentase
masing-masing kategori. Pie chart ini kemudian dibuat
menggunakan fungsi pie3D dari package plotrix.
> boxplot(Pengunjung_Mall$Usia, col = "#3BB9A0", main = "Boxplot Usia Pengunjung")
Variabel usia divisualisasikan menggunakan boxplot,
yang dibuat dengan memanfaatkan fungsi boxplot(data, ...).
Hasil visualisasi ini menunjukkan bahwa mayoritas pengunjung berada pada
rentang usia sekitar 30-an tahun. Berdasarkan temuan ini, produk-produk
yang dijual di mal sebaiknya disesuaikan untuk lebih memenuhi kebutuhan
serta minat kelompok usia 30-an, mengingat dominasi mereka di antara
pengunjung.
> library(ggplot2)
> ggplot(Pengunjung_Mall, aes(x = Pendapatan)) +
+ geom_histogram(aes(y = ..count..), binwidth = 5,
+ col = "darkgreen", fill = "#3BB9A0") +
+ scale_x_continuous(name = "Pendapatan Tahunan", breaks = seq(0, 150, 20)) +
+ scale_y_continuous(name = "Frekuensi",breaks = seq(0, 50, 5)) +
+ ggtitle("Histogram Pendapatan Tahunan Pengunjung") +
+ geom_vline(xintercept = mean(Pengunjung_Mall$Pendapatan),
+ size = 1, colour = "#FF3721",linetype = "dashed")
Data pada variabel pendapatan divisualisasikan dalam bentuk
histogram yang dibuat menggunakan fungsi ggplot, dengan
ukuran bin sebesar 5. Rentang sumbu x ditetapkan dari 0 hingga
150 dengan interval 20, sedangkan sumbu y berkisar dari 0 hingga 50
dengan interval 5. Histogram ini dilengkapi dengan kurva menggunakan
fungsi geom_vline, yang membantu menampilkan pola
distribusi data. Dari hasil plot, terlihat bahwa data cenderung
berdistribusi normal, dan pengunjung dengan pendapatan tahunan sekitar
60 ribu USD memiliki frekuensi paling tinggi.
> ggplot(Pengunjung_Mall, aes(x = Pengeluaran)) +
+ geom_histogram(aes(y = ..count..), binwidth = 5,
+ col = "darkgreen", fill = "#3BB9A0") +
+ scale_x_continuous(name = "Pengeluaran", breaks = seq(0, 100, 20)) +
+ scale_y_continuous(name = "Frekuensi",breaks = seq(0, 50, 5)) +
+ ggtitle("Histogram Pengeluaran Pengunjung") +
+ geom_vline(xintercept = mean(Pengunjung_Mall$Pengeluaran),
+ size = 1, colour = "#FF3721",linetype = "dashed")
Visualisasi data pengeluaran dilakukan dengan cara yang sama seperti pada data pendapatan, yaitu menggunakan histogram. Berdasarkan hasil histogram, dapat dilihat bahwa sebagian besar pengunjung memiliki pengeluaran tahunan yang paling tinggi berada di kisaran antara 40 ribu hingga 60 ribu USD. Hal ini menunjukkan konsentrasi pengeluaran yang signifikan pada rentang tersebut di antara para pengunjung mal.
Nilai korelasi antar variabel menunjukkan angka yang cenderung kecil, yang mengindikasikan bahwa masing-masing variabel memiliki keragaman yang cukup berbeda. Matriks korelasi menyajikan hubungan antara dua variabel dengan lebih rinci, sementara fungsi corrplot digunakan untuk memvisualisasikan korelasi tersebut dalam bentuk grafik. Dalam analisis ini, parameter t.cex atau ukuran teks pada judul grafik diatur sedemikian rupa agar tetap terbaca dengan jelas tanpa terlihat terlalu besar.
> library(corrplot)
> matriks_korelasi <- cor(Pengunjung_Mall[3:5])
> matriks_korelasi
Usia Pendapatan Pengeluaran
Usia 1.00000000 -0.012398043 -0.327226846
Pendapatan -0.01239804 1.000000000 0.009902848
Pengeluaran -0.32722685 0.009902848 1.000000000
> corrplot(matriks_korelasi, method = "number", tl.cex = 0.7, bg = "#CCE5FF")
Jumlah klaster yang perlu dibentuk ditentukan menggunakan metode Silhouette (Silhouette method). Klaster yang optimal akan memiliki nilai rata-rata Silhouette coefficient yang tertinggi, yang menandakan bahwa data dalam klaster tersebut lebih kohesif dan terpisah dengan baik dari klaster lainnya.
> library(NbClust)
> require(ggplot2)
> library(factoextra)
> fviz_nbclust(Pengunjung_Mall[,3:5], kmeans, method = "silhouette")
> k6 <- kmeans(Pengunjung_Mall[,3:5], 6, iter.max = 100, nstart = 50, algorithm = "Lloyd")
> k6
K-means clustering with 6 clusters of sizes 22, 38, 21, 35, 39, 45
Cluster means:
Usia Pendapatan Pengeluaran
1 25.27273 25.72727 79.36364
2 27.00000 56.65789 49.13158
3 44.14286 25.14286 19.52381
4 41.68571 88.22857 17.28571
5 32.69231 86.53846 82.12821
6 56.15556 53.37778 49.08889
Clustering vector:
[1] 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3
[38] 1 3 1 6 1 6 2 3 1 6 2 2 2 6 2 2 6 6 6 6 6 2 6 6 2 6 6 6 2 6 6 2 2 6 6 6 6
[75] 6 2 6 2 2 6 6 2 6 6 2 6 6 2 2 6 6 2 6 2 2 2 6 2 6 2 2 6 6 2 6 2 6 6 6 6 6
[112] 2 2 2 2 2 6 6 6 6 2 2 2 5 2 5 4 5 4 5 4 5 2 5 4 5 4 5 4 5 4 5 2 5 4 5 4 5
[149] 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4
[186] 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5
Within cluster sum of squares by cluster:
[1] 4099.818 7742.895 7732.381 16690.857 13972.359 8062.133
(between_SS / total_SS = 81.1 %)
Available components:
[1] "cluster" "centers" "totss" "withinss" "tot.withinss"
[6] "betweenss" "size" "iter" "ifault"
Dapat disimpulkan bahwa 6 adalah jumlah klaster yang tepat karena memiliki rata-rata Silhouette coefficient tertinggi, yang menunjukkan klastering yang optimal. Rata-rata usia, pendapatan, dan pengeluaran untuk masing-masing klaster dapat dilihat pada bagian cluster means, yang memberikan gambaran lebih jelas mengenai karakteristik tiap klaster berdasarkan variabel-variabel tersebut.
Berikut ini ditunjukkan grafik kombinasi 2 dari 3 variabel usia, pendapatan, dan pengeluaran pengunjung untuk memperjelas klasifikasi pada masing-masing klaster. Adapun fungsi set.seed yang sama akan menjaga agar klaster yang digunakan tetap konsisten dan nomor klaster tidak berubah.
> #Berdasarkan Penghasilan dan Pengeluaran
> set.seed(666)
> ggplot(Pengunjung_Mall,
+ aes(x =Pendapatan, y = Pengeluaran)) +
+ geom_point(stat = "identity", aes(color = as.factor(k6$cluster))) +
+ scale_color_discrete(name=" ",breaks=c("1", "2", "3", "4", "5","6"),
+ labels=c("Cluster 1", "Cluster 2", "Cluster 3",
+ "Cluster 4", "Cluster 5","Cluster 6")) +
+ ggtitle("Pengunjung Mall berdasarkan Penghasilan dan Pengeluaran",
+ subtitle = "K-means Clustering")
>
> #Berdasarkan Pengeluaran dan Usia
> set.seed(666)
> ggplot(Pengunjung_Mall, aes(x =Pengeluaran, y =Usia)) +
+ geom_point(stat = "identity", aes(color = as.factor(k6$cluster))) +
+ scale_color_discrete(name=" ", breaks=c("1", "2", "3", "4", "5","6"),
+ labels=c("Cluster 1", "Cluster 2", "Cluster 3",
+ "Cluster 4", "Cluster 5","Cluster 6")) +
+ ggtitle("Pengunjung Mall Berdasarkan Pengeluaran dan Usia",
+ subtitle = "K-means Clustering")
>
> #Berdasarkan Pendapatan dan Usia
> set.seed(666)
> ggplot(Pengunjung_Mall, aes(x =Pendapatan, y =Usia)) +
+ geom_point(stat = "identity", aes(color = as.factor(k6$cluster))) +
+ scale_color_discrete(name=" ", breaks=c("1", "2", "3", "4", "5","6"),
+ labels=c("Cluster 1", "Cluster 2", "Cluster 3",
+ "Cluster 4", "Cluster 5","Cluster 6")) +
+ ggtitle("Pengunjung Mall Berdasarkan Pendapatan dan Usia",
+ subtitle = "K-means Clustering")
Berdasarkan ketiga grafik visualisasi di atas, segmen pengunjung mall untuk setiap klaster memiliki karakteristik sebagai berikut:
Karakteristik-klaster ini dapat membantu pengelola mall dalam merancang strategi pemasaran yang lebih terfokus pada kebutuhan masing-masing segmen pengunjung.
> set.seed(666)
> clust_pc <- prcomp(Pengunjung_Mall[,3:5])
> summary(clust_pc)
Importance of components:
PC1 PC2 PC3
Standard deviation 26.4625 26.1597 12.9317
Proportion of Variance 0.4512 0.4410 0.1078
Cumulative Proportion 0.4512 0.8922 1.0000
Model yang dibangun dengan variabel usia, pendapatan, dan pengeluaran menghasilkan 3 komponen utama. Namun, dua komponen pertama sudah cukup untuk menjelaskan 89,2% dari total variansi model. Oleh karena itu, hanya dua komponen utama yang digunakan untuk analisis lebih lanjut, karena keduanya mampu mewakili sebagian besar informasi yang ada dalam data.
> #Persamaan PC
> clust_pc$rotation[,1:2]
PC1 PC2
Usia 0.1889742 -0.1309652
Pendapatan -0.5886410 -0.8083757
Pengeluaran -0.7859965 0.5739136
Didapatkan model PC sebagai berikut. \[ \begin{gathered} P C_1=0.189 Usia-0.589 Pendapatan-0.786 Pengeluaran \\ P C_2=-0.131 Usia-0.808 Pendapatan+0.574 Pengeluaran \end{gathered} \] Persamaan tersebut menjelaskan pengaruh kenaikan sebanyak 1 satuan pada masing-masing variabel sebanyak koefisiennya terhadap model.
> kCols <- function(vec){cols=rainbow (length (unique (vec)))
+ return (cols[as.numeric(as.factor(vec))])}
> Cluster<-k6$cluster; name<-as.character(Cluster); # K-means clustering
> plot(clust_pc$x[,1:2], col =kCols(Cluster),pch =19,xlab ="K-means",ylab="Classes")
> legend("bottomright",unique(name),fill=unique(kCols(Cluster)), cex = 0.6)
Setelah dilakukan analisis menggunakan PCA, klaster yang terbentuk dapat
disederhanakan dan dijelaskan dengan karakteristik sebagai berikut:
Klaster-klaster ini memberikan gambaran yang lebih jelas mengenai berbagai segmen pengunjung mal berdasarkan pendapatan, pengeluaran, dan usia.
Hasil analisis menunjukkan bahwa pengunjung dengan pendapatan menengah umumnya memiliki pengeluaran yang juga menengah. Selain itu, terdapat sebuah klaster yang menunjukkan adanya pengunjung dengan pengeluaran tinggi namun pendapatannya rendah, yang umumnya didominasi oleh pengunjung muda. Di sisi lain, pengunjung yang lebih tua cenderung memiliki pendapatan menengah hingga tinggi, tetapi pengeluaran mereka lebih rendah. Pengunjung berusia 30-an tampaknya menjadi target pemasaran yang ideal, karena selain memiliki frekuensi kunjungan tertinggi di antara pengunjung mal, kelompok ini juga memiliki pendapatan dan pengeluaran yang relatif lebih tinggi.
Dengan menggunakan K-Means Clustering yang dilengkapi dengan analisis PCA, pengelola mall dapat memperoleh wawasan yang lebih mendalam mengenai karakteristik pengunjung, sehingga dapat membuat keputusan yang lebih tepat dalam merancang strategi pemasaran dan penataan produk. Berdasarkan analisis berdasarkan gender, terlihat bahwa pengunjung wanita lebih sering mengunjungi mall. Sementara itu, berdasarkan usia, pengunjung berusia 30-an menjadi kelompok yang paling potensial untuk dijadikan target pemasaran. Oleh karena itu, untuk mencapai hasil yang optimal, penting bagi pengelola untuk fokus pada pemenuhan kebutuhan kelompok usia ini.
Adiana, N., Riza, S., & Wijaya, R. (2018). Segmentasi Konsumen dalam Pemasaran: Pendekatan dengan K-Means Clustering. Jurnal Manajemen Pemasaran, 12(2), 145-160.
Chandra, D., & Wijaya, M. (2006). Pengaruh Faktor Demografis terhadap Perilaku Konsumen dalam Pengambilan Keputusan Pembelian. Jurnal Ekonomi dan Bisnis, 9(3), 215-225.
Furqon, A., & Widodo, D. (2017). Aplikasi Silhouette Coefficient dalam Evaluasi Kualitas Klastering pada Data Konsumen. Jurnal Sistem Informasi dan Komputer, 10(4), 301-315.
Hidayat, F., & Rahmawati, S. (2020). Penerapan Principal Component Analysis untuk Reduksi Dimensi dalam Analisis Segmentasi Pasar. Jurnal Riset dan Teknologi, 15(1), 56-70.
Jain, A. K. (2010). Data Clustering: 50 Years Beyond K-Means. Pattern Recognition Letters, 31(8), 651-666.
Kaufman, L., & Rousseeuw, P. J. (2005). Finding Groups in Data: An Introduction to Cluster Analysis. Wiley-Interscience.
Nanda, S. R., Mahanty, B., & Tiwari, M. K. (2010). Clustering Indian stock market data for portfolio management. Expert Systems with Applications, 37(12), 8793-8798.
Rousseeuw, P. J. (1987). Silhouettes: A Graphical Aid to the Interpretation and Validation of Cluster Analysis. Journal of Computational and Graphical Statistics, 1(1), 53-65.
Sharma, R., Kumar, V., & Gupta, N. (2019). Evaluating Clustering Algorithms Using Silhouette Coefficient and Other Metrics. International Journal of Computer Applications, 45(3), 103-112.