Use Case
Previsão de Múltiplos Produtos na Indústria da Construção
Paulo Maia · 9 de novembro de 2021
Neste artigo, abordamos um caso de uso na indústria da construção relacionado com a previsão dos materiais necessários para a construção e o momento em que serão necessários. Na indústria da construção, existe muita incerteza entre o momento da encomenda e o momento em que é realmente executada, devido a vários fatores que serão descritos em detalhe abaixo.
Problema de Negócio
Consideremos o caso em que queremos adquirir materiais de indústria pesada a um fornecedor, mas apenas temos uma estimativa de alto nível da quantidade que necessitaremos. Não temos certeza imediata sobre as características e timing exatos dos materiais que serão necessários, pois pode haver atrasos no projeto e mudanças entre a encomenda e a execução. Temos clientes que estão a executar construções e contactam-nos com encomendas preliminares com os seus requisitos.
Precisamos de saber várias coisas sobre este processo:
- Quando é que este cliente específico vai executar a encomenda?
- Que características de material serão preferíveis para este cliente?
- Que materiais é melhor manter em stock neste momento e em que quantidade? Ele precisa de algum tempo fixo (por exemplo 4 semanas) para os fabricar e transportar para uma unidade de armazenamento. Se mantivermos pouco stock, atrasaremos a construção. Se tivermos demasiado, os materiais não utilizados podem degradar-se e desperdiçar capacidade de armazenamento valiosa.
Entidades de Dados
Consideremos as seguintes entidades de dados e os dados históricos associados para este problema:
Para cada parte interessada envolvida no processo, existem fatores que causam incerteza nas questões descritas acima. Podemos sobrestimar ou subestimar a quantidade/qualidade dos materiais necessários (tanto por informações imprecisas dos projetos de construção como por incertezas internas nas estimativas). Os construtores podem desperdiçar ou usar de forma mais eficiente determinado material. O atraso entre encomenda e execução depende da complexidade do processo de construção, época do ano (férias!), e constrangimentos do fornecedor, entre outros.
Características Relevantes
Existem algumas características relevantes que podem ser extraídas para tornar este problema mais fácil de prever:
- Construção x Material: Quantidade e tipo de cada material necessário no momento da encomenda e no momento da execução para uma determinada construção. Isto diz-nos quais as construções que sobrestimaram e subestimaram certos materiais, e qual foi o atraso entre encomenda e execução. Será utilizado para construir os objetivos do nosso problema.
- Builder/Supplier: Estatísticas das diferenças históricas na quantidade/características dos materiais entre o momento da encomenda e o momento da execução (por exemplo, encomendou 3 toneladas de cimento, apenas precisou de 2,5 nos últimos 3 meses, em média)
- Time: Época do ano (mês, trimestre, estação, …) e características históricas da diferença entre momento da encomenda e momento da execução.
Modelação
Para efeitos de simplificação, assumamos que queremos prever apenas um material: por exemplo vigas necessárias para uma unidade única na construção.
Precisamos de determinar:
- Número necessário de vigas
- Tempo até a encomenda ser executada, depois de ser encomendada com algumas características iniciais
Opção 1 – Modelo de Regressão Multitarefa
Nesta abordagem inicial, pegamos nas características no momento da encomenda e tentamos prever o número de vigas necessárias e o número de dias entre encomenda e execução. Isto é feito utilizando um modelo multitarefa, com duas tarefas de regressão.
As vantagens desta abordagem são que é fácil de implementar, os objetivos são fáceis de interpretar, torna o modelo mais robusto e pode aumentar o desempenho. No entanto, existem várias desvantagens:
- Existe um conjunto de modelos definidos para as vigas (SKU – Stock Keeping Unit) e o modelo pode estar a prever configurações de vigas que não existem!
- Processo de decisão difícil: Não existe forma de medir confiança na predição quando tudo o que temos é um valor.
- Convergência difícil: o domínio de valores possíveis é muito grande e não é fácil dizer se uma previsão é boa ou não.
Opção 2 – Classificação Multitarefa
Podemos alternativamente construir um modelo de classificação multitarefa, onde consideramos duas tarefas:
- Se as vigas de execução na nossa hipótese correspondiam a uma certa viga em stock. Isto significa que teremos de criar amostras artificiais no nosso dataset: 1 linha positiva e N linhas negativas, onde N é o número de vigas possíveis.
- Probabilidade do número de dias entre data atual e execução ser inferior a N semanas. Isto exigirá gerar datas aleatórias entre data de encomenda e data de execução. O valor de N é determinado de acordo com as necessidades de produção e transporte para armazéns do nosso cliente.
A tabela abaixo mostra um exemplo de como esta amostragem artificial teria o seguinte aspecto:
Sampling Date: Datas aleatoriamente amostradas entre order_date e execution_date
Execution Beam Width (hypothesis): A comparação que estamos a fazer. Estes são os valores de vigas que estão em stock.
Execution Beam Width: O que realmente aconteceu. Utilizamos a comparação com "Execution Beam Width (hypothesis)" como objetivo.
Em azul estão mostradas as linhas onde o objetivo é positivo, e em laranja onde é negativo. Por exemplo, uma data de amostragem de 25/02/2021 está suficientemente próxima da nossa data de execução para ser considerada como objetivo positivo para previsão, enquanto 20/02/2021 não está. Em termos de vigas de execução, o objetivo é positivo quando as pré-encomendas e a execução coincidem.
Arquitetura do Modelo
Relativamente à arquitetura do modelo, podemos construir um modelo de dois fluxos: separamos as características que pertencem ao atraso entre encomenda e execução e a diferença entre material encomendado e executado, uma vez que teremos múltiplas linhas com características semelhantes, e isto diz ao modelo para as tratar de forma diferente de forma explícita.
A arquitetura proposta é relativamente simples: um conjunto de camadas densa e dropout, seguido de uma operação de agregação (por exemplo concatenação). Depois, outro conjunto de camadas Dense/Dropout transforma este espaço latente concatenado. Na base, duas camadas softmax diferentes, uma para cada tarefa, são adicionadas.
Comparado com a Opção 1, esta arquitetura tem a vantagem de permitir um processo de decisão baseado em confiança de previsão e apenas prever itens que o cliente consegue produzir. No entanto, a complexidade do processo é maior: precisa de criar amostras de treino positivas e negativas, e é mais difícil de implementar.
Podemos também adicionar penalizações personalizadas na nossa função de perda de acordo com o problema de negócio. Se prevermos 30 vigas num edifício que precisa de 20, está bem. Se precisar de mais, não será suficiente. Quando o modelo não prevê o mesmo material, mas um compatível, podemos penalizá-lo menos. Quando não é, penalizá-lo mais.
Processo de Decisão
Construir um modelo de classificação multitarefa permite-nos criar um processo de decisão baseado no valor esperado. Nomeadamente, qual é a probabilidade P de precisar de K unidades de um produto tem um valor esperado de P x K unidades.
Para saber que materiais manter em stock para as próximas N semanas, o valor esperado para todas as construções que foram encomendadas e ainda não foram executadas pode ser somado.
Medição de Impacto
Que métricas seriam importantes medir?
Internamente, para construir e avaliar o seu modelo, pode utilizar métricas de Machine Learning:
- Classificação: PR AUC, ROC AUC, …
- Regressão: Mean Absolute Error, Mean Squared Error…
Mas isto não diz nada sobre como o modelo funciona bem ao prever a quantidade que precisa de manter em stock. Precisa de medir métricas de negócio também:
- Quantos produtos previmos/produzimos em excesso porque ninguém os comprou
- Quantos produtos não previmos/produzimos a tempo, levando a um atraso adicional na construção
Conclusão
Este artigo mostrou algumas formas diferentes de pensar sobre problemas de previsão de produtos, onde existem muitos produtos com características similares.
Apenas abordamos o caso específico de previsão de um único tipo de produto (vigas) com diferentes características. No entanto, isto pode ser generalizado para diferentes produtos, como a quantidade de cimento necessária, adaptando o modelo. Uma vez que não existem "SKUs de cimento", e qualquer quantidade prevista é válida, pode substituir a sigmoid de classificação por uma camada linear, e criar um modelo de regressão juntamente com classificação binária para o atraso temporal.
