Використання моделювання Монте-Карло

Моделювання Монте-Карло в 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...