Aproveitando simulações de Monte Carlo

Simulações de Monte Carlo em Python

Izzy Weber

Curriculum Manager, DataCamp

Ampla aplicabilidade

Simulações de Monte Carlo são usadas em áreas como...

  • Finanças e negócios
  • Engenharia
  • Ciências físicas
Simulações de Monte Carlo em Python

Previsão de preço de ações

Um gráfico mostrando preços de ações simulados ao longo do tempo

1 https://marketxls.com/monte-carlo-simulation-excel
Simulações de Monte Carlo em Python

Gestão de risco

Um gráfico mostrando o intervalo de confiança de VaR

1 https://www.investopedia.com/articles/04/092904.asp https://corporatefinanceinstitute.com/course/modeling-risk-monte-carlo-simulation/
Simulações de Monte Carlo em Python

Identificação de sítios de ligação

 

gráfico de sítio de ligação de proteína

1 https://pubs.rsc.org/en/content/articlelanding/2020/ra/d0ra01127d
Simulações de Monte Carlo em Python

Análise de confiabilidade em engenharia

um gráfico mostrando domínios seguros e de falha

1 www.researchgate.net/publication/228814883_Probabilistic_Transformation_Method_in_Reliability_Analysis
Simulações de Monte Carlo em Python

Benefícios das simulações de Monte Carlo

 

  • Considerar uma faixa de valores para várias entradas
  • Mostrar não só o que pode acontecer, mas a probabilidade de cada resultado
  • Facilitar a visualização do leque de resultados possíveis
  • Examinar o que teria acontecido em cenários alternativos

 

otimize com simulações de Monte Carlo

Simulações de Monte Carlo em Python

Bolsas com dados viciados

Role dois dados separados de duas bolsas, cada uma com três dados viciados:

bag1 = [[1, 2, 3, 6, 6, 6], [1, 2, 3, 4, 4, 6], [1, 2, 3, 3, 3, 5]]
bag2 = [[2, 2, 3, 4, 5, 6], [3, 3, 3, 4, 4, 5], [1, 1, 2, 4, 5, 5]]

 

Simulação:

  • Escolher aleatoriamente um dado de cada bolsa; rolar ambos
  • Sucesso se a soma for oito; caso contrário, falha
  • Queremos calcular a probabilidade de sucesso para cada combinação única de dados
Simulações de Monte Carlo em Python

Simulação com dados viciados

def roll_biased_dice(n):
    results = {}

for i in range(n): bag_index1 = random.randint(0, 2) die_index1 = random.randint(0, 5) bag_index2 = random.randint(0, 2) die_index2 = random.randint(0, 5)
point1 = bag1[bag_index1][die_index1] point2 = bag2[bag_index2][die_index2]
key = "%s_%s" % (point1, point2)
if point1 + point2 == 8: if key not in results: results[key] = 1 else: results[key] += 1
Simulações de Monte Carlo em Python

Resultados dos dados viciados

dice1_dice2 probability_of_success
6_2 5.54
3_5 2.67
2_6 1.45
4_4 4
Simulações de Monte Carlo em Python

Resultados dos dados viciados

bag1 = [[1, 2, 3, 6, 6, 6], [1, 2, 3, 4, 4, 6], [1, 2, 3, 3, 3, 5]]
bag2 = [[2, 2, 3, 4, 5, 6], [3, 3, 3, 4, 4, 5], [1, 1, 2, 4, 5, 5]]

Resultados da simulação com 10.000 execuções: um gráfico de barras mostrando as probabilidades de sucesso das combinações de dados

Simulações de Monte Carlo em Python

Resultados dos dados viciados

bag1 = [[2, 2, 3, 4, 6, 6], [1, 2, 2, 4, 6, 6], [1, 2, 3, 3, 3, 3]]
bag2 = [[1, 2, 3, 4, 5, 6], [1, 3, 3, 4, 4, 6], [2, 2, 2, 3, 5, 5]]

Resultados da simulação com 10.000 execuções: um gráfico de barras mostrando as probabilidades de sucesso das combinações de dados

Simulações de Monte Carlo em Python

Limitações das simulações de Monte Carlo

  • A saída do modelo só é tão boa quanto a entrada
  • Eventos extremos costumam ter a probabilidade subestimada
Simulações de Monte Carlo em Python

Vamos praticar!

Simulações de Monte Carlo em Python

Preparing Video For Download...