Pendahuluan

Analisis Gerombol (Clustering Analysis) bertujuan untuk menemukan subkelompok yang homogen di antara pengamatan. Dua pendekatan metode penggerombolan yang paling terkenal antara lain:

  1. Analisis Gerombol Berhierarki (Hierarchical Clustering)
  2. Analisis Gerombol Tak Berhierarki (Non-Hierarchical Clustering)

Analisis Gerombol pada Data

Pra-Processing Data

Library

Library yang akan digunakan dalam analisis gerombol ini antara lain :

library(ggplot2)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(ggpubr)
library(FactoMineR)

Import Data

Data yang akan digunakan adalah data pelanggan dari suatu mall. Peubah yang ada antara lain Customer ID atau ID pelanggan, Genre atau jenis kelamin pelanggan, Age atau umur pelanggan, Annual Income atau pendapatan tahunan dalam ribu dolar, dan Spending Score atau nilai yang diberikan oleh mall kepada pelanggan berdasarkan perilaku pelanggan tersebut (meliputi waktu kunjungan, jenis barang yang dibeli, dan banyaknya uang yang dihabiskan dalam belanja) dalam rentang nilai 1-100. Semakin besar nilai Spending Score maka semakin besar pula uang belanja yang digunakan serta menandakan bahwa pelanggan tersebut loyal pada mall.

dataa <- read.table("C:/ICA/Semester 5/PSD/Data Mall_Customer.csv",sep=";", header = T)
tidyr::tibble(dataa)
## # A tibble: 200 x 5
##    CustomerID Genre    Age Annual.Income Spending.Score
##         <int> <chr>  <int>         <int>          <int>
##  1          1 Male      19            15             39
##  2          2 Male      21            15             81
##  3          3 Female    20            16              6
##  4          4 Female    23            16             77
##  5          5 Female    31            17             40
##  6          6 Female    22            17             76
##  7          7 Female    35            18              6
##  8          8 Female    23            18             94
##  9          9 Male      64            19              3
## 10         10 Female    30            19             72
## # ... with 190 more rows

Dalam analisis ini kita dapat mengabaikan peubah id pelanggan dan jenis kelamin sehingga peubah yang digunakan hanya usia, annual income, dan spending score.

data = dataa[,-1:-2]
head(data)
##   Age Annual.Income Spending.Score
## 1  19            15             39
## 2  21            15             81
## 3  20            16              6
## 4  23            16             77
## 5  31            17             40
## 6  22            17             76

Perlu dilakukan scaling data karena peubah yang digunakan memiliki satuan yang berbeda-beda.

data.stdz = scale(data)
apply(data.stdz, 2, mean)
##            Age  Annual.Income Spending.Score 
##  -1.016906e-16  -8.144310e-17  -1.096708e-16
apply(data.stdz, 2, sd)
##            Age  Annual.Income Spending.Score 
##              1              1              1

Analisis Gerombol Berhierarki (Hierarchical Clustering)

Metode ini merupakan pendekatan alternatif yang tidak mengharuskan memilih ataupun berkomitmen pada k (banyaknya gerombol) tertentu. Analisis Gerombol terdiri dari beberapa metode berdasarkan cara perhitungan tingkat kemiripan, yaitu Single Linkage, Average Linkage, Complete Linkage, dan Centroid Linkage.

Jumlah gerombol dapat ditentukan menggunakan beberapa kriteria statistik, misalnya dengan metode Silhoutte dan WSS (within Cluster Sum of Square). Metode Silhoutte menghitung berdasarkan jarak antarpengamatan. Metode ini mengukur seberapa dekat satu observasi dengan observasi lainnya dalam satu gerombol yang sama. Sedangkan WCSS menghitung varian dalam gerombol yang terbentuk. Varians yang lebih kecil di gerombol menunjukkan bahwa gerombol tersebut sesuai.

Metode Silhoutte

sing.linkage <-fviz_nbclust(data.stdz, FUNcluster = hcut, method = "silhouette", hc_method = "single", hc_metric="euclidean")+ggtitle("Single Average")

ave.linkage <- fviz_nbclust(data.stdz, FUNcluster = hcut, method = "silhouette", hc_method = "average", hc_metric="euclidean")+ggtitle("Average Linkage")

comp.linkage <- fviz_nbclust(data.stdz, FUNcluster = hcut, method = "silhouette", hc_method = "complete", hc_metric="euclidean")+ggtitle("Complete Average")

centr.linkage <- fviz_nbclust(data.stdz, FUNcluster = hcut, method = "silhouette", hc_method = "centroid", hc_metric="euclidean")+ggtitle("Centroid Average")

ggarrange(sing.linkage,ave.linkage,comp.linkage,centr.linkage, ncol = 2, nrow = 2)

Semakin banyak gerombol yang terbentuk dengan metode Silhoutte maka semakin menunjukkan bahwa gerombol tersebut sesuai. Dari output di atas, dapat dilihat bahwa Average Linkage dan Complete Linkage menghasilkan jumlah gerombol yang paling banyak dibandingkan metode lainnya, yakni sama-sama sebanyak 5.

Metode WSS

sing.link <- fviz_nbclust(data.stdz,FUNcluster = hcut, method = "wss", hc_method = "single")+ggtitle("Single Linkage")

ave.link <- fviz_nbclust(data.stdz,FUNcluster = hcut, method = "wss", hc_method = "average")+ggtitle("Average Linkage")

comp.link <- fviz_nbclust(data.stdz,FUNcluster = hcut, method = "wss", hc_method = "complete")+ggtitle("Complete Linkage")

centr.link <- fviz_nbclust(data.stdz,FUNcluster = hcut, method = "wss", hc_method = "centroid")+ggtitle("Centroid Linkage")

ggarrange(sing.link,ave.link,comp.link,centr.link, ncol = 2, nrow = 2)

Berdasarkan metode WSS juga jumlah gerombol dipilih berdasarkan garis gerombol yang berbentuk siku (elbow). Pada output di atas, terlihat bahwa varians terkecil terdapat pada metode Average Linkage dan Complete Linkage dengan jumlah gerombol optimum masing-masing sebanyak 5.

Menghitung Korelasi Cophenetic dari Masing-Masing Metode

Untuk mencari metode terbaik dapat menggunakan nilai korelasi cophenetic dari masing-masing metode.

n <- dim(data.stdz)[1]
Data <- data.matrix(data.stdz,1:3)
rownames(Data)=c(1:nrow(Data))
apply(Data, 2, mean)
##            Age  Annual.Income Spending.Score 
##  -1.016906e-16  -8.144310e-17  -1.096708e-16
# Single Linkage
d1 = dist(Data)
hc.sing = hclust(d1, "single")
d2.sing = cophenetic(hc.sing)
cor.sing = cor(d1,d2.sing)

# Average Linkage
d1 = dist(Data)
hc.ave = hclust(d1, "average")
d2.ave = cophenetic(hc.ave)
cor.ave = cor(d1,d2.ave)

# Complete Linkage
d1 = dist(Data)
hc.comp = hclust(d1, "complete")
d2.comp = cophenetic(hc.comp)
cor.comp = cor(d1,d2.comp)
 
# Centroid
d1 = dist(Data)
hc.centr = hclust(d1, "centroid")
d2.centr = cophenetic(hc.centr)
cor.centr = cor(d1,d2.centr)

cor <- data.frame(cor.sing,cor.ave,cor.comp,cor.centr)
cor
##    cor.sing   cor.ave  cor.comp cor.centr
## 1 0.5416452 0.6683198 0.5931023 0.5919521

Metode terbaik dipilih berdasarkan nilai koefisien cophenetic terbesar sehingga berdasarkan output di atas, metode terbaik yang dipilih untuk analisis gerombol adalah metode Average Linkage dengan koefisien sebesar 0.6683.

Selanjutnya, dilakukan analisis pada metode Average Linkage dengan banyaknya gerombol sebesar 5. ### Clustering Average Linkage

h.clust<-eclust(data.stdz,FUNcluster = "hclust",k=5,hc_method = "average",hc_metric="euclidian")
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## i The deprecated feature was likely used in the factoextra package.
##   Please report the issue at <https://github.com/kassambara/factoextra/issues>.
plot(1:200,h.clust$cluster,xlab="Order",ylab="Cluster")

Terlihat bahwa data 1-200 sudah masuk ke dalam 5 gerombol. Urutan data awal cenderung masuk ke dalam gerombol 1 atau 2.

Dendogram Average Linkage

fviz_dend(hclust(dist(data.stdz, method = "euclidean"), method = "average"))

Dari ouput di atas, terlihat visual pengamatan penggerombolan dari metode Average Linkage berupa diagram pohon atau disebut dendogram. Dendogram di atas mengelompokan pelanggan yang terdistribusi cukup merata.

Cluster Plot Average Linkage

fviz_cluster(h.clust)

Dari output di atas, terlihat bahwa nilai dari Dim1 dan Dim2 berturut-turut adalah 44.3% dan 33.3%. Artinya, plot ini mengandung 77.6% dari keseluruhan informasi yang ada pada data pelanggan mall. Terlihat juga bahwa masing-masing cluster cenderung tidak terlalu menumpuk sehingga gerombol sudah cukup baik dalam mengelompokkan data.

Ukuran Kebaikan Metode Analisis Gerombol Hierarki

y <- aggregate(data.stdz,by=list(h.clust$cluster),function(x)sum(scale(x,scale=FALSE)^2))
clusters <- rowSums((y[-1]))
ssw.h <- sum(clusters)
ssw.h
## [1] 176.1383

Nilai pada output di atas adalah nilai total SSW untuk masing-masing gerombol pada hierarchical clustering.

Analisis Gerombol Tak Berhierarki (Non-Hierarchical Clustering)

Metode ini disebut juga dengan ‘K-means’. Metode K-means adalah pendekatan yang sederhana juga elegan untuk mempartisi data pengamatan menjadi sejumlah pengelompokan yang telah ditentukan sebelumnya (sebanyak k). Tujuan partisi ini adalah agar data dikelompokkan ke dalam k gerombol yang berbeda dan tidak tumpang tindih.

Pemilihan Banyaknya Gerombol

fviz_nbclust(data.stdz, FUNcluster = kmeans, method = "wss")

Berdasarkan output di atas, terlihat bahwa gerombol yang membentuk siku berada di angka 5. Banyaknya gerombol yang dipilih untuk analisis k-means adalah 5 berdasarkan metode WSS.

Clustering

kmeans.data<-eclust(data.stdz,FUNcluster = "kmeans",k=5,graph=FALSE)
plot(1:200,kmeans.data$cluster,xlab="Order",ylab="Cluster")

Terlihat bahwa data 1-200 sudah masuk ke dalam 5 gerombol. Urutan data awal cenderung masuk ke dalam gerombol 1 atau 3.

fviz_cluster(kmeans.data)

Dari output di atas, terlihat bahwa nilai dari Dim1 dan Dim2 berturut-turut adalah 44.3% dan 33.3%. Artinya, plot ini mengandung 77.6% dari keseluruhan informasi yang ada pada data pelanggan mall. Terlihat juga bahwa masing-masing cluster cenderung tidak terlalu menumpuk sehingga gerombol sudah cukup baik dalam mengelompokkan data.

Ukuran Kebaikan Metode K-means

Metode penggerombolan yang baik akan menghasilkan gerombol yang sesuai, di mana : 1. Nilai WSS rendah, yang berarti jarak antarpengamatan dalam gerombol yang sama semakin kecil 2. Kesamaan Intra-kelas tinggi 3. Kesamaaan Antar-kelas rendah 4. Rasio BSS/TSS mendekati 1.

# Within Sum of Squares
ssw.k <- kmeans.data$tot.withinss
ssw.k
## [1] 167.8574
# Sum of Squares
ss.k <- kmeans.data$betweenss
ss.k
## [1] 429.1426
# Ratio BSS / TSS
ss.k/kmeans.data$totss
## [1] 0.7188318

Pemilihan Model Terbaik

ss.total <- sum(data.stdz^2)

ssb.h <- ss.total - ssw.h
Fh <- (ssb.h/5)/(ssw.h/194)

ssb.k <- ss.total-(kmeans.data$tot.withinss)
Fk <- (ssb.k/5)/(ssw.k/191)

metode.terbaik <- data.frame("Hierarchical"=Fh, "KMeans"=Fk)
rownames(metode.terbaik)="Nilai Kebaikan Model"
metode.terbaik
##                      Hierarchical   KMeans
## Nilai Kebaikan Model     92.70804 97.66174

Dari output di atas, terlihat bahwa metode K-Means merupakan metode terbaik untuk menggerombolkan data pelanggan karena memiliki nilai kebaikan model yang paling tinggi, yaitu sebesar 97.6617.

Kesimpulan

Analisis gerombol dibedakan menjadi dua jenis, yaitu analisis gerombol berhierarki dan nonhierarki (disebut juga k-means). Dalam analisis gerombol berhierarki, metode terbaik ditentukan berdasarkan nilai koefisien cophenetic terbesar sedangkan dalam analisis k-means ukuran kebaikan model dilihat dari nilai within sum of squares, sum of squares, dan ratio BSS/TSS. Adapun metode terbaik di antara kedua jenis metode analisis gerombol dipilih berdasarkan nilai within sum of squares terbesar. Pemilihan banyaknya gerombol yang terbentuk dapat melalui metode Silhoutte maupun WSS.

Dari hasil analisis di atas, diperoleh metode ‘K-Means’ merupakan metode terbaik untuk menggerombolkan data pelanggan. Interpretasi masing-masing gerombol untuk metode tersebut adalah : 1. Gerombol 1 merupakan pelanggan muda dengan penghasilan besar tetapi spending score yang sedikit. 2. Gerombol 2 merupakan pelanggan tua dengan penghasilan besar tetapi spending score yang sedikit. 3. Gerombol 3 merupakan pelanggan muda dengan penghasilan kecil tetapi spending score yang tinggi. 4. Gerombol 4 merupakan pelanggan berkepala 3 dengan penghasilan sangat besar tetapi spending score yang kecil. 5. Gerombol 5 merupakan pelanggan berkepala 3 dengan penghasilan besar dan spending score yang besar pula. 6. Gerombol 6 merupakan pelanggan muda dengan penghasilan biasa saja dan spending score yang biasa pula. 7. Gerombol 7 merupakan pelanggan tua dengan penghasilan biasa saja dan spending score yang biasa pula. 8. Gerombol 8 merupakan pelanggan tua dengan penghasilan yang sangat rendah dan spending score yang rendah pula. Dengan begitu, dapat disimpulkan bahwa Gerombol 7 yang memiliki frekuensi pelanggan paling banyak perlu menjadi perhatian manajemen dalam pembuatan strategi marketing.

kmeansdata<-aggregate(data.stdz,by=list(cluster=kmeans.data$cluster),FUN=mean)
non.hir <- as.data.frame(table(kmeans.data$cluster))
cbind(kmeansdata,"Frekuensi"=non.hir$Freq)
##   cluster        Age Annual.Income Spending.Score Frekuensi
## 1       1 -0.8117514    -0.3980098     -0.2549218        47
## 2       2  1.1956271    -0.4598275     -0.3262196        58
## 3       3 -0.9719569    -1.3262173      1.1293439        22
## 4       4  0.2211606     1.0805138     -1.2868231        33
## 5       5 -0.4277326     0.9724070      1.2130414        40