多変量乱数の生成

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

Izzy Weber

Curriculum Manager, DataCamp

多変量分布からのサンプリング

多項分布

  • 各変数は二項分布に従う
  • これらの確率の合計は1

 

例: 片寄ったコイン投げの結果をシミュレーション

scipy.stats.multinomial.rvs()
Pythonで学ぶモンテカルロ・シミュレーション

多変量分布からのサンプリング

多変量正規分布

  • 各変数は正規分布に従う
  • 変数同士は相関していてもよい

 

例: 価格と需要のシミュレーション

scipy.stats.multivariate_normal.rvs()
Pythonで学ぶモンテカルロ・シミュレーション

多項分布からのサンプリング

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

多変量正規分布からのサンプリング

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

共分散行列

  • 変数の分散と共分散を表す
  • 2変数 $x$ と $y$ による定義:

共分散行列の構造

例:

df_historical.cov()
|        | Price     | Demand   |
|--------|-----------|----------|
| Price  | 0.920545  | -0.85578 |
| Demand | -0.855780 | 0.98417  |
Pythonで学ぶモンテカルロ・シミュレーション

共分散を指定した多変量正規サンプリング

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

Ayo berlatih!

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

Preparing Video For Download...