Grundproblem
Hier ist mein grundlegendes Problem: Ich versuche, einen Datensatz zu gruppieren, der einige sehr verzerrte Variablen mit Zählungen enthält. Die Variablen enthalten viele Nullen und sind daher für mein Clustering-Verfahren - das wahrscheinlich ein k-means-Algorithmus ist - nicht sehr informativ.
Gut, sagen Sie, transformieren Sie die Variablen einfach mit Quadratwurzel, Box Cox oder Logarithmus. Da meine Variablen jedoch auf kategorialen Variablen basieren, befürchte ich, dass ich eine Verzerrung einführen könnte, indem ich eine Variable (basierend auf einem Wert der kategorialen Variablen) behandle, während andere (basierend auf anderen Werten der kategorialen Variablen) so bleiben, wie sie sind .
Lassen Sie uns näher darauf eingehen.
Der Datensatz
Mein Datensatz repräsentiert den Kauf von Artikeln. Die Elemente haben verschiedene Kategorien, z. B. Farbe: Blau, Rot und Grün. Die Einkäufe werden dann z. B. nach Kunden zusammengefasst. Jeder dieser Kunden wird durch eine Zeile meines Datensatzes dargestellt, sodass ich Einkäufe über Kunden zusammenfassen muss.
Ich zähle dazu die Anzahl der Einkäufe, bei denen der Artikel eine bestimmte Farbe hat. Also statt einer einzigen Variablen color
, ich mit drei Variablen am Ende count_red
, count_blue
und count_green
.
Hier ist ein Beispiel zur Veranschaulichung:
-----------------------------------------------------------
customer | count_red | count_blue | count_green |
-----------------------------------------------------------
c0 | 12 | 5 | 0 |
-----------------------------------------------------------
c1 | 3 | 4 | 0 |
-----------------------------------------------------------
c2 | 2 | 21 | 0 |
-----------------------------------------------------------
c3 | 4 | 8 | 1 |
-----------------------------------------------------------
Eigentlich verwende ich am Ende keine absoluten Zählungen, sondern Verhältnisse (Anteil der grünen Artikel aller gekauften Artikel pro Kunde).
-----------------------------------------------------------
customer | count_red | count_blue | count_green |
-----------------------------------------------------------
c0 | 0.71 | 0.29 | 0.00 |
-----------------------------------------------------------
c1 | 0.43 | 0.57 | 0.00 |
-----------------------------------------------------------
c2 | 0.09 | 0.91 | 0.00 |
-----------------------------------------------------------
c3 | 0.31 | 0.62 | 0.08 |
-----------------------------------------------------------
Das Ergebnis ist das gleiche: Für eine meiner Farben, z. B. Grün (niemand mag Grün), erhalte ich eine linksgerichtete Variable mit vielen Nullen. Folglich findet k-means keine gute Partitionierung für diese Variable.
Wenn ich dagegen meine Variablen standardisiere (Mittelwert subtrahieren, durch Standardabweichung dividieren), "explodiert" die grüne Variable aufgrund ihrer geringen Varianz und nimmt Werte aus einem viel größeren Bereich als die anderen Variablen an, wodurch sie besser aussieht wichtig für k-means als es tatsächlich ist.
Die nächste Idee ist, die grüne Variable sk (r) ewed zu transformieren.
Transformieren der verzerrten Variablen
Wenn ich die grüne Variable durch Anwenden der Quadratwurzel transformiere, sieht sie etwas weniger schief aus. (Hier ist die grüne Variable in Rot und Grün dargestellt, um Verwirrung zu vermeiden.)
Rot: ursprüngliche Variable; blau: transformiert durch Quadratwurzel.
Nehmen wir an, ich bin mit dem Ergebnis dieser Transformation zufrieden (was ich nicht bin, da die Nullen die Verteilung immer noch stark verzerren). Sollte ich jetzt auch die roten und blauen Variablen skalieren, obwohl ihre Verteilungen gut aussehen?
Endeffekt
Mit anderen Worten, verzerre ich die Clustering-Ergebnisse, indem ich die Farbe Grün auf eine Weise behandle, aber überhaupt nicht Rot und Blau? Am Ende gehören alle drei Variablen zusammen. Sollten sie also nicht auf die gleiche Weise behandelt werden?
BEARBEITEN
Zur Verdeutlichung: Mir ist bewusst, dass k-means wahrscheinlich nicht der richtige Weg für zählbasierte Daten ist. Meine Frage betrifft jedoch wirklich die Behandlung abhängiger Variablen. Die Wahl der richtigen Methode ist eine separate Angelegenheit.
Die inhärente Einschränkung in meinen Variablen ist die folgende
count_red(i) + count_blue(i) + count_green(i) = n(i)
, wo n(i)
ist die Gesamtzahl der Einkäufe des Kunden i
.
(Oder gleichwertig, count_red(i) + count_blue(i) + count_green(i) = 1
wenn relative Zählungen verwendet werden.)
Wenn ich meine Variablen anders transformiere, entspricht dies einer unterschiedlichen Gewichtung der drei Terme in der Einschränkung. Wenn mein Ziel darin besteht, Kundengruppen optimal zu trennen, muss ich mich dann darum kümmern, diese Einschränkung zu verletzen? Oder rechtfertigt "der Zweck die Mittel"?
count_red
,count_blue
und ,count_green
und die Daten sind Zählungen. Richtig? Was sind dann die Zeilen - Elemente? Und Sie werden die Elemente gruppieren?Antworten:
@ttnphns hat eine gute Antwort geliefert.
Wenn Sie Clustering gut machen, müssen Sie oft sehr gründlich über Ihre Daten nachdenken. Lassen Sie uns also etwas davon tun. Meiner Meinung nach ist der grundlegendste Aspekt Ihrer Daten, dass sie kompositorisch sind .
Auf der anderen Seite scheint Ihr Hauptanliegen zu sein, dass Sie viele Nullen für grüne Produkte haben und sich speziell fragen, ob Sie nur die grünen Werte transformieren können, um sie den anderen ähnlicher zu machen. Da es sich jedoch um Kompositionsdaten handelt, können Sie nicht unabhängig von den anderen über einen Satz von Zählungen nachdenken. Darüber hinaus scheinen Sie wirklich an den Wahrscheinlichkeiten der Kunden für den Kauf verschiedenfarbiger Produkte interessiert zu sein. Da jedoch viele keine grünen Produkte gekauft haben, befürchten Sie, dass Sie diese Wahrscheinlichkeiten nicht abschätzen können. Eine Möglichkeit, dies zu beheben, besteht darin, einen etwas Bayes'schen Ansatz zu verwenden, bei dem wir die geschätzten Anteile der Kunden in Richtung eines mittleren Anteils verschieben, wobei das Ausmaß der Verschiebung davon abhängt, wie weit sie vom Mittelwert entfernt sind und wie viele Daten Sie benötigen, um ihre Wahrheit zu schätzen Wahrscheinlichkeiten.
Im Folgenden verwende ich Ihren Beispieldatensatz, um (in R) einen Weg zu veranschaulichen, wie Sie sich Ihrer Situation nähern können. Ich lese die Daten ein und konvertiere sie in zeilenweise Proportionen und berechne dann die mittleren Proportionen nach Spalten. Ich addiere die Mittelwerte zurück zu jeder Zählung, um angepasste Zählungen und neue zeilenweise Proportionen zu erhalten. Dies stößt den geschätzten Anteil jedes Kunden an den mittleren Anteil für jedes Produkt an. Wenn Sie einen stärkeren Anstoß wünschen, können Sie
15*mean.props
stattdessen ein Vielfaches der Mittel (wie z. B. ) verwenden.Hierfür gibt es mehrere Ergebnisse. Eine davon ist, dass Sie jetzt Schätzungen der zugrunde liegenden Wahrscheinlichkeiten für den Kauf umweltfreundlicher Produkte ungleich Null haben, selbst wenn ein Kunde noch keine Aufzeichnungen darüber hat, dass er umweltfreundliche Produkte gekauft hat. Eine weitere Konsequenz ist, dass Sie jetzt etwas kontinuierliche Werte haben, während die ursprünglichen Proportionen diskreter waren. Das heißt, die Menge der möglichen Schätzungen ist weniger eingeschränkt, sodass ein Abstandsmaß wie der quadratische euklidische Abstand jetzt möglicherweise sinnvoller ist.
Wir können die Daten visualisieren, um zu sehen, was passiert ist. Da es sich um Zusammensetzungsdaten handelt, verfügen wir nur über zwei Informationen, die wir in einem einzigen Streudiagramm darstellen können. Bei den meisten Informationen in den Kategorien Rot und Blau ist es sinnvoll, diese als Achsen zu verwenden. Sie können sehen, dass die angepassten Proportionen (die roten Zahlen) etwas von ihren ursprünglichen Positionen verschoben sind.
Zu diesem Zeitpunkt haben Sie Daten, und viele Leute beginnen damit, sie zu standardisieren. Da es sich um Zusammensetzungsdaten handelt, würde ich Clusteranalysen ohne Standardisierung durchführen. Diese Werte sind bereits angemessen und die Standardisierung würde einige der relationalen Informationen zerstören. Wenn ich mir die Handlung anschaue, denke ich, dass Sie hier wirklich nur eine Dimension von Informationen haben. (Zumindest im Beispieldatensatz; Ihr realer Datensatz kann durchaus anders sein.) Aus geschäftlicher Sicht halten Sie es nicht für wichtig, Personen mit einer erheblichen Wahrscheinlichkeit für den Kauf umweltfreundlicher Produkte als einen bestimmten Kundencluster zu erkennen würde Scores für die erste Hauptkomponente extrahieren (die 99,5% der Varianz in diesem Datensatz ausmacht) und diese einfach gruppieren.
quelle
Es ist nicht ratsam, die Variablen einzeln zu transformieren, weil sie zusammengehören (wie Sie bemerkt haben), und k-means auszuführen, weil die Daten zählen (Sie könnten es tun, aber k-means ist besser, wenn Sie fortlaufende Attribute wie zum Beispiel Länge verwenden). .
An Ihrer Stelle würde ich den Chi-Quadrat-Abstand (perfekt für Zählungen) zwischen jedem Kundenpaar basierend auf den Variablen berechnen, die Zählungen enthalten. Führen Sie dann ein hierarchisches Clustering (z. B. eine durchschnittliche Verknüpfungsmethode oder eine vollständige Verknüpfungsmethode - sie berechnen keine Schwerpunkte und erfordern daher keinen euklidischen Abstand) oder ein anderes Clustering durch, das mit beliebigen Abstandsmatrizen arbeitet.
Kopieren von Beispieldaten aus der Frage:
Betrachten Sie die Paar-
c0
undc1
Berechnungs- Chi-Quadrat- Statistik für ihre2x3
Häufigkeitstabelle. Nehmen Sie die Quadratwurzel davon (wie Sie es nehmen, wenn Sie den üblichen euklidischen Abstand berechnen). Das ist deine Distanz. Wenn der Abstand nahe 0 liegt, sind sich die beiden Kunden ähnlich.Es kann Sie stören, dass sich die Summen in Zeilen in Ihrer Tabelle unterscheiden und sich daher auf den Chi-Quadrat-Abstand auswirken, wenn Sie
c0
mitc1
vsc0
mit vergleichenc2
. Berechnen Sie dann die (Wurzel) des Phi-Quadrat- Abstands:Phi-sq = Chi-sq/N
wobeiN
die kombinierte Gesamtzahl in den beiden aktuell betrachteten Zeilen (Kunden) ist. Es ist somit der normalisierte Abstand zu den Gesamtzählungen.Der Abstand zwischen zwei beliebigen Zeilen der Daten ist also die (Quadratwurzel von) der Chi-Quadrat- oder Phi-Quadrat-Statistik der
2 x p
Häufigkeitstabelle (p
ist die Anzahl der Spalten in den Daten). Wenn eine oder mehrere Spalten in der aktuellen2 x p
Tabelle vollständig Null sind, schneiden Sie diese Spalte ab und berechnen Sie den Abstand basierend auf den verbleibenden Spalten ungleich Null (dies ist in Ordnung, und so verhält sich beispielsweise SPSS bei der Berechnung des Abstands). Der Chi-Quadrat-Abstand ist tatsächlich ein gewichteter euklidischer Abstand.quelle