Problemas em Gerenciamento de Inventário (ft. Reinforcement Learning)
Como a inteligência artificial pode reduzir custos de ineficiência de inventário
O inventário pode ser uma das partes mais importantes e relevantes de uma empresa (dependendo do setor), vimos anteriormente problemas de logística no setor marítimo, e no de transporte de commodities e mercadorias.
O foco agora será na logística interna de empresas, ou mesmo empresas focadas em logística como uma DHL da vida, em que as mesmas precisam receber, processar e enviar entregas de n empresas, onde a quantidade diária, semanal e mensal pode ser brutal.
Algoritmos podem ser usados nesse contexto para lidar como o problema, aqui falarei mais de Reinforcement Learning (por ser um tema que conheço mais), embora posso vir a citar apenas outros métodos nessa questão.
Primeiro vamos para um exemplo simples
Novamente, usarei um exemplo inicial do mercado de games (por fins didáticos). Vamos supor que eu tenha uma coleção de jogos e consoles originais relativamente grande, tenho mais de 50 fitas de Super Nintendo (mesmo Earthbound e Hagane), metade de todos os jogos lançados de PS1, incluindo Resident Evil lacrado, e por fim decidi vender essa coleção e fazer dela meu negócio.
Agora, a coleção virou meu inventário, que fica exatamente na minha casa. Decido vender esses itens online na Amazon, Mercado Livre e etc, e tenho que processar essas vendas e enviar através de terceiros com frete. Porém, o negócio começa a escalar, clientes demais estão vindo em minha casa tanto para vender quanto comprar itens e o inventário começa a crescer ao ponto de terem caixas cheias de produtos num dos banheiros (exemplo de um youtuber chamado Alpha Investments) de casa.
Então decido usar minha reserva forjada através desse negócio para criar um loja, assim poderei mover meu inventário para um espaço físico fora da minha casa, além de continuar normalmente com as vendas online, mas atendendo o público local (depende geograficamente a demanda potencial) e recebendo inventário (que você está comprando dos outros) com mais facilidade, o que pode afetar meu repertório online de vendas significativamente.
Mas vamos supor que minha loja (por ser um espaço físico finito) cresce demais em inventário, e isso me obriga a ter um local separado para o armazenar. Agora tenho um custo desse local (pode ser um galpão, uma casa, não importa), além do custo de gerenciamento do mesmo que não poderia fazer sozinho dependendo da escala de produtos ali.
Agora você tem que lidar com um problema: "como gerenciar n produtos em m prateleiras, tal que você retire o produto correto no menor tempo hábil possível?". Afinal, esses itens podem estar listados no seu site, e você não vai querer confundir inventário listados na Amazon, com os listados no Mercado Livre, e os que vão para a loja, deve haver uma organização clara que admite escala. Se você tiver mais de um armazém, e mais de uma loja de games, como você deve gerenciar o inventário entre armazéns, e entre lojas da forma mais eficiente? Dado que existe uma distância considerável entre elas, logo esse problema em escala, fica mais complexo.
Problemas computacionais de gerenciamento de inventário
(Boute et, al. 2022) diz:
"Uma dessas aplicações, fundamental para a gestão de operações, é o controle de estoque, onde ações de reposição devem ser tomadas para minimizar custos. Apesar de décadas de pesquisa, a política ideal para muitos problemas de controle de estoque permanece desconhecida. Sua intratabilidade analítica simplesmente impossibilita a obtenção de expressões analíticas para a estrutura da política ideal e os parâmetros relacionados" (Boute, Robert N., et al. "Deep reinforcement learning for inventory control: A roadmap." European journal of operational research 298.2 (2022): 401-412.).
O que você deseja, é ter o menor custo possível para gerenciar reposição e retirada de itens do estoque e seu gerenciamento geral para buscar o maior lucro possível com essas reduções de custos. O problema pode ser definido como um processo de decisão markoviano (MPD), em que você deseja maximizar as ações que probabilisticamente geram maior eficiência dado os estados do sistema (que são nesse caso onde estão posicionados todo os itens no inventário).
Na notação tradicional de RL, temos o que é chamado de latent space que é denotado por z, é basicamente uma variável que descreve o espaço latente probabilísticos dos estados do sistema, de forma mais simples, pode ser usado para probabilisticamente prever quais ações provavelmente vão gerar melhores resultados, onde nesse caso, seria como alocar e posicionar o estoque com base na experiência anterior (normalmente se usa Long-Short-Term-Memory para isso).
É impossível prever a demanda futura, mas é possível estatisticamente entender quais itens tem maior probabilidade de sair com base no histórico da empresa (o que é um achismo na prática). Assim, uma função de probabilidade de uma policy (que melhora as ações do sistema) que tem em mente reduzir o custo futuro com base nos estados e ações do sistema, poderia aprender a organizar esses itens para minimizar ao máximo o tempo de retrieval desses itens. Creio que o uso de world models no contexto de RL seria bem útil nesse contexto, como o uso de técnicas que lidam com o latent space para prever quais ações o agente deveria realizar.
(Demizu et, al. 2023) nos diz no contexto de inventário de smartphones:
"A otimização eficaz maximiza os lucros em cada loja, reduzindo a quantidade de estoque defeituoso e minimizando a falta de novos produtos. Além disso, reduz o trabalho de pedidos em cada loja e garante a disponibilidade das operações de vendas, determinando automaticamente as quantidades de pedidos adequadas" (Demizu et, al. 2023).
Lidar com novos produtos no inventário (ainda mais tendo com características diferentes) pode aumentar a complexidade da forma de fazer stacking desses produtos, além do problema de como alocar eles entre lojas da forma mais eficiente possível. Quanto mais lojas, e mais produtos (e mais novos continuamente), mas a complexidade desse problema aumenta. Eu não posso por exemplo, saber a priori qual loja irá vender mais de um xiaomi por exemplo, pois eu não posso prever a preferência das pessoas de celulares.
Eu uso xiaomi há um tempo, se eu fosse comprar outro celular, seria um xiaomi novamente. Não tenho interesse em iphones, ou em samsung, ou outras marcas, é uma preferência pessoal, e cada grupos de pessoas tem suas preferências pessoais, o problema é saber, na região em que alguém atual (o que pode incluir vendas online), quais produtos tem mais demanda em diferentes localidades geográficas das lojas, é fácil saber isso a posteriori (com dados do que vendeu no passado), porém, sempre se perde lucro entre inferências a priori e a posteriori.
Outra forma de definir o problema:
"Nosso objetivo é manter níveis de estoque suficientes de todos os produtos para garantir a disponibilidade para venda, minimizando simultaneamente o desperdício devido à deterioração de produtos perecíveis. O primeiro objetivo se deve a necessidades comerciais, enquanto o segundo está diretamente ligado aos custos incorridos" (Meisheri et, al. 2020).
Produtos podem vir a vencer, a preferência temporal deles pode cair e assim ter uma menor demanda (e assim vão ficar criando traças e teias no inventário), podem haver problemas como recessões econômicas e problemas do tipo que reduzem a demanda por alguns tipos de produtos ou n outras causas que podem fazer parte do inventário se tornar inútil, então é necessário, absolutamente, encontrar o que é "esterco" no inventário, o que é inútil e assim eliminar oq que não tem custo-benefício de estar ali e mesmo jogar fora para ter mais espaço e menos problemas.
Expandindo o problema
(Stranieri e Stella, 2022) definem o problemade forma muito mais clara. Eles dão um exemplo de uma fábrica que produtos n tipos de produtos, enviam os mesmos para armazéns industriais (ou regionais que tendem a ser maiores) e por fim armazens de distribuição (uma Amazon da vida precisa disso naturalmente), onde sabemos que o transporte e a distribuição pode ser terceirizada, mas o ponto é o mesmo nessa cadeia de produção (supply chain).
Eles adicionam variáveis associadas a o custo de cada item produzido pela fábrica, custo de retenção de inventário, taxa de flow de produtos indo da fábrica para armazens de distribuição (para atender a demanda presente). Custo de transporte, a capacidade máxima de cada armazém, além de uma variável de coeficiente de penalidade para o flow de produtos unitários que desfavorecem o controle desse sistema.
No fim, o objetivo é encontrar quais sequências de ações vão minimizar o custo de toda a operação, naturalmente aumentando a potencialidade de lucros em cada transação efetuada. Mesmo que eles tenham uma variável de predição de demanda futura, ela não pode ser categorizada no sentido de realmente uma previsão absoluta sendo possível nesse ambiente.
Mesmo empresários menores sem uso de algoritmos e softwares aprendem o que vende e o que não vende com base na experiência, e o quanto de mercadorias precisam comprar temporalmente para tanto não faltar quanto ela não vencer (embora uma função de erro grande ocorreu nesse contexto). Não é possível com 100% de eficiência prever demanda futura através de processos de decisão markovianos, pois a informação do sistema total não está disponível aqui, pelo contrário, a economia é um sistema de informação imperfeita. Você pode gerar funções probabilísticas que alocam recursos com base no historico de demanda de forma mais eficiente, mas essa é uma função aproximável no máximo, ao menos fica melhor do que fazer de qualquer jeito.
Voltando ao exemplo inicial
Vamos supor agora que você tem 15 lojas de games ao redor do estado de São Paulo, tem 3 galpões para receber, armazenar e enviar produtos (no caso consoles, jogos de fita, cds, action figures e etc) e uma loja online, com presença na Amazon e Mercado Livre. Você tem um grande custo em obtenção de inventário, mas também em gerenciar o que você já tem, agora, os seus erros de obtenção de inventário que não tem liquidez (não vendem logo), se tornarão maiores e mais danosos a operação.
Como você decide quais itens alocar em cada uma das lojas? Depende. Primeiro temos o custo de transporte para cada uma delas, e a coisa mais fácil é a posteriori, ver o que vende mais em cada região geograficamente e assim decidir como alocar recursos em cada uma.
Vamos supor que você notou que 3 delas tem uma demanda muito grande de Neo Geo CD, Atari, Master System e etc, então é óbvio que o profile daquela loja deve ter essa visão com base na preferência dos clientes. Esse é o erro de franquias na minha visão, pois elas são muito genéricas em serem consistentes com a marca, sem entender que as preferências de pessoas mudam de região para região (além do poder de compra delas em renda).
Outra tem demanda para action figures, outra para jogos mais recentes, então você adequa o repertório de acordo com a demanda a posteriori da região, mantendo obviamente a loja online.
Sobre recebimento de inventário no Mercado de Games
Uma coisa que lojistas falam muito, é sobre recebimento de inventário nas lojas, pois as pessoas estão mais dispostas a vender localmente os produtos desse mercado que não usam mais para lojas do que vender online (o que demanda mais trabalho).
Então existe uma grande quantidade de itens que tem valor de mercado mas não estão em circulação (disponíveis para venda). É claro que alguém pode vender para amigos, família e etc, mas é muito fácil vender para lojas. Lembro da minha mãe vendendo meu Xbox One e vários jogos para lojas no passado, no geral sempre compravam.
O problema que você tem agora, é que as 15 lojas do nosso exemplo, recebem inventário. É óbvio que nem tudo seria bom permanecer na loja em questão, podem ir para um dos seus galpões ou para outras lojas, ou para as lojas online. Agora o problema é: "como devo mover meu inventário de tal forma, que eu atenda a demanda potencial física e online da melhor forma possível?".
Isso é complexo. Mas a base que pode ser usada é ter dados de cada loja, e ver qual tem mais demanda para n produtos. Então você tem clientes numa loja que gostam de Sega 32X, mas você recebeu o mesmo e jogos associados originais em outra loja, agora você pode ou vender direto para o consumidor de outra loja por frete, ou mover o estoque para deixar disponível para a loja que potencialmente compra mais desses itens.
O ponto é que quanto mais você expande seu repertório (o que é bom), mais complexidade você terá no inventário, mesmo quem tem pouco inventário pode ter problemas em ter produtos danificados (tendo assim um custo de manutenção, uma empresa chamada DK Games no estrangeiro é acusada de não fazer isso e vender caro mesmo em péssimas condições), inventário inútil que não vende, coisas paradas criando traça e teia, então tirar o que é inútil é necessário, além de manter a qualidade dos produtos, o que depende de uma boa organização, e técnicas básicas de reduzem mofo, danos a embalagens e coisas semelhantes.
Referências:
- Boute, Robert N., et al. "Deep reinforcement learning for inventory control: A roadmap." European journal of operational research 298.2 (2022): 401-412.
- Demizu, Tsukasa, Yusuke Fukazawa, and Hiroshi Morita. "Inventory management of new products in retailers using model-based deep reinforcement learning." Expert Systems with Applications 229 (2023): 120256.
- Stranieri, Francesco, and Fabio Stella. "A deep reinforcement learning approach to supply chain inventory management." arXiv preprint arXiv:2204.09603 (2022).
- Meisheri, Hardik, et al. "Using reinforcement learning for a large variable-dimensional inventory management problem." Adaptive learning agents workshop at AAMAS. 2020.