Otimizando a receita do varejista com IA de previsão de vendas
Publicados: 2022-03-11A previsão é uma técnica que usa dados históricos e eventos para construir estimativas sobre tendências futuras, desastres potenciais e o comportamento geral de qualquer assunto. A previsão pode ser usada como suporte probabilístico para análise de decisões, para estimar despesas, receitas e planos orçamentários.
A previsão nos negócios pode ser dividida em duas categorias distintas: previsão qualitativa e previsão quantitativa .
- Previsão qualitativa. A previsão qualitativa está preocupada com pesquisa de mercado e estratégias de mercado, portanto, é mais orientada por especialistas e influenciada por fatores humanos. Geralmente visa a construção de estratégias de curto prazo.
- Previsão quantitativa. A previsão quantitativa exclui qualquer fator humano. Depende apenas dos dados históricos que uma entidade possui e visa prever quais serão alguns fatores como vendas, preços e outros aspectos financeiros no longo prazo.
Para mais informações, você pode dar uma olhada na cartilha de Previsão Financeira da Investopedia.
Ambos os tipos de previsão se mostraram muito promissores e conseguiram criar melhorias de negócios para muitas entidades.
Se você quiser saber mais sobre como a previsão pode afetar as decisões de mercado, um bom lugar para começar é Prediction Markets: Fundamentals, Designs, and Applications , de Stefan Luckner et al.
Um problema que podemos resolver usando a previsão quantitativa é a previsão de demanda ou previsão de vendas.
Abordagens de previsão de demanda e previsão de vendas
Suponha que você seja um varejista que opera muitas lojas e cada loja tenha um sistema estático de reposição de estoque de produtos com base em decisões humanas baseadas em determinados eventos, como estações do ano e tendências de mercado.
Ocasionalmente, você se deparará com um desses problemas que podem levar a dois grandes problemas:
- Produtos superlotados. Ter um estoque substancial de produto planejado para ser vendido durante um determinado período de tempo, mas não vendido.
- Produtos fora de estoque. Ter a oportunidade de vender o produto, mas não conseguir porque o produto não está disponível.
De acordo com uma pesquisa do IHL Group com 600 residências e varejistas, os varejistas estão perdendo quase US$ 1 trilhão em vendas anualmente devido a problemas de falta de estoque.
“Os compradores encontram falta de estoque em uma em cada três viagens de compras, de acordo com o relatório, que foi enviado por e-mail ao Retail Dive. Nos varejistas de alimentos, medicamentos e de massa, eles encontram itens esgotados em uma em cada cinco viagens, nas lojas de departamento e varejistas especializados é uma em cada quatro e nas lojas de eletrônicos uma em cada três”, descobriu o IHL Group.
Ao que parece, ambos os problemas levam a uma diminuição da receita porque ou perdemos a probabilidade de venda ou investimos mais dinheiro em produtos não vendidos, o que significa ter ativos que não gerarão receita tão cedo para compensar seus custos.
Isso é claramente prejudicial ao fluxo de caixa da entidade e, para lidar com esse risco, precisamos de duas coisas:
- Mais insumos para nos ajudar a tomar a decisão
- Uma equipe de previsão que pode fazer planejamento estratégico de longo prazo para sistemas de reposição de estoque
Então, a pergunta é: Quais são os indícios de que você precisa adotar a IA em sua empresa para ajudar no seu processo de previsão?
Para tomar essa decisão, você precisa de respostas de especialistas para as seguintes perguntas:
- Prever seu pipeline de vendas é difícil?
- Sua previsão de vendas é imprecisa ou não precisa o suficiente (mesmo que você tenha dados históricos)?
- Você sofre com problemas de falta de estoque ou excesso de estoque?
- Você não consegue extrair insights descritivos e inferenciais dos dados que possui para orientar suas decisões e planejamento?
As respostas a essas perguntas devem ser um sinal claro que ajuda você a decidir se deve começar a empregar a IA em suas estratégias de previsão ou não.
Como a IA pode beneficiar o processo de previsão de vendas?
A IA mostrou ótimos resultados em superar a previsão humana em muitas empresas, permitindo tomada de decisão e planejamento mais rápidos, bem como estratégias de gerenciamento de risco mais confiáveis. É por isso que as principais empresas estão adotando a IA em seu planejamento.
Ao lidar com um problema de previsão de demanda, o método de previsão de séries temporais pode ser utilizado para prever as vendas de cada produto, permitindo assim que as empresas otimizem a reposição de estoque e minimizem a ocorrência dos problemas mencionados. No entanto, muitos modelos lutam com a previsão em um nível de produto individual, ou nível de categoria de produto, devido à falta de recursos necessários. Então, a pergunta é: como podemos fazer isso funcionar e aproveitar ao máximo nossos dados?
Para os varejistas da vida real, esses problemas são tudo menos triviais. Você tem mais de 1.000 produtos que introduzem muita não linearidade no conjunto de dados e dependências multivariadas, ou precisa ser avisado sobre a quantidade de reposição de estoque projetada com muita antecedência para poder produzi-lo ou comprá-lo, ou faça o que for necessário para adquiri-lo no momento em que a demanda se materializar.
Nesse caso, modelos clássicos como ARIMA e ETS não funcionarão, e precisaremos de um método mais robusto como RNNs e XGBoost, e é por isso que precisamos de muita criação de recursos para resolver esse problema.
Para que isso funcione, precisamos:
- Adquira os recursos de entrada necessários para explicar a variedade e diversidade dos produtos.
- Categorize nossos dados, para que cada categoria tenha o mesmo comportamento de série temporal e cada categoria seja abordada usando um modelo independente.
- Treine nossos modelos nos recursos de entrada categorizados adquiridos.
Para o bem deste artigo, tomaremos o XGBoost como um exemplo de tal modelo.
Recursos obrigatórios em modelos de previsão de vendas
O conjunto de recursos necessários para este problema é classificado em quatro grupos principais:
- Recursos relacionados ao tempo
- Recursos relacionados a vendas
- Recursos relacionados ao preço
- Recursos relacionados ao estoque
Recursos relacionados ao tempo
Ao contrário do aprendizado profundo (rede neural recorrente), os modelos de aprendizado de máquina não podem obter dependências de longo ou curto prazo em uma série temporal sem criar uma camada de extração manual de recursos para o recurso de data e hora.
Muitos recursos podem ser extraídos da data, como:
- Ano
- Dia
- Hora
- Fim de semana ou dia da semana (se o dia é um dia da semana ou um fim de semana)
- Dia da semana
Muitas abordagens apenas extraem esses recursos de tempo e os usam como entradas e modelos de treinamento, mas engenharia adicional pode ser feita. Como podemos ver, os recursos (dia, hora, dia da semana) são periódicos, o que significa que possuem um intervalo de valores repetitivos. Como um modelo pode lidar com isso?
A resposta curta é, não pode porque o que o modelo vê é que a hora 00:00 está a 23 horas de distância das 23:00, mas na verdade, está a uma hora de distância. Uma maneira de resolver isso é converter esses recursos em transformação cíclica.
Usando o conceito de seno e cosseno, ou representação vetorial, pode-se converter cada hora (24 horas) em um ângulo, e usar o seno e o cosseno deles tornará muito mais fácil para o modelo detectar as proporções reais entre as horas, independentemente da periodicidade.
Isso removerá a descontinuidade que ocorre nos recursos de tempo periódicos ou em qualquer recurso periódico.
Para nosso artigo, usaremos o conjunto de dados Sample Superstore encontrado publicamente e tentaremos prever as vendas mensais desejadas para uma determinada categoria de produto.
Além disso, usaremos o ambiente Python 3.7 com as seguintes bibliotecas:
- NumPyName
- Pandas
- XGBoostName
- Sklearn
Agora, mostrarei como construir a função de conversão de recurso de período e testar se foi útil ou não.

def convert_periodic(val,period): theta = 2*np.pi*val/period sin_period = np.sin(theta) cos_period = np.cos(theta) return sin_period,cos_period def convert_month(x): return convert_periodic(x,12) df['sin_month'], df['cos_month'] = zip(*df['month'].map(convert_month))
Com isso em vigor, estamos prontos para testar se o recurso adicionado melhorará o desempenho ou não.
X = df.drop(['Order Date','Sales','sin_month', 'cos_month'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False)
Como podemos ver, fizemos uma transformação log 1p para nosso recurso de vendas de destino, porque é um recurso distorcido (não distribuído normalmente).
Agora, vamos ajustar um regressor XGBoost nos dados.
y_pred = model.predict(X_test) print(f'Loss without cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss without cyclic conversion on testing set is 0.4313676193485837
Em seguida, vamos tentar com nosso recurso criado.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with cyclic conversion on testing set is 0.33868030449130826
Como podemos ver, a perda melhorou de 0,43 RMSE para 0,33 RMSE.
Alguns outros recursos relacionados ao tempo que você pode pensar, dependendo do seu problema, são:
- Número de meses desde que o item estava na loja
- Número de dias desde a última venda
Recursos relacionados a vendas
Esse é o principal recurso de entrada principal necessário para prever nossas vendas, então como tirar o máximo proveito dos dados de vendas? Podemos conseguir isso usando o conceito de defasagem e autocorrelação.
Os recursos de atraso são registros históricos de vendas dos produtos. Por exemplo, se usarmos um recurso de 12 atrasos para vendas mensais como entrada para nosso modelo para prever as vendas de maio de 2020, isso significa que forneceremos ao modelo registros de dados entre maio de 2019 e abril de 2020. Isso pode ser muito útil.
Além disso, pode ser interpretado usando gráficos de autocorrelação para verificar quão correlacionado é o recurso de destino com seus recursos defasados. Isso também ajuda a selecionar apenas os recursos correlacionados entre os recursos defasados, portanto, diminuímos o uso de memória e a redundância de recursos.
É assim que podemos adicionar recursos de atraso em nosso dataframe:
for i in range(3): df[f'lag_{i+1}'] = df['Sales'].shift(i+1) df = df.dropna() df.head()
Aqui, eu escolhi um valor de um recurso de três atrasos para ser incluído em nosso conjunto de treinamento. Esse recurso é um hiperparâmetro - você pode escolhê-lo com base no gráfico de autocorrelação ou tentando vários valores e apenas escolhendo o melhor no estágio de ajuste.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with lag features on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with lag and aggregated sales features on testing set is 0.2862175857169188
Agora, o RMSE melhorou para 0,28, usando recursos de atraso e conversões cíclicas.
Alguns recursos adicionais relacionados a vendas que você pode adicionar:
- Fração de itens vendidos (a fração de itens vendidos em termos do total de vendas em uma loja)
- Frequência de eventos de venda para a categoria do item
- Adicionando o conceito de antiguidade
A antiguidade é um conceito introduzido para atribuir um nível de antiguidade a novos itens em uma loja:
- Antiguidade 0: itens novos para a empresa
- Senioridade 1: itens nunca vendidos nesta loja, mas vendidos em outras lojas da empresa
- Senioridade 2: itens que foram vendidos nesta loja antes
Recursos relacionados ao preço
Um argumento simples é que uma das causas diretas do aumento e declínio das vendas é o preço e as promoções. O preço é uma das melhores maneiras de diferenciar entre diferentes categorias, subcategorias e supercategorias de produtos.
Por exemplo, supondo que uma categoria e uma subcategoria tenham sido atribuídas a cada produto, pode-se criar as seguintes características de preço:
- (Média, Máx., Mín., Mediana) preços em todas as categorias
- (Média, Máx., Mín., Mediana) preços em todas as subcategorias
- Comparações entre essas estatísticas, como a diferença entre cada estatística na categoria e na subcategoria
Essa agregação pode ser realizada várias vezes usando vários agrupamentos por assunto (supondo que se pretenda prever a demanda mensal), tais como:
- Mensal, Loja, categoria
- Mensal, Loja, subcategoria
- Mensal, Loja, Item, categoria
- Mensal, Loja, Item, subcategoria
Além disso, mais recursos podem ser adicionados excluindo o agrupamento Mensal para estudar o comportamento dos preços em geral.
Recursos relacionados ao estoque
Essa não é tão comum entre varejistas e previsores de vendas, mas faz muita diferença nos modelos de previsão de vendas. Os conjuntos de dados de estoque têm principalmente os dados de estoque de cada produto, diariamente em cada loja. A partir disso, podemos combiná-lo com os dados de vendas para obter uma taxa de faturamento mensal para cada produto. Essa proporção indicará a rapidez com que o estoque de um produto é vendido completamente e tem dois benefícios principais:
- Ele pode ajudar o modelo a prever vendas com base no nível de estoque atual.
- Ele pode nos ajudar a usar esse valor para agrupar produtos em produtos de movimentação lenta, média e rápida. Esse agrupamento nos ajudará na tomada de decisões e na modelagem.
Para isso, você precisa de dados diários de estoque de cada produto, junto com os dados de vendas, e então pode calcular o índice de giro do estoque da seguinte forma:
Dica: Essas agregações são feitas com base em um intervalo de tempo. Por exemplo, se estivermos trabalhando na previsão de vendas mensais, o ITO será calculado como o total de vendas no último mês sobre o valor médio do estoque durante o mesmo mês.
A previsão de vendas pode transformar dados em oportunidades
Em resumo, a previsão de vendas pode ajudar as empresas a aumentar as receitas e obter lucro, desde que tenham os pipelines de dados corretos e usem os métodos corretos de engenharia de recursos. Este artigo foi um ensaio para mostrar que todos os tipos de dados podem ser úteis para resolver este problema.
Toda empresa deve investigar se a IA é necessária para seus problemas de previsão e, caso seja, precisará de engenheiros especialistas em IA e conselhos de engenheiros de aprendizado de máquina para criar seu próprio sistema de previsão de vendas.
Se você é uma empresa/varejista disposto a aplicar essa técnica de previsão de vendas, comece reunindo todos os dados que puder, especialmente vendas diárias, estoque diário e transações diárias.
De posse desses dados, você pode usá-los para aumentar suas receitas e otimizar as estratégias de reposição de estoque, permitindo que seu negócio obtenha o maior lucro possível com os recursos disponíveis, conforme demonstrado em vários exemplos acima, bem como as práticas de previsão de vendas utilizadas pelos principais varejistas .
Referências:
O conjunto de dados
Leia mais sobre previsão financeira