Deskripsi Kasus

Sebuah lembaga pendampingan ODHA bermaksud untuk melakukan pemetaan terhadap kondisi klien-kliennya mengenai persepsi yang mereka rasakan selama menjadi klien pendampingan. Ada sebanyak 100 klien yang didampingi, dan dari setiap klien dicatat 7 (tujuh) variabel persepsi sebagai berikut:

Ingin dilakukan analisis clustering untuk mengidentifikasi pengelompokan klien berdasarkan persepsinya sehingga dapat dicarikan pendekatan yang lebih baik untuk masing-masing klien.

Data tersimpan pada file “FHI-cluster.csv”

Import Data ke R dan melihat karakteristiknya

Berikut ini proses mengimport data menjadi data frame dengan nama klien

klien <- read.csv("D:/FHI-cluster.csv")

Nama-nama variabel dan ukuran data (banyaknya baris dan kolom) dapat ditampilkan dengan perintah berikut

colnames(klien)
## [1] "X1" "X2" "X3" "X4" "X5" "X6" "X7"
dim(klien)
## [1] 100   7

Dapat dilihat bahwa ada 100 baris dan 7 kolom yang ada pada data, dan nama-nama variabelnya adalah X1 hingga X7. Penjelasan mengenai nama-nama variabel telah diberikan sebelumnya.

Menjalankan algoritma k-means

Untuk memperoleh cluster pada data kita dapat mengimplementasikan algoritma k-means menggunakan fungsi kmeans dengan menyebutkan nama dataframe yang memuat data kita dan banyaknya cluster yang akan disusun. Sebagai catatan, dataframe yang dimasukkan pada fungsi kmeans harusnya berisi kolom-kolom yang akan digunakan dan tidak berisi kolom-kolom lain.

Berikut adalah perintah menjalankan algoritma k-means untuk menghasilkan 4 cluster. Hasil dari program disimpan pada objek dengan nama an.cluster.

set.seed(1)
an.cluster <- kmeans(klien, 4)

Jika program di atas dijalankan maka 100 objek dalam dataframe akan dikelompokkan menjadi 4 grup. Kode grup untuk setiap amatan dapat ditampilkan dengan memberikan perintah

an.cluster$cluster
##   [1] 2 1 1 4 3 2 3 3 4 3 1 4 4 1 2 2 2 1 1 4 4 2 3 2 1 2 1 3 4 1 2 1 3 4 1 1 1
##  [38] 2 2 2 4 2 2 4 1 2 3 1 1 2 1 3 1 3 2 1 3 3 4 4 4 3 3 1 2 2 2 4 4 4 1 1 3 4
##  [75] 2 1 1 2 4 4 4 2 3 1 2 2 2 2 3 2 1 1 2 1 1 1 2 4 2 2

Terlihat bahwa amatan pertama masuk dalam cluster 2, amatan kedua dan ketiga masuk dalam cluster 1, amatan keempat masuk ke cluster 4, dan seterusnya. Berapa banyak anggota dari setiap cluster dapat diperoleh dengan cara berikut.

table(an.cluster$cluster)
## 
##  1  2  3  4 
## 30 32 17 21

Informasi yang juga penting untuk diketahui adalah karakteristik setiap cluster. Hal ini dapat dilakukan dengan menampilkan centroid (nilai tengah) dari setiap cluster, dengan cara berikut.

an.cluster$centers
##         X1       X2       X3       X4       X5       X6       X7
## 1 7.200000 3.233333 3.000000 3.000000 3.200000 7.333333 2.933333
## 2 3.125000 7.437500 7.250000 7.093750 3.156250 3.375000 3.031250
## 3 2.294118 5.941176 5.647059 6.294118 2.058824 2.000000 2.588235
## 4 2.666667 2.761905 3.000000 2.857143 7.142857 3.190476 2.428571

Tampak bahwa cluster #1 adalah kelompok klien dengan perasaan stigma (X1) dan takut (X6) yang tinggi. Sedangkan cluster #4 adalah kelompok klien yang sibuk (X5).

Apakah pembentukan 4 cluster ini sudah sesuai? kita dapat mengevaluasinya dengan menghitung koefisien silhouette. Perintah di R yang dapat digunakan adalah seperti di bawah ini

library(cluster)
jarak <- as.matrix(dist(klien))
sil.4 <- mean(silhouette(an.cluster$cluster,dmatrix=jarak)[,3])
print(paste("koef silhouette = ", round(sil.4, 3)))
## [1] "koef silhouette =  0.381"

Secara umum, nilai yang biasa digunakan untuk menyatakan hasil clustering sudah baik adalah SC > 0.5.

Menentukan banyaknya cluster optimal

Kita sudah membahas bahwa dengan 4 cluster kita dapatkan koefisien silhouette sekitar 0.38. Apakah ini yang terbaik? Kita bisa melakukan identifikasi berapa banyak cluster yang optimal untuk data kita dengan mencoba menjalankan algoritma k-means untuk beberapa nilai k dan kemudian menghitung koefisien silhouette-nya. Selanjutnya dapat diidentifikasi berapa banyak cluster yang menghasilkan silhouette paling tinggi.

Program di bawah ini dapat digunakan untuk tujuan di atas.

library(cluster)
jarak <- as.matrix(dist(klien))
evaluasi <- NULL 
for (k in 2:10){
  clustering <- kmeans(klien, centers=k, iter.max=20)
  koef.silh <- mean(silhouette(clustering$cluster,dmatrix=jarak)[,3])
  evaluasi <- rbind(evaluasi, c(k, koef.silh))
}
plot(evaluasi[,1], evaluasi[,2], type="b", xlab="banyaknya cluster", ylab="koefisien silhouette")

Berdasarkan hasil di atas, kita dapat menyimpulkan bahwa banyaknya cluster yang optimal untuk data ini adalah 3 cluster dengan silhouette sekitar 0.55.

Menjalankan k-means dengan 3 cluster

Karena kita sudah menemukan jumlah cluster optimal, maka selanjutnya kita jalankan ulang algoritma k-means dengan 3 cluster.

#membuat 3 cluster
an.cluster <- kmeans(klien, 3)
#centroid dari setiap cluster
an.cluster$centers
##         X1       X2       X3       X4       X5       X6       X7
## 1 2.666667 2.761905 3.000000 2.857143 7.142857 3.190476 2.428571
## 2 2.836735 6.918367 6.693878 6.816327 2.775510 2.897959 2.877551
## 3 7.200000 3.233333 3.000000 3.000000 3.200000 7.333333 2.933333
#banyaknya anggota dari setiap cluster
table(an.cluster$cluster)
## 
##  1  2  3 
## 21 49 30
#memasukkan kode cluster ke dalam data
klien$cluster <- an.cluster$cluster

Perintah di atas sekaligus digunakan untuk menyimpan kode cluster ke dalam dataset kita.

Untuk memudahkan mengidentifikasi karakteristik dari setiap cluster, kita bisa melakukannya secara visual menggunakan biplot dari data centroid. Berikut ini program yang dapat digunakan.

library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(FactoMineR)
centroid <- an.cluster$centers
rownames(centroid) <- c("CL1", "CL2", "CL3")
res.pca <- PCA(centroid,  graph = FALSE)
fviz_pca_biplot(res.pca, repel = TRUE)

Terlihat bahwa Cluster #1 adalah cluster klien yang sibut (skor X5 besar), Cluster #2 adalah kelompok klien yang bosan dan bermasalah dengan lokasi layanan (skor X2, X3, X4 besar), dan Cluster #3 adalah kelompok klien yang khawatir dan takut (skor X1 dan X6 besar).

Menjalankan Algoritma Hierarchical Clustering

Alternatif lain melakukan cluster analysis adalah menggunakan teknik hierarchical clustering. Berikut ini ilustrasi melakukannya di R.

klien <- read.csv("D:/FHI-cluster.csv")
jarak <- dist(klien, method = 'euclidean')
hcluster <- hclust(jarak, method = 'ward.D2')
plot(hcluster)

cut <- cutree(hcluster, k = 3)
#memasukkan kode cluster ke dalam data
klien$cluster <- cut