1 Pendahuluan

1.1 Clustering

Clustering merupakan salah satau metode machine learning dan termasuk dalam unsupervised learning. Unsupervised learning adalah metode machine learning dimana dalam data yang akan dianalisis tidak terdapat target variabel (label). Dalam unsupervised learning tujuannya lebih fokus dalam melakukan eksplorasi data seperti mencari atau mengelompokkan data berdasarkan kemiripan tanpa adanya label (ground truth). Dalam menentukan cluster yang baik adalah ketika suatu anggota dalam cluster memiliki kemiripan semirip mungkin sedangkan antar anggota cluster memiliki perbedaan yang cukup signifikan. Hal ini menyebabkan evaluasi hasil clustering menjadi tidak langsung dan membutuhkan pendekatan khusus yang disebut cluster validation.

Misalkan dataset \[ X = \{x_1, x_2, ..., x_n\}, \] maka clustering bertujuan membagi data ke dalam \[ ( k)cluster( C_1, ..., C_k). \]

Dalam clustering ada dua jenis yaitu 1. non fuzzy clustering (hard clustering), setiap data akan dibagi menjadi dalam beberapa kelompok dan setiap data poin hanya dapat dimiliki dalam 1 cluster saja. 2. fuzzy clustering (soft clusterig), setiap data poin memiliki kesempatan untuk dimiliki oleh lebih dari 1 cluster.

2 Validasi Cluster

Karena suatu clustering sangat sulit untuk bisa kita tentukan keakuratan dari cluster yang kita bentuk. Oleh karena itu perlu dilakukan validasi cluster (cluster validation).

Validasi cluster adalah proses untuk mengevaluasi kualitas hasil clustering secara kuantitatif dengan menggunakan indeks tertentu. Tujuan utama dari validasi cluster/cluster validation adalah

  • Mengukur kualitas hasil clustering
  • Membandingkan model
  • Menentukan jumlah cluster optimal

Menurut Charred et al. validasi cluster dibedakan menjadi 3 jenis yaitu:

  1. Internal cluster validation
  2. External cluster validation
  3. Relative cluster validation

3 Internal cluster validation

3.1 Pengertian

Internal cluster validation menggunakan informasi internal pada data untuk melakukan evaluasi cluster yang baik dan tepat tanpa menggunakan informasi eksternal data. Biasanya yang diukur pada validasi cluster ini adalah tingkat kepadatan (compactness), keterhubungan (connectedness), dan separasi yang ada pada cluster.

  • compactness mengukur seberapa dekat suatu objek pada cluster yang sama. Biasanya dilihat dari nilai within-cluster variation yang kecil atau rata-rata jarak antar cluster.
  • connectivity berhubungan dengan sejauh mana suatu data poin dikelompokkan menjadi satu cluster dengan tetangga terdekatnya (nearest neighbor).
  • separation mengukur seberapa baik pemisah antar satu cluster dengan cluster yang lain. Biasanya dapat diukur berdasarkan jarak antar pusat cluster.

3.2 Tujuan

  • Memastikan cluster kompak
  • Memastikan cluster saling terpisah

3.3 Formula Matematis

3.3.1 Cohesion

\[ W = \sum_{i=1}^{k} \sum_{x \in C_i} ||x - \mu_i||^2 \]

3.3.2 Separation

\[ B = \sum_{i=1}^{k} n_i ||\mu_i - \mu||^2 \]

3.4 Jenis jenis

3.4.1 Silhouette Coefficient

Silhouette mengukur seberapa baik suatu observasi menjadi satu cluster atau memperkirakan nilai rata-rata jarak antar cluster. Nilai dari silhouette coefficient menginterpretasikan seberapa dekat suatu data pada satu cluster terhadap tetangga pada cluster yang lain. Semakin besar nilai silhouette (mendekati 1), maka semakin baik cluster tersebut.

3.4.2 Formula

\[ s(i) = \frac{b(i) - a(i)}{\max(a(i), b(i))} \]

3.4.3 Parameter

\[ a(i): within distance \]

\[ b(i): nearest cluster distance \]

3.4.4 Interpretasi

  • Mendekati 1 → baik
  • Mendekati 0 → overlap
  • Negatif → salah cluster

3.4.5 Implementasi

library(cluster)
library(factoextra)

data(iris)
x <- scale(iris[, -5])

set.seed(123)
km <- kmeans(x, centers = 3)

sil <- silhouette(km$cluster, dist(x))
fviz_silhouette(sil)
##   cluster size ave.sil.width
## 1       1   50          0.64
## 2       2   53          0.39
## 3       3   47          0.35

Interpretasi:

Nilai average silhouette sebesar 0.46 menunjukkan bahwa kualitas clustering berada pada kategori cukup baik, namun belum optimal karena masih terdapat overlap antar cluster. Cluster 1 memiliki nilai tertinggi (0.64) sehingga merupakan cluster paling baik dengan pemisahan yang jelas, sedangkan cluster 2 (0.35) dan cluster 3 (0.39) menunjukkan kualitas sedang dengan kemungkinan adanya kedekatan antar cluster. Secara keseluruhan, model sudah mampu menangkap struktur data, tetapi masih bisa ditingkatkan.

3.4.6 Davies-Bouldin Index

Davies-Bouldin Index (DBI) merupakan indeks internal yang mengukur rata-rata kemiripan antara setiap cluster dengan cluster lainnya. Kemiripan ini dihitung berdasarkan rasio antara dispersi dalam cluster dan jarak antar cluster.

3.4.7 Formula

\[ DBI = \frac{1}{k} \sum_{i=1}^{k} \max_{j \neq i} \left( \frac{S_i + S_j}{M_{ij}} \right) \]

3.4.8 Parameter

\[ S_i : rata-rata jarak dalam cluster ke-i \]

\[ M_{ij}: jarak antara centroid cluster i dan j \]

\[ k: jumlah cluster \]

3.4.9 Interpretasi

  • Nilai kecil → cluster lebih baik

  • Nilai besar → cluster overlap

3.4.10 Implementasi

library(clusterSim)

dbi <- index.DB(x, km$cluster)
dbi$DB
## [1] 0.9140889

Interpretasi:

Nilai Davies-Bouldin Index (DBI) sebesar 0.914 menunjukkan bahwa kualitas clustering cukup baik. Hal ini karena DBI yang lebih kecil mengindikasikan cluster yang lebih kompak dan memiliki pemisahan yang lebih jelas antar cluster. Nilai yang mendekati 0 menunjukkan hasil yang semakin optimal, sehingga nilai 0.914 masih tergolong baik, meskipun belum optimal sepenuhnya. Artinya, cluster sudah terbentuk dengan cukup jelas, namun masih terdapat sedikit overlap antar cluster yang bisa diperbaiki dengan pemilihan jumlah cluster atau metode clustering yang lebih sesuai.

3.4.11 Dunn Index

Dunn index menilai seberapa rapat anggota dalam suatu cluster dengan variansi yang kecil dan seberapa terpisah cluster yang satu dengan yang lainnya. Cluster yang baik adalah yang memiliki nilai dunn index besar.

3.4.12 Formula

\[ Dunn = \frac{\min_{i \neq j} d(C_i, C_j)}{\max_k diam(C_k)} \]

3.4.13 Parameter

\[ d(C_i, C_j): jarak antar cluster \]

\[ diam(C_k): diameter cluster k \]

3.4.14 Interpretasi

  • Nilai besar → cluster baik
  • Nilai kecil → cluster tidak terpisah dengan baik

3.4.15 Implementasi

library(clValid)

dunn_index <- dunn(dist(x), km$cluster)
print(dunn_index)
## [1] 0.02649665

Interpretasi:

Nilai Dunn Index sebesar 0.0265 menunjukkan bahwa kualitas clustering kurang baik. Hal ini karena nilai Dunn Index yang baik seharusnya tinggi, yang menandakan jarak antar cluster besar (separation tinggi) dan ukuran cluster kecil (cohesion tinggi). Sebaliknya, nilai yang sangat kecil seperti ini mengindikasikan bahwa jarak antar cluster relatif dekat atau terdapat cluster yang memiliki diameter besar, sehingga terjadi overlap antar cluster. Dengan demikian, hasil clustering masih belum optimal dan dapat diperbaiki, misalnya dengan mencoba jumlah cluster yang berbeda atau metode clustering lain.

4 EXTERNAL VALIDATION

4.1 Pengertian

Validasi cluster ini menggunakan informasi eksternal pada suatu data seperti label kelas atau kelas target yang disediakan dari sumber eksternal. Hal ini biasanya digunakan untuk mengukur kecocokan label suatu cluster yang terbentuk dengan label kelas yang ada.

4.2 Tujuan

  • mengukur seberapa sesuai hasil clustering dengan label asli (ground truth)

4.3 Jenis

4.3.1 Adjusted Rand Index (ARI)

Adjusted Rand Index (ARI) mengukur kesamaan antara hasil clustering dengan label sebenarnya dengan mempertimbangkan kemungkinan kesamaan secara acak.

4.3.2 Formula

\[ ARI = \frac{RI - Expected}{Max - Expected} \]

4.3.3 Parameter

RI: Rand Index Expected: nilai ekspektasi acak

4.3.4 Interpretasi

  • 1 → clustering sempurna
  • 0 → acak
  • < 0 → buruk

4.3.5 Implementasi

library(mclust)

ari <- adjustedRandIndex(km$cluster, iris$Species)
print(ari)
## [1] 0.6201352

Interpretasi:

Nilai Adjusted Rand Index (ARI) sebesar 0.620 menunjukkan bahwa hasil clustering memiliki tingkat kesesuaian yang cukup tinggi dengan label asli (ground truth). Karena nilai ARI berada di atas 0.5, ini menandakan bahwa struktur cluster yang dihasilkan sudah mampu merepresentasikan pola sebenarnya dalam data dengan baik. Namun, karena belum mendekati 1, masih terdapat beberapa perbedaan antara hasil clustering dan label asli, yang mengindikasikan adanya kesalahan pengelompokan pada sebagian data. Secara keseluruhan, model clustering dapat dikatakan baik tetapi belum sempurna.

4.3.6 Normalized Mutual Information (NMI)

Normalized Mutual Information (NMI) mengukur tingkat informasi bersama antara hasil clustering dan label sebenarnya.

4.3.7 Formula

\[ NMI = \frac{2I(X,Y)}{H(X)+H(Y)} \]

4.3.8 Parameter

\[ I(X,Y) : mutual information \]

\[ H(X), H(Y) : entropy \]

4.3.9 Interpretasi

  • 1 → sempurna
  • 0 → tidak ada hubungan

4.3.10 Implementasi

library(aricode)

nmi <- NMI(km$cluster, iris$Species)
print(nmi)
## [1] 0.6591265

Interpretasi:

Nilai Normalized Mutual Information (NMI) sebesar 0.659 menunjukkan bahwa hasil clustering memiliki tingkat kesesuaian yang cukup tinggi dengan label asli. Karena nilai NMI berada di atas 0.6, hal ini mengindikasikan bahwa terdapat kesamaan informasi yang cukup kuat antara struktur cluster yang dihasilkan dengan distribusi label sebenarnya. Namun, karena nilainya belum mendekati 1, masih terdapat sebagian informasi yang tidak sepenuhnya sesuai, yang berarti masih ada beberapa data yang tidak terkelompok dengan sempurna. Secara keseluruhan, hasil clustering dapat dikatakan baik, tetapi belum optimal dan masih dapat ditingkatkan.

5 RELATIVE VALIDATION

5.1 Pengertian

Validasi cluster ini menggunakan pendekatan dengan memberikan beberapa variasi nilai parameter yang berbeda seperti banyaknya jumlah cluster (k) pada satu metode yang sama. Biasanya cara ini digunakan untuk menentukan banyak cluster yang paling optimal.

5.2 Tujuan

  • Menentukan jumlah cluster optimal (k optimal)
  • Membandingkan performa beberapa model
  • Menghindari pemilihan model yang subjektif

5.3 Jenis

5.3.1 Elbow Method

Elbow Method digunakan untuk menentukan jumlah cluster optimal berdasarkan nilai WCSS.

5.3.2 Formula

\[ WCSS = \sum_{i=1}^{k} \sum_{x \in C_i} ||x - \mu_i||^2 \]

5.3.3 Interpretasi

  • Titik siku (elbow) menunjukkan jumlah cluster optimal

5.3.4 Implementasi

fviz_nbclust(x, kmeans, method = "wss")

Interpretasi:

Nilai WCSS (Within Cluster Sum of Squares) mengalami penurunan yang sangat tajam dari k = 1 ke k = 3, kemudian setelah itu penurunannya mulai melambat. Hal ini menunjukkan bahwa penambahan jumlah cluster setelah k = 3 tidak memberikan peningkatan yang signifikan dalam mengurangi variasi dalam cluster.

Berdasarkan metode Elbow, titik “siku” terlihat berada di sekitar k = 3, sehingga jumlah cluster optimal yang disarankan adalah 3 cluster. Ini berarti pembagian data menjadi 3 kelompok sudah cukup baik dalam merepresentasikan struktur data tanpa menambah kompleksitas yang tidak perlu.

5.3.5 Gap Statistic

Gap Statistic membandingkan hasil clustering dengan data acak untuk menentukan jumlah cluster optimal.

5.3.6 Formula

\[ Gap(k) = E^*(\log(W_k)) - \log(W_k) \]

5.3.7 Interpretasi

- Nilai gap terbesar → jumlah cluster optimal

5.3.8 Implementasi

set.seed(123)
gap <- clusGap(x, FUN = kmeans, K.max = 10, B = 50)
fviz_gap_stat(gap)

Interpretasi:

Nilai Gap Statistic menunjukkan peningkatan yang cukup signifikan dari k = 1 ke k = 2, dan mencapai nilai tinggi di sekitar k = 2 hingga k = 3. Berdasarkan aturan Gap Statistic (memilih k pertama yang memenuhi kondisi optimal), garis putus-putus pada grafik menunjukkan bahwa jumlah cluster optimal berada pada k = 2.

Hal ini berarti bahwa pembagian data menjadi 2 cluster sudah cukup baik dalam merepresentasikan struktur data dibandingkan dengan jumlah cluster lainnya. Meskipun nilai gap pada k = 3 sedikit lebih tinggi, metode ini cenderung memilih jumlah cluster yang lebih sederhana jika perbedaannya tidak signifikan.

Secara keseluruhan, berdasarkan Gap Statistic, jumlah cluster optimal yang disarankan adalah 2 cluster.

6 Kesimpulan

Berdasarkan hasil evaluasi menggunakan berbagai metode validasi, dapat disimpulkan bahwa model clustering sudah mampu menangkap struktur data dengan cukup baik.

Internal validation menunjukkan bahwa kualitas cluster berada pada kategori cukup baik, meskipun masih terdapat overlap antar cluster. External validation memperlihatkan bahwa hasil clustering memiliki kesesuaian yang cukup tinggi dengan label asli, namun belum sempurna. Sementara itu, relative validation menunjukkan bahwa jumlah cluster optimal berada pada kisaran 2 hingga 3 cluster.

Dengan demikian, model clustering dapat dikatakan baik, tetapi masih dapat ditingkatkan untuk memperoleh hasil yang lebih optimal.

7 Perbandingan

Aspek Internal External Relative
Data Label Tidak Ya Tidak
Tujuan Struktur cluster Kesesuaian label Pemilihan model
Fokus Cohesion & Separation Akurasi Optimasi k
Contoh Silhouette, DBI, Dunn ARI, NMI Elbow, Gap

8 Latihan

Implementasi cluster validation pada data

9 Data

library(rattle)
data(wine)
head(wine)

Dataset Wine merupakan dataset yang berisi hasil analisis kimia dari beberapa jenis wine yang berasal dari tiga kultivar anggur berbeda. Dataset ini terdiri dari 178 observasi (data) dan 14 variabel, dimana terdapat 1 variabel label/class yaitu Type yang menunjukkan jenis wine, serta 13 variabel numerik yang merepresentasikan karakteristik kimia wine seperti kadar alkohol, magnesium, phenols, flavanoids, dan lain sebagainya. Dataset ini sering digunakan dalam analisis clustering dan machine learning karena memiliki struktur data yang cukup jelas dan cocok untuk proses pengelompokan data.

10 Internal Validation

10.1 Silhouette Coefficient

# Menghapus label
wine_x <- scale(wine[, -1])
label_wine <- wine$Type
print(label_wine)
##   [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
##  [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
##  [75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [149] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## Levels: 1 2 3
set.seed(123)
km_wine <- kmeans(wine_x, centers = 3)

library(cluster)
library(factoextra)

sil_wine <- silhouette(km_wine$cluster, dist(wine_x))
fviz_silhouette(sil_wine)
##   cluster size ave.sil.width
## 1       1   51          0.35
## 2       2   62          0.34
## 3       3   65          0.18

Nilai average silhouette width sebesar 0.28 menunjukkan bahwa kualitas clustering pada data wine masih tergolong kurang optimal karena pemisahan antar cluster belum terlalu jelas dan masih terdapat overlap. Cluster 1 dan 2 memiliki kualitas clustering yang cukup baik dengan nilai silhouette masing-masing sebesar 0.34 dan 0.35, sedangkan cluster 3 memiliki kualitas paling rendah yaitu 0.18 sehingga menunjukkan bahwa beberapa data pada cluster tersebut masih sulit dibedakan dari cluster lain. Secara keseluruhan, model clustering sudah mampu membentuk kelompok data, namun hasilnya masih dapat ditingkatkan.

10.2 Davies-Bouldin Index

library(clusterSim)

dbi_wine <- index.DB(wine_x, km_wine$cluster)
dbi_wine$DB
## [1] 1.468143

Davies-Bouldin Index (DBI) sebesar 1.468 menunjukkan bahwa kualitas clustering pada data wine masih kurang optimal. Hal ini karena nilai DBI yang cukup besar mengindikasikan bahwa antar cluster masih memiliki overlap dan pemisahan cluster belum terlalu baik.

10.3 Dunn Index

library(clValid)

dunn(dist(wine_x), km_wine$cluster)
## [1] 0.2322567

Dunn Index sebesar 0.232 menunjukkan bahwa kualitas clustering masih tergolong rendah karena nilai Dunn Index yang baik seharusnya besar. Nilai ini mengindikasikan bahwa jarak antar cluster masih relatif dekat atau cluster belum terpisah secara optimal.

11 External Validation

11.1 Adjusted Rand Index (ARI)

library(mclust)

adjustedRandIndex(km_wine$cluster, label_wine)
## [1] 0.897495

Nilai Adjusted Rand Index (ARI) sebesar 0.897 menunjukkan bahwa hasil clustering memiliki tingkat kesesuaian yang sangat tinggi dengan label asli pada data wine. Nilai yang mendekati 1 menandakan bahwa sebagian besar data telah dikelompokkan dengan benar, sehingga model clustering dapat dikatakan memiliki performa yang sangat baik dalam merepresentasikan struktur data sebenarnya.

11.2 Normalized Mutual Information (NMI)

library(aricode)

NMI(km_wine$cluster, label_wine)
## [1] 0.8729636

Nilai Normalized Mutual Information (NMI) sebesar 0.873 menunjukkan bahwa hasil clustering memiliki tingkat kesesuaian yang sangat tinggi dengan label asli pada data wine. Nilai yang mendekati 1 menandakan bahwa informasi yang dihasilkan dari proses clustering sudah sangat mirip dengan distribusi kelas sebenarnya, sehingga model clustering dapat dikatakan mampu merepresentasikan struktur data dengan sangat baik.

12 Relative Validation

12.1 Elbow Method

fviz_nbclust(wine_x, kmeans, method = "wss")

Elbow Method menunjukkan bahwa penurunan nilai WCSS terjadi cukup tajam dari k=1 hingga k=3, kemudian setelah itu penurunannya mulai melambat. Hal ini menunjukkan bahwa penambahan cluster setelah k=3 tidak memberikan pengurangan variasi yang signifikan. Oleh karena itu, jumlah cluster optimal berdasarkan Elbow Method adalah 3 cluster.

12.2 Gap Statistic

set.seed(123)

gap_wine <- clusGap(
  wine_x,
  FUN = kmeans,
  K.max = 10,
  B = 50
)

fviz_gap_stat(gap_wine)

Gap Statistic menunjukkan bahwa nilai gap meningkat hingga mencapai nilai optimal pada k=3, yang ditunjukkan oleh garis putus-putus pada grafik. Hal ini mengindikasikan bahwa pembentukan 3 cluster memberikan struktur cluster yang paling baik dibandingkan jumlah cluster lainnya. Dengan demikian, berdasarkan Gap Statistic, jumlah cluster optimal yang disarankan juga adalah 3 cluster.

13 Perbandingan

13.1 Internal Validation

# Silhouette
avg_sil_wine <- summary(sil_wine)$avg.width

# Davies-Bouldin Index
dbi_value_wine <- dbi_wine$DB

# Dunn Index
dunn_value_wine <- dunn(dist(wine_x), km_wine$cluster)

# Membuat tabel perbandingan
internal_compare <- data.frame(
  Metode = c(
    "Silhouette Coefficient",
    "Davies-Bouldin Index",
    "Dunn Index"
  ),
  
  Nilai = c(
    round(avg_sil_wine, 3),
    round(dbi_value_wine, 3),
    round(dunn_value_wine, 3)
  ),
  
  Interpretasi = c(
    "Semakin mendekati 1 semakin baik",
    "Semakin kecil semakin baik",
    "Semakin besar semakin baik"
  )
)

print(internal_compare)
##                   Metode Nilai                     Interpretasi
## 1 Silhouette Coefficient 0.285 Semakin mendekati 1 semakin baik
## 2   Davies-Bouldin Index 1.468       Semakin kecil semakin baik
## 3             Dunn Index 0.232       Semakin besar semakin baik

13.2 External Validation

# ARI
ari_wine <- adjustedRandIndex(
  km_wine$cluster,
  label_wine
)

# NMI
nmi_wine <- NMI(
  km_wine$cluster,
  label_wine
)

# Membuat tabel perbandingan
external_compare <- data.frame(
  Metode = c(
    "Adjusted Rand Index (ARI)",
    "Normalized Mutual Information (NMI)"
  ),
  
  Nilai = c(
    round(ari_wine, 3),
    round(nmi_wine, 3)
  ),
  
  Interpretasi = c(
    "Semakin mendekati 1 semakin baik",
    "Semakin mendekati 1 semakin baik"
  )
)

print(external_compare)
##                                Metode Nilai                     Interpretasi
## 1           Adjusted Rand Index (ARI) 0.897 Semakin mendekati 1 semakin baik
## 2 Normalized Mutual Information (NMI) 0.873 Semakin mendekati 1 semakin baik

13.3 Relative Validation

relative_compare <- data.frame(
  Metode = c(
    "Elbow Method",
    "Gap Statistic"
  ),
  
  Cluster_Optimal = c(
    3,
    3
  ),
  
  Interpretasi = c(
    "Titik siku berada pada k = 3",
    "Gap terbesar berada pada k = 3"
  )
)

print(relative_compare)
##          Metode Cluster_Optimal                   Interpretasi
## 1  Elbow Method               3   Titik siku berada pada k = 3
## 2 Gap Statistic               3 Gap terbesar berada pada k = 3