• Michel

RapidMiner em Análise de Sentimento em E-Commerce

Atualizado: 11 de Dez de 2018

Este é um conjunto de dados públicos de pedidos de compras feitos na loja virtual Olist . Os dados foram generosamente fornecidos pela Olist.



A Olist conecta pequenas empresas de todo o Brasil. Estas empresas podem vender seus produtos através da Olist Store e enviá-los diretamente aos clientes usando parceiros de logística.

Depois que um cliente compra o produto da Olist Store, um fornecedor é notificado para atender a esse pedido. Uma vez que o cliente recebe o produto, ou a data de entrega estimada é informada, o cliente recebe uma pesquisa de satisfação por e-mail, em que ele pode dar uma nota entre 1 e 5, para a experiência de compra e anotar alguns comentários.

O conjunto de dados tem informações de cerca de 100 mil pedidos de 2016 a 2018. Os dados incluem os pedidos, preços, pagamentos, fretes até a localizações do cliente, atributos do produto e, por fim, reviews dos Clientes. Também estão disponíveis um conjunto de dados de geolocalização que relaciona códigos postais brasileiros a coordenadas lat / long.

São dados comerciais reais que foram anonimizados e as referências às empresas e parceiros no texto de revisão foram substituídas por nomes simbólicos.

Agradeço a Andre Sionek e ao Kaggle por disponibilizar estas informações e recomendo a exploração de kernels e discussões apresentadas no link https://www.kaggle.com/olistbr/brazilian-ecommerce/home.

Uma tela típica:


Objetivos

Meus objetivos neste artigo são:


•Demonstrar o uso de Machine Learning para aplicações em E-Commerce;

•Demonstrar que não é indispensável o uso de programação para obter um bom resultado e algumas facilidades de uso do software RapidMiner;

•Avaliar se faz sentido usar Machine Learning em uma dada aplicação.


Este artigo não é um tutorial de Machine Learning nem do programa RapidMiner.

Como pré-requisitos você deve saber o que é uma Análise Exploratória de Dados (EDA) e ter os conceitos centrais de algoritmos de Machine Learning.

Datasets

Os dados são divididos em vários subconjuntos para melhor compreensão e organização. Para entende-los veja o esquema abaixo e vá para https://www.kaggle.com/olistbr/brazilian-ecommerce/home para examinar cada um destes datasets.

Objetivo da Análise

A partir dos padrões observados na base de dados tentaremos prever qual será a nota (1 a 5) que um novo cliente dará para uma determinado novo pedido. Abaixo as notas constantes na base de dados.



Tradicionalmente aplicamos as seguintes etapas em um projeto de Machine Learning.


Carregando e agrupando os dados

Primeiro coletamos e agregamos os datasets de acordo com o esquema fornecido, e inserimos tudo em um subprocesso.


Esta tarefa utiliza o operador join do RM. Note que criamos um atributo adicional chamado _count_customers que se refere a quantidade de vezes que um dado Cliente efetuou um pedido.

O dataset agrupado é armazenado como olist_joined.


EDA e Feature Engineering

A base de dados é aberta no RapidMiner.

Temos 113.300 observações com 39 variáveis, sendo uma das variáveis a nota – review_score – a variável que queremos prever (“label”).


O programa gera automaticamente algumas estatísticas para as variáveis.


Inicialmente retiramos atributos desnecessários ou que não estão presentes na ocasião do pedido do Cliente. Em seguida efetuamos o processo de limpeza de dados e o feature engineering, através de um novo subprocesso, sendo o dataset final armazenado em olist_joined_cleaned.

Primeiro retiramos atributos desnecessários ou inexistentes na ocasião do pedido do Cliente.

Fazemos uma análise dos missing values.

Nas dimensões dos produtos há 17 missing values que substituímos pelos valores medios. Filtramos, isto é, retiramos do dataset, as observações dos demais atributos que contém missing values.


Ajustamos os valores nominais das datas para date e geramos atributos para dia do mês, mês do ano, e hora da compra. Criamos um novo atributo

_delta_deliv_purch_days – tempo entre a compra e a previsão da entrega.

Criamos um atributo _zip_delta – diferença ente os CEP's do Cliente e do Vendedor, o que nos dá uma ideia de distância, e _volume que é o produto das altura, largura e comprimento da encomenda.

O subprocesso completo é mostrado abaixo.

Treinamento e Validação

Com o dataset _olist_joined_cleaned, fazemos o treinamento e a validação através do subprocessso(4).


Treinamento

Primeiro subdividimos o dataset em set de treinamento e validação, 80% e 20% dos dados respectivamente, de forma extratificada, isto é, mantendo as proporções das notas. O set de treinamento entra no módulo de Cross Validation, que gera um modelo que alimenta o set de validação, no qual medimos a performance do modelo.

Agora que temos os dados pré-processados passamos à modelagem. Vamos usar um operação recentemente incorporada ao RM chamada Auto Model.

O RapidMiner Auto Model acelera o trabalho que os cientistas de dados tem ao criar modelos de aprendizado de máquina.

Ao contrário das abordagens de aprendizado de máquina automatizadas existentes, o Auto Model não é uma “caixa preta” que impede que os cientistas de dados compreendam como o modelo funciona. O Auto Model gera um processo do RM nos bastidores, para que os cientistas de dados possam ajustar e testar os modelos antes de colocá-los em produção.

Para mais informações sobre como começar a usar o RapidMiner Auto Model, visite: https://www.3dimensoes.com.br/blog/previs%C3%A3o-de-vendas-em-supermercados-usando-rapidminer

Queremos determinar o melhor modelo para a tarefa.

Performance dos modelos

Abaixo os resultados utilizando vários modelos.

Agora podemos ver a performance de cada modelo no set de treinamento, bem como o tempo de processamento.

A melhor performance foi do algoritmo Gradient Boosted Trees.

Note que cinco dos seis algoritmos chegaram a previsões parecidas, o que mostra uma certa estabilidade dos resultados independente do modelo utilizado. Em geral isto pode significar que uma combinação dos melhores modelos pode melhorar ainda mais o resultado.

A importância de cada atributo é correspondente ao seu peso. Vemos que o atributo mais importante é “_delta_deliv_purch_days”.


Escolhemos então, para inserir no módulo de Cross Validation um algoritmo GBT (Gradient Boosted Trees) que gera o modelo fazendo 10 validações no set de treinamento. Aquí também medimos a performance do modelo, mas esta, como sabemos, não é conclusiva.

Usamos 150 árvores, max_depth = 7 obtidos acionando o AutoModel do RM, e os demais parâmetros default do GBT.

Validação

Aplicando o modelo ao set de validação obtemos os seguintes resultados.



Conclusões

O resultado mostra que a nota 5 tem precisão (accuracy) de 90,38%, a nota 1 tem 41,51% , que são resultados razoáveis. Porém as notas 2, 3 e 4 , ficam na faixa de precisão entre 20 e 30%, o que não é muito melhor que um sorteio, pois se temos 5 notas, cada uma tem 20% de chance de sair em um sorteio.

A conclusão para esta aplicação é que um processo de Machine Learning pode ajudar em identificar os extremos das notas, isto é, clientes muito satisfeitos ou muito insatisfeitos porém o algoritmo não detecta nuances intermediárias.

Note que os resultados com a nota 1 são bem mais importantes que com a nota 5, pois nos permitem identificar problemas que causam insatisfação.

Para melhorar a performance pode-se tentar buscar mais observações ou reduzir o número de notas para 1, 5 e uma nota intermediária. Na minha opinião dificilmente um algoritmo mais poderoso com mais parâmetros a serem ajustados poderia melhorar a performance.

3 Dimensões

Inteligência Artificial nas Empresas

Al. das Papoulas, 147 - Santana de Parnaíba - Alphaville, SP 06539-180 - (11) 4153 6004  - (11) 9 9795 9765

michel@3dimensoes.com.br