Kursus
Setelah Anda melatih model klastering, bagaimana cara mengetahui apakah klasternya bagus?
Tidak ada jawaban yang universal. Dalam pembelajaran terawasi tradisional, Anda dapat membandingkan prediksi dengan label aktual dan memperoleh angka akurasi. Anda tidak bisa melakukan itu pada klastering. Anda memilih k=5, tetapi apakah nilai k yang berbeda akan lebih baik? Tanpa label, Anda tidak bisa mengetahui apakah algoritma menemukan struktur atau hanya membagi data menjadi potongan acak.
Skor silhouette adalah metrik yang Anda cari. Metrik ini menunjukkan seberapa baik setiap titik masuk ke dalam klaster yang ditetapkan relatif terhadap klaster terdekat berikutnya, dan ini adalah salah satu metrik yang paling banyak digunakan. Ia bekerja tanpa label dan mudah ditafsirkan.
Dalam artikel ini, saya akan mengulas rumusnya dan cara membacanya, menampilkan contoh Python dengan scikit-learn, serta membahas skenario kapan ini merupakan solusi ideal dan kapan tidak.
Baru mengenal klastering? Baca tutorial Pengantar Klastering k-Means dengan scikit-learn untuk mempelajari cara kerja algoritmanya dan cara menggunakannya di Python.
Apa itu Skor Silhouette?
Skor silhouette adalah angka antara -1 dan 1 yang memberi tahu Anda seberapa baik setiap titik masuk ke dalam klasternya.
Angka ini menunjukkan dua hal:
- Seberapa dekat suatu titik dengan titik-titik lain dalam klasternya sendiri
- Seberapa jauh jaraknya dari klaster terdekat yang bukan miliknya
Jika titik berada jauh di dalam grupnya sendiri dan jauh dari yang lain, skornya tinggi. Jika berada di tepi, lebih dekat ke klaster tetangga daripada ke klasternya sendiri, skornya rendah.
Intinya, itulah keseimbangan yang ditunjukkan oleh skor silhouette. Ia mencakup seberapa rapat titik-titik dikelompokkan dalam setiap klaster dan seberapa baik klaster-klaster terpisah satu sama lain. Keduanya sama pentingnya. Klastering yang mengelompokkan titik dengan baik tetapi menempatkan klaster saling bertumpuk tidak berguna, begitu pula klastering yang memisahkan klaster dengan baik tetapi menyebarkan titik secara longgar di dalamnya.

Klaster yang terpisah dengan baik dibandingkan dengan klaster yang saling tumpang tindih
Skor yang lebih tinggi berarti klaster lebih terdefinisi dengan baik. Skor mendekati 1 berarti titik-titik terletak rapat di dalam klasternya dan jauh dari yang lain. Skor mendekati 0 berarti klaster saling tumpang tindih atau batasnya tidak jelas. Skor negatif berarti titik lebih dekat ke klaster lain daripada klaster yang ditetapkan.
Bagaimana Cara Kerja Skor Silhouette?
Setiap titik mendapatkan skor silhouette masing-masing, dan skor itu berasal dari dua jarak.
Yang pertama adalah seberapa jauh titik dari titik-titik lain dalam klaster yang ditetapkan, secara rata-rata. Jika kecil, titik berada dekat dengan yang lain dalam klaster. Jika besar, titik terikat longgar pada klasternya.
Yang kedua adalah seberapa jauh titik dari titik-titik dalam klaster tetangga terdekat, secara rata-rata. Jika besar, titik jelas terpisah dari klaster lain. Jika kecil, titik berada dekat dengan batas.

Jarak sebuah titik ke klaster
Nilai silhouette membandingkan dua angka ini. Titik yang jauh di dalam klasternya dan jauh dari yang lain mendapatkan skor tinggi. Titik di tepi (dekat dengan klaster lain) mendapatkan skor rendah. Titik yang lebih dekat dengan klaster lain daripada klasternya sendiri mendapatkan skor negatif.
Hal yang perlu diingat di sini adalah bahwa salah satu jarak saja tidak cukup.
Sebuah klaster yang rapat bisa saja terletak tepat di sebelah klaster lain. Klaster yang terpisah dengan baik bisa saja tersebar secara internal. Anda memerlukan kedua jarak untuk mempercayai penetapan tersebut.
Rumus Skor Silhouette
Berikut rumus untuk satu titik:

Rumus skor silhouette
Dengan:
-
aadalah jarak rata-rata dari titik ke semua titik lain dalam klaster yang sama -
badalah jarak rata-rata dari titik ke semua titik dalam klaster tetangga terdekat
Rumus ini membagi selisih antara b dan a dengan yang lebih besar di antara keduanya.
Secara umum, Anda dapat menggunakan panduan berikut untuk menafsirkan skor:
-
Ketika
bjauh lebih besar daripadaa: Titik jauh dari klaster lain dan dekat dengan klasternya sendiri. Pembilang mendekatib, penyebut jugab, dan skornya mendekati 1 -
Ketika
ajauh lebih besar daripadab: Titik lebih dekat ke klaster lain daripada ke klasternya sendiri. Pembilang adalah bilangan negatif besar yang mendekati-a, penyebutnyaa, dan skornya mendekati -1 -
Ketika
adanbkira-kira sama: Titik berada di batas antara dua klaster. Pembilang mendekati 0, begitu pula skornya
Detail lebih lanjut ada di bagian berikutnya.
Cara Menafsirkan Skor Silhouette
Berikut panduan kasar untuk membaca skor silhouette:
- Mendekati 1: Titik-titik berada jauh di dalam klasternya dan jauh dari yang lain
- Sekitar 0,7: Klastering bagus, grup berbeda jelas dan titik-titik dekat dengan titik lain dalam klasternya
- Sekitar 0,5: Klastering masuk akal, ada sedikit tumpang tindih antar klaster, tetapi masih dapat dibedakan
- Dekat 0: Klaster saling tumpang tindih atau batasnya tidak jelas. Strukturnya mungkin tidak nyata
- Di bawah 0: Titik-titik lebih dekat ke klaster yang salah. Ini bisa terjadi saat Anda memilih jumlah klaster yang keliru atau datanya memang tidak mudah dikelompokkan sejak awal.
Batas-batas di atas hanyalah panduan kasar. Apa yang dianggap sebagai skor silhouette yang baik bergantung pada dataset.
Data yang jarang dan berdimensi tinggi sering menghasilkan skor lebih rendah bahkan ketika klasternya bagus. Data yang padat dan terpisah dengan baik dapat menghasilkan skor di atas 0,7. Anda sebaiknya membandingkan skor antar model pada dataset yang sama, bukan terhadap ambang universal.
Cara Menghitung Skor Silhouette
Anda menghitung skor silhouette satu per satu titik. Begini cara kerjanya untuk satu titik.
Langkah 1: Hitung a, jarak rata-rata dari titik ke setiap titik lain dalam klasternya sendiri. Jika titik berada dalam klaster dengan 4 titik lain, dan jarak ke titik-titik tersebut adalah 1,2; 1,5; 1,0; dan 1,3:

Perhitungan skor silhouette (1)
Langkah 2: Temukan klaster tetangga terdekat (selain klaster milik titik tersebut) dengan jarak rata-rata terendah dari titik. Lalu hitung b, jarak rata-rata dari titik ke setiap titik dalam klaster tersebut. Jika klaster terdekat memiliki 5 titik dengan jarak 2,4; 2,8; 3,0; 2,6; dan 2,7:

Perhitungan skor silhouette (2)
Langkah 3: Masukkan a dan b ke dalam rumus:

Perhitungan skor silhouette (3)
Langkah 4: Ulangi untuk setiap titik dalam dataset. Skor silhouette keseluruhan untuk klastering adalah rata-rata dari semua skor titik.
Contoh Skor Silhouette di Python
Scikit-learn menyediakan dua fungsi untuk menghitung skor silhouette, keduanya di dalam sklearn.metrics:
-
silhouette_score()mengembalikan skor rata-rata untuk keseluruhan klastering -
silhouette_samples()mengembalikan skor untuk setiap titik individual
Berikut cara menggunakannya dengan KMeans pada dataset sintetis:
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score, silhouette_samples
# Synthetic data with 4 clusters
X, _ = make_blobs(n_samples=500, centers=4, cluster_std=1.0, random_state=42)
# Clustering model
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
labels = kmeans.fit_predict(X)
# Overall silhouette score
score = silhouette_score(X, labels)
print(f"Overall silhouette score: {score:.3f}")
# Per-point silhouette values
sample_scores = silhouette_samples(X, labels)
print(f"First 5 point scores: {sample_scores[:5]}")
Anda akan mendapatkan output berikut saat menjalankan cuplikan kode di atas:

Output contoh Python
Skor keseluruhan sebesar 0,791 berarti empat klaster terdefinisi dan terpisah dengan baik.
Skor per titik memungkinkan Anda menganalisis setiap titik data.
Titik dengan skor individual tinggi berada jauh di dalam klasternya. Titik dengan skor rendah atau negatif berada di batas atau salah penetapan, yang berguna untuk mendeteksi outlier atau meninjau titik-titik di perbatasan.
Memilih Jumlah Klaster yang Optimal
Salah satu penggunaan paling umum dari skor silhouette adalah memilih k yang tepat untuk KMeans.
Langkah-langkahnya mencakup tiga tahap:
- Latih KMeans untuk rentang nilai k
- Hitung skor silhouette untuk setiap pelatihan
- Pilih
kdengan skor tertinggi
Berikut kodenya:
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score
X, _ = make_blobs(n_samples=500, centers=4, cluster_std=1.0, random_state=42)
# Fit KMeans for k=2 to k=10 and keep track of the silhouette score for each
k_values = range(2, 11)
scores = []
for k in k_values:
kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
labels = kmeans.fit_predict(X)
scores.append(silhouette_score(X, labels))
print(f"k={k}: silhouette = {scores[-1]:.3f}")
Ini adalah skor output yang akan Anda lihat untuk setiap k:

Skor silhouette pada berbagai nilai k
Skor tertinggi berada pada k=4. Itulah nilai yang sebaiknya Anda pilih.
Hal yang perlu diingat adalah skor silhouette tidak menggantikan pengetahuan domain. Jika masalah bisnis Anda memerlukan 5 segmen pelanggan dan silhouette tertinggi ada di 4, jangan otomatis memilih 4. Metrik ini menunjukkan di mana data memiliki struktur yang paling bersih, tetapi terkadang jumlah klaster yang tepat adalah yang sesuai dengan sesuatu yang bermakna dalam masalah Anda.
Skor Silhouette vs. Metrik Klastering Lainnya
Skor silhouette mungkin merupakan metrik paling umum untuk mengevaluasi klastering, tetapi bukan satu-satunya. Berikut perbandingannya dengan alternatif lain.
Skor silhouette vs. metode siku (elbow)
Metode siku adalah teknik visual untuk memilih k dalam KMeans. Anda melatih model untuk rentang nilai k, memplot inersia (jumlah kuadrat dalam-klaster) terhadap k, dan memilih nilai di mana kurva memiliki tekukan tajam.
Keunggulan metode siku adalah cepat dan mudah dijalankan. Namun "siku" tidak selalu jelas. Pada data yang berantakan, kurva terkadang terlihat mulus dan Anda tidak bisa mengetahui di mana tekukannya.
Skor silhouette memberi Anda angka nyata untuk setiap k, sehingga Anda bisa membuat perbandingan yang lebih bermakna. Perhitungannya lebih lambat, tetapi tidak menyerahkan keputusan pada interpretasi visual.
Gunakan metode siku untuk pemeriksaan cepat. Gunakan skor silhouette saat Anda membutuhkan jawaban yang dapat Anda pertanggungjawabkan.
Skor silhouette vs. indeks Davies-Bouldin
Indeks Davies-Bouldin (DBI) mengukur kesamaan rata-rata antara setiap klaster dan klaster yang paling mirip dengannya. DBI yang lebih rendah berarti klastering lebih baik, dan skor sempurna adalah 0.
DBI menggunakan centroid klaster untuk menghitung kesamaan, yang membuatnya lebih cepat dihitung daripada skor silhouette pada dataset besar. Ia juga menggunakan intuisi serupa dalam hal menghargai klaster yang rapat dan terpisah dengan baik.
Kekurangannya, DBI hanya memberi tahu Anda tentang klastering secara keseluruhan. Skor silhouette juga memberikan skor per titik, sehingga Anda dapat menemukan titik perbatasan dan outlier.
Gunakan DBI jika Anda bekerja dengan dataset besar dan kecepatan penting. Gunakan skor silhouette saat Anda ingin melihat titik-titik individual.
Skor silhouette vs. indeks Calinski-Harabasz
Indeks Calinski-Harabasz (CH), juga disebut kriteria rasio varians, adalah rasio dispersi antar-klaster terhadap dispersi dalam-klaster. Skor yang lebih tinggi berarti klastering lebih baik, dan skornya tak berbatas (tanpa batas atas).
CH cepat dan bekerja baik pada dataset besar karena hanya melibatkan statistik tingkat klaster. Seperti silhouette dan DBI, ini bekerja paling baik pada klaster yang cembung dan terpisah dengan baik.
CH juga tidak memiliki skala alami, sehingga Anda hanya dapat membandingkan skor CH antar model pada dataset yang sama, bukan lintas dataset berbeda.
Gunakan CH saat dataset Anda besar dan Anda perlu hasil cepat. Gunakan skor silhouette saat Anda menginginkan interpretabilitas dan wawasan untuk titik data individual.
Metrik klastering internal vs. eksternal
Metrik di atas (silhouette, DBI, CH, siku) semuanya adalah metrik internal. Mereka mengevaluasi klastering hanya menggunakan data itu sendiri, tanpa label kebenaran dasar. Itu membuatnya menjadi pilihan standar untuk masalah klastering dunia nyata, di mana label tidak ada.
Metrik eksternal membandingkan penetapan klaster terhadap label yang diketahui. Adjusted Rand Index (ARI), Normalized Mutual Information (NMI), dan homogeneity adalah contoh umum. Metrik ini digunakan saat Anda memiliki label dan ingin menguji seberapa baik algoritma klastering menebaknya.
Gunakan metrik internal saat Anda tidak memiliki label, yang merupakan kasus tipikal. Gunakan metrik eksternal saat Anda melakukan benchmark algoritma klastering pada data berlabel.
Berikut rekap metrik secara berdampingan:
| Metode | Rentang | Nilai terbaik | Kecepatan | Gunakan untuk |
|---|---|---|---|---|
| Skor silhouette | -1 hingga 1 | Mendekati 1 | Lambat pada dataset besar | Interpretabilitas dan wawasan per titik |
| Metode siku | 0 hingga tak terhingga | Cari tekukan (elbow) | Cepat | Pemeriksaan cepat |
| Indeks Davies-Bouldin | 0 hingga tak terhingga | Mendekati 0 | Cepat | Dataset besar |
| Indeks Calinski-Harabasz | 0 hingga tak terhingga | Semakin tinggi semakin baik | Cepat | Dataset besar tanpa label |
Skor silhouette dibandingkan dengan alternatif
Keterbatasan Skor Silhouette
Skor silhouette memiliki beberapa keterbatasan yang perlu diketahui:
- Mengasumsikan klastering berbasis jarak: Skor silhouette secara default berbasis jarak Euclidean. Ini bekerja baik untuk KMeans dan algoritma berbasis centroid lainnya, tetapi kurang cocok untuk metode berbasis kerapatan seperti DBSCAN, di mana klaster memiliki bentuk sewenang-wenang dan tidak ada centroid yang jelas
- Bekerja paling baik dengan klaster kecil yang terpisah dengan baik: Metrik ini mengganjar klaster yang rapat, berbentuk bulat, dan saling berjauhan. Jika data Anda memiliki klaster yang berdekatan atau tumpang tindih, skornya akan rendah meskipun klasteringnya benar
- Kurang ideal untuk bentuk klaster tidak beraturan: Klaster dunia nyata tidak selalu cembung. Jika itu terjadi pada data Anda, klaster akan mendapat skor silhouette rendah meskipun penetapannya benar
- Biaya komputasi pada dataset besar: Menghitung skor silhouette memerlukan jarak berpasangan antar titik, yang skalanya
O(n^2). Pada dataset dengan jutaan titik, ini menjadi mahal - Sensitivitas terhadap metrik jarak yang dipilih: Skor berubah tergantung apakah Anda menggunakan Euclidean, Manhattan, kosinus, atau jarak lainnya. Jika data Anda tidak mengikuti asumsi Euclidean, skor silhouette dapat menyesatkan
Praktik Terbaik Menggunakan Skor Silhouette
Skor silhouette bekerja paling baik saat Anda mengikuti beberapa praktik dasar:
- Bandingkan beberapa solusi klastering: Jangan hanya menghitung satu skor silhouette. Anda sebaiknya melatih model klastering dengan berbagai nilai
k(atau algoritma berbeda) dan membandingkan skornya berdampingan - Visualisasikan klaster bersamaan dengan skornya: Angka saja tidak menceritakan keseluruhan cerita. Plot klaster Anda dan lihat apakah bentuknya masuk akal
- Jangan mengoptimalkan hanya untuk skor tertinggi: Klastering dengan k=2 sering kali memiliki skor lebih tinggi daripada
k=5bahkan ketika 5 klaster bermakna dalam masalah Anda - Gabungkan dengan pengetahuan domain: Skor memberi tahu Anda di mana data memiliki struktur paling bersih. Pengetahuan domain memberi tahu Anda struktur mana yang benar-benar berguna. Gunakan keduanya
- Evaluasi beberapa metrik klastering: Silhouette, DBI, CH, dan metrik lainnya mengukur kualitas klastering secara berbeda. Saat mereka sepakat, Anda berada di jalur yang baik, namun saat tidak, lihat datanya
Kesimpulan
Skor silhouette adalah salah satu cara paling intuitif untuk mengevaluasi klastering karena menunjukkan seberapa rapat titik-titik dikelompokkan dan seberapa baik klaster-klaster terpisah.
Anda menghitungnya per titik, merata-ratakan hasilnya, dan mendapatkan satu angka antara -1 dan 1. Skor yang lebih dekat ke 1 berarti klaster lebih terdefinisi dengan baik, dan skor mendekati atau di bawah 0 berarti strukturnya sebenarnya tidak benar-benar struktur
Namun skor silhouette hanyalah permulaan. Anda sebaiknya memasangkannya dengan visualisasi klaster, dan yang terpenting, pengetahuan domain Anda sendiri tentang masalahnya. Hanya ketika semuanya mengarah ke satu arah yang sama barulah Anda dapat mempercayai hasilnya.
Skor silhouette adalah bagian dari gambaran yang lebih besar tentang Unsupervised Learning in Python. Daftar hari ini dan pelajari cara melakukan klastering, transformasi, visualisasi, serta mengekstrak wawasan dari data tanpa label.
