Blog
DATA SCIENCE
23
Jun
2019
DATA SCIENCE E PROPHET, FERRAMENTA DO FACEBOOK REALIZANDO PREVISÃO DE VENDAS NO VAREJO

DATA SCIENCE E PROPHET, FERRAMENTA DO FACEBOOK REALIZANDO PREVISÃO DE VENDAS NO VAREJO

Rossmann Store Sales

Objetivo: Explorar os dados e predizer 6 dias de vendas diárias para 1115 lojas espalhadas pelo território Alemão.

Neste notebook vou focar principalmente na Análise de Séries Temporais, um tópico que não é coberto na Competição de Kernels da Rossmann. Então discutirei as vantagens e desvantagens de modelar com os métodos sasonais ARIMA e Prophet.

Como de costume iniciarei com a Análise Exploratória de Dados das métricas principais mostrando as tendências e padrões presentas nos dados nos dando uma fundação sólida para análises causais posteriores.

Análise Exploratória de Dados

Nesta primeira etapa vou explorar os dados de treino e de loja, lidar com valores faltantes e criar novas características para análises posteriores.

Descrição Curta:

  • Sales: o volume de negócios de um determinado dia (variável alvo).
  • Customers: o número de clientes em um determinado dia.
  • Open: um indicador para saber se a loja estava aberta: 0 = fechada, 1 = aberta.
  • Promo: indica se uma loja está exibindo uma promoção nesse dia.
  • StateHoliday: indica um feriado estadual. Normalmente, todas as lojas, com poucas exceções, são fechadas nos feriados estaduais.
  • SchoolHoliday: indica se a (Loja, Data) foi afetada pelo fechamento de escolas públicas.

Estamos lidando com dados de séries temporais, o que provavelmente nos servirá para extrair data para análises posteriores. Também temos duas variáveis provavelmente correlacionadas dentro do conjunto de dados, que podem ser combinadas em uma nova caracterítica.

Na média os clientes gastam aproximadamente USD 9.5 diariamente, Podemos também notar que em alguns dias as Vendas foram iguais a USD 0.0.

ECDF: Empirical Cumulative Distribution Function

Para ter uma primeira impressão sobre as variáveis contínuas vou utilizar a

ECDF

Cerca de 20% dos dados têm uma quantidade zero de vendas / clientes com os quais precisamos lidar e quase 80% do tempo diário de vendas foi inferior a 1000. Então, o que dizer de vendas zero? é apenas devido ao fato das lojas estarem fechadas?

Valores Faltantes

Lojas Fechadas e Lojas com Vendas Zero

Existem 172817 fechadas nos dados. É cerca de 10% do total de observações. Para evitar tendência nas nossas previsões vou retirar estes valores.

E as lojas abertas com zero vendas?

Interessantemente, existem lojas abertas com zero vendas :-D em dias úteis. Existem 54 dias no conjunto de dados, então podemos assumir que existiram fatores externos envolvidos, tais causas especiais devem ser analisadas separadamente.

E sobre as informações das lojas?

  • Store: ID único para cada loja.
  • StoreType: diferença entre 4 modelos de lojas diferentes: a, b, c, d
  • Assortment: descreve um nível de sortimento: a = básico, b = extra, c = estendido
  • CompetitionDistance: distância em metros até a loja concorrente mais próxima
  • CompetitionOpenSince[Month/Year]: indica o ano e mês aproximado da hora em que o concorrente mais próximo foi aberto
  • Promo2: Promo2 é uma promoção contínua para algumas lojas: 0 = loja não está participando, 1 = loja está participando
  • Promo2Since[Year/Week]: descreve o ano e a semana do calendário em que a loja começou a participar do Promo2
  • PromoInterval: descreve os intervalos consecutivos que o Promo2 é iniciado, indicando os meses em que a promoção é iniciada. Por exemplo. "Fev, Mai, Ago, Nov" significa que cada rodada começa em fevereiro, maio, agosto, novembro de qualquer ano para aquela loja.

Temos pouquíssimas variáveis com dados faltantes, vamos começar com CompetitionDistance

Aparentemente esta é simplesmente uma informação faltantes de dados. Nenhum padrão em particular foi observado. Nesse caso, faz total sentido substituir os NaN com o valor da medinana (que é duas vezes menor que a média).

Continuando com os valores faltantes. E Promo2SinceWeek? Podemos observar pontos de dados não usuais?

Não, se não houver Promo2, não há informações sobre isso. Podemos substituir esses valores por zeros. O mesmo vale para as variáveis deduzidas da competição, CompetitionOpenSinceMonth e CompetitionOpenSinceYear.

Tipos de Lojas

Agora vamos olhar mais de perto aos diferentes níveis de StoreTypee como a métrica principal Sales está distribuída entre elas

A StoreType B tem maior média de vendas entre as outras, contudo temos menos ddos sobre ela. Então vamos mostrar a soma de Sales e Customers para ver qual StoreType é a mais movimentada e que mais vende:

Claramente Stores do tipo A, tendo as do tipo D em segundo lugar tanto em Vendas quanto em fluxo de Customers. Em que períodos? Vamos analisar graficamente para melhor visualisar esta informação:

Aha! Embora os gráficos acima mostrassem o StoreType B como o mais vendido e de maior desempenho, na realidade isso não é verdade. O maior valor de SalePerCustomer é observado no StoreType D, aproximadamente 12 € com Promo e 10 € sem. Quanto ao StoreType A e C é cerca de 9 €. A baixa quantidade SalePerCustomer nas StoreType B descreve o carrinho de comprador como: há um monte de pessoas que compram essencialmente coisas "pequenas" (ou em uma pequena quantidade). Além disso, no geral, esse StoreType gerou a menor quantidade de vendas e clientes no período.

Conseguimos observar que StoresType C sempre estão fechadas aos domingos, enquanto outras estão a maior parte do tempo abertas. Interessantemente Storetype D estão fechadas aos domingos somente de outubro a dezembro.

E o comportamento das lojas que estão abertas aos domingos?

Para completar nossa análise preliminar, podemos adicionar variáveis descrevendo o o período de tempo no qual competition e promotion estavam abertas:

StoreType A que é a mais movimentada e a que mais vende não aparece como a que está mais exposta aos competidores. Ao invés disso é a StoreType B que têm o período de promoção mais longo.

 

Análise Correlacional

 

Acabamos de adicionar novas variáveis aos dados, então agora podemos verificar as correlações gerais plotando o mapa de calor:

Como mencionado anteriormente, temos uma forte correlação positiva entre a quantidade de vendas e clientes de uma loja. Também podemos observar uma correlação positiva entre o fato de a loja ter uma promoção em execução (Promo igual a 1) e quantidade de Clientes.

No entanto, assim que a loja continua uma promoção consecutiva (Promo2 igual a 1), o número de Clientes e Vendas parece permanecer o mesmo ou mesmo diminuir, o que é descrito pela correlação negativa pálida no mapa de calor. A mesma correlação negativa é observada entre a presença da promoção na loja e o dia da semana.

Existem várias coisas aqui:

  • Em caso de não promoção, Promo e Promo2 são iguais a 0, as vendas tendem a atingir o pico no domingo (!). Embora devamos observar que o StoreType C não funciona aos domingos. Portanto, são principalmente dados do StoreType A, B e D.
  • Pelo contrário, as lojas que executam a promoção tendem a fazer a maior parte das vendas na segunda-feira. Este fato pode ser um bom indicador para as campanhas de marketing da Loja. A mesma tendência segue as lojas que têm ambas as promoções ao mesmo tempo (Promo e Promo2 são iguais a 1).
  • O Promo2 sozinho não parece estar correlacionado a nenhuma alteração significativa no valor de vendas. Isso também pode ser provado pela área azul pálida no mapa de calor acima.

 

Conclusão da EDA

 

  • O StoreType que mais venda e mais lotado é o A.
  • O melhor StoreType D "Venda por cliente" indica o maior Carrinho de Compras. Poderíamos também supor que as lojas desse tipo estão situadas nas áreas rurais, para que os clientes prefiram comprar mais, mas com menos frequência.
  • Baixa quantidade de SalePerCustomer para StoreType B indica o possível fato de que as pessoas compram lá essencialmente coisas pequenas. O que também pode indicar para o rótulo deste tipo de loja - "urbano" - como é mais acessível para o público, e os clientes não se importam de fazer compras de tempos em tempos durante a semana.
  • Os clientes tendem a comprar mais às segundas-feiras quando há uma promoção em exibição (Promo) e aos domingos quando não há promoção alguma (tanto Promo como Promo1 são iguais a 0).
  • O Promo2 sozinho não parece estar correlacionado a nenhuma alteração significativa no valor de vendas.

 

Time-Series Analysis por Store Type

 

O que torna uma série temporal diferente de um problema de regressão?

É dependente de uma linha do tempo. A suposição básica de uma regressão linear que as observações são independentes não é válida nesse caso.

Juntamente com uma tendência crescente ou decrescente, a maioria das séries temporais tem alguma forma de tendências de sazonalidade, ou seja, variações específicas de um determinado período de tempo. Por exemplo, para feriados de Natal, que veremos neste conjunto de dados.


Construímos uma análise de séries de tempo em tipos de loja em vez de lojas individuais. A principal vantagem dessa abordagem é sua simplicidade de apresentação e conta geral para diferentes tendências e sazonalidades no conjunto de dados.


Nesta seção, analisaremos dados de séries temporais: suas tendências, sazonalidades e autocorrelação. Normalmente, no final da análise, somos capazes de desenvolver um modelo sazonal ARIMA (Média Móvel Integrada por Autoregressão), mas não será nosso foco principal hoje. Em vez disso, tentamos entender os dados e só depois aparecer as previsões usando a metodologia do Prophet.

 

Sazonalidade

 

Pegamos 4 lojas de Tipos de Lojas para representar o grupo:

  • Loja número 2 para StoreType A;
  • Loja númeto 85 para StoreType B;
  • Loja número 1 para Storetype C;
  • Loja número 13 para StoreType D.

Também faz sentido reduzir a amostragem dos dados de dias para semanas usando o método de nova amostra para ver as tendências atuais com mais clareza.

As vendas a retalho de StoreType A e C tendem a atingir o pico para a época de Natal e depois diminuem após as férias. Poderíamos ter visto a mesma tendência para o StoreType D (na parte inferior), mas não há informações de julho de 2014 a janeiro de 2015 sobre essas lojas, pois elas estavam fechadas.

 

Tendência Anual


A próxima coisa a verificar a presença de uma tendência em série.

As vendas totais parecem aumentar, mas não para o StoreType C (terceira no ranking). Embora o StoreType A seja o tipo de loja que mais vende no conjunto de dados, parece que a cabine segue a mesma trajetória de decréscimo que o StoreType C.

 

Autocorrelação

 

A próxima etapa da nossa análise de séries temporais é revisar os gráficos Função de Autocorrelação (ACF) e a Função Parcial de Auto Correlação (PACF).

A ACF é a medida de correlação entre

ACF é uma medida da correlação entre as séries de tempo com uma versão defasada de si mesmo. Por exemplo, no intervalo 5, o ACF compararia as séries no instante do tempo "t1" ... "tn" com séries no instante "t1-5"… 'tn-5' (t1-5 e tn sendo pontos finais).

O PACF, por outro lado, mede a correlação entre as séries temporais com uma versão atrasada de si mesma, mas depois de eliminar as variações explicadas pelas comparações intervenientes. Por exemplo. no intervalo 5, ele verificará a correlação, mas removerá os efeitos já explicados pelos lags 1 a 4.

Podemos ler esses gráficos horizontalmente. Cada par horizontal é para um 'StoreType', de A para D. Em geral, esses gráficos estão mostrando a correlação das séries com ele próprio, defasadas por x unidades de tempo de correlação das séries com ele mesmo, defasadas por x unidades de tempo.

Há duas coisas comuns para cada par de parcelas: não aleatoriedade da série temporal e alta latência-1 (que provavelmente precisará de uma ordem mais alta de diferenciação d / D).

  • Tipo A e tipo B: ambos os tipos mostram sazonalidades em determinados lags. Para o tipo A, é cada 12ª observação com picos positivos nos 12 (s) e 24 (2s) atrasos e assim por diante. Para o tipo B, é uma tendência semanal com picos positivos nas defasagens 7 (s), 14 (2s), 21 (3s) e 28 (4s).
  • Tipo C e Tipo D: Os gráficos desses dois tipos são mais complexos. Parece que cada observação está correlacionada com suas observações adjacentes.

 

Previsão de vendas da Primeira Loja para as Próximas 6 Semanas.

 

A equipe do Core Data Science no Facebook publicou recentemente um novo procedimento de previsão de dados de séries temporais chamado Prophet. Baseia-se em um modelo aditivo em que as tendências não são lineares, são adequadas à sazonalidade anual e semanal, alem de feriados. Ele permite executar previsões automatizadas que são estão implementadas em R, Escala e Python 3.

Modelagem de Feriados.

 

O Prophet também permite modelar feriados, e é isso que fazemos aqui. A variável StateHoliday no conjunto de dados indica um feriado de estado, no qual todas as lojas são normalmente fechadas. Há também férias escolares no conjunto de dados em que as lojas Ceratin também estão fechando suas portas.

O objeto de previsão aqui é um novo dataframe que inclui uma coluna yhat com a previsão, bem como colunas para componentes e intervalos de incerteza.

O Prophet traça os valores observados de nossas séries temporais (os pontos pretos), os valores previstos (linha azul) e os intervalos de incerteza de nossas previsões (as regiões sombreadas em azul).

À medida que vemos, o Prophet percebe as tendências e, na maior parte do tempo, obtém valores futuros corretos.

Uma outra característica particularmente forte do Prophet é a capacidade de devolver os componentes de nossas previsões. Isso pode ajudar a revelar como os padrões diários, semanais e anuais da série temporal, além dos feriados incluídos com muita frequência, contribuem para os valores globais previstos:

O primeiro gráfico mostra que as vendas mensais da loja número 1 diminuíram linearmente ao longo do tempo e a segunda mostra as lacunas holiays incluídas no modelo. O terceiro gráfico destaca o fato de que o volume semanal de vendas na semana passada atinge o pico da segunda-feira da semana seguinte, enquanto o quarto gráfico mostra que a estação mais buzy ocorre durante os feriados de Natal..

Conslusão da Previsão de Séries Temporais

Durante esta parte, discutimos a análise de séries temporais com gráficos .seasonal_decompose (), ACF e PCF e definimos o modelo de previsão usando um novo procedimento do Facebook Prophet..

Agora podemos apresentar as principais vantagens e desvantagens da previsão de séries temporais:

Vantagens

  • Ferramenta poderosa para a previsão de séries temporais, pois considera as dependências de tempo, sazonalidades e feriados (Prophet: manualmente).
  • Facilmente implementado com R arima () do pacote de previsão, que executa uma pesquisa de grade complexa e um algoritmo sofisticado por trás da cena.

Desvantagens

  • Não captura interações entre recursos externos, o que poderia melhorar o poder de previsão de um modelo. No nosso caso, essas variáveis são Promo e CompetitionOpen.
  • Apesar de Prophet oferecer uma solução automatizada para ARIMA, esta metodologia está em desenvolvimento e não completamente estável.
  • O ajuste do modelo ARIMA sazonal precisa de 4 a 5 temporadas inteiras no conjunto de dados, o que pode ser a maior desvantagem para novas empresas.
  • O ARIMA sazonal no Python possui 7 hiperparâmetros que podem ser ajustados apenas manualmente, afetando significativamente a velocidade do processo de previsão.
EVERTON DE PAULA

Comente essa publicação