Perbandingan Metode Clustering Berdasarkan Validasi Cluster
Sistem Machine Learning
Deskripsi Dataset
Sumber dan Konteks Data
Dataset Wine Quality tersedia secara publik di UCI Machine Learning Repository, dikembangkan oleh A. Cerdeira, F. Almeida, T. Matos, dan J. Reis (2009) dan dapat diakses di: https://archive.ics.uci.edu/dataset/186/wine+qualitys. Dataset ini berisi informasi mengenai kualitas wine merah (red wine) dan wine putih (white wine) yang diproduksi di wilayah Vinho Verde, Portugal.
Setiap baris dalam dataset merepresentasikan satu sampel wine,
sedangkan setiap kolom berisi karakteristik fisikokimia yang digunakan
untuk menilai kualitas wine tersebut. Dataset ini memiliki 11 variabel
prediktor, yaitu
fixed acidity, volatile acidiy , citric acid ,residual sugar,
chlorides , free sulfur dioxide , total sulfur dioxide , density, pH ,
sulphates , dan alcohol , serta 1 variabel
target, yaitu quality , yang menunjukkan skor kualitas
wine menurut penilaian sensorik para ahli. Dataset ini banyak digunakan
dalam penelitian dan pembelajaran machine learning untuk analisis data,
klasifikasi, regresi, serta clustering.
Tujuan Analisis
Tugas clustering ini memiliki tujuan analisis sebagai berikut: 1. Memahami karakteristik data wine melalui eksplorasi data dan analisis statistik deskriptif. 2. Melakukan preprocessing data, berupa standardisasi (scalling), untuk memastikan seluruh variabel memiliki skala yang sebanding dalam proses clustering. 3. Mengelompokkan sampel wine berdasarkan kemiripan karakteristik fisikokimianya menggunakan metode K-Means Clustering dan **Hierarchical Clustering.* 4. Mengevaluasi kualitas cluster yang terbentuk menggunakan metode validasi cluster yang sesuai. 5. Membandingkan hasil pengelompokan dari metode K-Means dan Hierarchical Clustering untuk menentukan metode yang memberikan performa terbaik. 5. Mengevaluasi kualitas cluster menggunakan metode validasi cluster yang sesuai, seperti Silhouette Coefficient, Davies-Bouldin Index, atau indeks validasi lainnya. 6. Menginterpretasikan karakteristik setiap cluster yang terbentuk sehingga diperoleh pemahaman mengenai pola alami dan segmentasi sampel wine berdasarkan sifat kimianya.
Input dan Eksplorasi Data Awal
library(readxl)
library(cluster)
library(factoextra)
wine <- read_excel("~/Documents/SML_T4/Dataset_Soal2.xlsx")
cat("Dimensi dataset:", nrow(wine), "baris x", ncol(wine), "kolom\n")Dimensi dataset: 1599 baris x 12 kolom
tibble [1,599 × 12] (S3: tbl_df/tbl/data.frame)
$ fixed acidity : num [1:1599] 7.4 7.8 7.8 11.2 7.4 7.4 7.9 7.3 7.8 7.5 ...
$ volatile acidity : num [1:1599] 0.7 0.88 0.76 0.28 0.7 0.66 0.6 0.65 0.58 0.5 ...
$ citric acid : num [1:1599] 0 0 0.04 0.56 0 0 0.06 0 0.02 0.36 ...
$ residual sugar : num [1:1599] 1.9 2.6 2.3 1.9 1.9 1.8 1.6 1.2 2 6.1 ...
$ chlorides : num [1:1599] 0.076 0.098 0.092 0.075 0.076 0.075 0.069 0.065 0.073 0.071 ...
$ free sulfur dioxide : num [1:1599] 11 25 15 17 11 13 15 15 9 17 ...
$ total sulfur dioxide: num [1:1599] 34 67 54 60 34 40 59 21 18 102 ...
$ density : num [1:1599] 0.998 0.997 0.997 0.998 0.998 ...
$ pH : num [1:1599] 3.51 3.2 3.26 3.16 3.51 3.51 3.3 3.39 3.36 3.35 ...
$ sulphates : num [1:1599] 0.56 0.68 0.65 0.58 0.56 0.56 0.46 0.47 0.57 0.8 ...
$ alcohol : num [1:1599] 9.4 9.8 9.8 9.8 9.4 9.4 9.4 10 9.5 10.5 ...
$ quality : num [1:1599] 5 5 5 6 5 5 5 7 7 5 ...
[1] 0
Prepocessing Data (Scalling)
wine_features <- wine[, 1:11] # hapus variabel quality
wine_scaled <- scale(wine_features) # scalling data
summary(wine) # sebelum scalling fixed acidity volatile acidity citric acid residual sugar
Min. : 4.60 Min. :0.1200 Min. :0.000 Min. : 0.900
1st Qu.: 7.10 1st Qu.:0.3900 1st Qu.:0.090 1st Qu.: 1.900
Median : 7.90 Median :0.5200 Median :0.260 Median : 2.200
Mean : 8.32 Mean :0.5278 Mean :0.271 Mean : 2.539
3rd Qu.: 9.20 3rd Qu.:0.6400 3rd Qu.:0.420 3rd Qu.: 2.600
Max. :15.90 Max. :1.5800 Max. :1.000 Max. :15.500
chlorides free sulfur dioxide total sulfur dioxide density
Min. :0.01200 Min. : 1.00 Min. : 6.00 Min. :0.9901
1st Qu.:0.07000 1st Qu.: 7.00 1st Qu.: 22.00 1st Qu.:0.9956
Median :0.07900 Median :14.00 Median : 38.00 Median :0.9968
Mean :0.08747 Mean :15.87 Mean : 46.47 Mean :0.9967
3rd Qu.:0.09000 3rd Qu.:21.00 3rd Qu.: 62.00 3rd Qu.:0.9978
Max. :0.61100 Max. :72.00 Max. :289.00 Max. :1.0037
pH sulphates alcohol quality
Min. :2.740 Min. :0.3300 Min. : 8.40 Min. :3.000
1st Qu.:3.210 1st Qu.:0.5500 1st Qu.: 9.50 1st Qu.:5.000
Median :3.310 Median :0.6200 Median :10.20 Median :6.000
Mean :3.311 Mean :0.6581 Mean :10.42 Mean :5.636
3rd Qu.:3.400 3rd Qu.:0.7300 3rd Qu.:11.10 3rd Qu.:6.000
Max. :4.010 Max. :2.0000 Max. :14.90 Max. :8.000
fixed acidity volatile acidity citric acid residual sugar
Min. :-2.1364 Min. :-2.27757 Min. :-1.39104 Min. :-1.1623
1st Qu.:-0.7005 1st Qu.:-0.76969 1st Qu.:-0.92903 1st Qu.:-0.4531
Median :-0.2410 Median :-0.04367 Median :-0.05634 Median :-0.2403
Mean : 0.0000 Mean : 0.00000 Mean : 0.00000 Mean : 0.0000
3rd Qu.: 0.5056 3rd Qu.: 0.62649 3rd Qu.: 0.76501 3rd Qu.: 0.0434
Max. : 4.3538 Max. : 5.87614 Max. : 3.74240 Max. : 9.1928
chlorides free sulfur dioxide total sulfur dioxide density
Min. :-1.60344 Min. :-1.4221 Min. :-1.2302 Min. :-3.53762
1st Qu.:-0.37111 1st Qu.:-0.8485 1st Qu.:-0.7438 1st Qu.:-0.60757
Median :-0.17989 Median :-0.1792 Median :-0.2574 Median : 0.00176
Mean : 0.00000 Mean : 0.0000 Mean : 0.0000 Mean : 0.00000
3rd Qu.: 0.05383 3rd Qu.: 0.4900 3rd Qu.: 0.4722 3rd Qu.: 0.57664
Max. :11.12355 Max. : 5.3656 Max. : 7.3728 Max. : 3.67890
pH sulphates alcohol
Min. :-3.69924 Min. :-1.9359 Min. :-1.8983
1st Qu.:-0.65494 1st Qu.:-0.6380 1st Qu.:-0.8661
Median :-0.00721 Median :-0.2251 Median :-0.2092
Mean : 0.00000 Mean : 0.0000 Mean : 0.0000
3rd Qu.: 0.57574 3rd Qu.: 0.4239 3rd Qu.: 0.6353
Max. : 4.52687 Max. : 7.9162 Max. : 4.2011
Metode Clustering
K-Means Clustering
## Penentuan Jumlah Cluster (k) Optimal
# Elbow Method
fviz_nbclust(wine_scaled, kmeans, method = "wss") +
labs(title = "Elbow Method - Red Wine Quality",
subtitle = "Menentukan jumlah cluster optimal (k)",
x = "Jumlah Cluster (k)",
y = "Total Within Sum of Squares")# Silhouette Method
fviz_nbclust(wine_scaled, kmeans, method = "silhouette") +
labs(title = "Silhouette Score - Red Wine Quality",
subtitle = "Nilai tertinggi = jumlah cluster optimal",
x = "Jumlah Cluster (k)",
y = "Average Silhouette Width")Penentuan jumlah cluster optimal dilakukan dengan menggunakan Elbow Method dan Silhouette Method. Elbow Method dipakai untuk menentukan jumlah cluster yang paling tepat berdasarkan nilai Within Cluster Sum of Squares (WSS). Dari grafik Elbow Method, terlihat bahwa nilai WSS mengalami penurunan yang cukup tajam dari k = 1 ke k = 2, lalu penurunannya mulai melambat saat melihat jumlah cluster yang lebih banyak. Titik paling ideal terlihat di sekitar k = 2, jadi jumlah cluster yang layak digunakan adalah 2 cluster.
Kemudian, dilakukan evaluasi menggunakan Silhouette Method. Dari grafik Silhoutte Method, nilai Average Silhouette Width tertinggi ditemukan pada k = 2. Nilai ini lebih tinggi dibandingkan dengan jumlah cluster lainnya, yang menandakan bahwa pembentukan dua cluster menghasilkan hasil kekompakan dan pemisahan antar cluster yang paling baik.
Dari hasil Elbow Method dan Silhouette Method, jumlah cluster yang dipilih untuk analisis selanjutnya adalah 2 cluster. Pemilihan ini didasarkan pada kesamaan hasil dari kedua metode yang menunjukkan bahwa k = 2 adalah jumlah cluster yang paling optimal untuk dataset Wine Quality.
# Menjalankan K-Means
set.seed(123)
km_wine <- kmeans(wine_scaled, centers = 2, nstart = 25)
km_wineK-means clustering with 2 clusters of sizes 590, 1009
Cluster means:
fixed acidity volatile acidity citric acid residual sugar chlorides
1 0.9207271 -0.6361774 0.9851367 0.16097077 0.2641746
2 -0.5383835 0.3719967 -0.5760462 -0.09412562 -0.1544728
free sulfur dioxide total sulfur dioxide density pH sulphates
1 -0.2356324 -0.2152177 0.4994664 -0.7077417 0.5314734
2 0.1377831 0.1258458 -0.2920566 0.4138430 -0.3107723
alcohol
1 0.1730540
2 -0.1011911
Clustering vector:
[1] 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 2 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 2 2 2 2 2 2
[38] 1 2 1 1 2 1 1 2 2 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2
[75] 1 1 1 2 2 2 2 1 2 1 2 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 2
[112] 2 2 1 2 1 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 1
[149] 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2
[186] 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 1 2 2 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2
[223] 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 1 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1
[260] 1 2 2 2 2 1 1 2 1 2 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1
[297] 1 2 2 2 2 1 2 2 1 1 2 1 1 2 1 2 2 2 2 2 2 2 1 2 1 2 2 1 1 1 1 1 1 1 1 1 2
[334] 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1
[371] 2 1 1 2 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 1
[408] 1 1 1 2 2 2 1 2 1 1 2 1 2 1 2 2 1 2 2 2 2 1 1 1 2 1 1 1 1 2 1 1 2 1 1 1 1
[445] 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 1 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1
[482] 1 1 1 1 1 1 1 1 1 2 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[519] 1 2 1 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1
[556] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2
[593] 1 1 2 1 1 1 2 1 2 1 2 1 2 2 1 1 1 2 1 1 2 1 1 2 2 1 1 1 2 2 1 2 2 2 2 2 2
[630] 2 2 1 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2
[667] 1 1 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 2 2 2 2 2 2 1 2 2 1 2 2 2 2 2 2 1 1 2 2
[704] 1 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2
[741] 2 2 2 1 1 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2
[778] 2 1 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 2 2 1 1 2
[815] 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 2 1
[852] 1 1 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 2 2 2 2 2 2 1 2 2 2 2 1
[889] 2 1 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 2 2 2 1 1 1 1 2 1 2 2 2 2 1 2 2 2 1
[926] 2 1 2 1 1 2 2 2 2 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 1 2
[963] 2 1 1 1 1 2 1 2 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 2 2 2 2
[1000] 2 2 1 1 2 2 2 1 1 1 1 1 1 2 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 2 2 1
[1037] 2 2 1 2 2 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 2 2
[1074] 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1
[1111] 2 2 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 2 2 1 2 2 2 1 2
[1148] 1 2 1 1 2 2 1 2 2 1 2 1 1 1 1 1 2 2 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 1 1 1 2
[1185] 2 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 2 1 2 2 2 2 2 1 1 1 2 2 1 1 1
[1222] 1 2 1 1 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[1259] 2 2 1 2 1 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 1 2 2 2 2 2
[1296] 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 2 2 2 2 2 2 2
[1333] 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 1 2 2 2 2 1 2
[1370] 2 1 1 1 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 1 1 2 1
[1407] 1 2 1 2 2 2 1 1 1 2 1 2 2 2 2 2 2 2 1 1 1 2 2 1 2 2 2 2 1 1 1 2 2 2 2 2 2
[1444] 2 2 2 2 2 2 2 2 1 2 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1
[1481] 2 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 1 1 2 2 2 2 2 2 2
[1518] 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 1 2 2 2 2 2
[1555] 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2
[1592] 2 2 2 2 2 2 2 2
Within cluster sum of squares by cluster:
[1] 6810.586 7510.572
(between_SS / total_SS = 18.5 %)
Available components:
[1] "cluster" "centers" "totss" "withinss" "tot.withinss"
[6] "betweenss" "size" "iter" "ifault"
km_clust
1 2
590 1009
Hasil clustering menunjukkan bahwa dari total 1.599 data yang diperiksa, Cluster 1 terdiri dari 590 data dan Cluster 2 terdiri dari 1.009 data. Visualisasi menggunakan PCA menjadi 2 dimensi, dimana sumbu Dim1 menunjukkan 28,2% variasi, dan Dim2 menunjukkan 17,5% variasi, jadi jika kita jumlahkan kedua dimensi itu, mereka mewakili sekitar 45,7% informasi dari data yang asli.
Dari cluster plot yang dibuat, terlihat bahwa Cluster 1 (merah) lebih banyak berada di sisi kanan dengan nilai Dim1 positif, sementara Cluster 2 (wbiru) lebih banyak ada di sisi kiri dengan nilai Dim1 negatif. Kedua cluster ini menunjukkan pemisahan yang jelas, meskipun ada sedikit area di tengah yang bercampur, yang normal karena kedua dimensi hanya menggambarkan sebagian dari total variasi data. Secara keseluruhan, gambar ini menunjukkan bahwa K-Means berhasil membagi 2 kelompok wine yang memiliki ciri yang berbeda satu sama lain.
Hierarchial Clustering
## Matriks Jarak
set.seed(123)
dist_wine <- dist(wine_scaled, method = "euclidean")
## Pemilihan Linkage Terbaik (Agglomerative Coefficient) --
linkage_methods <- c("average", "single", "complete", "ward")
names(linkage_methods) <- c("Average", "Single", "Complete", "Ward")
ac_values <- sapply(linkage_methods, function(m) round(agnes(wine_scaled, method = m)$ac, 4))
data.frame(Linkage = names(ac_values),
Agglomerative_Coefficient = ac_values,
row.names = NULL) Linkage Agglomerative_Coefficient
1 Average 0.9199
2 Single 0.8729
3 Complete 0.9548
4 Ward 0.9881
Untuk membuat model Hierarchical Clustering, gunakan cara Euclidean Distance untuk mengukur jarak antara data yang berbeda. Setelah itu, tentukan metode linkage terbaik berdasarkan nilai Agglomerative Coefficient (AC). Nilai AC yang mendekati 1 menandakan bahwa struktur cluster lebih kuat. Dari empat cara linkage yang diuji, cara Ward memberikan nilai AC tertinggi yaitu 0.9881, jadi cara ini dipilih sebagai yang terbaik untuk analisis Hierarchical Clustering berikutnya.
# => Linkage dengan AC tertinggi dipilih (Ward)
## Pemodelan menggunakan Ward's Linkage
hc_ward <- hclust(dist_wine, method = "ward.D2")
plot(
hc_ward, labels = FALSE, hang = -1,
main = "Dendrogram Hierarchical Clustering"
)
rect.hclust(
hc_ward,
k = 2,
border = "green"
) [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1
[38] 2 1 1 1 1 2 2 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1
[75] 1 2 2 1 1 1 1 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2
[112] 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
[149] 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1
[186] 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 1 1 1 1
[223] 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 1 1 1 1 2 1 2 1 1 1 2 1 2
[260] 2 1 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 1 1 1 1 1 1 1 1 2 1 1 2 2
[297] 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1
[334] 1 1 2 2 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 2 2 2 2 2 1 2
[371] 1 2 1 1 2 2 2 2 2 1 2 2 2 2 1 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 2
[408] 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 2 1 2 1 1 2 2 2 2
[445] 1 1 1 1 1 2 2 2 1 2 2 2 1 1 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 1 1
[482] 2 2 2 2 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 2 2 2 1 2 1 1 2 2 2 1 2 2
[519] 2 1 2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 2 2 1 2 1 1 2 1 1 2 1 2 1 1 1 1 2
[556] 2 2 2 2 2 2 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 1 1 2 1 1
[593] 1 2 1 1 2 2 1 2 1 2 1 2 1 1 2 1 1 1 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 1 1 1 1
[630] 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 2 1 2 2 2 1 2 1 1 2 2 1
[667] 2 2 1 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 1
[704] 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1
[741] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1
[778] 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 1 1 1 2 2 2 2 1 1 2 1 2
[815] 2 1 2 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 2
[852] 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1
[889] 1 1 1 1 2 1 1 1 2 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 2
[926] 1 1 1 2 2 1 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 1
[963] 1 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 2 2 1 2 1 1 2 1 1 1 1 1 1 1 1 1
[1000] 1 2 1 2 2 1 2 2 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 2 1 1 2 1 1 1 1 1 1 1 1 2
[1037] 2 1 2 1 1 1 1 2 2 1 1 1 2 2 1 2 1 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 2 1 2 1 1
[1074] 1 1 1 2 2 2 1 2 1 1 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1
[1111] 1 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2
[1148] 2 2 2 2 1 1 1 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 1 2 1 1 1 1 1 1 2 2 2 1 1
[1185] 1 2 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 2 1 1 1 2 2 2 1 1 2 2 1
[1222] 1 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1
[1259] 1 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1
[1296] 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 1
[1333] 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1
[1370] 1 2 2 2 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 2 2 1 2
[1407] 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1
[1444] 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2
[1481] 1 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 2
[1518] 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 1 1 1
[1555] 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 1 1
[1592] 1 1 1 1 1 1 1 2
cl_ward
1 2
1114 485
fviz_cluster(
list(
data = wine_scaled,
cluster = cl_ward
),
geom = "point",
ellipse.type = "convex",
main = "Cluster Hierarchical"
)Model Hierarchical Clustering dibuat menggunakan metode Ward’s
Linkage, yang menghasilkan dendrogram yang terbagi menjadi 2 cluster
utama yang dipisahkan pada height sekitar 65-70. . Ini menunjukkan bahwa
kedua cluster tersebut mempunyai karakteristik yang sangat berbeda.
Hasil pemotongan dendrogram menggunakan cutree() dengan k =
2 menghasilkan Cluster 1 yang terdiri dari 1.114 data dan Cluster 2 yang
terdiri dari 485 data dari total 1.599 observasi.
Visualisasi dengan PCA menunjukkan bahwa Cluster 1 (merah) mendominasi di sisi kiri dengan penyebaran yang lebih luas, sementara Cluster 2 (biru) berada di sisi kanan dengan penyebaran yang lebih rapat, dengan sedikit tumpang tindih di area tengah pada Dim1 (28.2%) dan Dim2 (17.5%).
Validasi (evaluasi) Cluster
sil_kmeans <- silhouette(km_clust, dist_wine)
sil_ward <- silhouette(cl_ward, dist_wine)
avg_sil_kmeans <- mean(sil_kmeans[, 3])
avg_sil_ward <- mean(sil_ward[, 3])
fviz_silhouette(sil_kmeans) cluster size ave.sil.width
1 1 590 0.12
2 2 1009 0.27
Validasi model K-Means menggunakan Silhouette menghasilkan rata-rata Silhouette Score yang didapat adalah 0.21, di mana Cluster 1 mendapatkan nilai 0.12 dan Cluster 2 mendapatkan nilai 0.27. Cluster 2 menunjukkan pemisahan yang lebih baik daripada Cluster 1, namun kedua nilai tersebut masih dianggap rendah karena berada di bawah 0.5.
cluster size ave.sil.width
1 1 1114 0.19
2 2 485 0.16
Sementara itu, model Hierarchical Clustering dengan menggunakan Silhouette, diperoleh rata-rata sebesar 0.18, di mana Cluster 1 mendapat nilai 0.19 dan Cluster 2 mendapat nilai 0.16. Kedua cluster memiliki nilai yang cukup mirip tetapi keduanya tetap walaupun rendah, ini menunjukkan bahwa ada tumpang tindih antara cluster di dataset wine in
Kesimpulan
Dari perbandingan kedua metode, K-Means menunjukkan nilai Silhouette Score yang lebih tinggi (0.21 lebih besar dari 0.18), yang artinya K-Means membentuk kelompok yang lebih padat dan terpisah dengan baik dibandingkan Hierarchical Clustering. Meski begitu, kedua nilai ini masih dianggap rendah karena berada di bawah 0.5, yang menunjukkan bahwa ada tumpang tindih antara kelompok dalam dataset wine ini.
Membandingkan Hasil Kedua Metode
hasil_validasi <- data.frame(
Metode = c("K-Means Clustering", "HC - Ward's Linkage"),
Avg_Silhouette_Score = round(c(avg_sil_kmeans, avg_sil_ward), 4),
Keterangan = ifelse(c(avg_sil_kmeans, avg_sil_ward) == max(avg_sil_kmeans, avg_sil_ward),
"TERBAIK", "-")
)
print(hasil_validasi) Metode Avg_Silhouette_Score Keterangan
1 K-Means Clustering 0.2137 TERBAIK
2 HC - Ward's Linkage 0.1834 -
Berdasarkan perbandingan antara kedua model, K-Means Clustering dipilih sebagai model yang paling baik karena memiliki nilai Average Silhouette Score tertinggi yaitu 0.2137, sementara Hierarchical Clustering Ward’s Linkage hanya mendapatkan nilai 0.1834. Ini berarti K-Means menciptakan kelompok yang lebih teratur dan terpisah dengan baik dalam dataset wine ini.
Karakteristik Tiap Cluster
K-Means Clustering
Cluster fixed acidity volatile acidity citric acid residual sugar chlorides
1 1 9.922712 0.4139068 0.4628814 2.765763 0.09990000
2 2 7.382260 0.5944301 0.1587611 2.406095 0.08019623
free sulfur dioxide total sulfur dioxide density pH sulphates
1 13.41017 39.38814 0.9976893 3.201847 0.7482373
2 17.31615 50.60753 0.9961955 3.375005 0.6054708
alcohol quality
1 10.60740 5.894915
2 10.31515 5.484638
Cluster 1 (590 data) adalah kelompok wine yang memiliki fixed acidity yang lebih tinggi (9,92), citric acid yang lebih tinggi (0,46), sulphates yang lebih tinggi (0,75), serta densitas yang lebih tinggi (0,9977). Selain itu, cluster ini memiliki volatile acidity yang lebih rendah (0,41) dan nilai pH yang lebih rendah (3,20). Rata-rata kualitas wine dari cluster ini sebesar 5,89, yang lebih tinggi dibandingkan cluster lainnya. Karakteristik ini menunjukkan bahwa Cluster 1 biasanya berisi anggur yang memiliki keasaman lebih tinggi dan kualitas yang lebih baik.
Cluster 2 (1.009 data) adalah kelompok wine yang mempunyai volatile acidity yang tinggi (0.59), free sulfur dioxide yang tinggi (17.32), total sulfur dioxide yang tinggi (50.61), dan pH yang tinggi (3.38). Namun, cluster ini memiliki fixed acidity yang rendah (7.38) dan citric acid yang rendah (0.16). Rata-rata kualitas wine dari cluster ini lebih rendah (5.48) jika dibandingkan dengan Cluster 1.
Hierarchial Clustering
Cluster_HC fixed acidity volatile acidity citric acid residual sugar
1 1 7.733573 0.5873968 0.1872621 2.558079
2 2 9.665773 0.3909794 0.4632577 2.494536
chlorides free sulfur dioxide total sulfur dioxide density pH
1 0.08231149 18.38959 54.64542 0.9965869 3.351813
2 0.09930722 10.09897 27.68454 0.9971137 3.217629
sulphates alcohol quality Cluster
1 0.6228905 10.22557 5.447935 1.846499
2 0.7391340 10.87643 6.068041 1.136082
Cluster 1 (1.114 data) adalah kelompok wine yang memiliki sifat dengan volatile acidity tinggi (0.59), free sulfur dioxide tinggi (18.39), total sulfur dioxide tinggi (54.65), dan pH yang juga tinggi (3.35). Namun, kelompok ini memiliki fixed acidity yang rendah (7.73) dan citric acid yang rendah (0.19). Rata-rata kualitas wine dalam kelompok ini lebih rendah (5.45) jika dibandingkan dengan Cluster 2.
Cluster 2 (485 data) adalah kelompok anggur dengan sifat yang menunjukkan fixed acidity tinggi (9.67), citric acid tinggi (0.46), sulphates tinggi (0.74), dan kadar alkohol tinggi (10.88). Meskipun begitu, kelompok ini memiliki volatile acidity yang rendah (0.39) dan total sulfur dioxide yang rendah (27.68). Rata-rata kualitas wine di kelompok ini lebih tinggi (6.07) dibandingkan dengan Cluster 1.