Ausgangspunkt: Objekte mit Eigenschaften (→ Matrix)
Ziel: Objekte nach ihren Eigenschaften so in Gruppen zusammenfassen, dass die Unterschiede innerhalb der Gruppen möglichst gering und zwischen den Gruppen möglichst groß wird; heterogene Gesamtheit – homogene Teilmengen
Bezieht sich auf Ähnlichkeiten bzw. Distanzen zwischen Personen oder Objekten
„Clusteranalyse“ als Sammelbegriff für eine Vielzahl an Techniken bzw. Varianten
Beispiele
Gruppierung von Schulkindern nach Leistungsschwerpunkten oder -defiziten
Segmentierung von Internetnutzern nach Nutzungserfahrung
Identifikation von Fahrertypen
Klassifizierung biologischer Arten
Erkennen von Patientengruppen mit ähnlichen Krankheitsbildern
Segmentierung von Kunden
Vorgehen
Art des Clusterverfahrens
Bestimmung der Ähnlichkeiten
Auswahl des Fusionierungsalgorithmus
Bestimmung der Clusterzahl
Umsetzung
Art des Clusterverfahrens: Hierarchisch
Eigenschaften:
Verfahren: Agglomerative und divisive Methoden
Ziel: Erstellung einer Hierarchie von Clustern (Dendrogramm)
Beispiele:
Agglomerative Verfahren: Startet mit jedem Objekt als eigenem Cluster und fusioniert sukzessive Cluster (unterschiedliche Fusionierungsverfahren; s. u.)
Divisive Verfahren: Startet mit allen Objekten in einem Cluster und teilt sukzessive Cluster auf
Implementierung in R: hclust() (agglomerativ)
Anwendungsbereich:
Kleine bis mittelgroße Datensätze
Visualisierung der Clusterstruktur
Weitere Verfahren (unberücksichtigt): Gridbasierte Verfahren, Partitionierende Verfahren, Optimierungsverfahren
Weitere Verfahren (unberücksichtigt): Cosine-Ähnlichkeit, Korrelationskoeffizient, Jaccard-Koeffizient
Auswahl des Fusionierungsalgorithmus (Linkage-Methode)
Complete Linkage (in hclust(): method="complete"): Complete Linkage definiert die Distanz zwischen zwei Clustern als die maximale Distanz zwischen einem Punkt im ersten Cluster und einem Punkt im zweiten Cluster. Empfindlich bei Ausreißern.
Ward-Methode (in hclust(): method="ward.D"): Die Ward-Methode minimiert die Summe der quadrierten Abweichungen innerhalb der Cluster (Varianz). Bei jedem Schritt wird das Paar von Clustern fusioniert, dessen Zusammenführung die kleinste Zunahme der Gesamtsumme der quadrierten Abweichungen zur Folge hat.
Single Linkage (auch Nearest Neighbour; in hclust(): method="single"): Bei Single Linkage wird die Distanz zwischen zwei Clustern als die minimale Distanz zwischen einem Punkt im ersten Cluster und einem Punkt im zweiten Cluster. Zur Identifikation von Ausreißern.
Weitere Verfahren (unberücksichtigt): Average Linkage, Centroid Linkage, Median Linkage
Bestimmung der Clusterzahl
Agglomerative Verfahren: Am Ende ein großer Cluster
Viele Freiheitsgrade bei der Entscheidung
Konflikt: Homogenität vs. Handhabbarkeit
Scree-Test: Elbow-Kriterium
Dendrogramm
Beispiel Regionen 🗺️ (vgl. EFA)
Daten 1
Wir haben für 12 Regionen folgende Variablen vorliegen:
Bevölkerungsdichte (Einwohner je qkm): ED
Bruttoinlandsprodukt (BIP) je Einwohner (DM): BIP
Anteil der Erwerbstätigen in der Landwirtschaft (Prozent): EL
Wachstumsrate des BIP (in den letzten zehn Jahren): WBIP
Allgemeine Geburtenziffer (Lebendgeborene je 1000 Einwohner): GEB
Wanderungssaldo (Zu- minus Fortwanderungen je 1000 Einw.): WS
Frage FA: Gibt es eine sparsamere Struktur, die diesen Variablen zugrunde liegt?
Frage CA: In welche Cluster können die Regionen zusammengefasst werden?
# Daten einlesen und ausgebenregionen_data <-read.csv("./data/regionen.csv", sep=";", dec =",")regionen_data
# Distanz-Matrix erzeugen; meist euklidische Distanz dist_mat <-dist(regionen_data_z, method ='euclidean')# Namen der Objekte (Regionen)region_labels <-c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L") # Eigentliche Clusteranalysehc_result <-hclust(dist_mat, method ="complete")# Dendrogramm erzeugen; 'hang=-1' formatiert die Beschriftungplot(hc_result, hang=-1, labels=region_labels)
# Scree-Plot erstellenplot(1:(length(hc_result$height)), rev(hc_result$height), type ="b",xlab ="Anzahl der Cluster",ylab ="Höhe der Fusionen",main ="Screeplot für hierarchische Clusteranalyse")
[optional] Analyse: Identifikation von Ausreißern
Ausreißer finden mit → Single Linkage (bzw. Nearest Neighbour)
#Datensatz Nummer 3 entfernen (nur als Beispiel)#data_clean <- regionen_data_z[-3, ]# Datensatz Nummer 2 und 3 entfernen (nur als Beispiel)data_clean <- regionen_data_z[-c(2,3), ]region_labels_10 <-c("A", "D", "E", "F", "G", "H", "I", "J", "K", "L") dist_mat <-dist(data_clean, method ='euclidean')hc_result_10 <-hclust(dist_mat, method ="complete")plot(hc_result_10, hang=-1, labels = region_labels_10)
# Scree-Plot erstellenplot(1:(length(hc_result_10$height)), rev(hc_result_10$height), type ="b",xlab ="Anzahl der Cluster",ylab ="Höhe der Fusionen",main ="Screeplot für hierarchische Clusteranalyse")
Vergleich mit EFA
Positionierung der Regionen im zweidimensionalen Faktorraum
Clusterlösung verarbeiten
# Cluster-Zuordnung für k Clustercluster_assignments <-cutree(hc_result_10, k =2)# Daten ohne Ausreißerdata_clean <- regionen_data_z[-c(2,3), ]# Übersichtlicher: Auf drei Stellen rundendata_clean <-round(data_clean,3)# Matrix wird in Dataframe umgewandelt (macht das Spalte-Anhängen leichter)regionen_data_z <-as.data.frame(data_clean)# Daten OHNE Clusterhead(regionen_data_z, n =10)
# Code-Vorlage arbeitet mit "df", daher umbenennendf <- regionen_data_z# Mittelwerte für jede Dimension pro Cluster berechnencluster_means <-aggregate(. ~ Cluster, data = df, FUN = mean)# Anzahl der Clusternum_clusters <-length(unique(df$Cluster))# Layout für die Plotspar(mfrow =c(1, num_clusters)) # Layout festlegen für die Anzahl der Cluster# Für jedes Cluster ein Balkendiagramm erstellenfor (i in1:num_clusters) {# Daten für das aktuelle Cluster (ohne Cluster-Spalte) data <-as.numeric(cluster_means[i, -1])# Namen der Attribute für die x-Achsenames(data) <-names(cluster_means)[-1]# Balkendiagramm erstellenbarplot( data,main =paste("Cluster", cluster_means$Cluster[i]), # Titel des Diagrammsylim =c(-2, 2), # Skalierung der y-Achsecol ="lightblue", # Farbe der Balkenxlab ="Attribute", # Bezeichnung der x-Achseylab ="Mittelwert", # Bezeichnung der y-Achselas =2# Dreht die x-Achsenbeschriftungen für bessere Lesbarkeit )}
Schließlich …
Empfehlungen
Auswahl der Variablen:
keine strikten Vorgaben
relevante Variable auswählen
hoch korrelierte Variable ausschließen (r > 0.9)
alternativ: Faktorwerte aus einer explorativen Faktorenanalyse verwenden
keine konstanten Merkmale
z-Transformation
Distanz-Maß: euklidische Distanz
(Single-Linkage (auch: nächstgelegener Nachbar) zur Identifizierung von Ausreißern
Complete Linkage oder Ward-Verfahren (mit entfernten Ausreißern; ergibt “runde” Cluster))