몬테카를로 시뮬레이션이란?

Python으로 배우는 Monte Carlo 시뮬레이션

Izzy Weber

Curriculum Manager, DataCamp

시뮬레이션과 몬테카를로 시뮬레이션

시뮬레이션
  • 현실을 모사하려는 실험
  • 보통 컴퓨터 프로그램을 사용

 

몬테카를로 시뮬레이션
  • 무작위 변수로 인해 달라지는 결과의 확률을 예측
  • 반복적 랜덤 샘플링으로 수치 결과 획득
  • 랜덤 샘플링에 의존하므로 결과는 확률적임
Python으로 배우는 Monte Carlo 시뮬레이션

시뮬레이션 예시

육면체 주사위 굴리기
  • Tom은 공정한 6면체 주사위를 $n$번 굴립니다
  • 매번 결과를 기록합니다
  • 그다음 주사위를 봉투에 넣고, 다음 굴림을 위해 새 주사위를 선택합니다

질문

  1. $n$번 후 Tom의 봉투에는 몇 개의 주사위가 있습니까?
  2. $n$번 후 평균 눈은 얼마입니까?

 

주사위를 굴리는 손

Python으로 배우는 Monte Carlo 시뮬레이션

Tom의 결과 시뮬레이션하기

  • total_dice: $n$번 후 Tom의 봉투 속 주사위 개수
  • mean_point_dice: $n$번 후 모든 결과의 평균
import random
import numpy as np

def roll_dice(n, seed): random.seed(seed) total_dice = 0 point_dice = []
for i in range(n): total_dice += 1 point_dice.append(random.randint(1, 6))
mean_point_dice = np.mean(point_dice)
return([total_dice, mean_point_dice])
Python으로 배우는 Monte Carlo 시뮬레이션

시뮬레이션 결과

시뮬레이션 1:

seed=1231

print(roll_dice(10, seed))
print(roll_dice(100, seed))
print(roll_dice(1000, seed))
print(roll_dice(10000, seed))

시뮬레이션 2:

seed=3124
print(roll_dice(10, seed))
print(roll_dice(100, seed))
print(roll_dice(1000, seed))
print(roll_dice(10000, seed))

결과:

[10, 3.6]

[100, 3.5]
[1000, 3.495]
[10000, 3.503]

결과:

[10, 3.8]
[100, 3.28]
[1000, 3.474]
[10000, 3.5508]
Python으로 배우는 Monte Carlo 시뮬레이션

대수의 법칙

동일 분포의 난수 변수를 많이 생성할수록 표본평균은 이론적 평균에 수렴합니다.

시뮬레이션 3 (seed = 3124):

print(roll_dice(100000, seed))
print(roll_dice(500000, seed))
print(roll_dice(1000000, seed))

결과:

[100000, 3.51344]
[500000, 3.50428]
[1000000, 3.501995]
Python으로 배우는 Monte Carlo 시뮬레이션

연습해 봅시다!

Python으로 배우는 Monte Carlo 시뮬레이션

Preparing Video For Download...