Study Case: Hybrid

Foto

1. Definisi Singkat

1.1 Ensemble Clustering (Consensus Clustering)

Ensemble clustering adalah metode pengelompokan yang menggabungkan beberapa hasil clustering (base clusterings) menjadi satu solusi final yang lebih stabil dan lebih robust. Prinsip utamanya adalah memanfaatkan wisdom of the crowd: ketika sejumlah algoritma atau sejumlah konfigurasi menghasilkan beberapa struktur cluster berbeda, metode ensemble berusaha mencari representasi konsensus yang meminimalkan ketidakselarasan di antara hasil-hasil tersebut. Teknik yang sering digunakan termasuk co-association matrix, voting schemes, dan meta-clustering.

1.3 Evolutionary / Genetic Clustering

Evolutionary atau genetic clustering adalah pendekatan pengelompokan yang memanfaatkan algoritma evolusi—misalnya Genetic Algorithm (GA)—untuk mencari solusi clustering yang optimal. Setiap solusi clustering direpresentasikan sebagai “kromosom”, lalu melalui operasi evolusioner seperti selection, crossover, dan mutation, populasi solusi diperbaiki secara bertahap untuk memaksimalkan suatu fungsi objektif (misalnya minimalisasi SSE atau maksimisasi silhouette score). Teknik ini efektif untuk menemukan struktur cluster yang kompleks dan menghindari perangkap local optimum.

2. Rumus Inti / Model Matematis

2.1 Ensemble Clustering (Consensus Clustering)

2.1.1 Co-Association Matrix

Salah satu fondasi matematis ensemble clustering adalah co-association matrix, yang mengukur frekuensi dua sampel ditempatkan pada cluster yang sama di berbagai base clusterings.

Misalkan terdapat:

  • \(( X = {x_1, x_2, \dots, x_n} )\)
  • Himpunan hasil clustering: \(( \mathcal{C} = { C^{(1)}, C^{(2)}, \dots, C^{(M)} } )\)

Co-association matrix didefinisikan sebagai:

\[ A_{ij} = \frac{1}{M} \sum_{m=1}^{M} \mathbf{1}\left( \text{cluster}(x_i \mid C^{(m)}) = \text{cluster}(x_j \mid C^{(m)}) \right)\]

dengan ( () ) adalah fungsi indikator.

2.1.2 Consensus Function

Solusi konsensus diperoleh dengan menerapkan algoritma clustering lain pada matriks (A):

\[ \hat{C} = f(A) \]

di mana (f) dapat berupa hierarchical clustering, spectral clustering, atau metode lain.

2.3 Evolutionary / Genetic Clustering

2.3.1 Representasi Solusi

Solusi clustering dipetakan menjadi kromosom:

\[\mathbf{z} = (z_1, z_2, \dots, z_n), \quad z_i \in {1,\dots,K}\]

2.3.2 Fungsi Fitness

Tujuan umum adalah meminimalkan sum-of-squared-errors (SSE):

\(\text{SSE}(\mathbf{z}) = \sum_{k=1}^{K} \sum_{x_i : z_i = k} | x_i - \mu_k |^2\)

Fitness:

\[\text{Fitness}(\mathbf{z}) = \frac{1}{1 + \text{SSE}(\mathbf{z})}\]

atau dapat menggunakan silhouette:

\[\text{Fitness}(\mathbf{z}) = \text{Silhouette}(\mathbf{z})\]

2.3.3 Operator Evolusioner

  • Selection: probabilitas seleksi proporsional fitness

    \[P(\mathbf{z}_i) = \frac{f(\mathbf{z}_i)}{\sum_j f(\mathbf{z}_j)}\]

  • Crossover: pertukaran gen antar kandidat

    \[\mathbf{z}' = \text{crossover}(\mathbf{z}_a,\mathbf{z}_b)\]

  • Mutation: perubahan acak label cluster

    \[z_i' = \begin{cases} \text{random}(1..K), & \text{dengan prob. }; p_m \ z_i, & \text{lainnya} \end{cases}\]

3. Cara Kerja (Langkah Operasi & Hyperparameter Utama)

3.1 Ensemble Clustering (Consensus Clustering)

3.1.1 Langkah Operasi

  1. Membangun Base Clusterings

    • Jalankan beberapa algoritma clustering (misalnya K-Means, Agglomerative, DBSCAN).
    • Atau jalankan algoritma yang sama tetapi dengan parameter berbeda (misalnya K = 2–10).
  2. Membangun Co-Association Matrix

    • Hitung ( \(A_{ij}\) ) sebagai frekuensi dua sampel ditempatkan dalam cluster yang sama.
    • Struktur ini menjadi representasi kedekatan berbasis agreement.
  3. Normalisasi / Weighting (Opsional)

    • Beberapa metode ensemble memberi bobot lebih besar kepada base clustering yang lebih “akurat” atau stabil.
  4. Consensus Function

    • Jalankan algoritma clustering pada co-association matrix (A).

    • Metode populer:

      • Hierarchical clustering
      • Spectral clustering
      • Voting-based consensus
  5. Output Final Clusters

    • Hasil akhir merupakan cluster konsensus yang lebih stabil dibanding single-run clustering.

3.1.2 Hyperparameter Utama

  • Jumlah base clustering (M) Semakin banyak, semakin stabil konsensus.
  • Variasi algoritma atau parameter base clustering Menentukan keragaman hasil.
  • Jenis consensus function Hierarchical vs spectral vs voting.
  • Parameter dari algoritma pada tahap konsensus Misalnya jumlah cluster (K) pada hierarchical/spectral.

3.3 Evolutionary / Genetic Clustering

3.3.1 Langkah Operasi

  1. Encoding Solusi ke Kromosom

    • Setiap individu menyimpan label cluster untuk tiap data point.
  2. Inisialisasi Populasi

    • Buat sejumlah populasi awal secara acak atau berbasis algoritma klasik (misalnya Seed dari K-Means).
  3. Evaluasi Fitness

    • Hitung objective function, misalnya:

      • Minimizing SSE
      • Maximizing silhouette
      • Multi-objective (misalnya SSE + compactness + separation)
  4. Selection

    • Pilih individu dengan fitness tertinggi untuk direproduksi.
    • Umum: roulette wheel, tournament selection.
  5. Crossover

    • Gabungkan dua parent untuk menghasilkan offspring baru.
    • Contoh: one-point, two-point, uniform crossover.
  6. Mutation

    • Ubah sebagian label cluster secara acak untuk menjaga diversitas.
  7. Replacement

    • Bangun generasi baru dari kombinasi parent dan offspring terbaik.
  8. Konvergensi

    • Berhenti saat generasi mencapai batas maksimum atau perubahan fitness sangat kecil.

3.3.2 Hyperparameter Utama

  • Ukuran populasi (population size) Biasanya 20–200 individu.
  • Jumlah generasi (max generations) Mempengaruhi waktu komputasi.
  • Mutation rate (pᵐ) Misalnya 0.01–0.1.
  • Crossover rate (pᶜ) Biasanya 0.7–0.9.
  • Jumlah cluster K Parameter inti.
  • Fitness function SSE, silhouette, DB index, atau multi-objective.

4. Kelebihan dan Keterbatasan Praktis

4.1 Ensemble Clustering (Consensus Clustering)

Kelebihan

  1. Stabilitas lebih tinggi Mengurangi variabilitas akibat inisialisasi acak atau pemilihan algoritma tertentu.
  2. Lebih robust terhadap noise dan outlier Karena konsensus didasarkan pada beberapa solusi.
  3. Menggabungkan kekuatan banyak algoritma Cocok ketika struktur cluster tidak jelas atau dataset kompleks.
  4. Dapat bekerja dengan algoritma heterogen Base clusterings dapat berasal dari metode partisi, hierarchical, density-based, dan lainnya.

Keterbatasan

  1. Komputasi lebih berat Harus menjalankan banyak algoritma sebelum membangun konsensus.
  2. Memerlukan desain base clusterings yang baik Konsensus buruk jika base clusterings homogen atau kualitasnya rendah.
  3. Pemilihan consensus function tidak trivial Metode hierarchical, spectral, atau voting dapat menghasilkan hasil yang berbeda.
  4. Interpretabilitas bisa menurun Karena cluster final merupakan hasil agregasi, bukan langsung dari satu metode.

4.3 Evolutionary / Genetic Clustering

Kelebihan

  1. Mampu menemukan solusi global (menghindari local minima) Lebih powerful dibanding K-Means yang sering terjebak local optimum.
  2. Fleksibel terhadap bentuk cluster Tidak mengharuskan cluster berbentuk spherical.
  3. Dapat menggunakan fungsi objektif yang kompleks Silhouette, SSE, DB Index, atau kombinasi multi-objective.
  4. Mudah menggabungkan constraints atau prior domain knowledge Cukup memasukkan penalty dalam fitness function.

Keterbatasan

  1. Komputasi sangat intensif Evaluasi fitness tiap generasi membutuhkan waktu banyak, terutama untuk dataset besar.
  2. Pemilihan parameter GA tidak mudah Mutation rate, population size, dan crossover rate sangat memengaruhi hasil.
  3. Sulit diprediksi Karena proses evolusi bersifat stochastik.
  4. Membutuhkan banyak iterasi agar konvergen Waktu eksekusi bisa jauh lebih lama dibanding K-Means atau hierarchical clustering.

5. Sumber & Loading Data

5.1 Sumber Data

Dataset yang digunakan dalam analisis ini adalah Titanic Dataset, yaitu data penumpang kapal RMS Titanic yang banyak digunakan untuk tugas analisis eksplorasi, klasifikasi, dan clustering. Dataset berisi informasi demografis dan karakteristik penumpang seperti usia, jenis kelamin, kelas tiket, tarif, serta status keselamatan.

Dataset ini berasal dari sumber publik yang telah tersedia di berbagai repositori terbuka, termasuk:

5.2 Loading Data di R

kode R untuk memuat dataset Titanic:


# Memuat library
library(tidyverse)

# Load dataset Titanic dari file lokal
titanic <- read_csv("titanic.csv")

# Melihat struktur awal data
glimpse(titanic)

# Menampilkan beberapa baris pertama
head(titanic)

5.3 Deskripsi Variabel Umum (Bergantung Dataset)

Meskipun terdapat beberapa variasi antar versi dataset Titanic, atribut umum yang biasanya tersedia mencakup:

Variabel Deskripsi
PassengerId ID unik penumpang
Survived Status selamat (0 = tidak, 1 = ya)
Pclass Kelas tiket (1 = atas, 2 = menengah, 3 = bawah)
Name Nama penumpang
Sex Jenis kelamin
Age Usia penumpang
SibSp Jumlah saudara/ pasangan di atas kapal
Parch Jumlah orang tua/anak di atas kapal
Ticket Nomor tiket
Fare Harga tiket
Cabin Nomor kabin (sering ada missing)
Embarked Pelabuhan keberangkatan (C, Q, S)

6. Eksplorasi Data Singkat

Eksplorasi awal diperlukan untuk memahami struktur dataset Titanic, karakteristik variabel, nilai hilang, serta potensi isu data sebelum dilakukan preprocessing dan clustering.

6.1 Struktur dan Tipe Variabel

glimpse(titanic)

Perintah ini menampilkan tipe data setiap kolom, jumlah observasi, serta ringkasan awal. Titanic umumnya memiliki variabel numerik (Age, Fare), kategorikal (Sex, Embarked, Pclass), dan string (Name, Ticket, Cabin).

6.2 Statistik Deskriptif

Variabel Numerik

titanic %>% 
  select(where(is.numeric)) %>% 
  summary()

Statistik ini menyediakan informasi seperti mean, median, min–max, dan kuartil untuk variabel numerik seperti Age, Fare, dan lain-lain.

Variabel Kategorikal

titanic %>% 
  select(where(is.character) | where(is.factor)) %>% 
  summary()

Memberikan frekuensi kategori untuk Sex, Embarked, dll.

6.3 Pengecekan Missing Values

colSums(is.na(titanic))

Output akan menunjukan jumlah missing value per kolom. Pada Titanic biasanya:

  • Age memiliki banyak missing
  • Cabin sangat banyak missing
  • Embarked memiliki sedikit missing
  • Fare kadang memiliki missing pada versi tertentu

Visualisasi missing values (opsional):

library(naniar)
gg_miss_var(titanic)

6.4 Distribusi Variabel Penting

Distribusi Usia

titanic %>% 
  ggplot(aes(Age)) +
  geom_histogram(bins = 30) +
  labs(title = "Distribusi Usia Penumpang")

Distribusi Tarif (Fare)

ggplot(titanic, aes(Fare)) +
  geom_histogram(bins = 40) +
  labs(title = "Distribusi Fare")

Distribusi Jenis Kelamin

titanic %>% 
  count(Sex)

6.5 Identifikasi Outlier Awal

Outlier dapat muncul terutama pada:

  • Fare (beberapa tiket sangat mahal)
  • Age (jika ada nilai ekstrim 0 atau >80)
boxplot(titanic$Fare, main = "Boxplot Fare")
boxplot(titanic$Age, main = "Boxplot Age")

7. Pra-Proses Data (Cleaning, Imputasi, Encoding, Scaling)

Pra-proses data dilakukan untuk memastikan dataset Titanic berada dalam kondisi yang sesuai untuk analisis clustering, terutama karena algoritma clustering sensitif terhadap missing values, tipe variabel, dan skala numerik.


7.1 Pembersihan Variabel (Cleaning Data)

  1. Menghapus kolom yang tidak relevan untuk clustering Variabel seperti Name, Ticket, Cabin bersifat unik atau terlalu sparsity sehingga tidak informatif.
titanic_clean <- titanic %>%
  select(-Name, -Ticket, -Cabin)
  1. Konversi tipe data Pastikan variabel kategorikal menjadi factor.
titanic_clean <- titanic_clean %>% 
  mutate(
    Survived = factor(Survived),
    Pclass   = factor(Pclass),
    Sex      = factor(Sex),
    Embarked = factor(Embarked)
  )

7.2 Menangani Missing Values

7.2.1 Imputasi Usia

Age biasanya memiliki banyak missing. Pendekatan umum:

  • memakai median (lebih robust terhadap outlier)
  • atau model imputasi (misal regresi), namun median lebih sederhana dan stabil untuk clustering.
titanic_clean$Age[is.na(titanic_clean$Age)] <- 
  median(titanic_clean$Age, na.rm = TRUE)

7.2.2 Imputasi Fare

Jika ada missing:

titanic_clean$Fare[is.na(titanic_clean$Fare)] <- 
  median(titanic_clean$Fare, na.rm = TRUE)

7.2.3 Imputasi Embarked

Biasanya hanya 1–2 missing.

titanic_clean$Embarked[is.na(titanic_clean$Embarked)] <- 
  names(which.max(table(titanic_clean$Embarked)))

7.3 Encoding Variabel Kategorikal

Clustering tidak dapat menggunakan string atau factor secara langsung. Encoding yang digunakan:

  • One-hot encoding (paling umum untuk K-Means dan GA)
  • Ditangani otomatis oleh model.matrix().
titanic_encoded <- titanic_clean %>% 
  model.matrix(~ . - 1, data = .) %>% 
  as.data.frame()

Catatan: -1 menghilangkan intercept sehingga seluruh kategori direpresentasikan.


7.4 Normalisasi / Scaling Variabel Numerik

Metode yang umum:

  • Standard scaling (Z-score):

    \[x' = \frac{x - \mu}{\sigma}\]

titanic_scaled <- titanic_encoded %>% 
  mutate(across(where(is.numeric), scale))

7.5 Final Dataset untuk Clustering

titanic_final <- titanic_scaled
glimpse(titanic_final)
## 'data.frame':    891 obs. of  12 variables:
##  $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
##  $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
##  $ Name       : chr  "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
##  $ Sex        : chr  "male" "female" "female" "female" ...
##  $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
##  $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket     : chr  "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
##  $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
##  $ Cabin      : chr  "" "C85" "" "C123" ...
##  $ Embarked   : chr  "S" "C" "S" "S" ...
##   PassengerId       Survived          Pclass          Name          
##  Min.   :  1.0   Min.   :0.0000   Min.   :1.000   Length:891        
##  1st Qu.:223.5   1st Qu.:0.0000   1st Qu.:2.000   Class :character  
##  Median :446.0   Median :0.0000   Median :3.000   Mode  :character  
##  Mean   :446.0   Mean   :0.3838   Mean   :2.309                     
##  3rd Qu.:668.5   3rd Qu.:1.0000   3rd Qu.:3.000                     
##  Max.   :891.0   Max.   :1.0000   Max.   :3.000                     
##                                                                     
##      Sex                 Age            SibSp           Parch       
##  Length:891         Min.   : 0.42   Min.   :0.000   Min.   :0.0000  
##  Class :character   1st Qu.:20.12   1st Qu.:0.000   1st Qu.:0.0000  
##  Mode  :character   Median :28.00   Median :0.000   Median :0.0000  
##                     Mean   :29.70   Mean   :0.523   Mean   :0.3816  
##                     3rd Qu.:38.00   3rd Qu.:1.000   3rd Qu.:0.0000  
##                     Max.   :80.00   Max.   :8.000   Max.   :6.0000  
##                     NA's   :177                                     
##     Ticket               Fare           Cabin             Embarked        
##  Length:891         Min.   :  0.00   Length:891         Length:891        
##  Class :character   1st Qu.:  7.91   Class :character   Class :character  
##  Mode  :character   Median : 14.45   Mode  :character   Mode  :character  
##                     Mean   : 32.20                                        
##                     3rd Qu.: 31.00                                        
##                     Max.   :512.33                                        
## 
##   Pclass      Sex      Age    SibSp    Parch     Fare Embarked 
##        0        0      177        0        0        0        0
##           Age.V1                   SibSp.V1                  Parch.V1         
##  Min.   :-2.222907606050   Min.   :-0.474278822276   Min.   :-0.473407724568  
##  1st Qu.:-0.565418899186   1st Qu.:-0.474278822276   1st Qu.:-0.473407724568  
##  Median :-0.104578665582   Median :-0.474278822276   Median :-0.473407724568  
##  Mean   : 0.000000000000   Mean   : 0.000000000000   Mean   : 0.000000000000  
##  3rd Qu.: 0.433068273622   3rd Qu.: 0.432550428042   3rd Qu.:-0.473407724568  
##  Max.   : 3.889370025650   Max.   : 6.780355180270   Max.   : 6.970232556440  
##           Fare.V1                   Pclass_X2.V1        
##  Min.   :-0.6480576784030   Min.   :-5.09865182364e-01  
##  1st Qu.:-0.4888736530040   1st Qu.:-5.09865182364e-01  
##  Median :-0.3571902456650   Median :-5.09865182364e-01  
##  Mean   : 0.0000000000000   Mean   : 1.00000000000e-16  
##  3rd Qu.:-0.0242327406776   3rd Qu.:-5.09865182364e-01  
##  Max.   : 9.6617401049800   Max.   : 1.95910154310e+00  
##          Pclass_X3.V1                 Sex_male.V1         
##  Min.   :-1.10730408401e+00   Min.   :-1.35481262133e+00  
##  1st Qu.:-1.10730408401e+00   1st Qu.:-1.35481262133e+00  
##  Median : 9.02080720168e-01   Median : 7.37281045230e-01  
##  Mean   :-1.00000000000e-16   Mean   :-1.00000000000e-16  
##  3rd Qu.: 9.02080720168e-01   3rd Qu.: 7.37281045230e-01  
##  Max.   : 9.02080720168e-01   Max.   : 7.37281045230e-01  
##        Embarked_C.V1             Embarked_Q.V1      
##  Min.   :-0.481772097386   Min.   :-0.307389700253  
##  1st Qu.:-0.481772097386   1st Qu.:-0.307389700253  
##  Median :-0.481772097386   Median :-0.307389700253  
##  Mean   : 0.000000000000   Mean   : 0.000000000000  
##  3rd Qu.:-0.481772097386   3rd Qu.:-0.307389700253  
##  Max.   : 2.073340633390   Max.   : 3.249548259820  
##         Embarked_S.V1        
##  Min.   :-1.61380333401e+00  
##  1st Qu.:-1.61380333401e+00  
##  Median : 6.18958732142e-01  
##  Mean   :-1.00000000000e-16  
##  3rd Qu.: 6.18958732142e-01  
##  Max.   : 6.18958732142e-01

8. Alasan Dilakukan Reduksi Dimensi

Dalam dataset Titanic yang telah melalui proses pembersihan, encoding, dan scaling, jumlah fitur meningkat karena transformasi variabel kategorikal menjadi variabel numerik (misalnya melalui one-hot encoding). Kondisi ini menghasilkan ruang fitur berdimensi lebih tinggi dibandingkan data mentah. Dimensi tinggi sering menyebabkan beberapa permasalahan umum, seperti multikolinearitas antar fitur numerik (contoh: Age, Fare, SibSp, dan Parch) serta meningkatnya noise pada fitur yang kurang relevan.

Selain itu, metode clustering yang akan digunakan—terutama ensemble clustering, constraint-based clustering, dan genetic clustering—lebih stabil dan bekerja lebih efisien pada representasi data yang ringkas dan minim redundansi. Reduksi dimensi diperlukan untuk mengekstraksi struktur utama dalam data dan meningkatkan separabilitas cluster. Secara khusus, visualisasi hasil cluster juga membutuhkan representasi 2D atau 3D agar pola dan pemisahan cluster dapat diamati secara intuitif. Oleh karena itu, reduksi dimensi digunakan untuk menurunkan kompleksitas data, memperkuat struktur pola internal, sekaligus mempermudah interpretasi hasil clustering pada tahap berikutnya.


8.1. Teknik Reduksi Dimensi yang Digunakan

2.1 Principal Component Analysis (PCA)

PCA merupakan teknik reduksi dimensi linear yang paling umum digunakan. PCA bekerja dengan menemukan kombinasi linier baru dari fitur-fitur asli (disebut principal components) yang mampu menjelaskan variansi terbesar pada data. Komponen pertama (PC1) menangkap variansi terbesar, diikuti PC2, PC3, dan seterusnya. PCA memastikan bahwa komponen-komponen tersebut bersifat orthogonal, sehingga tidak memiliki korelasi satu sama lain.

PCA dipilih karena beberapa alasan praktis:

  1. Cocok untuk data numerik hasil encoding dan scaling.
  2. Dapat menghapus noise serta memperbaiki struktur cluster.
  3. Memberikan metrik jelas berupa explained variance ratio untuk memilih jumlah komponen optimal.
  4. Perhitungan cepat dan stabil untuk dataset berukuran sedang seperti Titanic.

Pada analisis ini, PCA digunakan sebagai teknik utama untuk memproyeksikan data ke ruang berdimensi rendah (2–3 dimensi) sebelum proses clustering.

## Importance of components:
##                           PC1    PC2    PC3    PC4     PC5     PC6    PC7
## Standard deviation     1.4315 1.3838 1.3231 1.0684 0.97819 0.88361 0.8087
## Proportion of Variance 0.2049 0.1915 0.1751 0.1142 0.09569 0.07808 0.0654
## Cumulative Proportion  0.2049 0.3964 0.5715 0.6856 0.78131 0.85938 0.9248
##                            PC8     PC9    PC10
## Standard deviation     0.74044 0.44585 0.07144
## Proportion of Variance 0.05483 0.01988 0.00051
## Cumulative Proportion  0.97961 0.99949 1.00000

##  [1] 0.2049290287 0.1914919078 0.1750534784 0.1141470015 0.0956850140
##  [6] 0.0780771245 0.0654026503 0.0548252683 0.0198782120 0.0005103146
##  [1] 0.2049290 0.3964209 0.5714744 0.6856214 0.7813064 0.8593836 0.9247862
##  [8] 0.9796115 0.9994897 1.0000000

9.Untuk setiap algoritma: cara pemilihan parameter, fitting, evaluasi

ENSEMBLE CLUSTERING

Parameter Utama

  • k: jumlah klaster untuk model individual
  • reps: jumlah model base learners
  • Base algorithms: k-means, pam, hierarchical, dsb.
  • Metode konsensus: majority voting, CSPA, HGPA, MCLA (diceR)

Proses (Ringkas)

  1. Menjalankan beberapa algoritma clustering pada dataset.
  2. Menggabungkan partisi melalui matriks co-association.
  3. Menghasilkan satu solusi clustering gabungan.

Kode

set.seed(123)
ensemble_pca <- diceR::ensemble_data(
x = data_pca,
nk = 3,
reps = 10,
algorithms = c("kmeans", "pam", "hc")
)


ensemble_result_pca <- diceR::consensus_cluster(ensemble_pca)
cluster_ensemble_pca <- ensemble_result_pca$cluster
table(cluster_ensemble_pca)

Evaluasi:

silhouette_clean <- silhouette(cluster_ensemble_clean, dist(data_clean))
summary(silhouette_clean)

silhouette_pca <- silhouette(cluster_ensemble_pca, dist(data_pca))
summary(silhouette_pca)

CONSTRAINT-BASED CLUSTERING

Parameter Utama

  • k: jumlah cluster
  • ML: daftar pasangan must-link
  • CL: daftar pasangan cannot-link
  • Algoritma dasar: COP-KMeans, PCKMeans, atau constrained-kmeans

Proses (Ringkas)

  1. Mendefinisikan constraint (domain knowledge).
  2. Mengoptimalkan objective function K-Means dengan penalti constraint.
  3. Menghasilkan cluster yang patuh terhadap aturan.

Contoh Constraint (Dummy)

must_link <- matrix(c(1,2, 10,11), ncol=2, byrow=TRUE) cannot_link <- matrix(c(3,4, 20,21), ncol=2, byrow=TRUE)

Kode

set.seed(123)
constraint_pca <- constrainedKMeans(
X = data_pca,
k = 3,
ml = must_link,
cl = cannot_link
)

cluster_constraint_pca <- constraint_pca$cluster
table(cluster_constraint_pca)

5.7 Evaluasi

silhouette(cluster_constraint_clean, dist(data_clean)) %>% summary()
silhouette(cluster_constraint_pca, dist(data_pca)) %>% summary()

GENETIC (EVOLUTIONARY) CLUSTERING

Parameter Utama

  • popSize: ukuran populasi
  • maxiter: jumlah generasi
  • pmutation: probabilitas mutasi
  • fitness function: misal memaksimalkan Silhouette

Proses (Ringkas)

  1. Membuat populasi awal berupa solusi clustering acak.
  2. Evaluasi fitness tiap individu.
  3. Seleksi – crossover – mutasi.
  4. Iterasi hingga solusi stabil atau mencapai generasi maksimum.

Fitness Function

fitness_cluster <- function(labels, data) {
sil <- silhouette(labels, dist(data))
mean(sil[,3])
}

Genetic Algorithm

set.seed(123)
GA_pca <- GA::ga(
type = "permutation",
fitness = function(sol) fitness_cluster(sol %% 3 + 1, data_pca),
nBits = nrow(data_pca),
popSize = 20,
maxiter = 50,
pmutation = 0.1
)


cluster_genetic_pca <- GA_pca@solution[1,] %% 3 + 1
table(cluster_genetic_pca)

Evaluasi

silhouette(cluster_genetic_clean, dist(data_clean)) %>% summary()
silhouette(cluster_genetic_pca, dist(data_pca)) %>% summary()

10. Visualisasi

1. PERSIAPAN DATA (WAJIB DIJALANKAN SEBELUM SEMUA ALGORITMA)

2. ENSEMBLE CLUSTERING

2D plot and Silhouette

## cluster_ensemble_pca
##   1   2   3 
## 240 222 429
## Silhouette of 891 units in 3 clusters from silhouette.default(x = as.integer(cluster_ensemble_pca), dist = dist(data_pca)) :
##  Cluster sizes and average silhouette widths:
##       240       222       429 
## 0.1856931 0.3292305 0.4098493 
## Individual silhouette widths:
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -0.09309  0.18530  0.31180  0.32938  0.49609  0.58572
##   cluster size ave.sil.width
## 1       1  240          0.19
## 2       2  222          0.33
## 3       3  429          0.41

Heatmap

Dendogram

DBSCAN

UMAP

3. CONSTRAINT-BASED CLUSTERING

2D Plot

## cluster_B
##   1   2   3 
##  78 171 642
## Silhouette of 891 units in 3 clusters from silhouette.default(x = cluster_B, dist = dist(X)) :
##  Cluster sizes and average silhouette widths:
##        78       171       642 
## 0.6512588 0.3911212 0.3878370 
## Individual silhouette widths:
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -0.3339  0.3417  0.4091  0.4115  0.4820  0.7579

Heatmap

Dendogram

UMAP

4. GENETIC / EVOLUTIONARY CLUSTERING

Fitness (Silhouette)

Model GA menggunakan pendekatan:

  • Solusi = deretan angka yang dikonversi menjadi cluster (1–3)
  • GA akan memaksimalkan silhouette

2D PLOT

## cluster_genetic_pca
##   1   2   3 
## 297 297 297
## Silhouette of 891 units in 3 clusters from silhouette.default(x = cluster_genetic_pca, dist = dist(data_pca)) :
##  Cluster sizes and average silhouette widths:
##          297          297          297 
## -0.005654418 -0.008638091 -0.004637173 
## Individual silhouette widths:
##       Min.    1st Qu.     Median       Mean    3rd Qu.       Max. 
## -0.0402499 -0.0125189 -0.0055805 -0.0063099  0.0003728  0.0233267
##   cluster size ave.sil.width
## 1       1  297         -0.01
## 2       2  297         -0.01
## 3       3  297          0.00

HEATMAP

Dedogram

UMAP

11. Evaluasi

a. Silhouette Score

  • Sudah dilakukan di semua pipeline.
  • Mengukur seberapa mirip objek terhadap cluster sendiri dibanding cluster lain.
  • Nilai: -1 sampai 1 (semakin mendekati 1 → cluster jelas terpisah).
# Contoh perhitungan Silhouette untuk semua algoritma
sil_ensemble <- mean(silhouette(cluster_ensemble_pca, dist(data_pca))[, 3])
sil_constraint <- mean(silhouette(cluster_B, dist(data_pca))[, 3])
sil_genetic <- mean(silhouette(cluster_genetic_pca, dist(data_pca))[, 3])

sil_scores <- data.frame(
  Algorithm = c("Ensemble", "Constraint", "Genetic"),
  Silhouette = c(sil_ensemble, sil_constraint, sil_genetic)
)
sil_scores

b. Davies-Bouldin Index (DB Index)

  • Mengukur compactness vs. separation cluster.
  • Nilai kecil → cluster lebih baik.
  • Paket: clusterSim atau factoextra.
library(clusterSim)

db_ensemble <- index.DB(data_pca, cluster_ensemble_pca)$DB
db_constraint <- index.DB(data_pca, cluster_B)$DB
db_genetic <- index.DB(data_pca, cluster_genetic_pca)$DB

db_scores <- data.frame(
  Algorithm = c("Ensemble", "Constraint", "Genetic"),
  DB_Index = c(db_ensemble, db_constraint, db_genetic)
)
db_scores

c. Calinski-Harabasz Index (CH Index)

  • Mengukur rasio antar cluster vs intra cluster.
  • Nilai tinggi → cluster lebih baik.
library(factoextra)

ch_ensemble <- calinhara(data_pca, cluster_ensemble_pca)
ch_constraint <- calinhara(data_pca, cluster_B)
ch_genetic <- calinhara(data_pca, cluster_genetic_pca)

ch_scores <- data.frame(
  Algorithm = c("Ensemble", "Constraint", "Genetic"),
  CH_Index = c(ch_ensemble, ch_constraint, ch_genetic)
)
ch_scores

d. Stability

  • Ukur seberapa konsisten hasil cluster jika data di-resample atau algoritma dijalankan ulang.
  • Bisa dilakukan dengan bootstrap atau subsampling dan menghitung ARI antar run.
# Contoh sederhana: jalankan clustering 2x, hitung ARI antar run
set.seed(123)
cluster_run1 <- cluster_genetic_pca
cluster_run2 <- GA_pca@solution[1, ] %% 3 + 1
stability_genetic <- adjustedRandIndex(cluster_run1, cluster_run2)
stability_genetic
## [1] 1

Runtime

  • Ukur waktu eksekusi tiap algoritma menggunakan system.time()
system.time({
  res <- dice(data_pca, nk = 3, reps = 10, algorithms = c("km","pam","hc"))
})
## Selecting k and imputing non-clustered cases
## Computing consensus functions
## Evaluating output with consensus function results
## Diverse Cluster Ensemble Completed
##    user  system elapsed 
##   28.74    0.73   29.57

Perbandingan

Algorithm Silhouette DB Index CH Index
Ensemble 0.329 1.479 277.644
Constraint 0.412 1.159 288.705
Genetic -0.006 42.519 0.449

Analisis Metrik

Silhouette

  • Nilai tertinggi → Constraint (0.412)
  • Ensemble sedikit lebih rendah (0.329), Genetic sangat rendah / negatif (-0.006) → menandakan cluster Genetic tidak jelas atau sangat tumpang tindih di data PCA.

Davies-Bouldin (DB)

  • Nilai terkecil → Constraint (1.159)
  • Ensemble cukup tinggi (1.479), Genetic sangat tinggi (42.519) → Genetic cluster sangat buruk dalam compactness vs separation.

Calinski-Harabasz (CH)

  • Nilai tertinggi → Constraint (288.705)
  • Ensemble cukup tinggi (277.644), Genetic hampir nol (0.449) → Genetic cluster tidak membentuk cluster yang baik secara antar-intra cluster ratio.

12. Kesimpulan dari metrik

  1. Constraint-Based Clustering

    • Memiliki Silhouette tertinggi, DB index terkecil, CH index tertinggi → secara internal cluster paling jelas dan compact.
  2. Ensemble Clustering

    • Cukup baik, masih bisa diterima, tapi kurang optimal dibanding Constraint.
  3. Genetic / Evolutionary Clustering

    • Nilai negatif / ekstrem di semua metrik → cluster tidak stabil, tidak jelas, atau tidak sesuai struktur data.

Jadi berdasarkan internal validity, Constraint-Based Clustering adalah metode terbaik untuk dataset ini.


Rekomendasi

  1. Gunakan Constraint-Based Clustering jika:

    • Terdapat prior knowledge / constraints (must-link / cannot-link) yang dapat membantu clustering.
    • Tujuan utama adalah cluster yang compact, terpisah jelas, dan stabil.
  2. Gunakan Ensemble Clustering sebagai alternatif jika:

    • Ingin menggabungkan beberapa algoritma untuk robustness.
    • Namun perlu optimasi parameter atau preprocessing tambahan agar kualitas cluster meningkat.
  3. Hindari Genetic / Evolutionary Clustering untuk dataset ini, karena:

    • Hasil cluster sangat buruk menurut semua metrik internal.
    • Runtime kemungkinan tinggi dan cluster tidak stabil.

Catatan tambahan

  • Jika ada ground truth label di masa depan → dapat dihitung ARI/NMI untuk validasi eksternal.
  • Jika dataset lebih besar atau kompleks → Constraint-Based Clustering tetap direkomendasikan karena fleksibel dengan aturan domain (must-link/cannot-link).