Simulação de Monte Carlo: por que a distribuição escolhida muda tudo
Um mesmo conjunto de dados de throughput semanal gera previsões completamente diferentes dependendo do modelo de distribuição escolhido, comparando distribuição uniforme, Weibull e simulação em Python.
Você vai encontrar centenas de quilobytes de material explicando sobre Simulação de Monte Carlo ao fazer uma simples pesquisa no Google.
Vai encontrar diversas planilhas, sites, aplicativos e ferramentas especializadas, gratuitas e pagas, que fazem Simulação de Monte Carlo.
Você escolherá alguma das opções que aparecerão na primeira página de itens recuperados na sua busca e que mais se ajustou aos seus critérios de escolha, possivelmente fará alguns testes e em seguida vai começar a utilizar.
Mas eu te pergunto: você sabe me dizer qual a base para geração dos dados do modelo de simulação escolhido? Você sabe como os seus dados se comportam? E se os seus dados são aderentes ao modelo escolhido?
Bom, vejamos os exemplos abaixo. Para o mesmo conjunto de dados de vazão (throughput) semanal, eu obtive dois resultados diferentes. Os dados utilizados foram estes:
2, 3, 12, 5, 7, 9, 17, 13, 10, 13, 19, 9, 9
O primeiro resultado utiliza a função randbetween() do Excel. As funções RAND e RANDBETWEEN do Excel geram números pseudoaleatórios a partir da distribuição uniforme, também conhecida como distribuição retangular, onde há probabilidade igual para todos os valores que uma variável aleatória pode assumir (ablebits.com). Além disto, a função randbetween() gera números aleatórios duplicados.
Percentis obtidos com distribuição uniforme (randbetween):
| % confiança | 50% | 55% | 60% | 65% | 70% | 75% | 80% | 85% | 90% | 95% |
|---|---|---|---|---|---|---|---|---|---|---|
| Dias úteis | 9 | 9 | 9 | 10 | 10 | 11 | 11 | 12 | 13 | 14 |
O gráfico a seguir foi gerado usando um modelo que faz o cálculo dos parâmetros SHAPE e SCALE da distribuição de dados, utilizando as equações da distribuição Weibull. Os valores foram estes, respectivamente:
- Shape (K): 1,85
- Scale (L): 11,31
Percentis obtidos com a distribuição Weibull:
| % confiança | 50% | 55% | 60% | 65% | 70% | 75% | 80% | 85% | 90% | 95% |
|---|---|---|---|---|---|---|---|---|---|---|
| Dias úteis | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 |
O próximo gráfico é uma simulação feita em Python, que executou 1 milhão de cenários em 4 segundos:
- Parâmetro de forma (shape): 2,56 (teve uma pequena diferença em relação ao cálculo do modelo Excel, 1,85)
- Parâmetro de escala (scale): 11,83 (ficou muito próximo ao cálculo do modelo Excel, 11,31)
Dados estatísticos da amostra:
| Estatística | Valor |
|---|---|
| count | 12,00 |
| mean | 10,50 |
| std | 4,62 |
| min | 3,00 |
| 25% | 8,50 |
| 50% | 9,50 |
| 75% | 13,00 |
| max | 19,00 |
Considerando que tenho um período de tempo, quantos itens de trabalho provavelmente serão concluídos neste período?
- P15%: 3,0
- P85%: 4,0
A diferença entre os percentis gerados pela distribuição uniforme e pela Weibull não é sutil — é da ordem de dobro ou mais em vários pontos da curva. Isso mostra, na prática, que a escolha do modelo de distribuição não é um detalhe técnico irrelevante: ela muda a resposta que você vai levar ao seu patrocinador, ao seu cliente ou à sua diretoria. Antes de confiar em qualquer ferramenta de Monte Carlo, vale a pena entender qual distribuição ela assume por padrão e se essa suposição é aderente ao comportamento real dos seus dados.