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?