Verwenden von Attributen zum Klassifizieren / Gruppieren von Benutzerprofilen

14

Ich habe einen Datensatz von Benutzern, die Produkte von einer Website kaufen.

Die Attribute, die ich habe, sind Benutzer-ID, Region (Bundesland) des Benutzers, Kategorie-ID des Produkts, Schlüsselwort-ID des Produkts, Schlüsselwort-ID der Website und Kaufpreis des Produkts.

Ziel ist es, anhand der Informationen eines Produkts und einer Website zu identifizieren, wer die Nutzer sind, beispielsweise "männliche junge Spieler" oder "Mutter zu Hause bleiben".

Ich habe ein Beispielbild wie folgt angehängt:

Bildbeschreibung hier eingeben

Es gibt insgesamt 1940 eindeutige Kategorien und 13845 eindeutige Schlüsselwörter für Produkte. Für die Website gibt es 13063 eindeutige Schlüsselwörter. Der gesamte Datensatz ist riesig, da dies die täglichen Protokolldaten sind.

Ich denke an Clustering, da diese nicht überwacht werden, aber diese IDs sind geordnete Zahlen ohne numerische Bedeutung. Dann weiß ich nicht, wie ich den Algorithmus anwenden soll. Ich denke auch an die Klassifizierung. Wenn ich eine Spalte der Klasse hinzufüge, die auf der Verkaufsmenge des gekauften Produkts basiert. Ich denke, Clustering wird mehr bevorzugt. Ich weiß nicht, welchen Algorithmus ich für diesen Fall verwenden soll, da die Größe der Keyword-ID mehr als 10000 betragen kann (jedes Produkt kann viele Keywords enthalten, ebenso die Website). Ich muss Spark für dieses Projekt verwenden.

Kann mir jemand mit Ideen oder Vorschlägen weiterhelfen?

Ich danke dir sehr!

Sylvia
quelle
1
Können Sie weitere Informationen bereitstellen? Was bedeutet "Kategorie-ID von Produkt A" und "Suche nach Schlüsselwörtern mit der ID von Produkt A" in gleicher Länge für alle Einträge? "die abmessungen der suchschlüsselwörter könnten mehr als 10000 sein" warum? was sind Sie? Wie viele Proben haben Sie? Alle Fragen können beantwortet werden, wenn Sie hier ein paar Beispiele Ihrer Daten posten. Dann könnte ich dir wahrscheinlich etwas vorschlagen.
Kasra Manshaei
Sind Produkt A und Produkt B zwei Produkte, die der Benutzer gekauft hat? Die Formulierung scheint darauf hinzudeuten, dass die Produkte A und B für jeden Benutzer unterschiedlich sind, da die Schlüsselwörter variieren können. Ist das so? Und letzter Kommentar, möchten Sie klassifizieren oder gruppieren? Das sind ganz andere Techniken :)
logc
Vielen Dank an @kasramsh für Ihre Antworten. Ich habe die Beschreibung aktualisiert und auch Beispieldaten angehängt. Ich hoffe, einige Vorschläge von Ihnen zu bekommen!
Sylvia
@logc ja, Produkt (ich sagte Produkt A früher) und Website (ich sagte Produkt B früher) unterscheiden sich von jedem Benutzer. Jedes Produkt hat einige Schlüsselwörter und jede Web site hat einige Schlüsselwörter auch. Clustering oder Klassifizierung sind in Ordnung, solange ich ein Benutzerprofil erstellen kann, z. B. "männlicher junger Spieler". "bleib zuhause Mama". Ich denke, Clustering ist vorzuziehen. Vielen Dank!!
Sylvia
@ Sylvia - Ich habe ein ähnliches Problem zu lösen. Ich hatte es als separate Frage gepostet. Könntest du ein paar Vorschläge machen, wie du es gelöst hast? datascience.stackexchange.com/questions/12930/… Mein anderer Zweifel ist, dass Sie die Datensätze für K - Mittel nach Kunden gruppiert haben. Bedeutet, dass jede Zeile eine Transaktion darstellt oder aggregierte Käufe dieses Kunden bis zum Datum darstellt.
Neil

Antworten:

11

Momentan habe ich nur Zeit für eine sehr kurze Antwort, aber ich werde später versuchen, sie zu erweitern.

Was Sie tun möchten, ist ein Clustering , da Sie einige Bezeichnungen für Ihre Daten ermitteln möchten. (Im Gegensatz zu einer Klassifizierung, bei der Sie zumindest für einen Teil der Daten Beschriftungen haben und den Rest beschriften möchten).

Um ein Clustering für Ihre Benutzer durchzuführen, müssen Sie sie als eine Art Punkt in einem abstrakten Raum haben. Dann messen Sie Entfernungen zwischen Punkten und sagen, dass Punkte, die "nahe" sind, "ähnlich" sind, und kennzeichnen sie entsprechend ihrer Position in diesem Raum.

Sie müssen Ihre Daten in ein Benutzerprofil umwandeln, dh eine Benutzer-ID, gefolgt von einem Zahlenvektor, der die Funktionen dieses Benutzers darstellt. In Ihrem Fall könnte jede Funktion eine "Kategorie der Website" oder eine "Kategorie des Produkts" sein, und die Zahl könnte der Betrag sein, der für diese Funktion ausgegeben wird. Oder ein Feature könnte natürlich eine Kombination aus Web und Produkt sein.

Stellen wir uns als Beispiel das Benutzerprofil mit nur drei Funktionen vor:

  • Dollar ausgegeben in "techy" Netze,
  • Dollar für "Mode" -Produkte ausgegeben,
  • und Dollar, die für "aggressive" Videospiele auf "familienorientierten" Websites ausgegeben werden (wer weiß).

Um diese Profile zu erstellen, müssen Sie die vorhandenen "Kategorien" und "Stichwörter", die zu zahlreich sind, den Funktionen zuordnen, die Sie für relevant halten. Schauen Sie sich dazu die Themenmodellierung oder semantische Ähnlichkeit an. Sobald diese Karte erstellt ist, wird angegeben, dass alle Dollars, die für Websites mit den Schlüsselwörtern "Gadget", "Elektronik", "Programmierung" und X anderen ausgegeben werden, in unserem ersten Feature zusammengefasst werden sollen. und so weiter.

Haben Sie keine Angst, die Funktionen "aufzuerlegen"! Sie müssen sie verfeinern und möglicherweise vollständig ändern, sobald Sie die Benutzer gruppiert haben.

Sobald Sie Benutzerprofile haben, gruppieren Sie diese mit k-means oder was auch immer Sie sonst für interessant halten. Unabhängig davon, welche Technik Sie verwenden, werden Sie daran interessiert sein, den "repräsentativen" Punkt für jeden Cluster zu ermitteln. Dies ist normalerweise die geometrische "Mitte" der Punkte in diesem Cluster.

Zeichnen Sie diese "repräsentativen" Punkte und zeichnen Sie auch auf, wie sie mit anderen Clustern verglichen werden. Die Verwendung einer Radarkarte ist hier sehr nützlich. Überall dort, wo es ein hervorstechendes Merkmal gibt (etwas in dem Vertreter, das sehr ausgeprägt ist und auch im Vergleich zu anderen Clustern sehr hervorsticht), ist es ein guter Kandidat, um Ihnen zu helfen, den Cluster mit einem einprägsamen Satz ("Nerds", "Fashionistas") zu kennzeichnen. , "aggressive Mütter" ...).

Denken Sie daran, dass ein Clustering-Problem ein offenes Problem ist, es gibt also keine "richtige" Lösung! Und ich denke, meine Antwort ist schon ziemlich lang; Überprüfen Sie auch die Normalisierung der Profile und filtern Sie Ausreißer.

logc
quelle
Vielen herzlichen Dank! Es ist sehr hilfreich. Ich werde mit dem Mapping beginnen. Ich weiß das wirklich zu schätzen!
Sylvia
Freue mich zu helfen. :)
logc
Hallo @logc, ich habe LDA für die Auswahl der Funktionen angewendet. Ich habe jede user_id als "Dokument" betrachtet und die Schlüsselwörter sind die "Wörter" im "Dokument". Durch die Anwendung von LDA habe ich dann ein paar Schlüsselwortthemen erhalten. Ich weiß jedoch nicht, warum die meisten meiner Themen aus denselben Schlüsselwörtern bestehen. Bedeutet das, dass LDA nicht die richtige Methode für meinen Fall ist, oder gibt es einige Fehler? Ich danke dir sehr!
Sylvia
@sylvia: Ich würde vorschlagen, dass Sie diese Frage in eine neue Frage auf dieser Site verwandeln. Andernfalls schreiben wir möglicherweise eine Menge Kommentare, und das ist nicht das beste Format für Fragen und Antworten. :)
logc
Danke für den Vorschlag. Hier ist der Link, den ich gepostet habe, wenn Sie Zeit haben, einen Blick auf datascience.stackexchange.com/questions/5941/… zu werfen. Danke!
Sylvia
-2

Zur Orientierung und Erkundung kann ich WeKa empfehlen , ein sehr nützliches Toolkit für maschinelles Lernen. Es erfordert ein bestimmtes Eingabeformat (.ARFF), daher müssen Sie dies möglicherweise ebenfalls prüfen.

Was das Keyword-Dilemma betrifft, empfehle ich, einige Features auszuwählen, um redundante oder nicht indikative Keywords zu entfernen.

Lennyklb
quelle
Vielen Dank @Lennart Kloppenburg für Ihre Antwort. Wie führt man eine Featureauswahl durch, wenn die Attribute (keword_id) nummeriert sind? Ich habe oben Beispieldaten aktualisiert. Könnten Sie bitte einen Blick darauf werfen und mir einige Vorschläge machen? Vielen Dank!
Sylvia