Judul:

Segmentasi Tingkat Kesejahteraan Kabupaten di Sulawesi Berdasarkan Indikator Sosial Ekonomi

Latar Belakang:

Pemerintah ingin mengelompokkan kabupaten berdasarkan kondisi kesejahteraan untuk menentukan kebijakan yang tepat sasaran. Variabel yang digunakan:

Load Data

data <- read.csv("D:/Youtube/Clustering/K-means.csv")
head(data)
##   X            daerah kemiskinan pengangguran ipm pengeluaran
## 1 1 Kepulauan Selayar         18            7  65           7
## 2 2         Bulukumba         16            6  67           8
## 3 3          Bantaeng         14            5  69           9
## 4 4         Jeneponto         20            8  63           6
## 5 5           Takalar         17            6  66           7
## 6 6              Gowa         12            5  72          10

Standarisasi Data

data_scaled <- scale(data[,3:6])

Menentukan Jumlah Cluster

1. Metode Elbow

wss <- numeric(10)

for(i in 1:10){
  km <- kmeans(data_scaled, centers = i, nstart = 25)
  wss[i] <- km$tot.withinss
}

plot(1:10, wss, type="b", pch=19,
     xlab="Jumlah Cluster",
     ylab="Total Within Sum of Squares")

Berdasarkan metode elbow pada grafik tersebut, jumlah klaster optimal yang disarankan adalah 3, karena setelah titik tersebut penurunan nilai Total Within Sum of Squares mulai melandai secara signifikan.

2. Silhouette

library(cluster)
sil <- silhouette(km$cluster, dist(data_scaled))
head(sil)
##      cluster neighbor sil_width
## [1,]       1       10 0.6935360
## [2,]       5       10 0.5198587
## [3,]       6        2 0.3980073
## [4,]       9        1 0.0000000
## [5,]      10        5 0.6685811
## [6,]       4        6 0.5576499

Berdasarkan data silhouette width yang disajikan, observasi pertama memiliki struktur klaster paling kuat dengan nilai 0.6935360

K-Means Clustering

set.seed(123)
kmeans_result <- kmeans(data_scaled, centers = 3, nstart = 25)

kmeans_result
## K-means clustering with 3 clusters of sizes 10, 3, 11
## 
## Cluster means:
##   kemiskinan pengangguran        ipm pengeluaran
## 1  0.8979224    0.9661478 -0.8666543  -0.8448851
## 2 -1.8225157   -1.4814266  2.0256121   2.0158047
## 3 -0.3192433   -0.4742907  0.2354279   0.2183124
## 
## Clustering vector:
##  [1] 1 1 3 1 1 3 1 3 3 3 1 3 3 3 3 3 1 1 1 1 3 2 2 2
## 
## Within cluster sum of squares by cluster:
## [1] 6.263595 1.657911 6.254443
##  (between_SS / total_SS =  84.6 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Menambahkan Hasil Cluster ke Data

data$cluster <- kmeans_result$cluster
data
##     X            daerah kemiskinan pengangguran ipm pengeluaran cluster
## 1   1 Kepulauan Selayar         18            7  65           7       1
## 2   2         Bulukumba         16            6  67           8       1
## 3   3          Bantaeng         14            5  69           9       3
## 4   4         Jeneponto         20            8  63           6       1
## 5   5           Takalar         17            6  66           7       1
## 6   6              Gowa         12            5  72          10       3
## 7   7            Sinjai         15            6  68           8       1
## 8   8             Maros         11            4  73          11       3
## 9   9           Pangkep         13            5  71          10       3
## 10 10             Barru         14            5  70           9       3
## 11 11              Bone         16            6  68           8       1
## 12 12           Soppeng         13            5  71           9       3
## 13 13              Wajo         14            5  70           9       3
## 14 14 Sidenreng Rappang         12            4  72          10       3
## 15 15           Pinrang         11            4  73          11       3
## 16 16          Enrekang         15            5  69           8       3
## 17 17              Luwu         17            6  67           7       1
## 18 18       Tana Toraja         19            7  64           6       1
## 19 19      Toraja Utara         18            7  65           7       1
## 20 20        Luwu Utara         16            6  66           8       1
## 21 21        Luwu Timur         10            4  74          11       3
## 22 22          Makassar          5            3  82          15       2
## 23 23          Parepare          7            3  80          14       2
## 24 24            Palopo          9            4  78          13       2

Visualisasi Cluster

pca <- prcomp(data_scaled, center = TRUE, scale. = TRUE)
pca_data <- as.data.frame(pca$x)

# tambahkan cluster & label daerah
pca_data$cluster <- factor(data$cluster)
pca_data$daerah <- data$daerah

library(ggplot2)

ggplot(pca_data, aes(x = PC1, y = PC2, color = cluster)) +
  geom_point(size = 4) +
  geom_text(aes(label = daerah), vjust = -1, size = 3) +
  labs(
    title = "Visualisasi Clustering K-Means Berbasis PCA",
    x = "Principal Component 1",
    y = "Principal Component 2",
    color = "Cluster"
  ) +
  theme_minimal()

Interpretasi Cluster

aggregate(data[,3:6], by = list(cluster = data$cluster), mean)
##   cluster kemiskinan pengangguran      ipm pengeluaran
## 1       1   17.20000     6.500000 65.90000    7.200000
## 2       2    7.00000     3.333333 80.00000   14.000000
## 3       3   12.63636     4.636364 71.27273    9.727273