Przejdź do głównej treści

Wynik sylwetki: jak oceniać jakość klasteryzacji

Praktyczny przewodnik po wyniku sylwetki: wzór, zakresy interpretacji, przykład w scikit-learn, jak użyć do wyboru właściwej liczby klastrów oraz porównanie z innymi metrykami klasteryzacji.
Zaktualizowano 31 lip 2026  · 12 min Czytać

Eksploruj z AI

Otwórz w ChatGPTOtwórz w ClaudeOtwórz w Perplexity

Po wytrenowaniu modelu klasteryzacji skąd wiesz, czy klastry są dobre?

Nie ma jednej uniwersalnej odpowiedzi. W tradycyjnym uczeniu nadzorowanym możesz porównać przewidywania z prawdziwymi etykietami i uzyskać wartość dokładności. W klasteryzacji tak się nie da. Wybrałeś k=5, ale czy inna wartość k nie byłaby lepsza? Bez etykiet nie wiadomo, czy algorytm znalazł strukturę, czy tylko podzielił dane na losowe kawałki.

Wynik sylwetki to metryka, której szukasz. Pokazuje, jak dobrze każdy punkt pasuje do przypisanego mu klastra w porównaniu z najbliższym innym, i jest jedną z najczęściej używanych metryk. Działa bez etykiet i jest łatwy do interpretacji.

W tym artykule przeprowadzę cię przez wzór i sposób jego odczytu, pokażę przykład w Pythonie ze scikit-learn i omówię sytuacje, gdy jest (i nie jest) idealnym rozwiązaniem.

Dopiero zaczynasz przygodę z klasteryzacją? Przeczytaj nasz tutorial Wprowadzenie do klasteryzacji k-średnich w scikit-learn, aby dowiedzieć się, jak działa algorytm i jak używać go w Pythonie. 

Czym jest wynik sylwetki?

Wynik sylwetki to liczba z zakresu od -1 do 1, która mówi, jak dobrze każdy punkt pasuje do swojego klastra.

Ta liczba pokazuje dwie rzeczy:

  1. Jak blisko punkt znajduje się wobec innych punktów w swoim klastrze
  2. Jak daleko jest od najbliższego klastra, do którego nie należy

Jeśli punkt leży wyraźnie wewnątrz swojej grupy i daleko od innych, wynik jest wysoki. Jeśli jest na krawędzi, bliżej sąsiedniego klastra niż własnego, wynik jest niski.

W skrócie: wynik sylwetki pokazuje równowagę pomiędzy tym, jak ciasno punkty są zgrupowane w obrębie klastra, a tym, jak dobrze klastry są od siebie odseparowane. Oba aspekty są równie ważne. Klasteryzacja, która dobrze grupuje punkty, ale umieszcza klastry tuż obok siebie, nie jest użyteczna, podobnie jak taka, która dobrze rozdziela klastry, ale rozprasza punkty w ich wnętrzu.

Dobrze rozdzielone klastry w porównaniu z nakładającymi się klastrami

Dobrze rozdzielone klastry w porównaniu z nakładającymi się klastrami

Wyższe wyniki oznaczają lepiej zdefiniowane klastry. Wynik bliski 1 oznacza, że punkty są ciasno skupione w swoim klastrze i daleko od innych. Wynik bliski 0 oznacza, że klastry się nakładają lub granice są niejednoznaczne. Ujemny wynik oznacza, że punkt jest bliżej innego klastra niż tego, do którego został przypisany.

Jak działa wynik sylwetki?

Każdy punkt dostaje własny wynik sylwetki, a wynik ten wynika z dwóch odległości.

Pierwsza to średnia odległość punktu od innych punktów w przypisanym klastrze. Jeśli jest mała, punkt jest blisko innych w klastrze. Jeśli jest duża, punkt jest luźno powiązany ze swoim klastrem.

Druga to średnia odległość punktu od punktów w najbliższym sąsiednim klastrze. Jeśli jest duża, punkt jest wyraźnie odseparowany od innych klastrów. Jeśli mała, punkt leży blisko granicy.

Odległość punktu od klastrów

Odległość punktu od klastrów

Wartość sylwetki porównuje te dwie liczby. Punkt głęboko wewnątrz swojego klastra i daleko od innych dostaje wysoki wynik. Punkt na krawędzi (blisko innego klastra) dostaje niski wynik. Punkt bliższy innemu klastrowi niż własnemu ma wynik ujemny.

Pamiętaj, że żadna z tych odległości sama w sobie nie wystarczy. 

Ciasny klaster może leżeć tuż obok innego. Dobrze odseparowany klaster może być wewnętrznie rozproszony. Potrzebujesz obu odległości, aby ufać przypisaniu.

Wzór na wynik sylwetki

Oto wzór dla pojedynczego punktu:

Wzór na wynik sylwetki

Wzór na wynik sylwetki

Gdzie:

  • a to średnia odległość od punktu do wszystkich innych punktów w tym samym klastrze

  • b to średnia odległość od punktu do wszystkich punktów w najbliższym sąsiednim klastrze

Wzór dzieli różnicę między b i a przez większą z tych dwóch wartości. 

Ogólnie możesz użyć tych wskazówek do interpretacji wyniku:

  • Gdy b jest dużo większe niż a: Punkt jest daleko od innych klastrów i blisko swojego. Licznik jest bliski b, mianownik także b, a wynik bliski 1

  • Gdy a jest dużo większe niż b: Punkt jest bliżej innego klastra niż swojego. Licznik to duża liczba ujemna bliska -a, mianownik to a, a wynik bliski -1

  • Gdy a i b są z grubsza równe: Punkt leży na granicy między dwoma klastrami. Licznik jest bliski 0 i taki jest też wynik

Szczegóły za chwilę.

Jak interpretować wynik sylwetki

Oto ogólna ściągawka do odczytu wyniku sylwetki:

  • Blisko 1: Punkty są głęboko wewnątrz swoich klastrów i daleko od innych
  • Około 0,7: Dobra klasteryzacja, grupy są wyraźne, a punkty blisko innych punktów w swoim klastrze
  • Około 0,5: Rozsądna klasteryzacja, pewne nakładanie się klastrów, ale nadal da się je odróżnić
  • Blisko 0: Klastry się nakładają lub granice są niejasne. Struktura może nie być rzeczywista
  • Poniżej 0: Punkty są bliżej niewłaściwego klastra. Może się tak zdarzyć, gdy wybierzesz złą liczbę klastrów albo dane z natury nie klastrują się dobrze.

Powyższe progi to tylko ogólne wskazówki. To, co uznasz za dobry wynik sylwetki, zależy od zbioru danych.

Rzadsze i wysokowymiarowe dane często dają niższe wyniki, nawet gdy klastry są dobre. Gęsto upakowane, dobrze odseparowane dane mogą dawać wyniki powyżej 0,7. Porównuj wyniki między modelami na tym samym zbiorze danych, a nie względem uniwersalnego progu.

Jak obliczyć wynik sylwetki

Wynik sylwetki obliczasz punkt po punkcie. Tak to wygląda dla pojedynczego punktu.

Krok 1: Oblicz a, czyli średnią odległość od punktu do każdego innego punktu w jego klastrze. Jeśli punkt jest w klastrze z 4 innymi punktami, a odległości do nich to 1,2; 1,5; 1,0 i 1,3:

Obliczanie wyniku sylwetki (1)

Obliczanie wyniku sylwetki (1)

Krok 2: Znajdź najbliższy sąsiedni klaster (ten, poza własnym klastrem punktu, o najniższej średniej odległości od punktu). Następnie oblicz b, czyli średnią odległość od punktu do każdego punktu w tym klastrze. Jeśli najbliższy klaster ma 5 punktów w odległościach 2,4; 2,8; 3,0; 2,6 i 2,7:

Obliczanie wyniku sylwetki (2)

Obliczanie wyniku sylwetki (2)

Krok 3: Podstaw a i b do wzoru:

Obliczanie wyniku sylwetki (3)

Obliczanie wyniku sylwetki (3)

Krok 4: Powtórz to dla każdego punktu w zbiorze danych. Ogólny wynik sylwetki dla klasteryzacji to średnia wszystkich wyników punktów.

Przykład wyniku sylwetki w Pythonie

Scikit-learn daje ci dwie funkcje do obliczania wyniku sylwetki, obie w sklearn.metrics:

  • silhouette_score() zwraca średni wynik dla całej klasteryzacji

  • silhouette_samples() zwraca wynik dla każdego indywidualnego punktu

Oto jak użyć ich z KMeans na syntetycznym zbiorze danych:

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]}")

Uruchamiając powyższy fragment kodu, otrzymasz taki wynik:

Wynik przykładu w Pythonie

Wynik przykładu w Pythonie

Ogólny wynik 0,791 oznacza, że cztery klastry są dobrze zdefiniowane i odseparowane.

Wyniki dla poszczególnych punktów pozwalają analizować każdy punkt danych. 

Punkty z wysokimi wynikami indywidualnymi leżą wyraźnie wewnątrz swoich klastrów. Punkty z niskimi lub ujemnymi wynikami są na granicy lub źle przypisane, co przydaje się do wykrywania wartości odstających lub przeglądu punktów granicznych.

Wybór optymalnej liczby klastrów

Jednym z najczęstszych zastosowań wyniku sylwetki jest wybór właściwego k dla KMeans. 

Obejmuje to trzy kroki:

  1. Dopasuj KMeans dla zakresu wartości k
  2. Oblicz wynik sylwetki dla każdego dopasowania
  3. Wybierz to k, dla którego wynik jest najwyższy

Oto kod:

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}")

Dla każdego k zobaczysz taki wynik:

Wynik sylwetki dla różnych wartości k

Wynik sylwetki dla różnych wartości k

Najwyższy wynik jest przy k=4. To wartość, którą warto wybrać.

Pamiętaj, że wynik sylwetki nie zastępuje wiedzy dziedzinowej. Jeśli twój problem biznesowy wymaga 5 segmentów klientów, a najwyższy wynik sylwetki wypada dla 4, nie wybieraj automatycznie 4. Metryka pokazuje, gdzie dane mają najczystszą strukturę, ale czasem właściwa liczba klastrów to ta, która odpowiada czemuś znaczącemu w twoim problemie.

Wynik sylwetki a inne metryki klasteryzacji

Wynik sylwetki jest prawdopodobnie najczęściej stosowaną metryką do oceny klasteryzacji, ale nie jedyną. Oto jak wypada na tle alternatyw.

Wynik sylwetki vs. metoda łokcia

Metoda łokcia to technika wizualna do wyboru k w KMeans. Dopasowujesz modele dla zakresu wartości k, wykreślasz inercję (sumę kwadratów wewnątrz klastrów) względem k i wybierasz wartość, w której krzywa ma wyraźne załamanie.

Zaletą metody łokcia jest to, że jest szybka i prosta w użyciu. Ale „łokieć” nie zawsze jest oczywisty. Przy nieuporządkowanych danych krzywa bywa gładka i trudno wskazać miejsce załamania.

Wynik sylwetki daje konkretną liczbę dla każdego k, więc możesz porównywać je sensowniej. Liczy się wolniej, ale nie pozostawia decyzji czysto wizualnej interpretacji.

Użyj metody łokcia do szybkiego sprawdzenia zdroworozsądkowego. Użyj wyniku sylwetki, gdy potrzebujesz odpowiedzi, pod którą możesz się podpisać.

Wynik sylwetki vs. indeks Daviesa–Bouldina

Indeks Daviesa–Bouldina (DBI) mierzy średnie podobieństwo między każdym klastrem a najbardziej do niego podobnym. Niższy DBI oznacza lepszą klasteryzację, a idealny wynik to 0.

DBI wykorzystuje centroidy klastrów do obliczania podobieństwa, co sprawia, że na dużych zbiorach danych jest szybszy w obliczeniach niż wynik sylwetki. Opiera się też na podobnej intuicji nagradzania ciasnych i dobrze odseparowanych klastrów.

Haczyk polega na tym, że DBI mówi tylko o klasteryzacji jako całości. Wynik sylwetki daje także wynik dla każdego punktu, więc możesz znaleźć punkty graniczne i wartości odstające.

Użyj DBI, jeśli pracujesz na dużych zbiorach i liczy się szybkość. Użyj wyniku sylwetki, gdy chcesz spojrzeć na poszczególne punkty.

Wynik sylwetki vs. indeks Calińskiego–Harabasza

Indeks Calińskiego–Harabasza (CH), zwany też kryterium ilorazu wariancji, to stosunek rozrzutu międzyklastrowego do wewnątrzklastrowego. Wyższe wyniki oznaczają lepszą klasteryzację, a skala jest nieograniczona (brak górnej granicy).

CH jest szybki i dobrze działa na dużych zbiorach danych, bo wykorzystuje wyłącznie statystyki na poziomie klastrów. Podobnie jak silhouette i DBI, najlepiej sprawdza się na klastrach wypukłych i dobrze odseparowanych.

CH nie ma też naturalnej skali, więc możesz porównywać wyniki CH wyłącznie między modelami na tym samym zbiorze danych, a nie między różnymi zbiorami.

Użyj CH, gdy twój zbiór danych jest duży i potrzebujesz szybkich rezultatów. Użyj wyniku sylwetki, gdy zależy ci na interpretowalności i wglądzie w poszczególne punkty danych.

Metryki wewnętrzne vs. zewnętrzne

Powyższe metryki (sylwetka, DBI, CH, łokieć) to metryki wewnętrzne. Ocenią klasteryzację wyłącznie na podstawie samych danych, bez etykiet referencyjnych. Dlatego są standardowym wyborem w rzeczywistych problemach klasteryzacji, gdzie etykiety nie istnieją.

Metryki zewnętrzne porównują przypisania do klastrów z znanymi etykietami. Przykładami są Adjusted Rand Index (ARI), Normalized Mutual Information (NMI) i homogeniczność. Używa się ich, gdy masz etykiety i chcesz sprawdzić, jak dobrze algorytm klasteryzacji je odtwarza.

Używaj metryk wewnętrznych, gdy nie masz etykiet, co jest typowe. Używaj metryk zewnętrznych, gdy benchmarkujesz algorytmy klasteryzacji na danych z etykietami.

Oto podsumowanie metryk obok siebie:

Metoda Zakres Najlepsza wartość Szybkość Zastosowanie
Wynik sylwetki -1 do 1 Blisko 1 Wolny na dużych zbiorach danych Interpretowalność i wgląd na poziomie punktów
Metoda łokcia 0 do nieskończoności Szukaj „łokcia” Szybka Szybkie sprawdzenia
Indeks Daviesa–Bouldina 0 do nieskończoności Blisko 0 Szybki Duże zbiory danych
Indeks Calińskiego–Harabasza 0 do nieskończoności Im wyżej, tym lepiej Szybki Duże, nieetykietowane zbiory danych

Porównanie wyniku sylwetki z alternatywami

Ograniczenia wyniku sylwetki

Wynik sylwetki ma kilka ograniczeń, o których warto wiedzieć:

  • Zakłada klasteryzację opartą na odległości: Domyślnie opiera się na odległości euklidesowej. Dobrze działa dla KMeans i innych algorytmów centroidowych, ale nie pasuje do metod gęstościowych, takich jak DBSCAN, gdzie klastry mają dowolne kształty i brak wyraźnego centroidu
  • Najlepiej działa dla mniejszych, dobrze odseparowanych klastrów: Metryka nagradza ciasne, sferyczne klastry, które są od siebie daleko. Jeśli twoje dane mają klastry blisko siebie lub nachodzące na siebie, wynik będzie niski, nawet jeśli klasteryzacja jest poprawna
  • Nie najlepsza przy nieregularnych kształtach klastrów: Rzeczywiste klastry nie zawsze są wypukłe. Jeśli w twoich danych tak nie jest, klastry dostaną niskie wyniki sylwetki, nawet gdy przypisania są poprawne
  • Koszt obliczeniowy na dużych zbiorach: Obliczenie wyniku sylwetki wymaga par odległości między punktami, co skaluje się jak O(n^2). Przy milionach punktów staje się to kosztowne
  • Wrażliwość na wybraną metrykę odległości: Wynik zmienia się w zależności od tego, czy użyjesz metryki euklidesowej, Manhattan, cosinusowej czy innej. Jeśli twoje dane nie spełniają założeń euklidesowych, wynik sylwetki może wprowadzać w błąd

Najlepsze praktyki korzystania z wyniku sylwetki

Wynik sylwetki działa najlepiej, gdy trzymasz się kilku podstawowych zasad:

  • Porównuj wiele rozwiązań klasteryzacji: Nie licz tylko jednego wyniku sylwetki. Dopasuj modele klasteryzacji dla różnych wartości k (albo różnych algorytmów) i porównaj ich wyniki obok siebie
  • Wizualizuj klastry wraz z wynikiem: Sama liczba nie mówi wszystkiego. Zobrazuj klastry i sprawdź, czy ich kształty mają sens
  • Nie optymalizuj wyłącznie pod najwyższy wynik: Klasteryzacja z k=2 często ma wyższy wynik niż k=5, nawet gdy 5 klastrów jest sensowne w twoim problemie
  • Łącz z wiedzą dziedzinową: Wynik pokazuje, gdzie dane mają najczystszą strukturę. Wiedza dziedzinowa mówi, która struktura jest faktycznie użyteczna. Używaj obu
  • Oceń wiele metryk klasteryzacji: Silhouette, DBI, CH i inne metryki mierzą jakość klasteryzacji inaczej. Gdy się zgadzają, jesteś na dobrej drodze, a gdy nie — spójrz na dane

Wnioski

Wynik sylwetki to jeden z najbardziej intuicyjnych sposobów oceny klasteryzacji, bo pokazuje zarówno to, jak ciasno punkty są zgrupowane, jak i to, jak dobrze klastry są odseparowane. 

Liczysz go punkt po punkcie, uśredniasz wyniki i dostajesz pojedynczą liczbę między -1 a 1. Wyniki bliższe 1 oznaczają lepiej zdefiniowane klastry, a wyniki bliskie 0 lub poniżej 0 sugerują, że struktura nie jest tak naprawdę strukturą

Ale wynik sylwetki to dopiero początek. Powinieneś połączyć go z wizualizacjami klastrów, a przede wszystkim z własną wiedzą dziedzinową o problemie. Dopiero gdy wszystkie te elementy wskazują w tym samym kierunku, możesz zaufać wynikowi.

Wynik sylwetki jest częścią szerszego obrazu uczenia nienadzorowanego w Pythonie. Zapisz się dziś i naucz się klastrować, przekształcać, wizualizować i wydobywać wnioski z nieetykietowanych danych.

Tematy

Ucz się z DataCamp

course

Analiza skupień w R

4 godz.
44.1K
Zdobądź intuicję, jak działają klastrowanie hierarchiczne i k-means, i naucz się stosować je do wyciągania wniosków z danych.
Zobacz szczegółyRight Arrow
Rozpocznij Kurs
Zobacz więcejRight Arrow