Recomendação de Cesta para Pequenos E-commerces

Gustavo Reis
Somos Tera
Published in
7 min readApr 5, 2021

--

Um projeto para o curso de Data Science e Machine Learning da Tera para ajudar pequenos empreendedores a melhorar a experiência de consumidores nas compras online.

Com a premissa de que poderíamos falar sobre alimentação saudável, achamos uma base de dados de uma pesquisa chamada Pesquisa de Orçamentos Familiar (POF) realizada pelo Instituto Brasileiro de Geografia e Estatística (IBGE). Esta pesquisa tem como objetivo obter informações sobre a estrutura de orçamentos das famílias, ou seja, quanto ganham (sua receita) e qual a destinação de seu dinheiro (suas despesas), além de analisar a composição dos gastos e do consumo das famílias segundo as classes de rendimento, num período de 12 meses permitindo verificar, na comparação com as pesquisas anteriores, algumas mudanças expressivas nas despesas e nos hábitos dos brasileiros.

No início, uma das primeiras premissas foi de que faríamos uma análise de sentimentos baseada em comentários do twitter e em blogs de alimentação saudável e como isso influenciava no consumo de cada indivíduo. Porém, esta solução seria bastante complexa pois teríamos de criar um dicionário para a busca dos termos que seriam analisados, definir o contexto e classificação do que é e não é alimentação saudável (e conversando com nutricionistas, constatamos que é um assunto bastante subjetivo), além de entender o que é Processamento de Linguagem Natural e quais modelos poderiam ser utilizados, limpeza de dados, tokenização, vetorização das palavras e não haveria tempo hábil para implementação.

Outra ideia seria a construção de um modelo de recomendação baseado nos nutrientes totais dos produtos escolhidos pelo usuário para recomendar alimentos complementares pensando em estabelecer um equilíbrio nutricional. No entanto, constatamos durante as análises iniciais juntamente com nutricionistas, que dietas são bastante subjetivas e analisando o banco de dados disponível seria bastante complexo, pensando no tempo disponível para implementação, de atrelar os nutrientes para cada alimento consumido proporcionalmente à quantidade de cada um.

Por fim, desenvolvemos a solução descrita neste artigo com o objetivo de ajudar pequenos empreendedores a melhorar a experiência de seus consumidores em seus respectivos websites, resultando em melhores aquisições, retenções e consequentemente um aumento em vendas.

Photo by Nathália Rosa on Unsplash

Análise Exploratória e Traduzindo os Dados

Utilizando a tabela Consumo Alimentar da POF 2017–2018, iniciamos um tratamento dos dados, pois as colunas que iríamos utilizar estavam codificadas, o que dificultaria uma análise exploratória dos dados.

Analisando a tabela, tínhamos as seguintes colunas:

E analisamos a quantidade de dados nulos no dataset:

Após essa primeira análise, concluímos que as colunas utilizadas seriam: UF (unidade da federação), COD_UPA (código da unidade primária de amostragem), NUM_DOM (número do domicílio), V9015 (horário do consumo do alimento), V9001 (código do tipo de alimento consumido). Porém as colunas V9015 e V9001 estavam codificadas e criamos um dicionário para traduzi-las utilizando a tabela de Cadastro de Produtos da POF 2017–2018:

Também analisamos o consumo alimentar em algumas regiões do Brasil, para avaliar se existem diferenças quanto aos hábitos alimentares:

Como podemos ver nos gráficos, os alimentos mais consumidos são água, açúcar, café, feijão e arroz. Porém podemos perceber alguns alimentos diferentes como bolacha salgada em São Paulo, farinha de mandioca na Bahia e pão de queijo em Goiás, representando características destes estados.

Algoritmo Apriori

Para a construção da solução, utilizamos o algoritmo Apriori, que é bastante conhecido e utilizado em diversas aplicações. O algoritmo Apriori foi proposto por Agrawal (1993) e é um modelo estudado extensivamente pelas comunidades de banco de dados e aprendizado de máquina. Trata-se de um modelo não-supervisionado e está relacionado às regras de associação, utilizadas para identificar relacionamentos entre itens, os quais não representam nenhum tipo de causa ou correlação. Ao invés disso, as regras de associação detectam o uso comum de itens.

A tarefa de associação tem como objetivo encontrar elementos que implicam na presença de outros elementos em uma mesma transação, ou seja, encontrar relacionamentos frequentes entre conjuntos de exemplos. Portanto, as regras de associação representam padrões existentes nas transações de um banco de dados. Exemplificando, existe uma associação de compra de manteiga quando o item pão francês é comprado.

Na compra de um produto quando um outro produto é comprado representa uma regra de associação, e essa regra é utilizada para apoiar campanhas de marketing, controle de estoque de lojas e recomendações de produtos para serem vendidos, mas também em outras áreas, tais como descrever falhas em linhas de comunicação, ações na interface do usuário, crimes cometidos por uma pessoa, ocorrências de doenças recorrentes.

Assim, construímos a solução baseada nesse algoritmo utilizando o consumo alimentar das famílias entrevistadas para a POF 2017–2018.

Construindo a Solução

Para iniciar, importamos as seguintes bibliotecas:

Depois importamos o dataframe que seria utilizado:

Criamos 4 bancos de dados, separados por refeição:

Criamos também uma lista booleana para cada família por refeição para que as recomendações fizessem mais sentido:

E ficaram no seguinte formato:

Depois disso, rodamos o Apriori para cada refeição:

E aplicamos um filtro lift maior ou igual a 1,0 e confiança maior ou igual 0,6:

Resultando no seguinte banco de dados:

Este processo foi repetido para mais cinco estados: Minas Gerais, Bahia, Rio Grande do Sul, Goiás e Pará.

Em seguida, os dados foram exportados para arquivos .csv e armazenados no GitHub para fazerem a integração entre Streamlit, GitHub e Heroku.

Deploy

O deploy do produto foi feito através do Jupyter Notebook, Streamlit, GitHub e Heroku. O Streamlit foi utilizado para construir a interface da solução de forma que o usuário selecionasse o estado e os produtos desejados para compra, sendo estes os dados de entrada para a recomendação. O GitHub foi utilizado como repositório dos arquivos gerados pelo Jupyter Notebook, além de ser utilizado para colocar a aplicação em produção com o Heroku.

Para cada estado disponível para seleção do usuário, foi construído um banco de dados. Sendo assim, para cada estado selecionado, será importada uma tabela diferente para montar a recomendação final. Os arquivos utilizados podem ser encontrados neste link, e a solução pode ser acessada aqui.

Solução final

Selecionando o estado e os produtos desejados, a aplicação irá realizar as recomendações, por exemplo:

Solução com as recomendações

Lições Aprendidas

  1. Desenvolver soluções que requerem uma entrada para resultar uma saída, são bastante desafiadoras, pois é preciso pensar na experiência do usuário e como o resultado irá retornar para o mesmo. Tem de ser algo intuitivo e compreensivo, simples. Foi bastante desafiador porque nunca tínhamos trabalhado com algo parecido antes.
  2. O tratamento dos dados é bastante extensivo e fundamental para a solução: esta parte foi bastante complexa, pois apesar de termos pegado dados do IBGE, que teoricamente estariam prontos, tivemos de criar dicionário para várias colunas e tratá-las, pois haviam colunas com dados faltantes e codificadas. E mesmo após aplicar o Apriori, ainda tivemos de tratar os dados finais das recomendações, pois havia produtos que repetiam a mesma recomendação.
  3. É importante saber qual o problema que está sendo resolvido, já dizia o ditado “Para quem só sabe usar martelo, todo problema é um prego”: este daqui acredito que seja o mais importante, pois não é fácil pensar em uma solução que traga valor. Ciência de dados é muito mais que programar em python ou subir uma solução em produção. Pelo nosso aprendizado, é exatamente desenvolver algo que tenha valor e que quando utilizado, faça a diferença.

Próximos Passos

  1. Analisar o consumo de alimentos baseado na renda com o objetivo de segmentar a recomendação por poder aquisitivo;
  2. Analisar a composição alimentar dos produtos escolhidos com o intuito de recomendar produtos complementares para uma dieta nutricional mais saudável;
  3. Incluir todos os estados na solução.

Referências

https://medium.com/@bernardo.costa/uma-introdu%C3%A7%C3%A3o-ao-algoritmo-apriori-60b11293aa5a

https://www.kaggle.com/yugagrawal95/market-basket-analysis-apriori-in-python

https://dcm.ffclrp.usp.br/~augusto/teaching/ami/AM-I-Regras-Associacao.pdf

https://www.kaggle.com/shawamar/product-recommendation-system-for-e-commerce

https://sidra.ibge.gov.br/pesquisa/pof/tabelas

https://towardsdatascience.com/build-your-first-interactive-data-science-web-app-with-streamlit-d4892cbe4792

Até a próxima :)!

Este artigo foi feito como projeto de conclusão do curso de Data Science da Tera. Nosso grupo é composto pelos estudantes: Claudio Jose Vidal , Gustavo Reis, José Pereira, Mariana Paixão, Marisa Moser e Talles Costa.

--

--