As Linguagens de Analytics

No último fórum da Informs (a mais importante associação americana de Operations Research), em Chicago, citaram Pythons umas 6 vezes, Excel também umas 6 vezes, Java uma vez (de um fornecedor que disse que estava mudando para Python), R nenhuma mênção.

Isto mostra a força do Python como a língua franca do Analytics da atualidade.

O pessoal que citou Excel o fez metade das vezes para falar mal, outra metade para dizer que o usuário final utiliza. Isto mostra a resiliência do Excel, que apesar de todas as críticas, continua firme e forte nas grandes corporações – por seu poder e facilidade de uso. Há até uma piada que diz: “Todo o sistema financeiro mundial é baseado em Excel”.

Um último comentário: no final das contas, não interessa muito a linguagem, e sim ter uma base teórica forte e capacidade de execução. Linguagens e ferramentas vêm e vão. Até hoje tem gente utilizando Fortran muito bem, por exemplo.

Otimização (?) Matemática

Há um fascínio enorme dos executivos em geral, sobre métodos mágicos matemáticos que pegam um monte de variáveis e chegam numa solução ótima, coisa que chamaremos aqui de “Otimização Matemática”.
 

Mas na verdade, isto é uma “pseudo-otimização”, ou uma otimização sob certas circunstâncias artificiais. Vejamos o por quê.

 


Há diversos métodos de otimização matemática, para diversos tipos de problema. Há problemas de otimização para funções contínuas, utilizando métodos de cálculo diferencial, que tem muita aplicação em engenharia, química. Para problemas do mundo corporativo, como definir a localização e fluxos de centros de distribuição, minimizar as perdas numa máquina de corte ao escolher uma combinação correta de pedidos, utiliza-se métodos de Programação Linear e Inteira.

 
Acontece mais ou menos assim: o processo do mundo real tem que ser mapeado para um problema, que será uma simplificação do mundo real. Fazer esta simplificação, que atenda os pontos principais do problema e deixe de fora detalhes que não importam, é a grande arte da modelagem. Este modelo terá uma formulação matemática, que será resolvido por um solver de Programação Linear e Inteira.
 

Mas, por melhor que seja a modelagem, há objetivos conflitantes na vida real que devem ser equilibrados.


Vejamos o planejamento da produção de uma fábrica.

 
Temos uma demanda de clientes, cada um com um produto, um volume diferente, um deadline diferente. Para o cliente, o ideal são as máquinas produzirem o que ele quer quando ele quer.

Clientes

Para a fábrica, temos uma programação de corridas de produtos. Para a fábrica, quanto mais tempo ela conseguir produzir o mesmo produto, melhor, porque evita perdas no setup de máquina – note que conflita com o desejo da demanda de clientes, que é ter o que quer na hora que quer.

Setup

 

Em termos de estoque, quanto menor o estoque, melhor. Então, se a fábrica adiantar muito a produção de um cliente, vai pagar a conta de manter o material em estoque.

 

Então, olhando só para este exemplo simples, temos três forças conflitantes: demanda dos clientes, setup de máquina e estoques.

ForçasOtimizacao

 

Como se resolve tal conflito? Pode-se colocar um dos itens, como a demanda de clientes, como uma restrição a ser atendida, que é o que é feito na maioria dos livros de Pesquisa Operacional. Mas, na prática, há demandas de clientes que não precisam ser atendidas, e há clientes que precisam ser atendidos. Além disto, na prática uma restrição tão pesada pode dar “infeasible”, ou seja, não dar solução porque a fábrica não consegue atender.
 

Um outro método de resolver o conflito é ponderando todas as forças. Cada cliente gera uma receita (em $ por tonelada) se atendido, sendo que o cliente mais importante vai remunerar a empresa melhor. O setup tem um custo, ou seja, quanto mais setups, pior. Cada item em estoque tem custo proporcional ao tempo que ficar nos estoques.
 

E a ponderação disto seria a fórmula a ser maximizada.

 

Lucro = receita – custoSetup – custoEstoque

 

Ponderar os fatores conflitantes pelo seu custo é uma forma poderosa de se resolver este tipo de problema, e isto ajuda muito.

 


Problema resolvido? Não.
 

Muitas vezes, acontece de o analista rodar o modelo, e aí descobrir que alguma coisa ruim aconteceu.

  • Exemplo 1: Cliente tal é importante, mas não foi atendido. E não foi atendido porque, apesar de importante, o preço que ele paga pelo produto não é tão mais alto que o do cliente ruim. E assim, o analista aumenta artificialmente a receita do produto para ele.
  • Exemplo 2: Tenho o custo de estoques, mas pela ponderação dos custos, o custo de estoques pode ser muito menor que os demais. Aí o modelo, que é matemático, vai lotar os estoques. Aí o analista dá um peso maior para os estoques e coloca uma regra adicional: coloca uma restrição de estoque máximo.

 

O modelo matemático é burro, ele faz exatamente a conta que lhe é informada. Não tem discernimento para entender se está coerente ou não.

E assim, a gente vai martelando os pontos problemáticos do modelo, para tapar os furos que ele vier a ter, e se chegar numa solução compatível com a do mundo real. É sim um método de otimização, mas não é algo que pode funcionar sozinho: tem que ter um analista bom, capaz de analisar, criticar os resultados e mexer alguns pauzinhos para se chegar numa solução.


 

Este é um ponto de vista eminentemente prático, de alguém que trabalha de verdade com estes métodos. Dificilmente algo assim vai estar escrito em algum livro-texto do mundo acadêmico.

 

Arnaldo Gunzi

Set 2015

A solução ótima para o problema errado

De que adianta obter a solução ótima para o problema errado?

solucaoOtima.JPG

Primeiro, uma definição. A solução ótima é a melhor solução possível, analisada do ponto de vista global, para um determinado problema. Nas ciências exatas, as áreas de Pesquisa Operacional, métodos analíticos, têm como objetivo resolver problemas difíceis para encontrar soluções ótimas.

A grande complexidade dos problemas do mundo real não está em resolver com perfeição um problema difícil. Está em formular tal problema. A realidade é, e sempre será, muito mais complexa do que qualquer modelo matemático concebível pelo ser humano. E, para colocar em moldes matemáticos “resolvíveis”, é necessário simplificar a realidade. É aí o calcanhar de Aquiles.

 

Além disso, a solução ótima é ótima para um cenário estacionário. Onde nenhuma hipótese vai mudar, e se tudo continuar da forma que sempre foi. Ora, não foi dada ao ser humano a capacidade de prever o futuro. E quando o mundo mudar? Não seria mais interessante ter respostas rápidas para acompanhar o mundo mutante?

Na natureza, não se encontra um único caso em que dada espécie tente otimizar algum recurso pensando de forma global. Isto porque:

  1. A demanda de energia de processamento para encontrar o ótimo é desproporcionalmente grande
  2. O mundo muda constantemente. Não é possível chegar num ótimo global quando as perguntas mudam. O que pode ser bom hoje não necessariamente será amanhã.
  • Portanto, vejo um extremo desequilíbrio entre os trabalhos acadêmicos desta área e o mundo real. É um caso de “Mura”, do sistema Toyota. Tenta-se resolver com precisão indescritível e métodos cada vez mais mirabolantes os problemas errados. E o por que disto? Talvez em algum post futuro eu tente descrever o que penso.