Utilisation d'attributs pour classer / regrouper les profils utilisateur

14

J'ai un ensemble de données d'utilisateurs qui achètent des produits sur un site Web.

Les attributs que j'ai sont l'ID utilisateur, la région (état) de l'utilisateur, l'ID catégories du produit, l'ID mots clés du produit, l'ID mots clés du site Web et le montant des ventes dépensées pour le produit.

L'objectif est d'utiliser les informations d'un produit et d'un site Web pour identifier qui sont les utilisateurs, tels que «jeune joueur masculin» ou «rester à la maison maman».

J'ai joint un exemple d'image comme ci-dessous:

entrez la description de l'image ici

Il y a au total 1940 catégories uniques et 13845 mots-clés uniques pour les produits. Pour le site, il y a 13063 mots-clés uniques. L'ensemble de données est énorme car il s'agit des données de journalisation quotidiennes.

Je pense au clustering, car ceux-ci ne sont pas supervisés, mais ces identifiants sont des numéros ordonnés sans signification numérique. Ensuite, je ne sais pas comment appliquer l'algorithme. Je pense aussi à la classification. Si j'ajoute une colonne de classe en fonction du montant des ventes du produit acheté. Je pense que le clustering est plus préféré. Je ne sais pas quel algorithme je devrais utiliser dans ce cas, car les dimensions de l'ID des mots clés pourraient être supérieures à 10000 (chaque produit peut avoir de nombreux mots clés, tout comme le site Web). J'ai besoin d'utiliser Spark pour ce projet.

Quelqu'un peut-il m'aider avec quelques idées ou suggestions?

Merci beaucoup!

sylvia
la source
1
Pouvez-vous fournir plus d'informations? qu'est-ce que "catégories id du produit A" et "recherche des mots-clés id du produit A" de la même longueur pour toutes les entrées? "les dimensions de l'identifiant des mots clés de recherche peuvent être supérieures à 10 000" pourquoi? que sont-ils? Combien d'échantillons avez-vous? toutes les questions peuvent être répondues si vous postez quelques échantillons de vos données ici. Ensuite, je pourrais probablement vous suggérer quelque chose.
Kasra Manshaei
Le produit A et le produit B sont-ils deux produits que l'utilisateur a achetés? Le libellé semble suggérer que les produits A et B sont différents pour chaque utilisateur, car les mots clés peuvent varier. En est-il ainsi? Et dernier commentaire, voulez-vous classer ou regrouper? Ce sont des techniques assez différentes :)
logc
Merci beaucoup @kasramsh pour vos réponses. J'ai mis à jour la description et joint également un exemple de données. J'espère avoir quelques suggestions de votre part!
sylvia
@logc oui, le produit (j'ai dit le produit A plus tôt) et le site Web (j'ai dit le produit B plus tôt) sont différents pour chaque utilisateur. Chaque produit a quelques mots clés et chaque site Web a aussi quelques mots clés. Soit le regroupement ou la classification est très bien, tant que je peux créer un profil d'utilisateur, tel que "jeune joueur masculin"; "reste à la maison maman". Je pense que le clustering est plus préférable. Je vous remercie!!
sylvia
@sylvia - J'ai un problème similaire à résoudre. Je l'avais posté comme une question distincte. Pourriez-vous donner quelques suggestions sur la façon dont vous l'avez résolu? datascience.stackexchange.com/questions/12930/… Mon autre doute est pour K moyennes, avez-vous regroupé les enregistrements par client? Cela signifie que chaque ligne représentait une transaction ou représentait des achats agrégés de ce client jusqu'à la date.
Neil

Réponses:

11

Pour l'instant, je n'ai que le temps pour une réponse très brève, mais je vais essayer de la développer plus tard.

Ce que vous voulez faire, c'est un clustering , car vous voulez découvrir des étiquettes pour vos données. (Par opposition à une classification, où vous auriez des étiquettes pour au moins certaines des données et vous aimeriez étiqueter le reste).

Pour effectuer un clustering sur vos utilisateurs, vous devez les avoir comme une sorte de points dans un espace abstrait. Ensuite, vous mesurerez les distances entre les points, et direz que les points qui sont "proches" sont "similaires", et les étiqueterez en fonction de leur place dans cet espace.

Vous devez transformer vos données en quelque chose qui ressemble à un profil utilisateur, c'est-à-dire: un ID utilisateur, suivi d'un vecteur de nombres qui représentent les fonctionnalités de cet utilisateur. Dans votre cas, chaque fonctionnalité peut être une "catégorie de site Web" ou une "catégorie de produit", et le nombre peut correspondre au montant dépensé pour cette fonctionnalité. Ou bien, une fonctionnalité pourrait être une combinaison de Web et de produit.

À titre d'exemple, imaginons le profil utilisateur avec seulement trois fonctionnalités:

  • dollars dépensés dans des sites web "techy",
  • dollars dépensés pour des produits "mode",
  • et de l'argent dépensé pour des jeux vidéo «agressifs» sur des sites Web «familiaux» (qui sait)

Pour créer ces profils, vous devez mapper les "catégories" et "mots-clés" que vous avez, qui sont trop nombreux, dans les fonctionnalités que vous jugez pertinentes. Examinez la modélisation de sujet ou la similitude sémantique pour le faire. Une fois cette carte construite, elle indiquera que tous les dollars dépensés sur des sites Web avec des mots-clés "gadget", "électronique", "programmation" et X autres, devraient tous être regroupés dans notre première fonctionnalité; etc.

N'ayez pas peur "d'imposer" les fonctionnalités! Vous devrez les affiner et peut-être les modifier complètement une fois que vous aurez regroupé les utilisateurs.

Une fois que vous avez des profils d'utilisateurs, procédez à leur regroupement à l'aide de k-means ou de tout autre élément que vous jugez intéressant. Quelle que soit la technique utilisée, vous souhaiterez obtenir le point "représentatif" pour chaque cluster. Il s'agit généralement du "centre" géométrique des points de cette grappe.

Tracez ces points «représentatifs», et tracez également comment ils se comparent à d'autres grappes. L'utilisation d'un graphique radar est très utile ici. Partout où il y a une caractéristique saillante (quelque chose dans le représentant qui est très marqué et qui est également très important dans sa comparaison avec d'autres clusters) est un bon candidat pour vous aider à étiqueter le cluster avec une phrase accrocheuse ("nerds", "fashionistas" , "mamans agressives" ...).

N'oubliez pas qu'un problème de clustering est un problème ouvert, il n'y a donc pas de «bonne» solution! Et je pense que ma réponse est déjà assez longue; vérifiez également la normalisation des profils et le filtrage des valeurs aberrantes.

logc
la source
Merci beaucoup! C'est très utile. Je vais commencer par la cartographie. J'apprécie vraiment cela!
sylvia
Heureux d'aider. :)
logc
Salut @logc, j'ai appliqué LDA pour sélectionner les fonctionnalités. J'ai considéré chaque user_id comme un "document" et les mots-clés sont les "mots" dans le "document", puis en appliquant LDA j'ai obtenu quelques sujets de mots-clés. Cependant, je ne sais pas pourquoi la plupart de mes sujets sont constitués des mêmes mots clés. Cela signifie-t-il que le LDA n'est pas la bonne méthode pour mon cas ou qu'il y a des erreurs? Merci beaucoup!
sylvia
@sylvia: Je vous suggère de transformer cette question en une nouvelle question sur ce site. Sinon, nous pourrions finir par écrire une tonne de commentaires, et ce n'est pas le meilleur format pour les questions et réponses. :)
logc
Merci pour la suggestion. Voici le lien que j'ai publié si vous avez le temps de jeter un œil à datascience.stackexchange.com/questions/5941/… Merci!
sylvia
-2

Pour l'orientation et l'exploration, je peux recommander WeKa , qui est une très belle boîte à outils pour l'apprentissage automatique. Cela prend un certain format d'entrée (.ARFF), vous devrez donc peut-être également y réfléchir.

En ce qui concerne le dilemme des mots clés, je recommande d'effectuer une sélection de fonctionnalités afin d'éliminer les mots clés redondants ou non indicatifs.

lennyklb
la source
Merci @Lennart Kloppenburg pour votre réponse. Comment effectuer la sélection des fonctionnalités si l'attribut (keword_id) est un numéro ordonné? J'ai mis à jour un exemple de données ci-dessus. Pourriez-vous s'il vous plaît jeter un oeil et me donner quelques suggestions? Je vous remercie!
sylvia