Sensibilité accrue des tests A / B avec Cuped. Signaler dans Yandex

CUPED (Controlled-experiment Using Pre-Experiment Data) est une technique d'expérimentation A / B qui a été utilisée en production relativement récemment. Il vous permet d'augmenter la sensibilité des métriques grâce à l'utilisation des données obtenues précédemment. Plus la sensibilité est grande, plus les changements subtils peuvent être remarqués et pris en compte dans l'expérience. Microsoft a été la première entreprise à introduire CUPED. Aujourd'hui, de nombreuses entreprises internationales utilisent cette technique. Dans son rapport, Valery Babushkinvenheads a expliqué la signification de CUPED et quels résultats peuvent être obtenus, et avant cela, il a examiné la méthode de stratification, qui améliore également la sensibilité.


- Je m'appelle Valery Babushkin, je suis directeur de la modélisation et de l'analyse des données chez X5 Retail Group et conseiller chez Yandex.Market. Pendant mon temps libre, j'enseigne à la Higher School of Economics et je vole souvent au Kazakhstan, j'enseigne à la Banque nationale du Kazakhstan.

De plus, j'avais l'habitude de profiter d'un apprentissage automatique compétitif. Sur la plateforme Kaggle, j'ai une fois obtenu le titre de Compétitions Grand Maître et 23 places au classement mondial de 120 mille. Kaggle est conçu de manière très simple: si vous ne jouez pas, vous tombez dans le classement. J'essaye donc de ne plus y aller pour ne pas voir ces chiffres.



Ma présentation comportera deux étapes: la stratification et les variables de contrôle. Très probablement, vous savez ce que sont les tests A / B et pourquoi ils sont nécessaires. Mais nous ne sauterons pas cette formule.



Dans les tests A / B, il existe une variété d'approches. En principe, ce sont deux approches principales en statistique. L'un d'eux est appelé fréquence, le second est bayésien. Dans certains livres, par exemple, dans Efron, une troisième approche, Fisher's, est pointée du doigt, mais nous n'en parlerons pas, ni de l'approche bayésienne. Parlons de l'approche fréquentielle.

Il existe une formule simple dans l'approche par fréquence. Il y en a deux, mais l'un considère le cas d'une distribution discrète, l'autre considère une distribution continue, nous allons donc considérer cela comme une formule.

Cette formule nous indique combien d'observations sont nécessaires. Si nous pouvions nous permettre de collecter une quantité infinie de données, nous obtiendrions la vraie valeur pour chacune des distributions, puis nous comparerions simplement leurs estimations ponctuelles. Bien que nous puissions comparer les estimations ponctuelles d'un nombre infini de données - c'est une question, mais néanmoins. Nous obtiendrions une vraie distribution, les comparerions et dirions laquelle est la meilleure.

Malheureusement, nous ne pouvons pas le faire; nous avons toujours une limite sur la quantité de données qui peuvent être collectées. Cela est dû soit au nombre de nos utilisateurs, soit au temps pendant lequel nous pouvons collecter ces données, soit au fait qu'ils souhaitent simplement obtenir le résultat de notre part le plus rapidement possible.

Nous voyons ici une formule très simple pour n, où n est le nombre d'observations nécessaires dans chacun des groupes. Au numérateurz2 est l'intervalle de confiance, le degré de fiabilité avec lequel nous voulons donner notre résultat. Il semble évident quez2

nous réparons une fois et ne pouvons plus changer. Bien sûr, nous pouvons dire que nous donnons le résultat avec un degré de fiabilité nul, puis nous avons besoin de zéro observation. Ce serait très pratique, mais ce n'est généralement pas le cas. Plus loin dans le numérateur, si nous regardons la formule discrète, estz

, qui est égale à la variance de la distribution binomiale. Dans le cas continu, la même chose, σ2, c'est-à-dire la variance. Et il semble logique que plus la variance est grande, plus nous avons besoin d'observations. Le dénominateur contient m2ou marge d'erreur - c'est la différence minimale que nous voulons attraper, et ici la situation est inverse. Plus la différence que nous voulons attraper est petite, plus nous avons besoin d'observations. Autrement dit, c'est quelque chose comme une erreur.p^(1p^)



Si nous avons besoin d'une erreur de 0,01, alors nous avons besoin de 100 fois plus d'observations que si nous avons besoin d'une erreur de 0,1. Ils diffèrent par dix fois, mais il y a une dépendance quadratique, il s'avère que 100 fois plus d'observations sont nécessaires.

J'ai eu une fois un rapport sur la linéarisation. Aujourd'hui, je vais dire comment nous pouvons réduire la variance, et en temps voulu, j'ai dit comment nous pouvons augmenter m. L'augmentation de m semble être une meilleure stratégie, car l'augmentation de m de moitié réduit de quatre la quantité de données nécessaires aux calculs. Augmenter signifie une erreur que nous pouvons commettre.

Et si nous réduisons la variance de moitié, nous n'avons besoin que de deux fois plus d'observations. Par conséquent, réduire quelque chose quatre fois au dénominateur est un gain de 16 fois, et quatre fois au numérateur - seulement quatre.

Cependant, chaque approche a ses avantages et ses inconvénients. Je peux alors dire plus en détail lesquels. Nous passons maintenant à la réduction de la variance.

Stratification. Soit dit en passant, j'aurai des résultats expérimentaux dans chaque section à la fin, ce que nous avons obtenu sur des données réelles dans un environnement réel.



Parlons donc de stratification. Que savons-nous? Nous savons que la réduction de la variance réduit le nombre d'observations. Supposons que notre métrique souhaitée, par laquelle nous analysons, peut être décomposée en certaines régions, par groupes. Une très bonne question qui a déjà été posée: comment la casser? Par pays? Ou peut-être sur les navigateurs? Peut-être aller aux systèmes d'exploitation? Peut-être que les utilisateurs qui se connectent avec Mac, Windows et Linux sont trois types d'utilisateurs différents.

Si nous trouvons une telle valeur ou un signe par lequel nous pouvons nous diviser en groupes, alors nous faisons ce qui suit: diviser en K groupes, où K est le nombre de quantités uniques égal au nombre de groupes que nous avons. Dans le cas des systèmes d'exploitation - trois, avec les pays - le nombre de pays, etc.

De plus, la probabilité de tomber dans chacun des groupes est égale au nombre de toutes les observations au dénominateur et au nombre d'observations dans chacun des groupes au numérateur. Autrement dit, nous pouvons estimer les poids approximatifs à l'avance, et s'il y a un nombre total d'utilisateurs, tant d'utilisateurs viennent de Mac, tant de Windows, tant de Linux, nous pouvons immédiatement calculer les poids et la probabilité qu'un nouvel utilisateur soit de ce système d'exploitation.

La moyenne stratifiée de notre métrique sera alors représentée par une formule très simple. Il s'agit de la valeur de la métrique dans la strate, multipliée par le poids de la strate, et nous résumons donc toutes les strates. La formule est assez évidente, je pense qu'elle n'a pas besoin d'être analysée spécifiquement.



De plus, cela peut être un peu plus compliqué. Nous allons passer quelques minutes pour analyser ces formules, mais si vous ne comprenez pas soudainement quelque chose - ne vous inquiétez pas, j'ai passé trois heures à la fois pour les analyser.

Que voyons-nous ici? La valeur moyenne d'une métrique stratifiée n'est pas différente de la valeur moyenne d'un échantillonnage aléatoire. Ce n'est pas difficile à prouver, c'est juste un solde pondéré, qui est finalement égal à la pondération à travers le groupe.

Mais la variance est un peu plus intéressante. En fait, nous connaissons également une formule très simple selon laquelle la somme des variances, la variance de deux quantités, est la somme de leurs variances, plus la covariable, si elles ne sont pas indépendantes, avec une sorte de coefficients. Et les sommes de ces variances elles-mêmes également avec un coefficient.

En fait, si vous faites attention, c'est précisément ici que ces coefficients sont présentés, c'est la probabilité d'entrer dans une strate. Par conséquent, la variance de l'ensemble stratifié est la variance dans chacune des strates avec certains poids. Et le poids est la probabilité d'entrer dans cette strate.

Jusqu'à présent, tout semble assez raisonnable. Et au final, la variance sur l'ensemble stratifié sera égale à cette formule. Peu importe si vous ne comprenez pas pourquoi maintenant. L'essentiel est de se souvenir.



Parlons maintenant de la moyenne et de la variance pour l'échantillonnage aléatoire. Le SRS est un échantillonnage aléatoire simple, c'est-à-dire un échantillonnage aléatoire.

Comme vous pouvez le deviner, la valeur moyenne de l'échantillonnage aléatoire est égale à la moyenne. Ici, surtout, je pense, il n'est pas nécessaire d'aller au fond de quelque chose. Mais la variance de l'échantillonnage aléatoire, si vous regardez la formule classique, est très claire. C'est σ 2 fois un divisé par n. Si nous rappelons la formule d'erreur standard, alors ceci est σ divisé par la racine de n. Il s'agit de la variance de la moyenne.

Mais je veux le décomposer en ses composants.



Donc, si nous le décomposons en ses composants, en regardant une simple série des calculs suivants, nous verrons (vous devez me croire, nous ne passerons pas par toutes ces lignes, mais ici elles ne sont pas très compliquées) qu'il se compose de deux membres.



Rappelez-vous celui-ci. C'est la variance en cas de stratification, croyez-moi.



Si nous prêtons attention à la composition de la variance de l'échantillonnage aléatoire, elle se compose de deux membres: le premier, qui est égal à la variance du stratifié, et le second.

Dans quel but? Si vous y réfléchissez brièvement, la variance de l'échantillonnage aléatoire peut être représentée comme la somme de la variance au sein du groupe stratifié et entre les groupes stratifiés. Il y a n groupes, il y a une dispersion de a au sein du groupe, b est la dispersion entre les groupes. Si quelqu'un se souvient, c'est à peu près la même chose que l'analyse. Il y a dispersion au sein du groupe et dispersion entre les groupes. Est logique.

Il s'avère que la dispersion de l'échantillonnage aléatoire dans le meilleur des cas peut être soit égale à la variance de stratifié, soit plus. Pourquoi? Parce que si ce terme est égal à zéro (et il ne peut pas être inférieur à zéro en raison du fait qu'il y a un carré et que la probabilité ne peut pas être négative), alors il y a clairement quelque chose de supérieur ou égal à zéro. Ici, c'est égal à ce que vous avez vu en stratification. Il s'avère que nous gagnons, réduisons l'écart, du moins pour ce membre.



C'est la même chose que ce que j'ai dit maintenant, alors sautons-le. Mais vous aurez probablement intérêt à comprendre ce dont j'ai parlé. Soit dit en passant, au bas de chaque diapositive se trouve le nom de l'article dont cette formule est tirée. Trois articles ont participé à cette présentation, alors vous pouvez lire * .

Nous avons lu un article, parlé quelque chose, mais ce n'est pas très intéressant. Il est intéressant de voir comment quelque chose fonctionne dans la vraie vie. À propos de cela - la diapositive suivante.



J'ai pris les données, j'ai commencé à regarder comment cela fonctionne dans la vraie vie. Dans la vraie vie, ma variance a chuté de près d'un pour cent.

On soupçonne que la croissance est si faible simplement parce que nous avons beaucoup de données et généralement pas une très grande dispersion entre les strates. Ils sont déjà lissés et assez représentatifs. Mais il semble que si les données ne sont pas suffisantes, ou s'il y a une sorte de violation dans l'échantillon, ou si elles ne sont pas entièrement aléatoires (ce qui, incidemment, se produit très souvent), alors l'augmentation peut être plus importante.

Et cette méthode est très simple à mettre en œuvre. Faites attention, rien de compliqué. C'est-à-dire que vous échantillonnez dans chaque strate une quantité proportionnelle à la probabilité d'entrer dans cette strate sur l'ensemble de l'échantillon. Tout est assez raisonnable.

Passons à la deuxième partie. Coupé. Je ne sais pas exactement comment prononcer correctement, en fait ce sont des covariables, nous utilisons des données expérimentales.



Le point est également très simple. Nous prenons une variable aléatoire X indépendante de Y dans le sens où il n'y a pas d'effet expérimental sur la variable X.

Comment y parvenir? Le moyen le plus simple est de prendre la variable X, qui a été obtenue avant le début de l'expérience. Nous pouvons alors être sûrs que l'expérience ne l'a pas affecté.

Plus loin. Nous pouvons introduire une nouvelle métrique que nous voulons calculer comme la différence entre Y et θX. Ceci est présenté dans la formule: la nouvelle métrique, appelons-la Ycuped, est notre métrique souhaitée moins θ fois X.

C'est ce dont nous avons déjà parlé. Une formule simple qui nous permet de calculer la variance de la différence entre deux quantités. Il s'agit de la variance de la première grandeur. Puisqu'il a un coefficient d'unité, 1 2 , nous le supprimons. De plus, le coefficient de la deuxième quantité est θ2, la variance de X. Mais puisque c'est une soustraction, alors moins 2θ, la covariance entre Y et X.

S'il s'agissait de quantités indépendantes, quelle serait-elle? Zéro. La covariance entre quantités indépendantes est nulle. Il semble que si nous prenons une valeur indépendante, cela ne s'améliorera certainement pas avec nous.



Ensuite, nous devons prendre une certaine quantité dépendante, et nous avons un autre hyperparamètre, appelons-le θ. Quand pouvons-nous minimiser la variance? Lorsque θ est égal à la covariance entre Y et X divisée par la variance de X.



Je n'examinerai pas maintenant en détail pourquoi il en est ainsi, mais si vous regardez cette équation simple, vous pouvez également la déduire.



Si nous faisons cela, nous obtiendrons une transformation simple très pratique, et la variance résultante sera représentée comme la variance Y, multipliée par un moins la corrélation au carré entre la métrique Y et la métrique X. Cela semble être agréable.

Pourquoi ça marche? Nous supposons que nous avons la variance de notre métrique Y pour deux facteurs ou deux raisons. Cela est dû à une covariable X et à tout le reste. Nous pouvons le faire, non? Et nous disons: les gars, ce que nous avons dû à X, nous le supprimons, nous ne laissons que cela pour toutes les autres raisons.



À partir du graphique de la diapositive suivante, il sera clair pourquoi cela fonctionne. Avez-vous pensé à pourquoi cela fonctionne? En plus de la formule que j'ai écrite, avant cela, il y avait aussi des formules. Il s'est avéré que cela ne fonctionne pas. Au final, nous n'avons pas vu les résultats finaux, il s'avère également que cela ne fonctionne pas.

Qu'est-ce qui nous intéresse avant tout lorsque nous effectuons des tests A / B? La différence est moyenne. Dans la grande majorité des cas, nous ne regardons aucun quantile. Bien que, soit dit en passant, Uber aime beaucoup regarder les quartiles, et parfois il est très important de les regarder, les moyennes peuvent rester inchangées, les quantiles peuvent changer de façon spectaculaire, et les utilisateurs qui ont augmenté une sorte de quantile à 99% tomberont. Uber a ce temps d'attente. Ceci est la note de l'hôtesse.

Mais nous nous intéressons souvent à la différence de moyens. Et nous voulons utiliser des méthodes qui ne changent pas cette différence de moyens. Parce que si nous parlons de linéarisation, nous entrons dans un nouvel espace d'attributs. Oui, tout est cool. On peut compter un test A / B 64 fois plus vite. Oui, c'est proportionnel, mais on ne peut pas dire à quel point cette différence de moyens est vraiment comme ça.

Pour calculer la différence de moyennes et tirer une conclusion sur tout, vous devez avoir θ, qui est uniforme pour tous les groupes. Un groupe est A1, A2, B, C, etc. Ce sont des cellules de test ou des variantes de votre test A / B.

Comment choisir la métrique X? Le choix logique pour la métrique X est la même métrique Y, mais sur la période précédant la période de l'expérience. Par exemple, s'il s'agit de la durée moyenne de votre session pour l'utilisateur, vous pouvez calculer la durée moyenne de la session de l'utilisateur avant l'expérience pendant une certaine période, au cours de l'expérience, soustrayez l'une de l'autre et ne voyez que les écarts entre elles. Cela vous intéresse probablement plus.

Ici, en passant, une question intéressante se pose - sur quelle période devrions-nous prendre la métrique X? En un jour, en une semaine, en deux semaines? Il n'y a pas de réponse théorique, mais une réponse pratique montre que deux semaines est un optimum plus ou moins. En principe, il est possible de prendre et de tracer les données expérimentales sur la diminution de la dispersion et sur la convergence plus rapide du test en fonction de la durée de X.



Pourquoi ça marche? Regardez, ceci est un graphique très simple, une image très simple. Il présente les valeurs de X et Y, les valeurs de nos métriques pour l'utilisateur dans la période avant et après l'expérience.

Qu'est-ce que nous faisons? Nous sélectionnons θ. Nous pouvons également le sélectionner en utilisant la méthode des moindres carrés. Autrement dit, c'est une certaine ligne médiane, qui donne le montant minimum des soldes. Le reste est la différence entre ce qui est et ce qui est en jeu.

Ainsi, nous essayons en quelque sorte de faire la moyenne et d'obtenir toujours la valeur moyenne de la métrique. La valeur moyenne de la métrique ne change pas. Il me semble que moi-même je n'ai pas bien compris ce que je dis maintenant, et vous avez probablement dû être encore plus dur parce que je l'ai déjà vu. Essayons encore. Nous avons l'axe X et l'axe Y. Nous pouvons marquer les valeurs qui étaient avant l'expérience sur l'axe X, et les valeurs correspondantes pendant l'expérience sur l'axe Y. Autrement dit, nous obtenons un certain point dans les coordonnées XY. Nous pouvons le marquer sur le graphique.

Si aucun changement ne s'est produit, ces points coïncideront avec nous. Ce sera notre bissectrice. Parce que X est égal à Y. Mais en fait, cela ne se produira pas, d'accord? Dans certains cas, la valeur de la métrique Y sera plus grande, dans certains cas moins.

Nous voulons comprendre et obtenir exactement cette différence. Parce que tout le reste n'est pas si intéressant pour nous. Par exemple, si nous n'avons aucune différence, nous avons mené une expérience et X est égal à Y - ce qui signifie que notre expérience n'a probablement pas affecté. Si nous menons notre expérience et constatons que Y est simplement stable au-dessus de ce X partout, c'est une occasion de penser que nous avons peut-être influencé quelque chose. Si nous avons un Y stable en dessous de X, ce n'est pas très bon non plus. Très probablement, nous avons eu un effet négatif.

Il s'avère que nous essayons de tracer une certaine ligne qui décrit la relation entre X et Y, minimisant cette différence. Une régression linéaire est également effectuée. Convenez qu'il existe une régression linéaire, vous considérez, une variable indépendante et une variable dépendante. Vous souhaitez décrire le plus précisément possible.

Ceci est notre ligne, c'est notre nouvelle métrique cupée, et c'est exactement pourquoi la valeur cupée moyenne ne change pas. La valeur Ycuped ne changera pas par rapport à la valeur Y de la moyenne. Pourquoi? Parce que. Il fallait l'expliquer immédiatement. :) Au fait, l'article d'origine le dit: notez qu'il existe un lien très intéressant entre la recherche de θ et la régression. Ça y est.

Je le répète, nous voulons voir comment l'expérience elle-même a affecté le comportement des utilisateurs, combien elle a changé par rapport à celle de base. Supposons qu'elle ait toujours été réalisée et qu'il y ait deux utilisateurs: l'un a toujours eu une session de dix minutes et l'autre 100 minutes. Il y a eu quelques changements et le premier utilisateur passe encore 100 minutes et le second dispose de 12 minutes. La différence dans un cas est nulle, dans l'autre - deux. Mais simplement comparer les nombres 12 et 100 entre eux n'est probablement pas très raisonnable. Nous en voulons un autre. Nous l'appelons «normaliser». Bien sûr, cela n'est pas correct, mais néanmoins.

Passons maintenant à l'expérience.



Que voyons-nous? Ceci est une capture d'écran d'un ordinateur portable Jupyter que je n'aime pas vraiment (j'aime plus PyCharm), mais je l'ai quand même fait. La variance de la métrique en cupule et la variance de la métrique standard sont déjà présentées ici. Voyez combien ils diffèrent? Ycuped est beaucoup plus petit et les moyennes ne sont pas différentes.

Plus précisément, ils ne diffèrent pas. Quelque part à la 15e décimale, ils diffèrent probablement, mais nous supposerons qu'il s'agit d'une erreur associée à l'arrondi.

Que voyons-nous ici? La dispersion a chuté de 45%. Ce sont des données en ligne. Ce que nous avons observé dans X5, c'est que la variance diminue quatre fois. Dans X5, nous avons une sorte de comportement au sein du magasin, il peut être moyen pour le jour de la semaine, pour l'heure, pour l'heure et le jour de la semaine. Vous voyez, nous pouvons prendre des covariables de plus en plus corrélées. Il semble que le nombre conditionnel de personnes qui sont venues lundi devrait correspondre au nombre de personnes qui sont venues lundi prochain. Si nous regardons un peu plus en profondeur, alors le lundi, six heures du soir, devrait être encore plus corrélé avec le lundi, six heures du soir. Et dimanche, trois heures de l'après-midi, avec un autre dimanche, trois heures de l'après-midi.

La baisse maximale de variance que j'ai observée dans la vie réelle était de 19 fois. Quel est le plus? Pour ce faire, c'est aussi très simple, vous devez admettre que vous n'avez pas besoin de réfléchir du tout. Covariée trouvée, trouvé θ. θ, soit dit en passant, se trouve selon une formule extrêmement simple, tout a déjà été fait.



Pris, soustrait, a obtenu la métrique convertie. Sa moyenne n'a pas changé, c'est très bien. Expliquez aux entreprises dans une langue normale, pourquoi cela se produit, est possible. Vous dites que nous nous intéressons non seulement à la façon dont les utilisateurs se comportent en moyenne, mais aussi à la façon dont leur comportement a changé par rapport à la moyenne. Et c'est tout.

Dans certains cas, il peut être difficile de choisir la bonne covariable, mais ce n'est souvent pas un problème. Il est toujours possible (très rarement, quand ce n'est pas possible) de prendre la valeur de la période expérimentale précédente. Ça marche. Une réduction de 19 fois de la variance signifie que la quantité de données requises pour le test A / B diminue également de 19 fois. Autrement dit, vous pouvez ainsi obtenir votre résultat plus rapidement, ce qui augmente la sensibilité du test.

Si vous disposez déjà d'un certain nombre de tests A / B, vous pouvez exécuter ce test de la même manière rétrospective et calculer les erreurs du premier type et du second type. Vous pouvez compter les erreurs du premier type si vous effectuez un test AA. Sur une tasse, vous le dépenserez de la même manière - et de la même manière, vous pourrez évaluer à quel point votre sensibilité a augmenté.


* :
Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-Experiment Data
Improving the Sensitivity of Online Controlled Experiments: Case Studies at Netflix
How Booking.com increases the power of online experiments with CUPED

All Articles