leofmr / product_recommender Goto Github PK
View Code? Open in Web Editor NEWSistema de recomendação e categorização de produtos.
License: MIT License
Sistema de recomendação e categorização de produtos.
License: MIT License
Ajustar toda a documentação do projeto. Revisando todas as descrições e análises e corrigindo sempre que necessário. As documentações das funções também precisam ser realizadas. E por fim, caso venha a melhorar a organização do projeto, as funções devem ser removidas do main.
Atualizar no readme a forma de utilizar a ferramenta de classificação de produtos.
Essa deve ser uma primeira análise descritiva com base nos dados. Ela deve ser uma primeira etapa para a formulação de hipóteses e identificação de novas análises que podem ser realizadas.
Apesar do código já estar pronto falta ainda escrever a análise dos resultados finais.
Apesar de funcional a recomendação de produtos não está otimizada. Nesse caso, devemos otimizar essa funcionalidade. Utilizando mais os métodos do pandas, principalmente os de vetorização de função e os de ordenamento de dataframes.
head
)Uma vez desenvolvida uma forma de se ranquear termos a partir de uma query, agora é necessário poder avaliar a técnica desenvolvida. Para tal é necessário desenvolver uma função que irá comparar os itens ranqueados pelo sistema de ranqueamento desenvolvido com
a lista de resultados obtida pela query nos dados.
Algumas funções são utilizadas mais de uma vez, nesses casos seria mais adequado move-las para um modelo no src
de modo que possam ser reutilizadas sem a necessidade de reescrevê-las novamente no código.
Dado o baixo desempenho do sistema de recomendação atual, deve ser desenvolvido um classificador alternativo. Esse novo classificador deverá ter uma estratégia distinta. Ao invés de testar a interseção dos top previstos com os top reais, devemos prever as posições dos produtos para dada uma query. Uma vez que já possuímos uma estrutura para fazer previsões com base na distância de edição, devemos continuar utilizando esse atributo, mas também utilizando outros, como: distância de cosseno da query em relação aos títulos, alguma métrica de distância ou similaridade em relação às tags, proporção de tokens da query que estão presentes no dicionário...
Salvar os dados de produtos padronizados para agilizar o sistema de recomendação
Tendo em vista que precisamos de uma ferramenta de ranqueamento dos produtos com base em uma query geral. A forma mais genérica que consigo pensar em conseguir isso é por meio de distância de edição. Outras técnicas que dependem da vetorização de textos como word embbeding e tf-idf requer que ambos os textos a serem comparados precisem de vocabulários em comum. A distância de edição, apesar de não ser a forma mais sofisticada é a que melhor se adaptar a termos inesperados.
Análise da consistência dos dados, verificando se existem dados faltantes, se os dados categóricos estão padronizados em torno de uma quantidade limitada de categorias. Quais são os registros que são únicos. Se os dados estão em formato correto ou se necessitam ser reformatados.
Aplicara a modelagem de tópicos para as duas variáveis textuais em separado title
e concatenated_tags
. Em seguida devemos compreender melhor quais foram os tópicos gerados e, por fim, correlacionar os tópicos gerados com as categorias rotuladas.
title
concatenated_tags
Com a utilização dos dados de produto nas etapas de modelagem e análise descritiva foi identificada a necessidade de adicionar novas etapas de pré-processamento mais gerais. Dessa forma, esses passos precisam ser adicionados no notebook 0 e os dados vão precisar ser gerados novamente. Os passos a serem adicionados, são a remoção de missing (o que foi escolhido tendo em vista a quantidade desprezível de dados faltantes) e no caso dos dados de produto e utilização de product_id
como index
do DataFrame
.
A última etapa do projeto envolve a identificação das categorias associadas à query realizada. Para tal, vamos utilizar o modelo de classificação desenvolvido anteriormente. Esse modelo vai ser aplicado a cada item retornado pelo sistema de recomendação e a classificação escolhida será por decisão majoritária.
Retrabalhar o pré-processamento dos dados. Esse retrabalho é necessário pois a remoção de registros duplicados foi insuficiente do ponto de vista do produto e foi necessário durante a análise descritiva dos dados de produto fazer mais uma remoção de dados duplicados. Dessa forma, serão separados dois tipos de dados, de queries e de produto. Os dados de queries a princípio serão mantidos sem eliminação de dados duplicados. Já os dados de produto serão unificados por id de produto (não é preciso considerar id de vendedor porque cada id de produto possui apenas um vendedor).
train_test_split
para dados de produto e queriesMontar um pipeline que faz a tokenização de uma variável textual, aplica técnica de redução de dimensionalidade (tópicos NMF) e em seguida extrai as variáveis de tópicos como novas features para análise cruzada com os dados de categorias.
Transformar o que foi desenvolvido no notebook de desenvolvimento do modelo de classificação em um script py
que possa ser
utilizado na linha de comando.
Essa é a etapa final da classificação de produtos. Nela, devemos criar um pipeline que irá reunir todas as etapas de pré-processamento e com a de modelagem. Em seguida devemos criar um dicionário com os parâmetros a serem combinados e testados por um grid search. Após treinado e obtido o melhor modelo, este deve ser avaliado utilizando os dados de teste e, por fim, salvo para execução em "produção".
Foram identificados passos desnecessários na função de remoção de duplicados. Talvez seja mais simples apenas fazer um groupby
com o agg
com as variáveis especificasdas.
Para que seja possível validar a capacidade de generalização dos sistemas de classificação e recomendação devemos segmentar os dados em dados de teste e treinamento. Assim, após o treinamento dos sistemas será possível verificar o desempenho de ambos os sistemas em dados que não foram utilizados para o treinamento, o que de certa forma replicaria uma aplicação real do sistema.
Para garantir a representatividade das categorias em ambos os datasets (treino e teste), pode ser que seja necessário utilizar a segmentação dos dados estratificando pela variável categórica.
category
Verificar todos os requirements e remover aqueles que não são mais necessários. Em seguida, gerar novamente o arquivo requirements.txt
Testar diversos modelo de árvore para avaliar se a inclusão dos tópicos melhora a qualidade
dos modelos. Para tal será necessário avaliar, as métricas de desempenho de treino e teste a partir de validação cruzada e da importância de cada um dos atributos para o modelo. Essa ainda é uma etapa exploratória de modo que não tem necessidade de otimizar os hiperparâmetros.
incorporar as funcionalidades de ranqueamento e classificação de ranqueamento ao script main.py.
Para preparar para a elaboração solução de classificação devemos antes fazer uma análise descritiva dos dados. Como isso já foi realizado em parte para a classificação dos produtos nesse caso, a classificação deve ser apenas complementar, considerando
variáveis que ainda não foram utilizadas.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.