實驗資料設定

Python 的實驗設計

James Chapman

Curriculum Manager, DataCamp

隨機分派的問題

1)不均衡問題:各組受試者人數不同

兩組受試者的人數不同。

Python 的實驗設計

隨機分派的問題

2)共變數問題:部分共變數變異高 → 純隨機造成組別失衡

控制組與處理組用來測量年齡對反應時間的影響。兩組在體能分佈不均,雖然這不是實驗重點,卻可能影響反應時間變數。

結果:更難衡量處理效果!

Python 的實驗設計

區塊隨機化

 

  • 先切成大小為 $n$ 的區塊,再隨機分派
    • 可修正不均衡問題

區塊隨機化範例,顯示兩個由橘白色方塊組成的格子

  • 24 位受試者先分兩組再隨機化
Python 的實驗設計

我們的資料集

  • 電商資料集(ecom)(1000 位受試者)
    • 平均購物籃大小
    • 平均停留時間
    • 重度使用者(網站日均 40+ 分鐘)
   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
Python 的實驗設計

用 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
Python 的實驗設計

視覺化分組

 

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()

混淆 = 變數可能是效果的原因,而非處理本身

 

一個 seaborn 分佈圖,兩個略為透明、近似常態的分佈:較大的藍色與較小的橘色,兩者有些重疊,橘色偏右。

Python 的實驗設計

分層隨機化

 

  • 先依共變數分層
    • 再進行隨機化
  • 綠色=重度使用者(黃色=非重度使用者)
    • 再分為處理/控制
  • 可解決共變數/混淆問題
  • 可用於多個共變數,但會更複雜!

兩個資料格,一綠一黃。每個格子標有 T 或 C,黃色格較大。

Python 的實驗設計

第一個分層

  • 先分出重度使用者
  • 抽樣分配到處理/控制
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'
Python 的實驗設計

第二個分層

  • 再分出非重度使用者
  • 抽樣分配到處理/控制
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'
Python 的實驗設計

確認分層結果

  • 合併區塊與分組
  • 用 groupby 檢查分配
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
Python 的實驗設計

一起來練習吧!

Python 的實驗設計

Preparing Video For Download...