Previsão de demanda de loja de vinhos — Parte 1/3 — Estudo de caso e limpeza de dados.

Baseado em uma vaga de emprego disponibilizada no Linkedin, iremos realizar um projeto de previsão de demanda. Nessa primeira parte iremos realizar um estudo do caso e a limpeza dos nossos dados.

Guilherme Marczewski
6 min readMay 11, 2021

Atualmente, são publicadas diversas vagas de emprego no Linkedin, e em meio a várias reclamações sobre vagas que solicitam as mais variadas skills dos candidatos, conhecimentos que dificilmente serão utilizados, temos uma oportunidade em que é explicitada a tarefa a ser realizada, inclusive deixando em aberto a ferramenta para resolução da mesma.

Nessa vaga, estão procurando um analista ou um cientista de dados para ajudar no desenvolvimento de um algoritmo de previsão de demanda para gerenciar estoques da indústria de vinhos. A habilidade de análise de dados e encontrar padrões em grandes conjuntos de dados, além da capacidade de construir modelos preditivos e conhecimento em algoritmos de Machine Learning, são os principais requisitos para ocupar a função.

Prevendo demandas

Antes de começarmos a programar, precisamos entender qual o objetivo desse projeto:

Previsão de demanda é o processo de prever o consumo de um determinado produto pelos consumidores, possibilitando diversos insights, como:

  • Definir os melhores preços, evitando tanto colocar um preço muito elevado que os clientes evitem a compra, quanto um preço que não valha a pena para o dono da loja.
  • Realizar o planejamento correto da produção e do estoque, fazendo com que os produtos corretos sejam produzidos e estocados no tempo correto. Caso um vendedor tenha a opção de vender chocolate quente ou um sorvete, durante o verão, provavelmente o sorvete seria mais bem aceito pelos clientes.

Além dos benefícios de podermos prever a demanda, precisamos nos atentar aos fatores que a influenciam, como a competição com outras lojas do mesmo segmento, o tipo de produto e condições climáticas e geográficas.

O principal objetivo desse projeto é identificar as melhores e piores datas para a venda de vinhos, baseado no histórico de vendas dos últimos três anos. Esse histórico de vendas é baseado em dados sintéticos, que foram criados especificamente para esse projeto. Devido à origem dos dados, não necessariamente eles representarão a realidade do mercado de vinhos, mas sim a realidade do conjunto de dados estudado.

Business Understanding: Entendendo as particularidades do comércio e mundo dos vinhos

Uma das bebidas alcoólicas mais consumidas no Brasil e no mundo, os vinhos precisam de condições e cuidados específicos, tanto para manter a integridade do produto, quanto o seu sabor. Devem ser mantidos sempre protegidos da luz solar e em ambientes com umidade controlada, para não perderem as suas particularidades.

https://pixabay.com/pt/users/photomix-company-1546875/?utm_source=link-attribution&utm_medium=referral&utm_campaign=image&utm_content=1761613

Devido à sua fragilidade, é indicado manuseá-los o mínimo possível, por isso é muito importante otimizar o seu transporte e estoque, para evitar perturbações desnecessárias ao líquido.

Ao contrário do que muitas pessoas pensam, a grande maioria dos vinhos não ficam melhores com o tempo, por isso é tão necessária uma previsão correta de demandas, para que o produto fique o menor tempo possível na loja, antes de encontrar seu comprador.

E agora… mão na massa!

O primeiro passo antes de analisarmos os dados, é importar as bibliotecas que serão utilizadas.

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snssns.set_style()

Primeiro vamos analisar os dados dos produtos, que estão salvos nesse link, verificando as primeiras cinco linhas do arquivo.

Dicionário de variáveis

  • item_id = Número de identificação do item
  • name = Nome do vinho
  • producer = Nome do Produtor do vinho
  • country = País de origem do vinho
  • vintage = Safra
  • kind = Tipo do vinho
  • price_brl = Preço em reais
  • price_usd = Preço em dólar americano

Agora vamos verificar os tipos de vinho que fazem parte do nosso conjunto de dados. Para isso iremos agrupar os tipos de vinho e aproveitar para verificar o tamanho do conjunto, que no caso é a quantidade de cada tipo de vinho.

df.groupby(['kind']).size()

Com isso obteremos o seguinte resultado:

  • Sparkling = Espumante
  • Rose Sparkling = Espumante Rose
  • White = Branco
  • Rosé = Rosé
  • Red = Tinto

Limpeza e tratamento de dados

Agora iremos precisar fazer os ajustes nos dados para dar seguimento no projeto, como verificar se existem dados ausentes e se os mesmos irão interferir na análise, se existem pontos e/ou vírgulas em locais incorretos e os tipos dos dados.

Quando exibimos as cinco primeiras linhas do conjunto de dados, foi possível identificar que na variável preço, está sendo usada a vírgula como separador de milhar, mas devido ao uso da vírgula o python não consegue identificar esse valor como um número. Por isso iremos remover as vírgulas dos nossos dados.

df.replace(',','', regex=True, inplace=True)df.head()

Após o comando para retirarmos as vírgulas, vamos exibir as 5 primeiras linhas:

Nota-se que na quinta linha da coluna “price_br”, antes estava o valor 1,548.00 e agora está 1548.00, que é o correto.

Precisamos também verificar o tipo de dado de cada coluna.

df.info()

Esse comando nos exibe algumas informações do nosso conjunto de dados, como o total de entradas, ou linhas, o número de colunas, tipo dos dados e quantidade de linhas vazias.

Por ser um conjunto de dados sintético, que foi criado para esse projeto, nenhuma coluna possui linhas vazias, algo que provavelmente não ocorreria com dados reais. Além disso a coluna ‘item_id’ é do tipo inteiro, mas como é o número de identificação do produto e não faremos nenhuma conta com ele, podemos transformá-lo em string. Também precisaremos alterar o tipo de dado das colunas de preço, para convertê-las pro tipo numérico.

df.item_id = df.item_id.astype(str)df.price_brl = pd.to_numeric(df.price_brl)df.price_usd = pd.to_numeric(df.price_usd)df.info()

Agora precisamos fazer somente mais uma alteração no conjunto de dados. A coluna “vintage” refere-se à safra do vinho, que é o ano em que as uvas utilizadas para fazer esse vinho foram colhidas. Alguns vinhos não possuem uma safra específica, para manter a constância do sabor, podendo ser misturados vinhos de mais de uma safra ou até de vinhedos diferentes.

Devido a essa particularidade, alguns vinhos do nosso catálogo possuem na coluna “vintage” a informação “NV”, de non-vintage. Como queremos transformar essa coluna para o formato numérico, substituiremos o “NV” por “0” e mudaremos o tipo do dado.

df.vintage = df.vintage.replace('NV', '0')df.vintage = pd.to_numeric(df.vintage)

Agora que o dataset está no formato que precisaremos para continuar nosso projeto, irei salvá-lo e disponibilizá-lo nesse link.

df.to_csv('produtos_clean.csv', index=0)

Com o conjunto de dados já tratado e salvo, encerraremos a primeira parte por aqui. Na parte 2 do projeto, iremos fazer o estudo do conjunto de dados dos produtos e dos dados de vendas. Para então, na parte 3, finalizarmos criando um modelo de previsão de demandas, que é o real objetivo desse projeto, com o Facebook Prophet.

--

--