Применение метода Монте-Карло

Симуляции Монте-Карло на Python

Izzy Weber

Curriculum Manager, DataCamp

Широкая применимость

Симуляции Монте-Карло применяются в таких областях, как...

  • Финансы и бизнес
  • Инженерия
  • Естественные науки
Симуляции Монте-Карло на Python

Прогнозирование цен на акции

График смоделированных цен на акции с течением времени

1 https://marketxls.com/monte-carlo-simulation-excel
Симуляции Монте-Карло на Python

Управление рисками

График доверительного интервала VaR

1 https://www.investopedia.com/articles/04/092904.asp https://corporatefinanceinstitute.com/course/modeling-risk-monte-carlo-simulation/
Симуляции Монте-Карло на Python

Определение сайтов связывания

 

Изображение сайта связывания белка

1 https://pubs.rsc.org/en/content/articlelanding/2020/ra/d0ra01127d
Симуляции Монте-Карло на Python

Анализ надёжности в инженерии

График с безопасными областями и областями отказа

1 www.researchgate.net/publication/228814883_Probabilistic_Transformation_Method_in_Reliability_Analysis
Симуляции Монте-Карло на Python

Преимущества симуляций Монте-Карло

 

  • Учитывают диапазон значений для различных входных данных
  • Показывают не только возможные исходы, но и их вероятность
  • Упрощают визуализацию спектра возможных результатов
  • Позволяют анализировать, что произошло бы при иных условиях

 

Оптимизация с помощью симуляций Монте-Карло

Симуляции Монте-Карло на Python

Мешки с нечестными кубиками

Бросьте по одному кубику из двух мешков, каждый из которых содержит три нечестных кубика:

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]]

 

Симуляция:

  • Случайно выбрать по одному кубику из каждого мешка и бросить оба
  • Успех — если сумма выпавших очков равна восьми; иначе — неудача
  • Задача — вычислить вероятность успеха для каждой уникальной комбинации кубиков
Симуляции Монте-Карло на Python

Симуляция с нечестными кубиками

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
Симуляции Монте-Карло на Python

Результаты для нечестных кубиков

dice1_dice2 probability_of_success
6_2 5.54
3_5 2.67
2_6 1.45
4_4 4
Симуляции Монте-Карло на Python

Результаты для нечестных кубиков

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]]

Результаты симуляции из 10 000 испытаний: Столбчатая диаграмма с вероятностями успеха для комбинаций кубиков

Симуляции Монте-Карло на Python

Результаты для нечестных кубиков

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]]

Результаты симуляции из 10 000 испытаний: Столбчатая диаграмма с вероятностями успеха для комбинаций кубиков

Симуляции Монте-Карло на Python

Ограничения симуляций Монте-Карло

  • Качество результатов модели определяется качеством входных данных
  • Вероятность экстремальных событий нередко недооценивается
Симуляции Монте-Карло на Python

Давайте потренируемся!

Симуляции Монте-Карло на Python

Preparing Video For Download...