Thiết lập dữ liệu thực nghiệm

Thiết kế thí nghiệm với Python

James Chapman

Curriculum Manager, DataCamp

Vấn đề của ngẫu nhiên hóa

1) Vấn đề lệch số lượng: số người tham gia ở mỗi nhóm khác nhau

Hai nhóm với số người tham gia khác nhau.

Thiết kế thí nghiệm với Python

Vấn đề của ngẫu nhiên hóa

2) Vấn đề biến đồng biến: Độ biến thiên cao ở một số biến đồng biến → mất cân bằng nhóm khi ngẫu nhiên hóa

Nhóm đối chứng và can thiệp để đo tác động của tuổi lên thời gian phản ứng. Hai nhóm có phân bố thể lực không đều; dù không phải trọng tâm thí nghiệm, yếu tố này có thể ảnh hưởng biến thời gian phản ứng.

Kết quả: khó đo lường hiệu ứng can thiệp hơn!

Thiết kế thí nghiệm với Python

Ngẫu nhiên hóa theo khối

 

  • Chia thành các khối kích thước $n$ trước, rồi mới ngẫu nhiên hóa
    • Khắc phục lệch số lượng

Ví dụ ngẫu nhiên hóa theo khối với hai lưới ô vuông cam và trắng

  • 24 người tham gia được chia thành hai nhóm rồi mới ngẫu nhiên hóa
Thiết kế thí nghiệm với Python

Bộ dữ liệu của chúng ta

  • Bộ dữ liệu E-commerce (ecom) (1000 người tham gia)
    • Cỡ giỏ hàng trung bình
    • Thời gian trung bình trên website
    • Power user (Trung bình 40+ phút/ngày trên website)
   basket_size  web_time  power_user
0          227         7           0
1          123         5           0
2           98        16           0
3          211        45           1
4          133        17           0
Thiết kế thí nghiệm với Python

Ngẫu nhiên hóa theo khối với Python

group1 = ecom.sample(frac=0.5, random_state=42, replace=False)
group1['Block'] = 1
group2 = ecom.drop(group1.index)
group2['Block'] = 2
print(len(group1), len(group2))
500,500
Thiết kế thí nghiệm với Python

Trực quan hóa các lần chia

 

import seaborn as sns
import matplotlib.pyplot as plt
sns.displot(data=ecom, 
            x='basket_size', 
            hue='power_user', 
            fill=True, 
            kind='kde')    
plt.show()

Nhiễu đồng biến = biến có thể là nguyên nhân của hiệu ứng thay vì can thiệp

 

Biểu đồ phân phối seaborn với hai phân phối gần chuẩn hơi trong suốt: một màu xanh lớn hơn và một màu cam nhỏ hơn chồng lấp nhẹ, phần cam lệch phải hơn

Thiết kế thí nghiệm với Python

Ngẫu nhiên hóa phân tầng

 

  • Chia theo biến đồng biến trước
    • Rồi mới ngẫu nhiên hóa
  • Xanh lá = Tất cả power user (Vàng = Không phải power user)
    • Sau đó chia Can thiệp/Đối chứng
  • Khắc phục vấn đề biến đồng biến/nhiễu
  • Có thể làm với nhiều biến đồng biến - nhưng sẽ phức tạp!

Ảnh hai lưới dữ liệu, một xanh lá và một vàng. Cả hai có chữ T hoặc C trong mọi ô, lưới màu vàng lớn hơn

Thiết kế thí nghiệm với Python

Phân tầng đầu tiên

  • Tách power user
  • Lấy mẫu vào Can thiệp/Đối chứng
strata_1 = ecom[ecom['power_user'] == 1]
strata_1['Block'] = 1

strata_1_g1 = strata_1.sample(frac=0.5, replace=False) strata_1_g1['T_C'] = 'T'
strata_1_g2 = strata_1.drop(strata_1_g1.index) strata_1_g2['T_C'] = 'C'
Thiết kế thí nghiệm với Python

Phân tầng thứ hai

  • Tách nhóm không phải power user
  • Lấy mẫu vào Can thiệp/Đối chứng
strata_2 = ecom.drop(strata_1.index)
strata_2['Block'] = 2

strata_2_g1 = strata_2.sample(frac=0.5, replace=False) strata_2_g1['T_C'] = 'T' strata_2_g2 = strata_2.drop(strata_2_g1.index) strata_2_g2['T_C'] = 'C'
Thiết kế thí nghiệm với Python

Xác nhận phân tầng

  • Ghép các khối và nhóm
  • Dùng groupby để kiểm tra phân bổ
ecom_stratified = pd.concat([strata_1_g1, strata_1_g2, strata_2_g1, strata_2_g2])

ecom_stratified.groupby(['Block','T_C', 'power_user']).size()
Block  T_C  power_user
1      C    1              50
       T    1              50
2      C    0             450
       T    0             450
Thiết kế thí nghiệm với Python

Cùng luyện tập nào!

Thiết kế thí nghiệm với Python

Preparing Video For Download...