다변량 난수 생성

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

Izzy Weber

Curriculum Manager, DataCamp

다변량 분포에서의 샘플링

다항분포

  • 각 변수는 이항분포를 따름
  • 변수들의 확률 합은 1

 

예시: 편향 동전 던지기 결과 시뮬레이션

scipy.stats.multinomial.rvs()
Python으로 배우는 Monte Carlo 시뮬레이션

다변량 분포에서의 샘플링

다변량 정규분포

  • 각 변수는 정규분포를 따름
  • 변수들은 상관될 수도, 아닐 수도 있음

 

예시: 가격과 수요 시뮬레이션

scipy.stats.multivariate_normal.rvs()
Python으로 배우는 Monte Carlo 시뮬레이션

다항분포에서의 샘플링

시뮬레이션:.rvs(n, p, size)

  • $n$: 50
  • $p$: [0.2, 0.8]
  • size: 500
results = st.multinomial.rvs(50,
    [0.2, 0.8], size=500)

df_results=pd.DataFrame( {"Head":results[:, 0], "Tail":results[:, 1]}) sns.pairplot(df_results)

편향 동전 샘플링의 페어플롯

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

다변량 정규분포에서의 샘플링

시뮬레이션: .rvs(mean, size)

  • mean: [2, 6]
  • size: 500
results=st.multivariate_normal.rvs(
    mean=[2, 6], size=500)

df_results=pd.DataFrame( {"Price":results[:, 0], "Demand":results[:, 1]}) sns.pairplot(df_results)

가격·수요 샘플링 결과의 페어플롯

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

공분산 행렬

  • 변수의 분산과 공분산을 포착
  • 두 확률변수 $x$, $y$로 정의:

공분산 행렬 구조

예시:

df_historical.cov()
|        | Price     | Demand   |
|--------|-----------|----------|
| Price  | 0.920545  | -0.85578 |
| Demand | -0.855780 | 0.98417  |
Python으로 배우는 Monte Carlo 시뮬레이션

공분산을 지정한 다변량 정규 샘플링

시뮬레이션: .rvs(mean, size)

  • mean: [2, 6]
  • size: 500
  • cov: np.array([[1, -0.9], [-0.9, 1]])
cov_mat = np.array([[1,-0.9], [-0.9,1]])
results = st.multivariate_normal.rvs(
    mean=[2,6], size=500, cov=cov_mat)

df_results = pd.DataFrame( {"Price":results[:,0], "Demand":results[:,1]}) sns.pairplot(df_results)

결과의 페어플롯

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

연습해 봅시다!

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

Preparing Video For Download...