Judul:

Segmentasi Kesejahteraan Kabupaten/Kota di Sulawesi Selatan Menggunakan Metode K-Medoids (PAM)

Latar Belakang:

Metode K-Medoids (PAM – Partitioning Around Medoids) digunakan sebagai alternatif K-Means karena:

Variabel:

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,]       5        9 0.6935360
## [2,]       7        9 0.5198587
## [3,]      10        6 0.5571688
## [4,]       3        5 0.0000000
## [5,]       9        7 0.6685811
## [6,]       6        2 0.5351026

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

K-Means Clustering

pam_model <- pam(data_scaled, k = 3)

pam_model
## Medoids:
##      ID kemiskinan pengangguran         ipm pengeluaran
## [1,]  5  0.8445805    0.5796887 -0.84614175 -0.92902303
## [2,] 13  0.0444516   -0.1932296 -0.02564066 -0.08764368
## [3,] 21 -1.0223869   -0.9661478  0.79486043  0.75373566
## Clustering vector:
##  [1] 1 1 2 1 1 2 1 3 2 2 1 2 2 3 3 2 1 1 1 1 3 3 3 3
## Objective function:
##     build      swap 
## 0.7228186 0.7228186 
## 
## Available components:
##  [1] "medoids"    "id.med"     "clustering" "objective"  "isolation" 
##  [6] "clusinfo"   "silinfo"    "diss"       "call"       "data"

Menambahkan Hasil Cluster ke Data

data$cluster <- pam_model$clustering
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       2
## 4   4         Jeneponto         20            8  63           6       1
## 5   5           Takalar         17            6  66           7       1
## 6   6              Gowa         12            5  72          10       2
## 7   7            Sinjai         15            6  68           8       1
## 8   8             Maros         11            4  73          11       3
## 9   9           Pangkep         13            5  71          10       2
## 10 10             Barru         14            5  70           9       2
## 11 11              Bone         16            6  68           8       1
## 12 12           Soppeng         13            5  71           9       2
## 13 13              Wajo         14            5  70           9       2
## 14 14 Sidenreng Rappang         12            4  72          10       3
## 15 15           Pinrang         11            4  73          11       3
## 16 16          Enrekang         15            5  69           8       2
## 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       3
## 23 23          Parepare          7            3  80          14       3
## 24 24            Palopo          9            4  78          13       3

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(
    color = "Cluster"
  ) +
  theme_minimal()

Interpretasi Cluster

aggregate(data[,3:6], by = list(cluster = data$cluster), mean)
##   cluster kemiskinan pengangguran      ipm pengeluaran
## 1       1  17.200000     6.500000 65.90000    7.200000
## 2       2  13.571429     5.000000 70.28571    9.142857
## 3       3   9.285714     3.714286 76.00000   12.142857