Configurarea datelor experimentale

Design experimental în Python

James Chapman

Curriculum Manager, DataCamp

Problema randomizării

1) Problema dezechilibrului: număr diferit de subiecți în grupuri

Două grupuri cu număr diferit de subiecți.

Design experimental în Python

Problema randomizării

2) Problema covariantei: variabilitate ridicată în unele covarianate → dezechilibre de grup în randomizare

Grupuri de control și tratament pentru măsurarea impactului vârstei asupra timpului de reacție. Cele două grupuri au o distribuție inegală a condiției fizice, care, deși nu este obiectivul principal, poate influența variabila timp de reacție.

Rezultat: efectul tratamentului devine mai greu de măsurat!

Design experimental în Python

Randomizare pe blocuri

 

  • Împărțire în blocuri de mărime $n$ mai întâi, apoi împărțire aleatorie
    • Rezolvă problema dezechilibrului

Exemplu de randomizare pe blocuri cu două grile de pătrate portocalii și albe

  • 24 de subiecți împărțiți în două grupuri, apoi randomizați
Design experimental în Python

Setul nostru de date

  • Setul de date e-commerce (ecom) (1000 subiecți)
    • Dimensiunea medie a coșului
    • Timpul mediu pe site
    • Utilizator avansat (medie 40+ minute zilnice pe site)
   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
Design experimental în Python

Randomizare pe blocuri în 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
Design experimental în Python

Vizualizarea împărțirilor

 

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

Variabilă de confuzie = variabilă care ar putea cauza efectul în loc de tratament

 

Un grafic de distribuție seaborn cu două distribuții aproximativ normale, ușor transparente. Una albastră mai mare și una portocalie mai mică, care se suprapun parțial, cu cea portocalie mai la dreapta

Design experimental în Python

Randomizare stratificată

 

  • Împărțire după covariantă(e) mai întâi
    • Apoi randomizare
  • Verde = Toți utilizatorii avansați (Galben = Non-utilizatori avansați)
    • Apoi împărțire Tratament/Control
  • Rezolvă problema covariantei/confuziei
  • Poate fi aplicat pentru mai multe covarianate - dar devine complex!

O imagine cu două grile de date, una verde și una galbenă. Ambele conțin litera T sau C în toate celulele, iar grila galbenă este mai mare

Design experimental în Python

Prima noastră stratificare

  • Separarea utilizatorilor avansați
  • Eșantionare în Tratament/Control
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'
Design experimental în Python

A doua stratificare

  • Separarea non-utilizatorilor avansați
  • Eșantionare în Tratament/Control
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'
Design experimental în Python

Confirmarea stratificării

  • Unirea blocurilor și grupurilor
  • Utilizarea groupby pentru verificarea alocării
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
Design experimental în Python

Să exersăm!

Design experimental în Python

Preparing Video For Download...