Khai thác mô phỏng Monte Carlo

Mô phỏng Monte Carlo với Python

Izzy Weber

Curriculum Manager, DataCamp

Ứng dụng rộng rãi

Mô phỏng Monte Carlo được dùng trong...

  • Tài chính và kinh doanh
  • Kỹ thuật
  • Khoa học vật lý
Mô phỏng Monte Carlo với Python

Dự báo giá cổ phiếu

Biểu đồ giá cổ phiếu mô phỏng theo thời gian

1 https://marketxls.com/monte-carlo-simulation-excel
Mô phỏng Monte Carlo với Python

Quản trị rủi ro

Đồ thị khoảng tin cậy VaR

1 https://www.investopedia.com/articles/04/092904.asp https://corporatefinanceinstitute.com/course/modeling-risk-monte-carlo-simulation/
Mô phỏng Monte Carlo với Python

Xác định vị trí gắn kết

 

đồ họa vị trí gắn kết của protein

1 https://pubs.rsc.org/en/content/articlelanding/2020/ra/d0ra01127d
Mô phỏng Monte Carlo với Python

Phân tích độ tin cậy trong kỹ thuật

một đồ thị hiển thị miền an toàn và miền hỏng

1 www.researchgate.net/publication/228814883_Probabilistic_Transformation_Method_in_Reliability_Analysis
Mô phỏng Monte Carlo với Python

Lợi ích của mô phỏng Monte Carlo

 

  • Xét một dải giá trị cho nhiều đầu vào
  • Cho biết không chỉ điều gì có thể xảy ra mà còn xác suất của từng kết quả
  • Dễ trực quan hóa phạm vi kết quả có thể
  • Có thể xem điều gì sẽ xảy ra dưới các kịch bản khác nhau

 

tối ưu hóa bằng mô phỏng Monte Carlo

Mô phỏng Monte Carlo với Python

Túi xúc xắc lệch

Rút hai viên xúc xắc từ hai túi, mỗi túi chứa ba viên xúc xắc lệch:

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

 

Mô phỏng:

  • Ngẫu nhiên chọn một viên từ mỗi túi; tung cả hai
  • Thành công nếu tổng bằng tám; ngược lại là thất bại
  • Cần tính xác suất thành công cho từng cặp xúc xắc duy nhất
Mô phỏng Monte Carlo với Python

Mô phỏng xúc xắc lệch

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
Mô phỏng Monte Carlo với Python

Kết quả xúc xắc lệch

dice1_dice2 probability_of_success
6_2 5.54
3_5 2.67
2_6 1.45
4_4 4
Mô phỏng Monte Carlo với Python

Kết quả xúc xắc lệch

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

Kết quả mô phỏng 10.000 lần thử: biểu đồ cột hiển thị xác suất thành công của các cặp xúc xắc

Mô phỏng Monte Carlo với Python

Kết quả xúc xắc lệch

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

Kết quả mô phỏng 10.000 lần thử: biểu đồ cột hiển thị xác suất thành công của các cặp xúc xắc

Mô phỏng Monte Carlo với Python

Hạn chế của mô phỏng Monte Carlo

  • Đầu ra chỉ tốt khi đầu vào tốt
  • Thường đánh giá thấp xác suất sự kiện cực đoan
Mô phỏng Monte Carlo với Python

Ayo berlatih!

Mô phỏng Monte Carlo với Python

Preparing Video For Download...