K-Means adalah salah satu algoritma clustering / pengelompokan data yang bersifat Unsupervised Learning, yang berarti masukan dari algoritma ini menerima data tanpa label kelas. Tujuan dari metode unsupervised learning salah satunya adalah melakukan clustering, yaitu mengelompokkan data-data dengan karakter mirip.

Tujuan dari k-means sendiri membagi suatu data dalam beberapa cluster (kelompok) sebanyak k, yang dimana jumlah k-nya ditentukan oleh peneliti dan diwakili oleh Mean (Rata-rata). Mean dari setiap cluster diasumsikan sebagai ringkasan yang baik dari setiap observasi dari cluster tersebut. Karakteristik dari algoritma ini adalah :

  1. Memiliki n buah data

  2. Input berupa jumlah data dan jumlah cluster (kelompok)

  3. Pada setiap cluster / kelompok memiliki sebuah centroid yang mempresentasikan cluster tersebut.


Data yang digunakan untuk menerapan k-means adalah data Kemiskinan berdasarkan Dimensi Kualitas Kesehatan dan Kualitas Ekonomi di Jawa Tengah Tahun 2015.

1. Input Data

data=read.delim("clipboard")
data
data=data[,-c(1,2)]

Data tersebut terdiri dari 6 aspek pengukuran sebagai berikut :

  1. X1 (presentase tumah tangga miskin yang luas lantai bangunan tempat tinggalnya kurang dari 32 m2),

  2. X2 (Presentase rumah tangga miskin yang jenis lantai bangunan tempat tinggalnya terbuat dari tanah/kayu berkualitas rendah per kecamatan),

  3. X3 (Presentase rumah tangga miskin yang sumber air minumnya berasal dari sumur/mata air tidak terlindung/sungai per kecamatan),

  4. X4 (Presentase rumah tangga miskin yang tidak mempunyai jenis atap dari genteng per kecamatan),

  5. X5 (Presentase rumah tangga miskin yang tidak sanggup membayar biaya pengobatan di puskesmas per kecamatan),

  6. X6 (Presentase rumah tangga miskin yang menggunakan bahan bakar untuk memasak sehari-hari adalah kayu bakar per kecamatan).


2. Pre-Processing Data

2.1 Cek Variansi Antarvariabel

sapply(data, var)
##         X1         X2         X3         X4         X5         X6 
## 108.042602 383.343478 260.985591   0.672209   3.989998  91.822238

Berdasarkan output tersebut, keenam variabel memiliki rentang variansi yang sangat besar. Untuk itu, perlu dilakukan proses standarisasi data. Proses standarisasi dilakukan apabila diantara variabel-variabel yang diteliti terdapat perbedaan ukuran satuan yang besar. Perbedaan satuan yang mencolok dapat mengakibatkan perhitungan pada analisis cluster menjadi tidak valid.

2.2 Standarisasi Data

rge<- sapply(data, function(x) diff(range(x)))
data2<- sweep(data, 2, rge, FUN = "/")
data2
sapply(data2, var)
##         X1         X2         X3         X4         X5         X6 
## 0.07597697 0.09471107 0.07013856 0.09429351 0.09187595 0.06624633

Hasil di atas merupakan variansi data yang sudah di standarisasi. Variansi dari setiap variabel sudah memiliki rentang yang tidak besar. Setelah dilakukan standarisasi, maka dapat dilanjutkan dengan melakukan proses analisis K-Means Clustering.


3. Penerapan K-Means

3.1 Penentuan Cluster Optimal

Dalam menentukan jumlah cluster yang optimal pada K-Means, maka akan menggunakan metode Elbow dan Silhoutte.

Metode Elbow merupakan suatu metode yang digunakan untuk menghasilkan informasi dalam menentukan jumlah cluster terbaik dengan cara melihat persentase hasil perbandingan antara jumlah cluster yang akan membentuk siku pada suatu titik. Sedangkan metode silhoutte untuk menduga kualitas dari klaster yang terbentuk. Semakin tinggi nilai rata-ratanya maka cluster yang akan dibentuk semakin baik.

library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_nbclust(data2, kmeans, method = "wss")

fviz_nbclust(data2, kmeans, method = "silhouette")

Dengan menggunakan kedua metode ini diperoleh k optimal pada saat berada di k = 4. Akan tetapi, disini akan hanya menggunakan pengelompokkan wilayah sebanyak 3 kelompok.

3.2 Analisis Cluster

Pengelompokan Kabupaten/Kota di Provinsi Jawa Tengah berdasarkan kemiskinan menurut dimensi kualitas kesehatan dan kualitas ekonomi dibagi ke dalam 3 kelompok.

klaster <- kmeans(data2, centers = 3, nstart = 25)
klaster
## K-means clustering with 3 clusters of sizes 17, 3, 11
## 
## Cluster means:
##          X1        X2        X3        X4         X5       X6
## 1 0.6752617 0.4416018 0.7742527 0.4615554 0.49941980 1.515429
## 2 0.8602493 1.0664885 1.0251366 0.2172285 0.06828528 1.862118
## 3 1.1267809 0.6197737 1.1402385 0.7378277 0.52338254 1.356116
## 
## Clustering vector:
##  [1] 3 3 3 1 1 1 1 3 3 3 1 1 3 1 1 1 1 3 1 1 1 3 1 3 1 1 1 2 3 2 2
## 
## Within cluster sum of squares by cluster:
## [1] 4.6874782 0.6915699 4.0842544
##  (between_SS / total_SS =  36.0 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Pada kelompok 1 memiliki 11 anggota atau kabupaten, kelompok 2 memiliki 17 anggota kabupaten, sedangkan sisanya yaitu 3 kabupaten masuk ke dalam kelompok 3. Untuk jumlah kuadrat dari setiap klasternya dapat dilihat pada within cluster sum of squares by cluster yaitu sebesar 4.0842544, 4.6874782, dan 0.6915699. Adapun nilai jarak dekatnya atau jarak antar satu cluster yang sama (between SS) sebesar 36.0%. Adapun anggota kelompok dari masing-masing cluster bisa dilihat di Clustering Vector.

3.3 Cluster Plot

Visualisasi dari kabupaten yang terbentuk di setiap kelompok adalah sebagai berikut:

fviz_cluster(klaster, geom = "point", data = data2) + ggtitle("k=3")

Kabupaten yang termasuk dalam kelompok 1 merupakan Kabupaten Cilacap, Banyumas, Purbalingga, Magelang, Boyolali, Klaten, Karanganyar, Pati, Semarang, Kendal, dan Brebes. Sedangkan kelompok 2 dan 3 bisa dilihat dalam output diatas.