Analisis Klaster K-Means

K-Means Clustering

Analisis Klaster

Analisis klaster / cluster analysis adalah suatu analisis statistik yang bertujuan memisahkan objek kedalam beberapa kelompok sifat berbeda antar kelompok yang satu dengan yang lain. Dalam analisis ini tiap kelompoknya nanti bersifat homogen antar anggota kelompoknya. (dikutip dari materi pak prayudho). Untuk penjelasan detailnya bisa di-googling ya!^^

K-Means

Nah pada kesempatan ini kita akan sama-sama belajar salah satu cabang analisis klaster yaitu K-means Clustering. Iya, sesuai namanya menggunakan kata ‘K’ artinya kita akan membentuk banyak klaster sebanyak K kelompok. K-means ini merupakan metode yang paling sederhana dan banyak digunakan untuk memisahkan dataset kedalam ‘k’ kelompok.

Load Package

library(tidyverse)  
library(cluster)    # Algoritma klastering
library(factoextra) # Algoritma klastering dan visualisasi

Data Preparation

Untuk melakukan analisis klaster dengan R, biasanya kriteria data yang harus dipersiapkan adalah sebagai berikut:

  • Row atau baris sebagai nilai observasi, dan coloumn tau kolom sebagai variabel.
  • Jika terdapat data missing harus di hilangkan terlebih dahulu.
  • Data harus di standarisasi supaya satuan tiap variabel sama. Ketika nanti dilakukan profilisasi tiap klasternya data dikembalikan ke satuan semula.

Nah kali ini akan digunakan data USArrest yang berisi data statistik penangkapan per 100.000 data penduduk untuk kasus assault, murder, dan rape pada tiap 50 negara bagian di US pada tahun 1973.

dataclus <- USArrests
str(dataclus)
## 'data.frame':    50 obs. of  4 variables:
##  $ Murder  : num  13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
##  $ Assault : int  236 263 294 190 276 204 110 238 335 211 ...
##  $ UrbanPop: int  58 48 80 50 91 78 77 72 80 60 ...
##  $ Rape    : num  21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...
head(dataclus)
##            Murder Assault UrbanPop Rape
## Alabama      13.2     236       58 21.2
## Alaska       10.0     263       48 44.5
## Arizona       8.1     294       80 31.0
## Arkansas      8.8     190       50 19.5
## California    9.0     276       91 40.6
## Colorado      7.9     204       78 38.7
dataclus1 <- na.omit(dataclus) #untuk menghilangkan data missing
summary(dataclus1)
##      Murder          Assault         UrbanPop          Rape      
##  Min.   : 0.800   Min.   : 45.0   Min.   :32.00   Min.   : 7.30  
##  1st Qu.: 4.075   1st Qu.:109.0   1st Qu.:54.50   1st Qu.:15.07  
##  Median : 7.250   Median :159.0   Median :66.00   Median :20.10  
##  Mean   : 7.788   Mean   :170.8   Mean   :65.54   Mean   :21.23  
##  3rd Qu.:11.250   3rd Qu.:249.0   3rd Qu.:77.75   3rd Qu.:26.18  
##  Max.   :17.400   Max.   :337.0   Max.   :91.00   Max.   :46.00
datafix <- scale(dataclus1) #standarisasi data

Mencari K Optimal Klaster

Pada K-means ini ada pertimbangan untuk dapat menentukan banyak k kelompok yang paling optimal. Pendekatan metode yang paling populer untuk membantu menentukan banyak k optimal adalah:

  • Metode Elbow
  • Metode Silhoette
  • Gap Statistic
fviz_nbclust(datafix, kmeans, method = "wss") # metode elbow

metode elbow menggunakan nilai total wss (whitin sum square) sebagai penentu k optimalnya. Dari gambar keluaran diatas, garis mengalami patahan yang membentuk elbow atau siku pada saat k = 4. Maka dengan menggunakan metode ini diperoleh k optimal pada saat berada di k = 4. Untuk menjadi pembanding, dilakukan uji yang lainnya.

fviz_nbclust(datafix, kmeans, method = "silhouette") # metode silhouette

Pendekatan rata-rata nilai metode silhoutte untuk menduga kualitas dari klaster yang terbentuk. Semakin tinggi nilai rata-rata nya maka akan semakin baik. Berdasarkan hasil keluaran diatas dipeoleh banyak klaster optimal yang terbentuk pada k = 2. Sedangkan opsi keduanya pada k = 4. Karena nilai rata-rata ilhoutte pada k = 2 dan k = 4 merupakan yang tertinggi dari yang lain.

set.seed(123)
gap_stat <- clusGap(datafix, FUN = kmeans, nstart = 25,
                    K.max = 10, B = 50) # metode gap statistic
fviz_gap_stat(gap_stat)

Nilai B adalah jumlah banyaknya sampel. diperoleh hasil k = 4 adalah yang optimal untuk membentuk klaster. Sehingga jika dibandingkan dengan metode sebelumnya maka dapat ditarik keputusan nilai k yang optimal untuk membentuk klaster adalah 4.

Eksekusi K-Means

final <- kmeans(datafix, 4, nstart = 25)
print(final)
## K-means clustering with 4 clusters of sizes 13, 16, 13, 8
## 
## Cluster means:
##       Murder    Assault   UrbanPop        Rape
## 1 -0.9615407 -1.1066010 -0.9301069 -0.96676331
## 2 -0.4894375 -0.3826001  0.5758298 -0.26165379
## 3  0.6950701  1.0394414  0.7226370  1.27693964
## 4  1.4118898  0.8743346 -0.8145211  0.01927104
## 
## Clustering vector:
##        Alabama         Alaska        Arizona       Arkansas     California 
##              4              3              3              4              3 
##       Colorado    Connecticut       Delaware        Florida        Georgia 
##              3              2              2              3              4 
##         Hawaii          Idaho       Illinois        Indiana           Iowa 
##              2              1              3              2              1 
##         Kansas       Kentucky      Louisiana          Maine       Maryland 
##              2              1              4              1              3 
##  Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
##              2              3              1              4              3 
##        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
##              1              1              3              1              2 
##     New Mexico       New York North Carolina   North Dakota           Ohio 
##              3              3              4              1              2 
##       Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
##              2              2              2              2              4 
##   South Dakota      Tennessee          Texas           Utah        Vermont 
##              1              4              3              2              1 
##       Virginia     Washington  West Virginia      Wisconsin        Wyoming 
##              2              2              1              1              2 
## 
## Within cluster sum of squares by cluster:
## [1] 11.952463 16.212213 19.922437  8.316061
##  (between_SS / total_SS =  71.2 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"    
## [5] "tot.withinss" "betweenss"    "size"         "iter"        
## [9] "ifault"

argumen nstart erupakan banyak random set yang akan dipilih. sesuai dengan beberapa referensi terdahulu nilai nstart yang kerap digunakan yaitu 25. Kemudian dari keluaran hasil k-means dengan k = 4 terbentuk klaster 1 sebanyak 13 negara bagian, klaster 2 sebanyak 16 negara bagian, klaster 3 sebanyak 13 negara bagian dan klaster 4 sebanyak 8 negara bagian. Untuk merepresentasikan karakteristik tiap klaster kita dapat menggunakan acuan nilai means tiap kelompok yang terbentuk. Namun sebelumnya kita perlu mengembalikan data yang tadi distandarisasi kedalam bentuk semula, berikut adalah perintahnya:

fviz_cluster(final, data = datafix)

USArrests %>%
  mutate(Cluster = final$cluster) %>%
  group_by(Cluster) %>%
  summarise_all("mean")
## # A tibble: 4 x 5
##   Cluster Murder Assault UrbanPop  Rape
##     <int>  <dbl>   <dbl>    <dbl> <dbl>
## 1       1   3.60    78.5     52.1  12.2
## 2       2   5.66   139       73.9  18.8
## 3       3  10.8    257       76.0  33.2
## 4       4  13.9    244       53.8  21.4

Berdasarkan hasil diatas, maka dapat dilakukan profilisasi tiap kelompok yang terbentuk. Dimana pada klaster 1 merupakan daerah negara bagian yang memiliki tingkat pembunuhannya, penyerangan, dan pemerkosaan paling rendah dari klaster yg lain dengan nilai sebesar. Sedangkan klaster 3 menjadi yang tertinggi dalam hal kasus penyerangan dan pemerkosaannya. Kemudian pada klaster 4 merupakan negara bagian dengan kasus pembunuhan tertinggi.

Yap. sekian postingan kali ini. Mohon dikoreksi jika ada yang kurang tepat. kan masih sama-sama belajar hihi. Semoga sukses kawan semua!


Referensi

[1] https://uc-r.github.io/kmeans_clustering [2] https://prayudho.wordpress.com/2008/12/30/analisis-cluster/

Tidak ada komentar:

Posting Komentar

Terpopuler