產生多變量隨機變數

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)

偏硬幣擲樣本的 pairplot

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)

價格與需求樣本的 pairplot

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)

結果的 pairplot

Python 的 Monte Carlo 模擬

一起來練習吧!

Python 的 Monte Carlo 模擬

Preparing Video For Download...