Lấy mẫu lại như một dạng đặc biệt của mô phỏng Monte Carlo

Mô phỏng Monte Carlo với Python

Izzy Weber

Curriculum Manager, DataCamp

Lấy mẫu lại như một dạng đặc biệt của mô phỏng Monte Carlo

 

Mô phỏng Monte Carlo

  • Lấy mẫu từ các phân phối xác suất
  • Phân phối đã biết hoặc giả định
  • Dựa vào dữ liệu lịch sử hoặc chuyên môn để chọn phân phối phù hợp

 

Lấy mẫu lại

  • Lấy mẫu ngẫu nhiên từ dữ liệu hiện có
  • Dữ liệu hiện có là phân phối xác suất ngầm định
  • Giả định dữ liệu có tính đại diện
Mô phỏng Monte Carlo với Python

Phương pháp lấy mẫu lại

  1. Lấy mẫu không hoàn lại
    • Dùng để rút mẫu ngẫu nhiên
  2. Lấy mẫu có hoàn lại (bootstrap)
    • Dùng để ước lượng phân phối lấy mẫu của hầu hết thống kê
  3. Hoán vị
    • Thường dùng để so sánh hai nhóm
Mô phỏng Monte Carlo với Python

Lấy mẫu không hoàn lại

Rút ngẫu nhiên hai bang khác nhau trong sáu bang New England

import random
def two_random_ne_states():

ne_states=["Maine", "Vermont", "New Hampshire", "Massachusetts", "Connecticut", "Rhode Island"]
return(random.sample(ne_states, 2))

 

 

two_random_ne_states()
two_random_ne_states()
['Massachusetts', 'Connecticut']
['New Hampshire', 'Maine']
Mô phỏng Monte Carlo với Python

Bootstrap

Ước lượng khoảng tin cậy 95% cho chiều cao trung bình của cầu thủ NBA

import random
import numpy as np

nba_heights = [196, 191, 198, 216, 188, 185, 211, 201,
               188, 191, 201, 208, 191, 183, 196]
simu_heights = []

for i in range(1000): bootstrap_sample = random.choices(nba_heights, k=15) simu_heights.append(np.mean(bootstrap_sample))
upper = np.quantile(simu_heights, 0.975) lower = np.quantile(simu_heights, 0.025) print([np.mean(simu_heights), lower, upper])
[196.26666666666668, 191.8, 201.2]
Mô phỏng Monte Carlo với Python

Trực quan hóa kết quả bootstrap

Thư viện vẽ biểu đồ:

  • seaborn
  • matplotlib
import seaborn as sns
import matplotlib.pyplot as plt

sns.displot(simu_heights)
plt.axvline(191.8, color="red")
plt.axvline(201.2, color="red")
plt.axvline(196.3, color="green")

 

biểu đồ phân phối chiều cao mô phỏng

Mô phỏng Monte Carlo với Python

Hoán vị

Ước lượng khoảng tin cậy 95% cho chênh lệch trung bình chiều cao giữa cầu thủ NBA và nam giới Mỹ

us_heights = [165, 185, 179, 187, 193, 180, 178, 179, 171, 176, 
              169, 160, 140, 199, 176, 185, 175, 196, 190, 176]
nba_heights = [196, 191, 198, 216, 188, 185, 211, 201, 188, 191, 201, 208, 191, 183, 196]

all_heights = us_heights + nba_heights
simu_diff = [] for i in range(1000): perm_sample = np.random.permutation(all_heights) perm_nba, perm_adult = perm_sample[0:15], perm_sample[15:35]
perm_diff = np.mean(perm_nba) - np.mean(perm_adult) simu_diff.append(perm_diff)
Mô phỏng Monte Carlo với Python

Kết quả hoán vị

Chênh lệch trung bình chiều cao NBA và nam trưởng thành Mỹ:

np.mean(nba_heights) - np.mean(us_adult_height)
18.31666666666669

Khoảng tin cậy 95% cho hoán vị của hai danh sách ngẫu nhiên:

upper = np.quantile(simu_diff, 0.975)
lower = np.quantile(simu_diff, 0.025)
print([lower, upper])
[-10.033333333333331, 10.033333333333331]
Mô phỏng Monte Carlo với Python

Trực quan hóa kết quả hoán vị

sns.distplot(simu_diff)
plt.axvline(-10.03, color="red")
plt.axvline(10.03, color="red")
plt.axvline(18.32, color="green")

biểu đồ phân phối chiều cao mô phỏng

Mô phỏng Monte Carlo với Python

Ayo berlatih!

Mô phỏng Monte Carlo với Python

Preparing Video For Download...