活用 Monte Carlo 模擬

Python 的 Monte Carlo 模擬

Izzy Weber

Curriculum Manager, DataCamp

適用範圍廣

Monte Carlo 模擬可用於:

  • 金融與商業
  • 工程
  • 物理科學
Python 的 Monte Carlo 模擬

股價預測

一張顯示股價隨時間模擬走勢的圖

1 https://marketxls.com/monte-carlo-simulation-excel
Python 的 Monte Carlo 模擬

風險管理

顯示 VaR 信賴區間的圖

1 https://www.investopedia.com/articles/04/092904.asp https://corporatefinanceinstitute.com/course/modeling-risk-monte-carlo-simulation/
Python 的 Monte Carlo 模擬

結合位點辨識

 

蛋白質結合位點示意圖

1 https://pubs.rsc.org/en/content/articlelanding/2020/ra/d0ra01127d
Python 的 Monte Carlo 模擬

工程可靠度分析

顯示安全與失效區域的圖

1 www.researchgate.net/publication/228814883_Probabilistic_Transformation_Method_in_Reliability_Analysis
Python 的 Monte Carlo 模擬

Monte Carlo 模擬的優點

 

  • 可同時考量多個輸入的取值範圍
  • 不只顯示可能結果,也估計各結果機率
  • 易於視覺化可能結果的分佈範圍
  • 可檢視不同情境下會發生什麼事

 

用 Monte Carlo 模擬做最佳化

Python 的 Monte Carlo 模擬

偏骰袋

從兩個袋子中各擲出一顆骰子;每個袋子都含有 3 顆偏骰:

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

 

模擬:

  • 從每個袋子隨機選一顆;同時擲兩顆骰子
  • 若點數相加為 8 則成功;否則失敗
  • 我們要計算每種獨特骰子組合的成功機率
Python 的 Monte Carlo 模擬

偏骰模擬

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 的 Monte Carlo 模擬

偏骰結果

dice1_dice2 probability_of_success
6_2 5.54
3_5 2.67
2_6 1.45
4_4 4
Python 的 Monte Carlo 模擬

偏骰結果

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 的 Monte Carlo 模擬

偏骰結果

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 的 Monte Carlo 模擬

Monte Carlo 模擬的限制

  • 輸入品質決定輸出品質
  • 極端事件的機率常被低估
Python 的 Monte Carlo 模擬

一起來練習吧!

Python 的 Monte Carlo 模擬

Preparing Video For Download...