モンテカルロ・シミュレーションの活用

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で学ぶモンテカルロ・シミュレーション

偏ったサイコロの袋

2つの袋から、それぞれ3個の偏ったサイコロのうち1つを取り、2個を振る:

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

 

シミュレーション:

  • 各袋からランダムに1個選び、2個とも振る
  • 出目の合計が8なら成功、それ以外は失敗
  • それぞれのサイコロ組合せごとの成功確率を求める
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]]

1万回試行のシミュレーション結果: サイコロ組合せの成功確率の棒グラフ

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

1万回試行のシミュレーション結果: サイコロ組合せの成功確率の棒グラフ

Pythonで学ぶモンテカルロ・シミュレーション

モンテカルロ法の限界

  • 出力の質は入力の質に依存する
  • 極端事象の確率は過小評価されがち
Pythonで学ぶモンテカルロ・シミュレーション

Passons à la pratique !

Pythonで学ぶモンテカルロ・シミュレーション

Preparing Video For Download...