Les A/B tests mal conduits mènent à de mauvaises décisions business. En entretien Senior, on évalue la rigueur statistique : puissance, significativité, erreurs classiques.
Quels sont les prérequis pour conduire un A/B test rigoureux ?
Comment calculez-vous la taille d échantillon nécessaire avant de lancer un A/B test ?
from scipy import stats
from statsmodels.stats.power import TTestIndPower
import numpy as np
# Paramètres du test
baseline_rate = 0.05 # taux de conversion actuel : 5%
min_detectable_effect = 0.01 # on veut détecter +1pp (5% -> 6%)
alpha = 0.05 # risque d erreur de type I (5%)
power = 0.80 # puissance souhaitée (80%)
# Calcul de la taille d échantillon pour un test de proportion
from statsmodels.stats.proportion import proportion_effectsize
effect_size = proportion_effectsize(baseline_rate, baseline_rate + min_detectable_effect)
analysis = TTestIndPower()
n = analysis.solve_power(
effect_size=effect_size,
alpha=alpha,
power=power,
alternative='two-sided'
)
print(f'Taille par groupe : {int(np.ceil(n))} utilisateurs')
# Si 1000 visites/jour -> durée = 2 * ceil(n) / 1000 joursQuelle est la différence entre l erreur de type I et l erreur de type II ? Comment les contrôlez-vous ?
| Erreur | Définition | Probabilité | Contrôle |
|---|---|---|---|
| Type I (faux positif) | Déclarer un effet qui n existe pas | α (niveau de significativité) | Fixer α = 0.05 avant le test |
| Type II (faux négatif) | Rater un vrai effet | β = 1 - puissance | Taille d échantillon suffisante |
Analogie : α = condamner un innocent. β = laisser libre un coupable. Les deux sont des erreurs, mais de natures différentes. En A/B testing business, β = rater une amélioration réelle.
Quel test statistique utilisez-vous selon la métrique testée ?
from scipy import stats
import numpy as np
# Test de proportion (taux de clic, taux de conversion)
from statsmodels.stats.proportion import proportions_ztest
count = np.array([150, 180]) # conversions A et B
nobs = np.array([3000, 3000]) # visiteurs A et B
stat, pvalue = proportions_ztest(count, nobs)
# Test t (panier moyen, durée de session)
stat, pvalue = stats.ttest_ind(group_a['revenue'], group_b['revenue'])
# Test U de Mann-Whitney (non paramétrique, si non-normal)
stat, pvalue = stats.mannwhitneyu(group_a['revenue'], group_b['revenue'])
# Chi-carré (variables catégorielles)
contingency = np.array([[450, 550], [480, 520]]) # [A: conv/non-conv, B]
chi2, pvalue, dof, expected = stats.chi2_contingency(contingency)
print(f'p-value: {pvalue:.4f}')
print(f'Résultat: {"Significatif" if pvalue < 0.05 else "Non significatif"}')Quelles sont les erreurs les plus fréquentes dans les A/B tests ?
Comment présentez-vous les résultats d un A/B test à des stakeholders non statisticiens ?
| Niveau | Maitrise | Signal GO | NO-GO |
|---|---|---|---|
| Confirmé | Test t et z, p-value, alpha, randomisation | Calcule la taille d échantillon avant le test, sait choisir entre test t et z | Arrête le test dès que p < 0.05 (peeking) |
| Senior | Puissance, erreurs type I/II, multiple comparisons, interprétation business | Calcule la puissance, corrige pour les comparaisons multiples, présente en termes business | Ne sait pas ce qu est la puissance statistique |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.