No momento, só tenho tempo para uma resposta muito breve, mas tentarei expandi-la mais tarde.
O que você deseja fazer é um cluster , pois você deseja descobrir alguns rótulos para seus dados. (Ao contrário de uma classificação, onde você teria rótulos para pelo menos alguns dos dados e gostaria de rotular o restante).
Para executar um cluster em seus usuários, você precisa deles como algum tipo de ponto em um espaço abstrato. Depois, você medirá as distâncias entre os pontos e dirá que os pontos "próximos" são "semelhantes" e os rotulará de acordo com o seu lugar naquele espaço.
Você precisa transformar seus dados em algo parecido com um perfil de usuário, ou seja: um ID do usuário, seguido por um vetor de números que representam os recursos desse usuário. No seu caso, cada recurso pode ser uma "categoria de site" ou "categoria de produto", e o número pode ser a quantia gasta nesse recurso. Ou um recurso pode ser uma combinação de web e produto, é claro.
Como exemplo, vamos imaginar o perfil do usuário com apenas três recursos:
- dólares gastos em teias "techy",
- dólares gastos em produtos de "moda",
- e dólares gastos em videogames "agressivos" em sites "orientados para a família" (quem sabe).
Para criar esses perfis, você precisa mapear as "categorias" e "palavras-chave" que você possui, que são muito abundantes, para os recursos que você considera relevantes. Examine a modelagem de tópicos ou a semelhança semântica para fazer isso. Depois que o mapa for construído, ele indicará que todos os dólares gastos nas redes com as palavras-chave "gadget", "eletrônica", "programação" e X outros devem ser agregados ao nosso primeiro recurso; e assim por diante.
Não tenha medo de "impor" os recursos! Você precisará refiná-los e talvez alterá-los completamente depois de agrupar os usuários.
Depois de ter perfis de usuário, prossiga para agrupá-los usando k-means ou qualquer outra coisa que você achar interessante. Qualquer que seja a técnica usada, você estará interessado em obter o ponto "representativo" para cada cluster. Este é geralmente o "centro" geométrico dos pontos nesse cluster.
Traçar esses pontos "representativos" e também traçar como eles se comparam a outros clusters. Usar um gráfico de radar é muito útil aqui. Sempre que houver um recurso destacado (algo muito representativo no representante e também muito destacado em sua comparação com outros clusters), é um bom candidato para ajudá-lo a rotular o cluster com uma frase cativante ("nerds", "fashionistas" , "mães agressivas" ...).
Lembre-se de que um problema de cluster é um problema aberto, portanto não há solução "certa"! E acho que minha resposta já é bastante longa; verifique também sobre a normalização dos perfis e os outliers de filtragem.