Je suis un développeur de logiciels travaillant sur des systèmes de test A / B. Je n'ai pas une solide expérience en statistiques, mais j'ai acquis des connaissances au cours des derniers mois.
Un scénario de test typique consiste à comparer deux URL sur un site Web. Un visiteur visite LANDING_URL
et est ensuite envoyé au hasard vers URL_CONTROL
ou URL_EXPERIMENTAL
. Un visiteur constitue un échantillon et une condition de victoire est atteinte lorsque le visiteur effectue une action souhaitable sur ce site. Cela constitue une conversion et le taux de conversion est le taux de conversion (généralement exprimé en pourcentage). Un taux de conversion typique pour une URL donnée se situe entre 0,01% et 0,08%. Nous effectuons des tests pour déterminer comment les nouvelles URL se comparent aux anciennes URL. S'il URL_EXPERIMENTAL
s'avère supérieur URL_CONTROL
, nous le remplaçons URL_CONTROL
par URL_EXPERIMENTAL
.
Nous avons développé un système utilisant des techniques de test d'hypothèse simples. J'ai utilisé les réponses à une autre question CrossValidated ici pour développer ce système.
Un test est mis en place comme suit:
- L'estimation
CRE_CONTROL
du taux de conversion deURL_CONTROL
est calculée à l'aide de données historiques. - Le taux
CRE_EXPERIMENTAL
de conversion cible souhaité deURL_EXPERIMENTAL
est défini. - Un niveau de signification de 0,95 est généralement utilisé.
- Une puissance de 0,8 est généralement utilisée.
Ensemble, toutes ces valeurs sont utilisées pour calculer la taille d'échantillon souhaitée. J'utilise la fonction R power.prop.test
pour obtenir cette taille d'échantillon.
Un test sera exécuté jusqu'à ce que tous les échantillons soient collectés. À ce stade, les intervalles de confiance pour CR_CONTROL
et CR_EXPERIMENTAL
sont calculés. S'ils ne se chevauchent pas, un gagnant peut être déclaré avec un niveau de signification de 0,95 et une puissance de 0,8.
Les utilisateurs de nos tests ont cependant deux préoccupations majeures:
1. Si, à un moment donné du test, suffisamment d'échantillons sont collectés pour montrer un gagnant clair, le test ne peut-il pas être arrêté?
2. Si aucun gagnant n'est déclaré à la fin du test, pouvons-nous exécuter le test plus longtemps pour voir si nous pouvons collecter suffisamment d'échantillons pour trouver un gagnant?
Il convient de noter qu'il existe de nombreux outils commerciaux qui permettent à leurs utilisateurs de faire exactement ce que souhaitent nos propres utilisateurs. J'ai lu qu'il y a beaucoup d'erreurs avec ce qui précède, mais j'ai également rencontré l'idée d'une règle d'arrêt et j'aimerais explorer la possibilité d'utiliser une telle règle dans nos propres systèmes.
Voici deux approches que nous aimerions considérer:
1. À l'aide de power.prop.test
, comparez les taux de conversion mesurés actuels au nombre actuel d'échantillons et voyez si suffisamment d'échantillons ont été collectés pour déclarer un gagnant.
Exemple: Un test a été mis en place pour voir si le comportement suivant existe dans notre système:
CRE_CONTROL
: 0,1CRE_EXPERIMENTAL
: 0,1 * 1,3- Avec ces paramètres, la taille de l'échantillon
N
est de 1774.
Cependant, à mesure que le test avance et atteint 325 échantillons, CRM_CONTROL
(le taux de conversion mesuré pour le contrôle) est de 0,08 et de CRM_EXPERIMENTAL
0,15. power.prop.test
est exécuté sur ces taux de conversion et N
se trouve être 325. Exactement le nombre d'échantillons nécessaires pour déclarer CRM_EXPERIMENTAL
être le gagnant! À ce stade, nous espérons que le test pourra être terminé. De même, si le test atteint 1774 échantillons mais qu'aucun gagnant n'est trouvé, mais qu'il atteint 2122 échantillons, ce qui est suffisant pour montrer que CRM_CONTROL
0,1 et CRM_EXPERIMENTAL
0,128 est un résultat où un gagnant peut être déclaré.
Dans une question connexe, les utilisateurs ont indiqué qu'un tel test est moins crédible car il encourage les arrêts précoces à avoir moins d'échantillons et est également vulnérable aux biais d'estimation et à un nombre accru d'erreurs de type I et de type II. Existe-t-il un moyen de faire fonctionner cette règle d'arrêt? C'est notre approche préférée car cela signifie moins de temps de programmation pour nous. Peut-être que cette règle d'arrêt pourrait fonctionner en offrant une sorte de score numérique ou des scores qui mesurent la crédibilité du test s'il devait être arrêté tôt?
2. Utilisation de l'analyse séquentielle ou SPRT .
Ces méthodes de test sont conçues exactement pour la situation dans laquelle nous nous trouvons: comment nos utilisateurs peuvent-ils commencer un test et le terminer de telle manière qu'ils ne perdent pas trop de temps dans les tests? Soit exécuter un test trop longtemps, soit recommencer un test avec des paramètres différents.
Des deux méthodes ci-dessus, je préfère SPRT parce que les mathématiques sont un peu plus faciles à comprendre et parce qu'il semble que ce soit plus facile à programmer. Cependant, je ne comprends pas comment utiliser la fonction de vraisemblance dans ce contexte. Si quelqu'un pouvait construire un exemple de la façon de calculer le rapport de vraisemblance, la somme cumulée du rapport de vraisemblance, et continuer à travers un exemple illustrant une situation où l'on continuerait à surveiller, quand on accepterait l'hypothèse nulle et l'hypothèse alternative, cela nous aiderait à déterminer si SPRT est la bonne voie à suivre.
Réponses:
C'est un problème intéressant et les techniques associées ont de nombreuses applications. On les appelle souvent des stratégies de «surveillance intérimaire» ou «conception expérimentale séquentielle» (l'article de wikipedia auquel vous avez lié est malheureusement un peu rare), mais il existe plusieurs façons de procéder. Je pense que @ user27564 se trompe en disant que ces analyses doivent nécessairement être bayésiennes - il existe certainement aussi des approches fréquentistes pour la surveillance intermédiaire.
Une logique similaire vous permet de trouver les "points inévitables" pour d'autres tests où:
Cela serait probablement facile à mettre en œuvre - calculez les critères d'arrêt hors ligne, puis branchez-le simplement dans le code de votre site - mais vous pouvez souvent faire encore mieux si vous êtes prêt à mettre fin à l'expérience, non seulement lorsque le résultat est inévitable , mais quand il est également très peu probable qu'il change.
Il existe également un certain nombre d'autres approches. Les méthodes séquentielles de groupe sont conçues pour les situations où vous ne pourrez peut-être pas obtenir un nombre défini de sujets et où les sujets entreront à des taux variables. En fonction du trafic de votre site, vous souhaiterez peut-être ou non examiner la question.
Il existe un bon nombre de packages R flottant autour de CRAN, si c'est ce que vous utilisez pour votre analyse. Un bon point de départ pourrait en fait être la vue des tâches des essais cliniques , car une grande partie de ce travail est venue de ce domaine.
[*] Juste quelques conseils amicaux: soyez prudent lorsque vous regardez des valeurs de signification calculées à partir d'un très grand nombre de points de données. Au fur et à mesure que vous collectez de plus en plus de données, vous finirez par trouver un résultat significatif, mais l'effet peut être insignifiant. Par exemple, si vous avez demandé à la planète entière si elle préfère A ou B, il est très peu probable que vous voyiez une répartition exacte à 50:50, mais cela ne vaut probablement pas la peine de réoutiller votre produit si la répartition est de 50,001: 49,999. Continuez à vérifier la taille de l'effet (c'est-à-dire la différence de taux de conversion) aussi!
la source
Vous pouvez vous arrêter tôt, mais si vous le faites, vos valeurs de p ne sont pas facilement interprétées. Si vous ne vous souciez pas de l'interprétation de votre valeur de p, la façon dont la réponse à vos deux premières questions est «non» n'a pas d'importance (trop). Votre client semble pragmatique, donc la véritable interprétation d'une valeur p n'est probablement pas un point fin qui vous tient à cœur.
Je ne peux pas parler de la deuxième approche que vous proposez.
Cependant, la première approche n'est pas solide. Les approximations normales des distributions binomiales ne sont pas valables pour des proportions aussi faibles (qui est la méthode utilisée par power.prop.test, également la méthode utilisée par Cohen dans son livre classique sur le pouvoir). De plus, à ma connaissance, il n'existe pas de solution d'analyse de puissance sous forme fermée pour les tests de proportion à deux échantillons (cf. Comment peut-on effectuer une analyse de puissance binomiale à deux groupes sans utiliser d'approximations normales? ). Il existe cependant de meilleures méthodes pour estimer les intervalles de confiance des proportions (cf. le paquet binom). Vous pouvez utiliser des intervalles de confiance ne se chevauchant pas comme solution partielle ... mais ce n'est pas la même chose que d'estimer une valeur p et ne fournit donc pas de route pour alimenter directement. J'espère que quelqu'un a une belle solution de formulaire fermé qu'ils partageront avec le reste d'entre nous. Si je tombe sur un, je mettrai à jour la question référencée ci-dessus. Bonne chance.
Edit: Pendant que j'y pense, laissez-moi totalement pragmatique ici un instant. Votre client souhaite que cette expérience se termine lorsqu'il est certain que le site expérimental fonctionne mieux que le site de contrôle. Après avoir obtenu un échantillon décent, si vous n'êtes pas prêt à prendre une décision, commencez simplement à ajuster le rapport de votre affectation aléatoire sur le côté qui «gagne». S'il ne s'agissait que d'un blip, la régression vers la moyenne s'infiltrera, vous en deviendrez moins certain et relâcherez le ratio. Lorsque vous êtes raisonnablement certain, appelez-le quitte et déclarez un gagnant. L'approche optimale impliquerait probablement une mise à jour bayésienne, mais je n'en sais pas assez sur ce sujet du haut de ma tête pour vous orienter. Cependant, je peux vous assurer que même si cela peut parfois sembler contre-intuitif, les mathématiques elles-mêmes ne sont pas si difficiles.
la source
Les questions que vous vous posez sont des questions typiques qui émergent dans les tests statistiques. Il existe deux «saveurs» de statistiques, le fréquentiste et le bayésien. La réponse fréquentiste à vos deux questions est simple:
Une fois que vous avez défini votre configuration, vous n'êtes même pas autorisé à regarder les données (analyse en aveugle). Du point de vue fréquentiste, il n'y a pas moyen de contourner, pas de tricherie pas de trucs! (EDIT: Bien sûr, il y a des tentatives pour le faire, et ils fonctionneront également s'ils sont utilisés correctement, mais la plupart d'entre eux sont connus pour introduire des biais.)
Mais il y a le point de vue bayésien, qui est assez différent. L'approche bayésienne a besoin, contrairement aux fréquentistes, d'une entrée supplémentaire, la distribution de probabilité a priori. Nous pouvons l'appeler également connaissances ou préjugés antérieurs. Ayant cela, nous pouvons utiliser les données / mesures pour mettre à jour nos connaissances à la probabilité a posteriori. Le fait est que nous pouvons utiliser les données et encore plus, nous pouvons utiliser les données à chaque point intermédiaire de la mesure. Dans chaque mise à jour, le dernier postérieur est notre nouveau prieur et nous pouvons le mettre à jour avec une nouvelle mesure à notre connaissance actuelle. Aucun problème d'arrêt précoce!
J'ai trouvé une discussion discutant de problèmes similaires à ceux que vous avez et j'ai décrit ci-dessus: http://biostat.mc.vanderbilt.edu/wiki/pub/Main/JoAnnAlvarez/BayesianAdaptivePres.pdf
Mais à côté de cela, êtes-vous vraiment sûr d'avoir besoin de tout cela? Il semble que vous ayez un système en cours d'exécution qui décide où lier une demande. Pour cela, vous n'avez pas besoin de prouver que vos décisions sont correctes au sens statistique avec un test d'hypothèse. Avez-vous déjà acheté un coke, car vous pourriez exclure que le pepsi soit «en ce moment» avec une probabilité de 95%? Il suffit de prendre celle qui est juste meilleure, sans exclure une hypothèse. Ce serait un algorithme trivial: calculer l'incertitude du taux A, calculer l'incertitude de B. Prendre la différence des deux taux et la diviser b l'incertitude de la différence. Le résultat est quelque chose comme la signification de la différence de sigma. Prenez ensuite tous les liens où il y a plus de deux ou trois différences de sigma. Inconvénient,
la source
peut-être que certaines méthodes pourraient être utilisées comme
cela ajustera le seuil de P en fonction des résultats et vous aidera à arrêter la collecte de données et à économiser des ressources et du temps.
peut-être d'autres travaux pourraient être ajoutés ici.
la source