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!


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.