Hoppa till huvudinnehållet

Silhouettepoäng: Så utvärderar du klusterkvalitet

En praktisk guide till silhouettepoängen som täcker formeln, tolkningsintervall, ett exempel med scikit-learn, hur du använder den för att välja rätt antal kluster och hur den står sig mot andra klustringsmetrikker.
Uppdaterad 31 juli 2026  · 12 min läsa

Utforska med AI

Öppna i ChatGPTÖppna i ClaudeÖppna i Perplexity

Efter att du har tränat en klustringsmodell, hur vet du om klustren håller måttet?

Det finns inget universellt svar. I traditionellt övervakat lärande kan du jämföra prediktioner mot faktiska etiketter och få ett noggrannhetsmått. Det går inte med klustring. Du valde k=5, men skulle ett annat k vara bättre? Utan etiketter kan du inte avgöra om algoritmen hittade strukturen eller bara delade upp datan i slumpmässiga bitar.

Silhouettepoängen är metrikken du letar efter. Den visar hur väl varje punkt passar i sitt tilldelade kluster relativt det näst närmaste, och den är en av de mest använda metrikerna. Den fungerar utan etiketter och är lätt att tolka.

I den här artikeln går jag igenom formeln och hur du läser den, visar ett Python-exempel med scikit-learn och tar upp scenarier när den är och inte är en idealisk lösning.

Är du ny på klustring? Läs vår Introduktion till k-means-klustring med scikit-learn för att lära dig hur algoritmen fungerar och hur du använder den i Python. 

Vad är silhouettepoängen?

Silhouettepoängen är ett tal mellan -1 och 1 som talar om hur väl varje punkt passar i sitt kluster.

Talet visar två saker:

  1. Hur nära en punkt ligger de andra punkterna i sitt eget kluster
  2. Hur långt den är från det närmaste klustret den inte tillhör

Om punkten ligger väl innanför sin grupp och långt från andra blir poängen hög. Om den ligger vid kanten, närmare ett angränsande kluster än sitt eget, blir poängen låg.

I korthet är det balansen silhouettepoängen visar. Den omfattar både hur tätt punkter är grupperade inom varje kluster och hur väl klustren är separerade från varandra. Båda är lika viktiga. En klustring som grupperar punkter väl men placerar kluster rakt ovanpå varandra är inte användbar, och inte heller en klustring som separerar kluster väl men sprider punkter glest inom dem.

Välseparerade kluster jämfört med överlappande kluster

Välseparerade kluster jämfört med överlappande kluster

Högre poäng betyder bättre definierade kluster. En poäng nära 1 betyder att punkter ligger tätt i sitt kluster och långt från andra. En poäng nära 0 betyder att klustren överlappar eller att gränserna är otydliga. En negativ poäng betyder att punkten är närmare ett annat kluster än det den tilldelats.

Hur fungerar silhouettepoängen?

Varje punkt får sin egen silhouettepoäng, och den poängen kommer från två avstånd.

Det första är hur långt punkten i genomsnitt är från de andra punkterna i sitt tilldelade kluster. Om det är litet ligger punkten nära de andra i klustret. Om det är stort är punkten löst knuten till sitt kluster.

Det andra är hur långt punkten i genomsnitt är från punkterna i det närmaste angränsande klustret. Om det är stort är punkten tydligt separerad från andra kluster. Om det är litet ligger punkten nära gränsen.

Avstånd från en punkt till klustren

Avstånd från en punkt till klustren

Silhouettevärdet jämför dessa två tal. En punkt långt inne i sitt kluster och långt från andra får en hög poäng. En punkt vid kanten (nära ett annat kluster) får en låg poäng. En punkt som är närmare ett annat kluster än sitt eget får en negativ poäng.

Kom ihåg att inget av avstånden räcker ensamt. 

Ett tajt kluster kan ligga precis bredvid ett annat. Ett välseparerat kluster kan vara internt utspritt. Du behöver båda avstånden för att lita på tilldelningen.

Formel för silhouettepoäng

Här är formeln för en enskild punkt:

Formel för silhouettepoäng

Formel för silhouettepoäng

Där:

  • a är det genomsnittliga avståndet från punkten till alla andra punkter i samma kluster

  • b är det genomsnittliga avståndet från punkten till alla punkter i det närmaste angränsande klustret

Formeln delar gapet mellan b och a med det av de två som är större. 

Generellt kan du använda dessa riktlinjer för att tolka poängen:

  • När b är mycket större än a: Punkten är långt från andra kluster och nära sitt eget. Täljaren ligger nära b, nämnaren är också b, och poängen ligger nära 1

  • När a är mycket större än b: Punkten är närmare ett annat kluster än sitt eget. Täljaren är ett stort negativt tal nära -a, nämnaren är a, och poängen ligger nära -1

  • När a och b är ungefär lika stora: Punkten ligger på gränsen mellan två kluster. Täljaren ligger nära 0, och det gör poängen också

Mer om detaljerna strax.

Hur tolkar man silhouettepoängen

Här är en grov guide för att läsa silhouettepoängen:

  • Nära 1: Punkter ligger väl inne i sina kluster och långt från andra
  • Runt 0,7: Bra klustring, grupperna är distinkta och punkterna ligger nära andra punkter i sitt kluster
  • Runt 0,5: Hyfsad klustring, det finns viss överlappning mellan kluster men de är fortfarande åtskiljbara
  • Nära 0: Kluster överlappar eller så är gränserna otydliga. Strukturen kanske inte är verklig
  • Under 0: Punkter är närmare fel kluster. Detta kan hända när du väljer fel antal kluster eller datan inte lämpar sig för klustring från början.

Gränserna ovan är bara grova riktlinjer. Vad som räknas som en bra silhouettepoäng beror på datasetet.

Gles och högdimensionell data ger ofta lägre poäng även när klustren är bra. Tätpackad, välseparerad data kan ge poäng över 0,7. Du bör jämföra poäng mellan modeller på samma dataset, inte mot en universell tröskel.

Hur man beräknar silhouettepoängen

Du beräknar silhouettepoängen en punkt i taget. Så här fungerar det för en enskild punkt.

Steg 1: Beräkna a, det genomsnittliga avståndet från punkten till varje annan punkt i sitt eget kluster. Om punkten är i ett kluster med 4 andra punkter och avstånden till dessa är 1,2, 1,5, 1,0 och 1,3:

Beräkning av silhouettepoäng (1)

Beräkning av silhouettepoäng (1)

Steg 2: Hitta det närmaste angränsande klustret (det som, förutom punktens eget kluster, har lägst genomsnittligt avstånd från punkten). Beräkna sedan b, det genomsnittliga avståndet från punkten till varje punkt i det klustret. Om det närmaste klustret har 5 punkter på avstånden 2,4, 2,8, 3,0, 2,6 och 2,7:

Beräkning av silhouettepoäng (2)

Beräkning av silhouettepoäng (2)

Steg 3: Sätt in a och b i formeln:

Beräkning av silhouettepoäng (3)

Beräkning av silhouettepoäng (3)

Steg 4: Upprepa detta för varje punkt i datasetet. Den övergripande silhouettepoängen för klustringen är medelvärdet av alla punktpoäng.

Exempel på silhouettepoäng i Python

Scikit-learn ger dig två funktioner för att beräkna silhouettepoängen, båda i sklearn.metrics:

  • silhouette_score() returnerar medelpoängen för hela klustringen

  • silhouette_samples() returnerar poängen för varje enskild punkt

Så här använder du dem med KMeans på ett syntetiskt dataset:

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

Du får följande utdata när du kör kodexemplet ovan:

Python-exempel – utdata

Python-exempel – utdata

Den övergripande poängen 0,791 betyder att de fyra klustren är väl definierade och separerade.

Poängen per punkt låter dig analysera varje datapunkt. 

Punkter med höga individuella poäng ligger väl inne i sina kluster. Punkter med låga eller negativa poäng ligger på gränsen eller är felaktigt tilldelade, vilket är praktiskt för att hitta avvikare eller granska gränsfall.

Välja optimalt antal kluster

Ett av de vanligaste sätten att använda silhouettepoängen är att välja rätt k för KMeans. 

Det gör du i tre steg:

  1. Träna KMeans för ett intervall av k-värden
  2. Beräkna silhouettepoängen för varje körning
  3. Välj det k som har högst poäng

Här är koden för det:

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

Detta är poängen du ser för varje k:

Silhouettepoäng för olika värden på k

Silhouettepoäng för olika värden på k

Den högsta poängen är vid k=4. Det är det värde du bör välja.

Kom ihåg att silhouettepoängen inte ersätter domänkunskap. Om ditt affärsproblem kräver 5 kundsegment och silhouette är högst vid 4, välj inte automatiskt 4. Metriken visar var datan har renast struktur, men ibland är rätt antal kluster det som motsvarar något meningsfullt i ditt problem.

Silhouettepoäng jämfört med andra klustringsmetrikker

Silhouettepoängen är troligen den vanligaste metriken för att utvärdera klustring, men den är inte den enda. Så här står den sig mot alternativen.

Silhouettepoäng vs. armbågometoden

Armbågometoden är en visuell teknik för att välja k i KMeans. Du tränar modeller för ett intervall av k-värden, plottar inertiavärdet (summa kvadrater inom kluster) mot k och väljer det värde där kurvan har en skarp böj.

Armbågometoden har fördelen att den är snabb och enkel att köra. Men ”armbågen” är inte alltid tydlig. På rörig data kan kurvan ibland se jämn ut och du kan inte se var den böjer.

Silhouettepoängen ger dig ett faktiskt tal för varje k, så du kan göra en mer meningsfull jämförelse. Den är långsammare att beräkna, men lämnar inte beslutet åt visuell tolkning.

Använd armbågometoden för en snabb rimlighetskontroll. Använd silhouettepoängen när du behöver ett svar du kan stå för.

Silhouettepoäng vs. Davies–Bouldin-index

Davies–Bouldin-indexet (DBI) mäter den genomsnittliga likheten mellan varje kluster och dess mest lika. Lägre DBI betyder bättre klustring, och en perfekt poäng är 0.

DBI använder klustercentroider för att beräkna likhet, vilket gör det snabbare att beräkna än silhouettepoängen på stora dataset. Det använder också en liknande intuition vad gäller att belöna tajta och välseparerade kluster.

Haken är att DBI bara berättar om klustringen som helhet. Silhouettepoängen ger även en poäng per punkt, så att du kan hitta gränspunkter och avvikare.

Använd DBI om du arbetar med stora dataset och hastighet är viktigt. Använd silhouettepoängen när du vill titta på enskilda punkter.

Silhouettepoäng vs. Calinski–Harabasz-index

Calinski–Harabasz-indexet (CH), även kallat varianskvotskriteriet, är förhållandet mellan spridning mellan kluster och spridning inom kluster. Högre poäng betyder bättre klustring, och poängen är obegränsad (ingen övre gräns).

CH är snabbt och fungerar bra på stora dataset eftersom det bara involverar statistik på klusternivå. Liksom silhouette och DBI fungerar det bäst på konvexa, välseparerade kluster.

CH har inte heller en naturlig skala, så du kan bara jämföra CH-poäng mellan modeller på samma dataset, inte mellan olika dataset.

Använd CH när ditt dataset är stort och du behöver resultat snabbt. Använd silhouettepoängen när du vill ha tolkningsbarhet och insikter på datapunktsnivå.

Interna vs. externa klustringsmetrikker

Metrikerna ovan (silhouette, DBI, CH, armbåge) är alla interna metriker. De utvärderar klustring enbart med hjälp av datan själv, utan sanningsetiketter. Det gör dem till standardvalet för klustringsproblem i verkligheten, där etiketter saknas.

Externa metriker jämför klustertilldelningar mot kända etiketter. Adjusted Rand Index (ARI), Normalized Mutual Information (NMI) och homogenitet är vanliga exempel. De används när du har etiketter och vill testa hur väl en klustringsalgoritm återger dem.

Använd interna metriker när du saknar etiketter, vilket är det typiska fallet. Använd externa metriker när du benchmarkar klustringsalgoritmer på etiketterad data.

Här är en sammanställning av metrikkerna sida vid sida:

Metod Intervall Bästa värde Hastighet Använd den för
Silhouettepoäng -1 till 1 Nära 1 Långsam på stora dataset Tolkningsbarhet och insikter per punkt
Armbågometoden 0 till oändlighet Leta efter armbågen Snabb Snabba kontroller
Davies–Bouldin-index 0 till oändlighet Nära 0 Snabb Stora dataset
Calinski–Harabasz-index 0 till oändlighet Högre är bättre Snabb Stora, oetiketterade dataset

Silhouettepoäng jämfört med alternativ

Begränsningar med silhouettepoängen

Silhouettepoängen har några begränsningar som är värda att känna till:

  • Förutsätter avståndsbaserad klustring: Silhouettepoängen bygger som standard på euklidiskt avstånd. Den fungerar bra för KMeans och andra centroidbaserade algoritmer, men passar sämre för täthetsbaserade metoder som DBSCAN där kluster har godtyckliga former och ingen tydlig centroid
  • Fungerar bäst med mindre, välseparerade kluster: Metriken belönar tajta, sfäriska kluster som ligger långt ifrån varandra. Om din data har kluster som ligger nära varandra eller överlappar blir poängen låg även om klustringen är korrekt
  • Inte bäst för oregelbundna klusterformer: Kluster i verkligheten är inte alltid konvexa. Om så är fallet i din data får kluster låga silhouettepoäng även när tilldelningarna är korrekta
  • Beräkningskostnad på stora dataset: Beräkning av silhouettepoängen kräver parvisa avstånd mellan punkter, vilket skalar som O(n^2). På dataset med miljoner punkter blir detta kostsamt
  • Känslighet för vald avståndsmetrik: Poängen ändras beroende på om du använder euklidiskt, Manhattan, cosinus eller annat avstånd. Om din data inte följer euklidiska antaganden kan silhouettepoängen vilseleda dig

Bästa praxis för att använda silhouettepoängen

Silhouettepoängen fungerar bäst när du följer några grundläggande riktlinjer:

  • Jämför flera klustringslösningar: Beräkna inte bara en enda silhouettepoäng. Du bör träna klustringsmodeller med olika värden på k (eller olika algoritmer) och jämföra deras poäng sida vid sida
  • Visualisera kluster tillsammans med poängen: Ett tal i sig berättar inte hela historien. Plotta dina kluster och se om formerna är rimliga
  • Optimera inte enbart för högsta poäng: Klustring med k=2 har ofta högre poäng än k=5 även när 5 kluster är meningsfulla i ditt problem
  • Kombinera med domänkunskap: Poängen visar var datan har renast struktur. Domänkunskap visar vilken struktur som faktiskt är användbar. Använd båda
  • Utvärdera flera klustringsmetrikker: Silhouette, DBI, CH och andra metriker mäter klusterkvalitet på olika sätt. När de är överens är du på rätt spår, men när de inte är det, titta på datan

Slutsats

Silhouettepoängen är ett av de mest intuitiva sätten att utvärdera klustring eftersom den visar både hur tätt punkter är grupperade och hur väl kluster är separerade. 

Du beräknar den punkt för punkt, tar medelvärdet och får ett enda tal mellan -1 och 1. Poäng närmare 1 betyder bättre definierade kluster, och poäng nära eller under 0 betyder att strukturen inte riktigt är en struktur

Men silhouettepoängen är bara en början. Du bör kombinera den med klustervisualiseringar och, viktigast av allt, din egen domänkunskap om problemet. Först när allt detta pekar åt samma håll kan du lita på resultatet.

Silhouettepoängen är en del av den större helheten inom Osuperviserat lärande i Python. Anmäl dig idag och lär dig att klustra, transformera, visualisera och extrahera insikter från oetiketterad data.

Ämnen

Lär dig med DataCamp

course

Klusteranalys i R

4 timmar
44.1K
Utveckla en stark intuition för hur hierarkisk klustring och k-means-klustring fungerar och lär dig använda dem för att utvinna insikter ur dina data.
Se detaljerRight Arrow
Starta Kursen
Se merRight Arrow