• Michel

Previsão de Vendas em Supermercados usando RapidMiner

Atualizado: 7 de Nov de 2018

A previsão de vendas é uma tarefa comum realizada pelas organizações.

Isso geralmente envolve processos manuais intensivos usando planilhas que

exigem entrada de vários níveis de uma organização. Essa abordagem

introduz viés e geralmente não é precisa. Usando Machine Learning é possível fazer previsões de alta qualidade através da seleção entre dezenas ou centenas de variáveis que tem influência nas vendas, mas que muitas vezes ficam escondidas nas bases de dados.

Competiçoes em Machine Learning

Como na maioria das ciências aplicadas, a melhor maneira de aprender Machine Learning é trabalhar com problemas reais e tentar resolvê-los.

Existem alguns sites de Competiçoes em Machine Learning, entre eles está o Kaggle e as promovidas pelo site indiano Analytics Vidhya.

Trata-se de uma plataforma em que cientistas de dados competem para produzir os melhores modelos para problemas reais enviados por empresas. Essa abordagem de crowdsourcing se baseia no fato de que existem inúmeras estratégias que podem ser aplicadas a qualquer tarefa de modelagem preditiva e é impossível saber de antemão qual delas será mais eficaz.

Em maio de 2018, haviam mais de 150.000 usuários registrados competindo no site indiano. Na minha opinião a maior virtude dos sites de competição é patrocinar a troca de ideias e soluções para um dado problema ou um algoritmo entre os cientistas de dados. É claro que os prêmios são tentadores, mas vencer, ou chegar próximo, geralmente requer além do profundo conhecimento em Machine Learning, a disponibilidade de grande potência computacional e o trabalho em equipes.

Descrição da Competição

Os cientistas de dados de uma rede de supermercados coletaram dados de vendas de 2013 para 1559 produtos em 10 lojas em diferentes cidades. Além disso, determinados atributos de cada produto e loja foram definidos. O objetivo é criar um modelo preditivo para descobrir as vendas de cada produto em uma determinada loja.

Usando este modelo, os executivos tentarão entender as propriedades dos produtos e lojas que desempenham um papel fundamental no aumento das vendas.

Observe que os dados podem ter valores omissos, pois algumas lojas podem não relatar todos os dados devido a falhas técnicas. Portanto, é necessário tratá-los de acordo.

A competição está em https://datahack.analyticsvidhya.com/contest/practice-problem-big-mart-sales-iii/

Meus objetivos neste artigo são:

•Apresentar um processo de abordagem ao problema dde Machine Learning do inicio ao fim;

•Demonstrar que não é indispensável o uso de programação para obter um bom resultado; •Demostrar o software RapidMiner, em particular a função Auto Model.


Pré-requisitos

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 e ter os conceitos centrais de algoritmos de Machine Learning.

Meu resultado final está nos 3,5% melhores de um total de 15.470 concorrentes.

Tradicionalmente aplicamos as seguintes etapas em um projeto de ML

Primeiro carregamos o set de treinamento no RapidMiner


Temos 8523 observações no set de treinamento com 12 atributos.

Estatísticas

Processo de coleta, exploração e limpeza dos dados

Inicialmente eu procedo a uma análise exploratória dos dados. Como um exemplo, vemos que plotando o valor das vendas (Item_Oulet_Sales) totais contra o valor de cada item (Item_MRP), aparecem quatro grandes grupos, o que sugere a criação de um novo atributo. Além disso, como era de esperar, à medida que o valor Item_ MRP do item aumenta, também aumentam suas vendas totais, o que mostra que o Item_MRP pode ser um bom indicador para nosso modelo.

Vemos abaixo que as duas mercearias (grocerys) OUT010 e OUT019 relataram vendas muito menores do que os supermercados.

No entanto, os vários tipos de supermercados não podem ser facilmente distinguidos. Isto é provavelmente devido a outros fatores, por exemplo, sua localização, quanto tempo eles estão em operação, como são gerenciados, etc. Em particular, as vendas em um supermercado tipo 2 parecem um pouco baixas. Isto pode ser devido ao fato de que esta loja ainda é relativamente nova, tendo sido fundada há quatro anos.

Claramente grocerys são muito menores do que os supermercados e, portanto, tem uma reduzida seleção de produtos em oferta.

Olhando para as correlações entre variáveis numéricas percebe-se uma forte correlação positiva de 0,563 entre Item_MRP e Item_Outlet_Sales e uma correlação um pouco mais fraca negativa de -0.162 entre Item_Visibility e Item_Outlet_Sales.

Entretanto a correlação positiva entre Item_MRP e Item_Outlet_Sales, é simplesmente devida ao fato de que os números de vendas são o número de itens vendidos vezes seu preço. Ao dividir Item_Outlet_Sales por Item_MRP reduz-se substancialmente esta correlação.

São gerados mais alguns gráficos em função da variável target (Item_Outlet_Sales) que talvez sejam necessários posteriormente.


Normalização

Como as variáveis numéricas tem escalas muito diferentes, convém normalizá-las. Usamos o operador Normalize para fazer uma transformação z nestas variáveis

Missing Values

Uma das primeiras coisas que costumo fazer é tratar os valores faltantes (missing values).

A coluna de Item_Weight contém muitos valores faltantes, entretanto é muito fácil saber quais são, pois temos os pesos dos mesmos itens em outras linhas. Então é só preencher.

Também os Outlet_Sizes tem itens faltantes. Neste caso eu o preencho estes considerando o Outlet_Size de uma loja com a venda equivalente. Por exemplo, vemos na tabela que as vendas de OUT45 e OUT46 são próximas. Então o OUT46 faltante é Small porque o OUT45 é Small.

Finalmente substituo os anos de inauguração por anos de existência de cada loja.

Criação das variáveis dummy.

Cada variável categórica com mais de duas categorias é transformada em um conjunto de variáveis dummy.

Por exemplo, a variável Outlet_Size se transforma em 3 variáveis dummy e a variável Outlet_type se transforma em 4 em variáveis dummy.

Análise da variável target

A variável target que é Item_Oulet_Sales é bem distorcida. É conveniente transformar essa variável e torná-la mais normalmente distribuída. Para isso geramos um novo atributo “Sales_new” fazendo a extração da raiz quadrada dos valores. Observe que ao fazer isto com a variável target, estamos mudando seus valores, de modo que ao final teremos que elevar ao quadrado os valores de nossa previsão para obter os valores corretos.

Agora que temos os dados pré-processados passamos à modelagem. Vamos usar um operação recentemente incorpada 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://rapidminer.com/resource/automated-machine-learning/

Modelagem

Primeiro selecionamos o set de treinamento pré-processado, que ficou com 136 atributos, depois da implementação das dummy variables e outras alterações que fizemos.


Agora selecionamos a variável target e se desejamos fazer análise supervisionada ou clustering.

Visualizamos a variável target já sem a grande distorção inicial.

Removemos as variáveis irrelevantes.

Por exemplo, várias colunas são inúteis ou são problemáticas e devem ser removidas. Elas são identificada por um círculo vermelho.

O Auto Model faz uma correlação de cada variável com a variável target e nos informa quais são as mais importantes. Vemos que a grande maioria dos atributos não contribuem para o resultado e podemos eliminá-los.


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


Os atributos importantes foram reduzidos a cerca de 20.

Definimos quais modelos serão usados para o treinamento. No caso usaremos os 5 modelos disponíveis no Auto Model.

Performance dos modelos

O RMSE e o R quadrado de cada modelo são calculados.

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

A melhor performance foi do modelo GBT com erro de 10.221 e R^2 = 0.695 ou seja o modelo explica 69,5% das previsões. Vemos também que outros modelos 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.

Vamos analisar o modelo Decision Tree mais a fundo.

Para isso abrimos o processo que foi utilizado em background pelo RM. Como dissemos não é nossa intenção explicar os operadores do processo. Porém nos gráficos a seguir damos uma visão dos principais blocos de operadores. Abaixo vemos o processo completo, porém não mostramos os sub-processos indicados pelos operadores que contém o símbolo



Todas as etapas de pré-processamento acontecem dentro do operador Preprocessing e a substituição dos valores faltantes (missing values ) no operador Replace Missing Values.



Dentro do operador Find Optimal Solution estão as operações de cross-validation, treinamento e medição da performance.

Nesta fase 20% do set de treinamento é retirada para o set de validação.


A fase de treinamento

O set de treinamento entra no operador de cross-validation usando 10 folds que tem como sub-processo o algoritmo Decision Tree. Os resultados são otimizados variando-se o parâmetro maximal_depth.

A árvore é treinada neste estágio, e retorna um modelo (port mod) que será aplicado ao set de validação na próxima etapa

Árvore de decisão final.

A árvore escolheu Outlet_Type = Grocery Store como o atributo raiz. Em segundo lugar está Item_MRF.


Vemos a performance no set de treinamento.

Agora, vamos utilizar os melhores modelos aplicando o operador stacking que combina os melhores modelos de aprendizado para obter melhor desempenho preditivo do que os obtidos apenas com qualquer um dos algoritmos de aprendizado constituintes.


Usamos os 4 melhores modelos, sendo que o algoritmo GLM à direita faz a melhor escolha a cada observação.

Ainda como um último passo, fiz algumas simulações no Excel procurando combinar os quatro modelos de forma ponderada e ir reduzindo o desvio padrão da combinação.

Como mencionamos no início, este modelo, com alguns parâmetros ajustados nos coloca entre os 3,5% melhores entre 15470 competidores.

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