प्रयोगात्मक डेटा सेटअप

Python में Experimental Design

James Chapman

Curriculum Manager, DataCamp

रैंडमाइज़ेशन की समस्या

1) Uneven issue: समूहों में विषयों की संख्या अलग-अलग

दो समूह जिनमें विषयों की संख्या अलग है.

Python में Experimental Design

रैंडमाइज़ेशन की समस्या

2) Covariate issue: कुछ covariates में high variability → रैंडमाइज़ेशन में group imbalances

कंट्रोल और ट्रीटमेंट समूह जो उम्र का रिएक्शन टाइम पर असर मापने के लिए बने हैं. दोनों समूहों में शारीरिक फिटनेस का वितरण असमान है, जो भले प्राथमिक फोकस नहीं है, पर रिएक्शन टाइम पर असर डाल सकता है.

Result: treatment effect मापना मुश्किल!

Python में Experimental Design

ब्लॉक रैंडमाइज़ेशन

 

  • पहले आकार $n$ के blocks में बाँटें, फिर random split करें
    • uneven issue ठीक होता है

ब्लॉक रैंडमाइज़ेशन का उदाहरण, दो ग्रिड में नारंगी और सफेद स्क्वेयर

  • 24 विषयों को दो समूहों में बाँटकर फिर randomize करें
Python में Experimental Design

हमारा डेटासेट

  • E-commerce डेटासेट (ecom) (1000 subjects)
    • औसत basket size
    • वेबसाइट पर औसत समय
    • Power user (वेबसाइट पर दैनिक औसत 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 में Experimental Design

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 में Experimental Design

Splits को विज़ुअलाइज़ करना

 

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

Confounding = variable treatment के बजाय effect का कारण हो सकता है

 

Seaborn का डिस्ट्रीब्यूशन प्लॉट जिसमें दो नॉर्मल-जैसी, थोड़ी ट्रांसपेरेंट डिस्ट्रीब्यूशंस हैं. एक बड़ी नीली और एक छोटी नारंगी, जो थोड़ा ओवरलैप करती हैं और नारंगी दाईं ओर शिफ्टेड है

Python में Experimental Design

स्ट्रैटिफाइड रैंडमाइज़ेशन

 

  • पहले covariate(s) के आधार पर split
    • फिर randomization
  • हरा = सभी power users (पीला = not power users)
    • फिर Treatment/Control में split
  • covariate/confounding issue ठीक होता है
  • कई covariates के लिए कर सकते हैं - पर जटिल हो जाता है!

डेटा की दो ग्रिड का चित्र, एक हरी और एक पीली. दोनों में हर सेल में T या C है और पीली ग्रिड बड़ी है

Python में Experimental Design

हमारा पहला strata

  • power users को अलग करें
  • Treatment/Control में sample करें
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 में Experimental Design

दूसरा strata

  • not power users को अलग करें
  • Treatment/Control में sample करें
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 में Experimental Design

स्ट्रैटिफ़िकेशन की पुष्टि

  • blocks और groups को join करें
  • allocation जाँचने के लिए 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 में Experimental Design

अभ्यास करते हैं!

Python में Experimental Design

Preparing Video For Download...