Configuration des données expérimentales

Conception d'expériences en Python

James Chapman

Curriculum Manager, DataCamp

Le problème de la randomisation

1) Problème d'effectif : nombre différent de sujets par groupe

Deux groupes avec un nombre différent de sujets.

Conception d'expériences en Python

Le problème de la randomisation

2) Problème de covariable : forte variabilité de certaines covariables → déséquilibres entre groupes lors de la randomisation

Groupes témoin et traitement pour mesurer l'effet de l'âge sur les temps de réaction. Les deux groupes ont une répartition inégale de la forme physique qui, bien que secondaire, peut influencer le temps de réaction.

Résultat : effet du traitement plus difficile à estimer !

Conception d'expériences en Python

Randomisation par blocs

 

  • D'abord, diviser en blocs de taille $n$, puis répartir au hasard
    • Corrige le problème d'effectif inégal

Exemple de randomisation par blocs montrant deux grilles de carrés orange et blancs

  • 24 sujets divisés en deux groupes, puis randomisés
Conception d'expériences en Python

Notre ensemble de données

  • Ensemble de données de commerce électronique (ecom) (1 000 sujets)
    • Taille moyenne du panier
    • Temps moyen sur le site
    • Utilisateur intensif (moyenne de 40+ minutes quotidiennes sur le 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
Conception d'expériences en Python

Randomisation par blocs en 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
Conception d'expériences en Python

Visualiser les répartitions

 

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

Facteur de confusion = une variable peut causer l'effet plutôt que le traitement

 

Un graphique de distribution seaborn montrant deux distributions quasi normales légèrement transparentes : une grande bleue et une plus petite orange qui se chevauchent, l'orange étant plus à droite

Conception d'expériences en Python

Randomisation stratifiée

 

  • D'abord, division selon la(les) covariable(s)
    • Puis randomisation
  • Vert = utilisateurs intensifs (Jaune = non intensifs)
    • Puis répartition Traitement/Témoin
  • Corrige le problème de covariable/de confusion
  • Possible avec plusieurs covariables — mais ça se complique !

Image de deux grilles de données, l'une verte et l'autre jaune. Les deux ont la lettre T ou C dans chaque case et la grille jaune est plus grande

Conception d'expériences en Python

Notre première strate

  • Séparer les utilisateurs intensifs
  • Échantillonner en Traitement/Témoin
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'
Conception d'expériences en Python

La deuxième strate

  • Séparer les non‑intensifs
  • Échantillonner en Traitement/Témoin
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'
Conception d'expériences en Python

Confirmer la stratification

  • Joindre les blocs et les groupes
  • Utiliser groupby pour vérifier l'allocation
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
Conception d'expériences en Python

Passons à la pratique !

Conception d'expériences en Python

Preparing Video For Download...