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ão, para estimar despesas, receitas e planos de orçamento.
A previsão de negócios pode ser dividida em duas categorias distintas: previsão qualitativa e previsão quantitativa .
Para obter mais informações, você pode dar uma olhada em Previsão Financeira da Investopedia primeiro.
Ambos os tipos de previsão mostraram-se 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 é Mercados de previsão: fundamentos, designs e aplicativos por Stefan Luckner et al.
Um problema que podemos resolver usando a previsão quantitativa é a previsão de demanda ou previsão de vendas.
Suponha que você seja um varejista que opera muitas lojas e cada loja tem um sistema estático de reposição de estoque de produtos com base em decisões humanas baseadas em certos eventos, como temporadas e tendências de mercado.
Ocasionalmente, você encontrará um desses problemas que podem levar a dois problemas principais:
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 à Retail Dive. Em varejistas de alimentos, remédios e em massa, eles encontram itens fora de estoque em uma em cada cinco viagens, em lojas de departamentos e varejistas especializados é um em cada quatro e em lojas de eletrônicos um em cada três ” Grupo IHL encontrado.
Ao que parece, esses dois problemas levam a uma diminuição na receita porque 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 para o fluxo de caixa da entidade e, para lidar com esse risco, precisamos de duas coisas:
Então, a pergunta é: quais são as indicações de que você precisa adotar IA em sua empresa para ajudar no processo de previsão?
Para tomar essa decisão, você precisa de respostas de especialistas para as seguintes perguntas:
As respostas a essas perguntas devem ser um sinal claro que o ajudará a decidir se deve ou não começar a empregar IA em suas estratégias de previsão.
A IA tem mostrado ótimos resultados em superar a previsão humana em muitas empresas, permitindo tomadas de decisão e planejamento mais rápidos, bem como estratégias de gerenciamento de risco mais confiáveis. Isso é por que as principais empresas estão adotando 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 que as empresas otimizem a reposição de estoques e minimizando 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, por causa da falta de recursos necessários. Portanto, a questão é: 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 você precisa ser avisado sobre a quantidade de reposição de estoque projetada com bastante antecedência para poder produzi-lo ou comprá-lo, ou fazer o que for necessário para adquiri-lo até que a demanda se materialize.
Neste caso, modelos clássicos como ARIMA e VOCÊ ESTÁ não funcionará 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:
Para o propósito deste artigo, tomaremos o XGBoost como um exemplo de tal modelo.
O conjunto de recursos necessários para este problema é classificado em quatro grupos principais:
Ao contrário aprendizagem profunda (rede neural recorrente) , os modelos de aprendizado de máquina não podem obter dependências de longo ou curto prazo dentro de uma série temporal sem criar uma camada de extração manual de recursos para o data hora característica.
Muitos recursos podem ser extraídos da data, como:
Muitas abordagens apenas extraem esses recursos de tempo e os usam como entradas e modelos de trem, mas é possível fazer mais engenharia. Como podemos ver, os recursos (dia, hora, dia da semana) são periódicos, o que significa que possuem uma gama de valores repetitivos. Como uma 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 pecado e 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ódico ou em qualquer recurso periódico.
Para o nosso artigo, usaremos o Amostra de conjunto de dados da Superstore encontrado publicamente e tente prever as vendas mensais desejadas para uma determinada categoria de produto.
Além disso, usaremos o ambiente Python 3.7 com as seguintes bibliotecas:
Agora, vou mostrar como construir a função de conversão do recurso de período e testar se ela 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 implementado, 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 alvo, porque é um recurso enviesado (não distribuído normalmente).
Agora, ajustaremos 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
A seguir, 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:
Este é o principal recurso de entrada necessário para prever nossas vendas, então, como obter o máximo dos dados de vendas? Podemos conseguir isso usando o conceito de lag e autocorrelação.
Os recursos de atraso são registros históricos de vendas dos produtos. Por exemplo, se usarmos um recurso de 12 defasagens para vendas mensais como uma entrada para nosso modelo para prever as vendas para maio de 2020, isso significa que forneceremos o modelo com 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 o quão correlacionado está 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 latência 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 lag para ser incluído em nosso conjunto de treinamento. Este recurso é um hiperparâmetro - você pode escolhê-lo com base no gráfico de autocorrelação ou tentando muitos 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 latência e conversões cíclicas.
Alguns recursos adicionais relacionados a vendas que você pode adicionar:
Antiguidade é um conceito introduzido para atribuir um nível de antiguidade a novos itens em uma loja:
Um argumento simples é que uma das causas diretas do aumento e diminuição das vendas são os preços 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:
Essa agregação pode ser realizada várias vezes usando muitos agrupamentos por assunto (assumindo que pretendemos prever a demanda mensal), como:
Além disso, mais recursos podem ser adicionados, excluindo o Por mês agrupamento para estudar o comportamento dos preços em geral.
Este não é tão comum entre varejistas e analistas de vendas, mas faz muita diferença nos modelos de previsão de vendas. Os conjuntos de dados de estoque contêm principalmente os dados de estoque de cada produto, diariamente em cada loja. A partir disso, podemos combiná-los 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:
Para isso, você precisa de dados de estoque diários para cada produto, junto com os dados de vendas, e então você pode calcular a taxa de giro de estoque da seguinte maneira:
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.
Em resumo, a previsão de vendas pode ajudar as empresas a aumentar as receitas e obter lucros, desde que tenham os canais de dados certos e usem os métodos de engenharia de recursos corretos. Este artigo foi um teste para mostrar que todos os tipos de dados podem ser úteis na solução desse problema.
Cada empresa deve investigar se a IA é necessária para seus problemas de previsão e, caso seja, precisará de engenheiros especializados em IA e conselhos de engenheiros de aprendizado de máquina para criar um sistema de previsão de vendas próprio.
Se você é uma empresa / varejista que deseja 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.
Depois de possuir esses dados, você pode usá-los para aumentar suas receitas e otimizar estratégias de reposição de estoque, permitindo que sua empresa 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 .
O conjunto de dados
Leituras adicionais sobre previsões financeiras
Reunindo os dados de vendas, estoque, preços, criando um banco de dados para eles, pré-processando-os e executando a engenharia de recursos para criar recursos explicáveis e, em seguida, aplicando um método de previsão como XGBoost ou RNN.
O processo de previsão de vendas é dividido em quatro etapas: coleta de dados, pré-processamento de dados, engenharia de recursos e modelagem de dados.
ARIMA e ETS são perfeitos para vendas totais, mas no nível de produto, algo como XGBoost ou RNN tem melhor desempenho.
Porque resolve os dois principais problemas de demanda e vendas, que são o estoque excessivo e os problemas de falta de estoque. Isso leva a maior receita e melhor fluxo de caixa.
O potencial de vendas responde à pergunta: “Quantas unidades de uma determinada marca poderiam ser vendidas?” Por outro lado, uma previsão de vendas responde à pergunta: “Quantas unidades serão vendidas?”