Kurs
Bir kümeleme modeli eğittikten sonra, kümelerin gerçekten iyi olup olmadığını nasıl anlarsınız?
Evrensel bir cevap yok. Geleneksel denetimli öğrenmede, tahminleri gerçek etiketlerle karşılaştırabilir ve bir doğruluk değeri elde edebilirsiniz. Kümelemede bunu yapamazsınız. k=5 seçtiniz, ancak farklı bir k değeri daha iyi olur muydu? Etiketler olmadan, algoritmanın yapıyı bulup bulmadığını ya da veriyi rastgele parçalara ayırıp ayırmadığını anlayamazsınız.
Aradığınız metrik silhouette skorudur. Her bir noktanın, kendisine en yakın bir sonraki kümeye göre, atandığı kümeye ne kadar iyi uyduğunu gösterir ve en yaygın kullanılan metriklerden biridir. Etiket olmadan çalışır ve yorumlaması kolaydır.
Bu yazıda, formülü ve nasıl okunacağını adım adım anlatacak, scikit-learn ile bir Python örneği gösterecek ve ne zaman ideal bir çözüm olduğunu, ne zaman olmadığını ele alacağım.
Kümelmede yeni misiniz? Algoritmanın nasıl çalıştığını ve Python’da nasıl kullanacağınızı öğrenmek için scikit-learn ile k-Means Kümelemeye Giriş eğitimimizi okuyun.
Silhouette Skoru Nedir?
Silhouette skoru, her bir noktanın kendi kümesine ne kadar iyi uyduğunu söyleyen, -1 ile 1 arasında bir sayıdır.
Bu sayı size iki şeyi gösterir:
- Bir noktanın, kendi kümesindeki diğer noktalara ne kadar yakın olduğu
- Ait olmadığı en yakın kümeye ne kadar uzak olduğu
Nokta kendi grubunun içinde iyi konumlanmış ve diğerlerinden uzaksa, skor yüksektir. Sınırdaysa, komşu bir kümeye kendi kümesinden daha yakınsa, skor düşüktür.
Özetle, silhouette skoru size bu dengeyi gösterir. Hem noktaların her küme içinde ne kadar sıkı gruplanmış olduğunu hem de kümelerin birbirinden ne kadar iyi ayrıldığını içerir. İkisi de eşit derecede önemlidir. Noktaları iyi gruplayıp kümeleri üst üste bindiren bir kümeleme işe yaramaz; kümeleri iyi ayırıp noktaları küme içinde gevşek bırakan bir kümeleme de öyle.

İyi ayrılmış kümeler ile örtüşen kümelerin karşılaştırması
Daha yüksek skorlar, daha iyi tanımlanmış kümeler anlamına gelir. 1’e yakın bir skor, noktaların kendi kümesi içinde sıkı biçimde konumlandığını ve diğerlerinden uzak olduğunu gösterir. 0’a yakın bir skor, kümelerin örtüştüğünü veya sınırların belirsiz olduğunu gösterir. Negatif skor, noktanın atandığı kümeden çok farklı bir kümeye daha yakın olduğu anlamına gelir.
Silhouette Skoru Nasıl Çalışır?
Her noktanın kendi silhouette skoru vardır ve bu skor iki uzaklıktan türetilir.
İlki, noktanın atandığı kümedeki diğer noktalara olan ortalama uzaklığıdır. Bu küçükse, nokta kümedeki diğerlerine yakındır. Büyükse, nokta kümesine gevşek bağlıdır.
İkincisi, noktanın en yakın komşu kümedeki noktalara olan ortalama uzaklığıdır. Bu büyükse, nokta diğer kümelerden açıkça ayrılmıştır. Küçükse, nokta sınıra yakındır.

Bir noktanın kümelere olan uzaklığı
Silhouette değeri bu iki sayıyı karşılaştırır. Kendi kümesinin iyice içinde ve diğerlerinden uzak bir nokta yüksek skor alır. Sınırda olan (başka bir kümeye yakın) bir nokta düşük skor alır. Kendi kümesinden çok farklı bir kümeye daha yakın olan bir nokta negatif skor alır.
Burada hatırlanması gereken, tek başına hiçbir uzaklığın yeterli olmadığıdır.
Sıkı bir küme, hemen yanında başka bir küme ile konumlanmış olabilir. İyi ayrılmış bir küme, kendi içinde dağınık olabilir. Atamaya güvenmek için iki uzaklığa da ihtiyaç vardır.
Silhouette Skoru Formülü
Tek bir nokta için formül şöyledir:

Silhouette skoru formülü
Burada:
-
anoktanın, aynı kümedeki diğer tüm noktalara olan ortalama uzaklığıdır -
bnoktanın, en yakın komşu kümedeki tüm noktalara olan ortalama uzaklığıdır
Formül, b ile a arasındaki farkı, ikisinden hangisi daha büyükse ona böler.
Genel olarak, skoru yorumlamak için şu yönergeleri kullanabilirsiniz:
-
b,a’dan çok daha büyük olduğunda: Nokta, diğer kümelerden uzak ve kendi kümesine yakın demektir. Payb’ye yakındır, payda dab’dir ve skor 1’e yaklaşır -
a,b’den çok daha büyük olduğunda: Nokta, kendi kümesine nazaran başka bir kümeye daha yakındır. Pay,-a’ya yakın büyük bir negatif sayıdır, paydaa’dır ve skor -1’e yaklaşır -
avebkabaca eşit olduğunda: Nokta iki kümenin sınırındadır. Pay 0’a yakındır ve skor da öyle
Ayrıntılara birazdan daha fazla değineceğiz.
Silhouette Skoru Nasıl Yorumlanır
Silhouette skorunu okumak için kabaca bir rehber:
- 1’e yakın: Noktalar kendi kümelerinin iyice içinde ve diğerlerinden uzaktır
- 0,7 civarı: İyi kümeleme; gruplar belirgin ve noktalar kendi kümelerindeki diğer noktalara yakındır
- 0,5 civarı: Makul kümeleme; kümeler arasında bir miktar örtüşme vardır ama hâlâ ayırt edilebilirler
- 0’a yakın: Kümeler örtüşür veya sınırlar belirsizdir. Yapı gerçek olmayabilir
- 0’ın altında: Noktalar yanlış kümeye daha yakındır. Bu, yanlış küme sayısı seçildiğinde veya veri zaten iyi kümelenmediğinde görülebilir.
Yukarıdaki eşikler sadece yaklaşık kılavuzlardır. İyi bir silhouette skorunun ne olduğu veri setine bağlıdır.
Seyrek ve yüksek boyutlu veriler, kümeler iyi olsa bile genellikle daha düşük skorlar üretir. Sıkı paketlenmiş, iyi ayrılmış veriler 0,7’nin üzerinde skorlar verebilir. Skorları evrensel bir eşikle değil, aynı veri seti üzerindeki modeller arasında karşılaştırmalısınız.
Silhouette Skoru Nasıl Hesaplanır
Silhouette skorunu bir seferde bir nokta için hesaplarsınız. Tek bir nokta için işleyişi şöyle:
Adım 1: Noktanın, kendi kümesindeki diğer her bir noktaya olan ortalama uzaklığı olan a’yı hesaplayın. Nokta 4 başka noktanın olduğu bir kümedeyse ve bu noktalara uzaklıklar 1.2, 1.5, 1.0 ve 1.3 ise:

Silhouette skoru hesaplama (1)
Adım 2: En yakın komşu kümeyi bulun (noktanın kendi kümesi dışındaki, noktaya olan ortalama uzaklığı en düşük olan küme). Ardından, noktanın o kümedeki her bir noktaya olan ortalama uzaklığı olan b’yi hesaplayın. En yakın kümede uzaklıklar 2.4, 2.8, 3.0, 2.6 ve 2.7 olan 5 nokta varsa:

Silhouette skoru hesaplama (2)
Adım 3: a ve b’yi formüle yerleştirin:

Silhouette skoru hesaplama (3)
Adım 4: Bunu veri setindeki her nokta için tekrarlayın. Kümelemenin genel silhouette skoru, tüm nokta skorlarının ortalamasıdır.
Python’da Silhouette Skoru Örneği
Scikit-learn, silhouette skorunu hesaplamak için, her ikisi de sklearn.metrics içinde yer alan iki fonksiyon sunar:
-
silhouette_score()tüm kümeleme için ortalama skoru döndürür -
silhouette_samples()her bir nokta için skoru döndürür
Bunları, sentetik bir veri setinde KMeans ile şöyle kullanabilirsiniz:
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]}")
Yukarıdaki kod parçasını çalıştırdığınızda şu çıktıyı alacaksınız:

Python örnek çıktısı
0,791’lik genel skor, dört kümenin iyi tanımlandığı ve ayrıldığı anlamına gelir.
Nokta bazlı skorlar, her veri noktasını analiz etmenizi sağlar.
Yüksek bireysel skora sahip noktalar, kendi kümelerinin içinde iyi konumlanmıştır. Düşük veya negatif skorlu noktalar sınırda ya da yanlış atanmıştır; bu da aykırı değerleri tespit etmek veya sınırdaki noktaları gözden geçirmek için kullanışlıdır.
En Uygun Küme Sayısını Seçme
Silhouette skorunun en yaygın kullanımlarından biri, KMeans için doğru k değerini seçmektir.
Bunu yapmak üç adımdan oluşur:
- Bir dizi k değeri için KMeans’i eğitin
- Her uygunluk için silhouette skorunu hesaplayın
- Skoru en yüksek olan
k’yı seçin
Kodu şöyle yazabilirsiniz:
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}")
Her k için göreceğiniz çıktı skoru şudur:

Farklı k değerlerinde silhouette skoru
En yüksek skor k=4’te. Seçmek isteyeceğiniz değer budur.
Unutulmaması gereken bir nokta, silhouette skorunun alan bilgisinin yerine geçmediğidir. İş probleminiz 5 müşteri segmenti gerektiriyor ve silhouette en yüksek 4’te çıkıyorsa, otomatik olarak 4’ü seçmeyin. Metrik, veride yapının en temiz olduğu yeri gösterir, ancak bazen doğru küme sayısı, probleminizde anlamlı olana karşılık gelendir.
Silhouette Skoru ve Diğer Kümeleme Metrikleri
Silhouette skoru, kümelemeyi değerlendirmek için muhtemelen en yaygın metriktir, ancak tek seçenek değildir. Alternatiflerle nasıl karşılaştırıldığını görelim.
Silhouette skoru vs. dirsek yöntemi
Dirsek yöntemi, KMeans’te k seçimi için görsel bir tekniktir. Bir dizi k değeri için modelleri uydurur, atalet (küme içi kareler toplamı) ile k arasındaki grafiği çizer ve eğrinin keskin bir dirsek yaptığı değeri seçersiniz.
Burada avantaj, hızlı ve kolay olması nedeniyle dirsek yöntemindedir. Ancak “dirsek” her zaman bariz değildir. Dağınık verilerde eğri bazen düzgün görünebilir ve nerede büküldüğünü söyleyemezsiniz.
Silhouette skoru her bir k için gerçek bir sayı verir; böylece daha anlamlı bir karşılaştırma yapabilirsiniz. Hesaplaması daha yavaş olsa da kararı görsel yoruma bırakmaz.
Hızlı bir sağlama için dirsek yöntemini kullanın. Savunabileceğiniz bir yanıt gerektiğinde silhouette skorunu kullanın.
Silhouette skoru vs. Davies-Bouldin indeksi
Davies-Bouldin indeksi (DBI), her küme ile en benzer kümesi arasındaki ortalama benzerliği ölçer. Daha düşük DBI daha iyi kümeleme demektir; mükemmel skor 0’dır.
DBI, benzerliği hesaplamak için küme merkezlerini kullanır; bu da onu büyük veri setlerinde silhouette skorundan daha hızlı kılar. Ayrıca sıkı ve iyi ayrılmış kümeleri ödüllendirme konusunda benzer bir sezgiye dayanır.
Ancak DBI yalnızca kümelemenin tamamı hakkında bilgi verir. Silhouette skoru ise nokta bazında da skor verir; böylece sınırdaki noktaları ve aykırı değerleri bulabilirsiniz.
Büyük veri setleriyle çalışıyor ve hız önemliyse DBI kullanın. Bireysel noktaları incelemek istediğinizde silhouette skorunu kullanın.
Silhouette skoru vs. Calinski-Harabasz indeksi
Calinski-Harabasz indeksi (CH), varyans oranı ölçütü olarak da bilinir; kümeler arası dağılımın, küme içi dağılıma oranıdır. Daha yüksek skorlar daha iyi kümeleme anlamına gelir ve skorun üst sınırı yoktur.
CH hızlıdır ve yalnızca küme düzeyinde istatistikler içerdiği için büyük veri setlerinde iyi çalışır. Silhouette ve DBI gibi, dışbükey ve iyi ayrılmış kümelerde en iyi performansı verir.
CH’nin doğal bir ölçeği de yoktur; bu nedenle CH skorlarını farklı veri setleri arasında değil, aynı veri seti üzerindeki modeller arasında karşılaştırabilirsiniz.
Veri setiniz büyükse ve hızlı sonuçlara ihtiyacınız varsa CH kullanın. Yorumlanabilirlik ve bireysel veri noktalarına ilişkin içgörüler istediğinizde silhouette skorunu kullanın.
İçsel vs. dışsal kümeleme metrikleri
Yukarıdaki metriklerin tümü (silhouette, DBI, CH, dirsek) içsel metriklerdir. Yalnızca verinin kendisini kullanarak, yerleşik etiketler olmadan kümelemeyi değerlendirirler. Bu, etiketlerin olmadığı gerçek dünya kümeleme problemleri için onları standart seçim yapar.
Dışsal metrikler, küme atamalarını bilinen etiketlerle karşılaştırır. Ayarlanmış Rand İndeksi (ARI), Normalize Karşılıklı Bilgi (NMI) ve homojenlik yaygın örneklerdir. Etiketleriniz olduğunda ve bir kümeleme algoritmasının onları ne kadar iyi bulduğunu test etmek istediğinizde kullanılırlar.
Etiketleriniz olmadığında, ki tipik durum budur, içsel metrikleri kullanın. Etiketli veriler üzerinde kümeleme algoritmalarını kıyaslarken dışsal metrikleri kullanın.
İşte metriklerin yan yana kısa bir özeti:
| Yöntem | Aralık | En iyi değer | Hız | Kullanım amacı |
|---|---|---|---|---|
| Silhouette skoru | -1 ile 1 | 1’e yakın | Büyük veri setlerinde yavaş | Yorumlanabilirlik ve nokta bazlı içgörüler |
| Dirsek yöntemi | 0’dan sonsuza | Dirseği arayın | Hızlı | Hızlı kontroller |
| Davies-Bouldin indeksi | 0’dan sonsuza | 0’a yakın | Hızlı | Büyük veri setleri |
| Calinski-Harabasz indeksi | 0’dan sonsuza | Yüksek daha iyidir | Hızlı | Büyük, etiketlenmemiş veri setleri |
Silhouette skorunun alternatiflerle karşılaştırması
Silhouette Skorunun Sınırlamaları
Silhouette skorunun bilinmeye değer birkaç sınırlaması vardır:
- Uzaklık tabanlı kümeleme varsayımı: Silhouette skoru varsayılan olarak Öklid uzaklığına dayanır. KMeans ve diğer merkez tabanlı algoritmalar için iyi çalışır; ancak kümelerin keyfi şekillere sahip olduğu ve net bir merkezinin bulunmadığı DBSCAN gibi yoğunluk tabanlı yöntemlere uygun değildir
- Daha küçük, iyi ayrılmış kümelerle en iyi çalışır: Metrik, birbirinden uzak, sıkı ve küresel kümeleri ödüllendirir. Verinizde kümeler birbirine yakınsa veya örtüşüyorsa, kümeleme doğru olsa bile skor düşük çıkar
- Düzensiz küme şekillerinde en iyisi değildir: Gerçek dünyada kümeler her zaman dışbükey değildir. Verinizde durum böyle değilse, atamalar doğru olsa bile kümeler düşük silhouette skorları alabilir
- Büyük veri setlerinde hesaplama maliyeti: Silhouette skorunu hesaplamak, noktalar arasındaki ikili uzaklıkları gerektirir ve
O(n^2)ölçeklenir. Milyonlarca noktalı veri setlerinde bu pahalı hale gelir - Seçilen uzaklık metriğine duyarlılık: Skor, Öklid, Manhattan, kosinüs veya başka bir uzaklık kullanmanıza bağlı olarak değişir. Veriniz Öklid varsayımlarını karşılamıyorsa, silhouette skoru yanıltıcı olabilir
Silhouette Skorunu Kullanma İçin En İyi Uygulamalar
Silhouette skoru, birkaç temel uygulamayı takip ettiğinizde en iyi sonucu verir:
- Birden çok kümeleme çözümünü karşılaştırın: Tek bir silhouette skoru hesaplamakla yetinmeyin. Farklı
kdeğerleriyle (veya farklı algoritmalarla) kümeleme modelleri uydurmalı ve skorlarını yan yana karşılaştırmalısınız - Skorla birlikte kümeleri görselleştirin: Tek bir sayı tüm hikayeyi anlatmaz. Kümelerinizi çizin ve şekillerin mantıklı olup olmadığına bakın
- Yalnızca en yüksek skor için optimize etmeyin: En yüksek silhouette skoru her zaman doğru yanıt değildir. k=2 için yapılan bir kümeleme, probleminizde 5 küme anlamlı olsa bile, çoğu zaman
k=5’ten daha yüksek skor verir - Alan bilgisi ile birleştirin: Skor, veride yapının en temiz olduğu yeri gösterir. Alan bilgisi ise hangi yapının gerçekten faydalı olduğunu söyler. İkisini birlikte kullanın
- Birden çok kümeleme metriğini değerlendirin: Silhouette, DBI, CH ve diğer metrikler kümeleme kalitesini farklı şekillerde ölçer. Aynı şeyi söylediklerinde doğru yoldasınız; söylemediklerinde ise veriye bakın
Sonuç
Silhouette skoru, hem noktaların ne kadar sıkı gruplanmış olduğunu hem de kümelerin birbirinden ne kadar iyi ayrıldığını gösterdiği için, kümelemeyi değerlendirmenin en sezgisel yollarından biridir.
Hesaplamayı nokta nokta yapar, sonuçları ortalarsınız ve -1 ile 1 arasında tek bir sayı elde edersiniz. 1’e yakın skorlar daha iyi tanımlanmış kümeler anlamına gelir; 0’a yakın veya 0’ın altındaki skorlar ise yapının aslında gerçek bir yapı olmadığını gösterir
Ancak silhouette skoru sadece bir başlangıçtır. Bunu küme görselleştirmeleri ve en önemlisi, probleminize ilişkin alan bilginizle birlikte kullanmalısınız. Tüm bunlar aynı yöne işaret ettiğinde sonuca güvenebilirsiniz.
Silhouette skoru, Python’da Denetimsiz Öğrenme başlığının daha büyük resminin bir parçasıdır. Bugün kaydolun ve etiketlenmemiş verileri nasıl kümeler, dönüştürür, görselleştirir ve içgörü çıkarırsınız öğrenin.
