Symulacje Monte Carlo

Symulacje Monte Carlo w Pythonie

Izzy Weber

Curriculum Manager, DataCamp

Szerokie zastosowanie

Symulacje Monte Carlo są stosowane m.in. w...

  • Finansach i biznesie
  • Inżynierii
  • Naukach przyrodniczych
Symulacje Monte Carlo w Pythonie

Prognozowanie cen akcji

wykres przedstawiający symulowane ceny akcji w czasie

1 https://marketxls.com/monte-carlo-simulation-excel
Symulacje Monte Carlo w Pythonie

Zarządzanie ryzykiem

wykres przedstawiający przedział ufności VaR

1 https://www.investopedia.com/articles/04/092904.asp https://corporatefinanceinstitute.com/course/modeling-risk-monte-carlo-simulation/
Symulacje Monte Carlo w Pythonie

Identyfikacja miejsc wiązania

 

grafika miejsca wiązania białka

1 https://pubs.rsc.org/en/content/articlelanding/2020/ra/d0ra01127d
Symulacje Monte Carlo w Pythonie

Analiza niezawodności w inżynierii

wykres przedstawiający obszary bezpieczeństwa i awarii

1 www.researchgate.net/publication/228814883_Probabilistic_Transformation_Method_in_Reliability_Analysis
Symulacje Monte Carlo w Pythonie

Zalety symulacji Monte Carlo

 

  • Uwzględniają zakres wartości różnych danych wejściowych
  • Pokazują nie tylko możliwe zdarzenia, ale też ich prawdopodobieństwo
  • Ułatwiają wizualizację możliwych wyników
  • Pozwalają analizować różne scenariusze

 

optymalizacja za pomocą symulacji Monte Carlo

Symulacje Monte Carlo w Pythonie

Worki z obciążonymi kostkami

Rzut dwiema kostkami z dwóch worków, z których każdy zawiera trzy obciążone kostki:

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

 

Symulacja:

  • Losowe wybranie jednej kostki z każdego worka i rzut obiema
  • Sukces, gdy suma wyników wynosi osiem; w przeciwnym razie porażka
  • Obliczenie prawdopodobieństwa sukcesu dla każdej unikalnej kombinacji kostek
Symulacje Monte Carlo w Pythonie

Symulacja obciążonych kostek

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
Symulacje Monte Carlo w Pythonie

Wyniki symulacji obciążonych kostek

dice1_dice2 probability_of_success
6_2 5.54
3_5 2.67
2_6 1.45
4_4 4
Symulacje Monte Carlo w Pythonie

Wyniki symulacji obciążonych kostek

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

Wyniki symulacji dla 10 000 prób: wykres słupkowy przedstawiający prawdopodobieństwa sukcesu kombinacji kostek

Symulacje Monte Carlo w Pythonie

Wyniki symulacji obciążonych kostek

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

Wyniki symulacji dla 10 000 prób: wykres słupkowy przedstawiający prawdopodobieństwa sukcesu kombinacji kostek

Symulacje Monte Carlo w Pythonie

Ograniczenia symulacji Monte Carlo

  • Jakość wyników modelu zależy od jakości danych wejściowych
  • Prawdopodobieństwo zdarzeń ekstremalnych jest często niedoszacowane
Symulacje Monte Carlo w Pythonie

Czas na ćwiczenia!

Symulacje Monte Carlo w Pythonie

Preparing Video For Download...