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.