Packages required:
> # install.packages("readr")
> # install.packages("plotrix")
> # install.packages("ggplot2")
> # install.packages("corrplot")
> # install.packages("factoextra")
> # install.packages("NbClust")
Segmentasi pengunjung adalah salah satu bagian penting dalam berbisnis, khususnya dalam menyusun strategi pemasaran. Mall yang memiliki banyak produk dari berbagai brand sangat perlu mengetahui segmentasi pengunjungnya. Pengelola Mall harus mengetahui dan menyiapkan rancangan produk secara lebih spesifik dan lebih tepat untuk memenuhi kebutuhan setiap pengunjung. Selain itu, peneglola mall dapat memperoleh pemahaman yang lebih mendalam tentang preferensi dan kebutuhan pengunjung serta menemukan segmen pasar yang berharga untuk memaksimalkan keuntungan. Tidak hanya mendapatkan keuntungan maksimal, pengelola mall juga dapat menyusun strategi pemasaran dengan lebih efisien dan minim risiko investasi.
Segmentasi pengunjung mall dapat dilakukan dengan mengklasifikasikannya berdasarkan karakteristik yang sesuai. Salah satu metode yang dapat digunakan adalah K-Means Clustering. Pada analisis ini, setelah pengunjung dibagi menjadi beberapa klaster, dilakukan analisis komponen utama atau PCA (Principal Component Analysis) untuk mempermudah interpretasi dan visualisasi data.
Hasil dari analisis ini dapat memberikan wawasan yang lebih dalam tentang segmentasi pengunjung dan membantu pengelola mall dalam merancang strategi pemasaran yang lebih efektif dan sesuai dengan kebutuhan setiap segmen pengunjung. Penelitian ini dapat menggabungkan keunggulan K-Means Clustering dan PCA untuk memberikan pemahaman yang lebih komprehensif tentang karakteristik pengunjung yang sering datang atau membeli lebih banyak produk dan merancang strategi pemasaran yang lebih baik.
Faktor-faktor demografis paling sering dipakai untuk mengelompokkan konsumen (Chandra & Wijaya, 2006). Hal itu disebabkan oleh kebutuhan, keinginan dan tingkat penggunaan konsumen berhubungan erat dengan variabel demografis. Alasan yang lainnya adalah bahwa variabel demografis lebih mudah diukur jika dibandingkan dengan jenis variabel lainnya. Segmentasi demografis merupakan segmentasi yang mengklasifikasikan konsumen berdasarkan variabel seperti usia, jenis kelamin,siklus hidup keluarga, pendapatan, pekerjaan, pendidikan, agama, ras dan kebangsaan.
Adiana, dkk. (2018) mengatakan bahwa segmentasi konsumen diperlukan untuk mengelompokkan konsumen yang memiliki kesamaan karakteristik. Salah satu metode klastering untuk kasus segmentasi pengunjung mall adalah K-Means Clustering yang mengklasifikasikan data menjadi klaster sebanyak k. Metode ini menggunakan strategi greedy (keserakahan) yang menghasilkan partisi baru dengan mendefinisikan satu nilai pusat k untuk setiap klaster lalu menarik pola ke pusat klaster terdekat (Jain, 2010).
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\).
Dengan menggunakan teknik pengelompokan seperti K-Means Clustering, pengelola mall dapat mengidentifikasi segmen pengunjung potensial yang akan menjadi target pemasaran. Hal ini membuat pengelola mall dapat melakukan pendekatan lebih dalam terhadap pengunjung yang menjadi target pemasaran.
Ada beberapa cara yang digunakan untuk menentukan jumlah klaster dalam K-Means Clustering yaitu menggunakan metode Elbow, Silhouette, dan Gap. Pada analisis ini, digunakan metode silhouette yang menunjukkan k klaster yang paling optimal untuk klastering. Digunakan Silhouette coefficient untuk melihat kualitas dan kekuatan klaster, seberapa baik suatu objek ditempatkan dalam suatu klaster (Furqon dan Widodo, 2017). Nilai k dengan rata-rata rentang Silhouette coefficient tertinggi dipilih menjadi jumlah klaster yang akan membagi data dengan kualitas dan kekuatan terbaik.
Untuk meningkatkan pemahaman tentang segmentasi pengunjung, analisis PCA (Principal Component Analysis) dapat digunakan untuk mempermudah proyeksi dan visualisasi datanya. Analisis PCA atau analisis komponen utama adalah teknik untuk mengurangi dimensi kumpulan data, meningkatkan interpretasi tetapi pada saat yang sama meminimalkan kehilangan informasi (Harahap, dkk, 2021). Hal ini dilakukan karena dalam segmentasi pengunjung, akan banyak faktor yang menjadi dasar klasifikasi akhir. Faktor-faktor tersebut pada dasarnya merupakan atribut atau fitur. Semakin tinggi jumlah fiturnya, semakin sulit mendapatkan model yang akurat. Reduksi dimensi dengan PCA pada segmentasi pengunjung disini akan membantu penyederhanaan model sehingga visualisasi data mudah diproyeksikan. Proporsi kumulatif varian dari variabel independen asal yang dijelaskan oleh k komponen utama minimal 80 persen (Artigue & Smith, 2019).
Data diperoleh menggunakan penelitian kuantitatif dan dinyatakan dalam angka serta dianalisis dengan metode statistika. Penelitian ini dilakukan untuk melihat segmentasi pengunjung mall berdasarkan variabel usia pengunjung, pendapatan tahunan pengunjung (dalam Ribuan USD), dan pengeluaran tahunan pengunjung (dalam Ribuan USD). Selain ketiga variabel tersebut, terdapat variabel gender yang dapat menunjukkan rasio pengunjung mall berdasarkan gender.
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, juga dikenal sebagai analisis keranjang pasar.
> library ("readr")
> library ("plotrix")
> library ("ggplot2")
> library ("corrplot")
> library ("factoextra")
> library ("NbClust")
Masing-masing library memiliki fungsi sebagai berikut. - readr : membaca file csv dari sumber data di kaggle - plotrix : plot khusus dan fungsi aksesori seperti scalling warna, penempatan teks, dan fungsi legend - ggplot2 : membuat grafik secara deklaratif serta memetakan variabel dengan estetika dan dengan detail berdasarkan ‘The Grammar of Graphics’ - corrplot : tampilan grafis dari matriks korelasi dan interval kepercayaannya. - factoextra : menampilkan objek kelas - NbClust : menentukan jumlah klaster dan mengusulkan kepada pengguna skema pengelompokan terbaik
Setelah mengunduh data dari kaggle, input data sebagai berikut.
> library(readr)
> Pengunjung_Mall <- read.csv("Pengunjung_Mall.csv")
> 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”.
Dari file yang diinput, kolom gender terbaca sebagai karakter (chr) saja. Untuk analisis selanjutnya, kolom gender perlu diubah tipe datanya menjadi faktor yaitu “Pria” dan “Wanita”.
> Pengunjung_Mall$Gender <- as.factor(Pengunjung_Mall$Gender)
> head(Pengunjung_Mall)
ID_Pelanggan Gender Usia Pendapatan Pengeluaran
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)
'data.frame': 200 obs. of 5 variables:
$ ID_Pelanggan: int 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 : int 19 21 20 23 31 22 35 23 64 30 ...
$ Pendapatan : int 15 15 16 16 17 17 18 18 19 19 ...
$ Pengeluaran : int 39 81 6 77 40 76 6 94 3 72 ...
Dari hasil yang diperlihatkan diatas, disimpulkan bahwa struktur data gender (jenis kelamin) adalah faktor (kualitatif) sehingga untuk menganalisa variabel ini lebih tepat dengan melihat frekuensi atau persentasi antar faktor 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 menunjukkan nilai rata-rata, minimal, maksimal, kuartil, dan median dari data. Dari summary, dapat dilihat bahwa pengunjung mall lebih banyak wanita daripada pria. Untuk variabel usia, pendapatan, dan pengeluaran terlihat nilai rentang yang cukup besar untuk dilakukan analisis. Pengunjung mall paling muda adalah 18 tahun dan yang paling tua berumur 70 tahun. Rata-rata usia pengunjung berumur 38 tahun. Pendapatan tahunan minimum pengunjung adalah 15 ribu USD dan pendapatan maksimumnya adalah 137 ribu USD. Sebagian besar pengunjung memiliki pendapatan tahunan sekitar 60,56 ribu USD. Sementara pengeluaran tahunan minimum pengunjung adalah 1 ribu USD dan setiap pengunjung menghabiskan maksimal 99 ribu USD dengan rata-rata pengeluaran sebesar 50,2 ribu USD setiap tahunnya.
> 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 Wanita dan Pria",
+ col = c("#3399FF","#FF99CC"))
Karena variabel gender bersifat kategori, maka cukup dengan pie chart terlihat bahwa pengunjung wanita lebih banyak daripada pengunjung pria. Variabel gender dibuat tabel terlebih dahulu, lalu dihitung persentasenya. Pie chart dibuat dengan fungsi pie3D dalam packages plotrix.
> boxplot(Pengunjung_Mall$Usia, col = "#3BB9A0", main = "Boxplot Usia Pengunjung")
Data usia divisualisasikan dengan boxplot yang dibuat dengan fungsi boxplot(data,..). Hasilnya, pengunjung didominasi usia sekitar 30an tahun. Maka, produk-produk yang dijual di mall harus lebih memperhatikan kebutuhan pengunjung umur 30an.
> 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 pendapatan dibuat histogram menggunakan fungsi ggplot dengan rentang bin sebesar 5. Sumbu x bernilai antara 0-150 dengan rentang 20, dan sumbu y bernilai antara 0-50 dengan rentang 5. Plot ini ditambah dengan kurva (fungsi geom_vline) agar dapat terlihat distribusi fungsinya. Plot menunjukkan bahwa data berdistribusi normal dan orang yang berpendapatan tahunan sekitar 60 ribu USD memiliki frekuensi tertinggi.
> 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 sama seperti pendapatan. Berdasarkan histogram dapat dilihat bahwa pengeluaran tahunan tertinggi setiap pengunjung ada dikisaran 40 hinga 60 ribu USD.
Nilai korelasi antar variabel cenderung kecil sehingga dapat disimpulkan setiap variabel memiliki keragaman yang berbeda-beda. Matriks korelasi menampilkan korelasi antar 2 variabel dengan detail, sementara fungsi corrplot menampilkan grafiknya. Khusus dalam pembahasan ini, t.cex atau ukuran tulisan title nya diatur agar cukup terlihat dan tidak 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")
Banyaknya klaster yang perlu dibuat dicari menggunakan metode siluet (Silhouette method). Klaster optimal akan memiliki rata-rata tertinggi.
> 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 cluster yang tepat karena memiliki rata-rata tertinggi. Rata-rata usia, pendapatan, dan pengeluaran pada setiap klaster terlihat pada bagian cluster means
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")
Menurut ketiga grafik visualisasi di atas, segmen pengunjung mall untuk
setiap klaster memiliki karakteristik sebagai berikut.
Cluster 6 dan 2: pengunjung dengan pengeluaran menengah dan juga pendapatan tahunan menengah.
Cluster 1 : pengunjung dengan pendapatan tahunan yang rendah dan pengeluaran tahunan yang tinggi.
Cluster 3 : pengunjung dengan pendapatan tahunan rendah serta pengeluaran tahunan rendah.
Cluster 4 : Cluster ini mewakili pengunjung dengan pendapatan tahunan yang tinggi tetapi pengeluaran tahunannya yang rendah.
Cluster 5 : Cluster ini mewakili pengunjung yang memiliki pendapatan tahunan tinggi dan pengeluaran tahunan tinggi.
Cluster 6 : pengunjung usia tua (45 ke atas) dengan pengeluaran menengah.
Cluster 5 : pengunjung usia muda (25-32) dengan pengeluaran tinggi.
Cluster 1 dan 4: pengunjung usia paling dominan (30-60) dengan pengeluaran yang tinggi dan rendah.
Cluster 3 : menunjukkan pengunjung usia tua (45 keatas) dengan pengeluaran rendah.
Cluster 2 : menunjukkan pengunjung usia muda (40 kebawah) dengan pengeluaran menengah.
Cluster 1 dan 3: pengunjung pendapatan rendah dibawah USD 50 ribu pertahun Usia muda dan tua.
Cluster 2 dan 6: pengunjung pendapatan menengah dan usia lebih kecil dari 40 dan lebih besar dari 45.
Cluster 4 dan 5: pengunjung pendapatan tinggi dan usia lebih besar dari 45 dan lebih kecil 40.
> 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 dari variabel usia, pendapaan, dan pengeluaran menghasilkan 3 komponen. 2 komponen utama sudah cukup untuk menjelaskan 89,2% model. Maka cukup digunakan 2 komponen saja.
> #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 digunakan analisis PCA, maka klaster yang terbentuk dapat
disederhanakan seperti visualisasi di atas dengan karakteristik setiap
klaster sebagai berikut.
Analisis menunjukkan bahwa pengunjung dengan pendapatan menengah cenderung memiliki pengeluaran yang menengah. Lalu, terdapat klaster dengan pengeluaran tinggi tetapi pendapatannya rendah dengan usia muda. Di sisi lain, pengunjung dengan usia tua memiliki pendapatan menengah dan tinggi namun pengeluarannya cenderung rendah. Pengunjung dengan usia 30an cocok menjadi target pemasaran karena selain memiliki frekuensi tertinggi di antara pengunjung mall, pendapatan dan pengeluarannya pun cenderung tinggi.
Melalui K-Means Clustering yang diperjelas dengan analisis PCA, pengelola mall dapat memahami pengunjungnya dengan lebih baik agar dapat mengambil keputusan pemasaran dan pemasangan produk yang tepat. Menurut parameter gender, wanita lebih sering mengunjungi mall. Adapun menurut usianya, pengunjung berusia 30an merupakan target pemasaran yang tepat dan harus dimaksimalkan memenuhi kebutuhannya agar didapatkan hasil yang maksimal.
Adiana, B. E., Soesanti, I., & Permanasari, A. E. (2018). Analisis segmentasi pelanggan menggunakan kombinasi RFM model dan teknik clustering. Jurnal Terapan Teknologi Informasi, 2(1), 23-32.
Artigue, H., & Smith, G. (2019). The Principal Problem With Principal Components Regression. Cogent Mathematics & Statistics, 6(1).
Chandra, G. A., & Wijaya, S. (2006). Analisa Segmentasi Penentuan Target Dan Posisi Pasar Pada Restoran Steak Dan Grill Di Surabaya. Jurnal Manajemen Perhotelan, 2(2).
Furqon, M. T., & Widodo, A. W. (2017). Implementasi Metode Improved K-Means untuk Mengelompokkan Titik Panas Bumi. Jurnal Pengembangan Teknologi Informasi dan Ilmu Komputer, 1(11), 1270-1276.
Harahap, M., Lubis, Y., & Situmorang, Z. (2021). Analisis Pemasaran Bisnis dengan Data Science: Segmentasi Kepribadian Pelanggan berdasarkan Algoritma K-Means Clustering. Data Sciences Indonesia (DSI), 1(2), 76-88.
Jain, A. K. (2010). Data clustering: 50 years beyond K-means. Pattern recognition letters, 31(8), 651-666.
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.