Usando atributos para classificar / agrupar perfis de usuário

14

Eu tenho um conjunto de dados de usuários que compram produtos de um site.

Os atributos que tenho são: ID do usuário, região (estado) do usuário, ID das categorias do produto, ID das palavras-chave do produto, ID das palavras-chave do site e valor das vendas gastas do produto.

O objetivo é usar as informações de um produto e site para identificar quem são os usuários, como "jovem jogador do sexo masculino" ou "mãe que fica em casa".

Anexei uma imagem de exemplo como abaixo:

insira a descrição da imagem aqui

No total, existem 1940 categorias exclusivas e 13845 palavras-chave exclusivas para produtos. Para o site, existem 13063 palavras-chave exclusivas. Todo o conjunto de dados é enorme, já que são os dados de log diários.

Estou pensando em agrupar, pois eles não são supervisionados, mas esses IDs são números ordenados sem significado numérico. Então não sei como aplicar o algoritmo. Eu também estou pensando em classificação. Se eu adicionar uma coluna da classe com base na quantidade de vendas do produto comprado. Eu acho que o clustering é mais preferido. Não sei qual algoritmo devo usar neste caso, pois as dimensões do ID das palavras-chave podem ser maiores que 10000 (cada produto pode ter muitas palavras-chave, o mesmo ocorre com o site). Eu preciso usar o Spark para este projeto.

Alguém pode me ajudar com algumas idéias ou sugestões?

Muito obrigado!

Sylvia
fonte
1
Voce pode fornecer mais informação? o que é "identificação de categorias do produto A" e "pesquisa palavras-chave id do produto A" do mesmo comprimento para todas as entradas? "as dimensões do ID das palavras-chave da pesquisa podem ser maiores que 10.000" por quê? o que eles são? Quantas amostras você tem? todas as perguntas podem ser respondidas se você postar uma amostra de seus dados aqui. Então eu provavelmente poderia sugerir uma coisa.
Kasra Manshaei
O produto A e o produto B são dois produtos que o usuário comprou? A redação parece sugerir que os produtos A e B são diferentes para cada usuário, pois as palavras-chave podem variar. É assim? E último comentário, você deseja classificar ou agrupar? Aqueles são bastante diferentes técnicas :)
LogC
Muito obrigado @kasramsh por suas respostas. Atualizei a descrição e também anexei uma amostra de dados. Espero receber algumas sugestões de você!
Sylvia 21/05
@logc sim, o produto (eu disse o produto A anteriormente) e o site (eu disse o produto B anteriormente) são diferentes de cada usuário. Cada produto possui algumas palavras-chave e cada site também possui algumas palavras-chave. Agrupar ou classificar é bom, desde que eu possa criar um perfil de usuário, como "jogador jovem masculino"; "fique em casa mãe". Eu acho que o agrupamento é mais preferível. Obrigado!!
Sylvia 21/05
@sylvia - Eu tenho um problema semelhante para resolver. Eu o publiquei como uma pergunta separada. Você poderia dar algumas sugestões sobre como resolvê-lo? datascience.stackexchange.com/questions/12930/… Minha outra dúvida é para K: você agrupou os registros por cliente? Significado cada linha representava uma transação ou representava compras agregadas desse cliente até a data.
294 Neil

Respostas:

11

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.

logc
fonte
Muito obrigado! É muito útil. Vou começar a partir do mapeamento. Eu realmente gostei disso!
Sylvia
Feliz por ajudar. :)
logc
Olá @logc, apliquei o LDA para selecionar os recursos. Eu considerei cada user_id como um "documento" e as palavras-chave são as "palavras" no "documento"; em seguida, aplicando o LDA, obtive alguns tópicos de palavras-chave. No entanto, não sei por que a maioria dos meus tópicos consiste nas mesmas palavras-chave. Isso significa que o LDA não é o método certo para o meu caso ou há alguns erros? Muito obrigado!
sylvia
@ Sylvia: Eu sugiro que você transforme essa pergunta em uma nova pergunta neste site. Caso contrário, poderemos acabar escrevendo muitos comentários, e esse não é o melhor formato para as perguntas e respostas. :)
logc
Obrigado pela sugestão. Aqui está o link que eu postei, se você tiver tempo para dar uma olhada em datascience.stackexchange.com/questions/5941/… Obrigado!
Sylvia 28/05
-2

Para orientação e exploração, posso recomendar o WeKa , que é um kit de ferramentas muito bom para aprendizado de máquina. É preciso um certo formato de entrada (.ARFF), assim você pode precisar examinar isso também.

Quanto ao dilema das palavras-chave, recomendo realizar algumas seleções de recursos para eliminar palavras-chave redundantes ou não indicativas.

lennyklb
fonte
Obrigado @Lennart Kloppenburg pela sua resposta. Como executar a seleção de recursos se o atributo (keword_id) for um número ordenado? Atualizei um exemplo de dados acima. Você poderia dar uma olhada e me dar algumas sugestões? Obrigado!
Sylvia 21/05