L'expérimentation permet à des entreprises telles que DoorDash de tester de nouvelles fonctionnalités auprès d'un groupe limité d'utilisateurs afin d'en évaluer le succès. Par exemple, nous pourrions essayer d'afficher des recommandations personnalisées de restaurants sous forme de grille plutôt que sous forme de liste sur notre application. Si les données montrent que notre groupe expérimental de clients apprécie le format grille, nous pourrions étendre cette fonctionnalité à l'ensemble de notre base d'utilisateurs. Ces expériences peuvent également porter sur des aspects de l'application qui ne concernent pas les consommateurs. Par exemple, nous expérimentons différents algorithmes pour l'attribution des livraisons aux Dashers et choisissons le meilleur algorithme sur la base de nos indicateurs internes, tels que le délai de livraison (temps nécessaire pour effectuer une livraison) ou le nombre de livraisons effectuées.
Afin de tirer de ces expériences des données de la meilleure qualité possible, nous avons développé Curie, notre nouvelle plateforme d'analyse des expériences. Curie normalise les processus et les résultats de l'analyse des expériences et rend les données accessibles à toutes les parties prenantes.
Construit sur une combinaison de SQL, Kubernetes et Python pour ses principaux composants, nous avons nommé Curie d'après la célèbre scientifique Marie Curie, en hommage à ses expériences sur la radioactivité. Curie est conçue pour standardiser nos processus d'analyse d'expériences, notamment les tests A/B, les tests Switchback et l'analyse Diff-in-Diff. Cette plateforme nous aidera à prendre des décisions basées sur les résultats de l'analyse en validant la signification statistique (valeur p) et les effets du traitement sur les métriques d'intérêt.
Les défis de l'expérimentation avant Curie
Avant Curie, les data scientists de DoorDash analysaient leurs expériences dans leur environnement local à l'aide de requêtes SQL ou de scripts ad hoc. Ce processus prenait du temps et était source d'erreurs. Il manquait également de standardisation, car chacun utilisait des méthodes d'analyse différentes, ce qui pouvait affecter la qualité et la précision des résultats. En l'absence d'une plateforme centralisée, les résultats des expériences étaient dispersés sous forme de documents ou d'e-mails.
Compte tenu des différents types d'expériences que nous menons et de l'ampleur de la croissance de nos données, il était difficile de trouver un outil unique qui réponde à tous nos besoins. Nous souhaitions également exploiter des outils open source et les intégrer à nos données et à nos outils internes, y compris les ACL et les flux de travail.
Pour résoudre ces problèmes, nous avons décidé de créer notre propre plateforme d'analyse de l'expérimentation afin de bénéficier de tous les avantages de l'analyse automatisée. Nous avons conçu cette plateforme pour améliorer la précision des résultats des expériences en utilisant des méthodologies standard et scientifiquement valables proposées par notre groupe de travail sur l'expérimentation. La plateforme d'analyse fournira également un environnement centralisé pour présenter les résultats des expériences et faciliter leur partage au sein de l'entreprise. Les résultats des expériences seront précalculés et facilement accessibles, de sorte que les scientifiques des données n'auront pas à attendre la fin de longues requêtes.
Le cycle de vie de l'expérience chez DoorDash
Avant d'entrer dans les détails de Curie, commençons par comprendre comment il sera utilisé pendant le cycle de vie d'une expérience chez DoorDash. En tant que plateforme d'analyse, Curie ingère les données des expériences que nous avons menées et effectue une analyse scientifique des métriques, un processus précédemment réalisé par des scripts ad hoc, comme le montre la figure 1 ci-dessous :
La séquence suivante explique le cycle de vie d'une expérience A/B randomisée sur les utilisateurs :
- L'expérimentateur calcule la taille de l'échantillon nécessaire pour une expérience en saisissant la puissance souhaitée et l'effet minimal détectable (EMD). Dans le cas présent, la taille de l'échantillon correspondra au nombre d'utilisateurs, puisque l'expérience porte sur des utilisateurs. Dans cette étape, l'expérimentateur définit la répartition des utilisateurs entre le groupe de contrôle (les utilisateurs qui ne voient pas la nouvelle fonctionnalité) et le groupe de traitement (les utilisateurs qui sont exposés à la nouvelle fonctionnalité) sur la base d'un critère spécifique, tel que le pays ou le type d'appareil. Nous commençons par un petit nombre d'utilisateurs dans le groupe de traitement et, en fonction des résultats préliminaires de l'expérience, nous augmentons progressivement l'allocation du traitement jusqu'à ce que tous les utilisateurs fassent partie du groupe de traitement.
- L'expérimentateur établit également la configuration de l'analyse de l'expérience dans l'interface web de Curie (WebUI). Cette configuration comprend la liste des mesures qui doivent être analysées pour cette expérience.
- Lorsqu'un utilisateur ouvre l'application DoorDash, il est réparti de manière aléatoire entre la variation de contrôle et la variation de traitement sur la base du ratio d'allocation spécifié lors de la première étape.
- Cette affectation de godets ainsi que certaines informations contextuelles (que nous appelons "événements d'exposition à l'expérience") sont ensuite enregistrées dans l'entrepôt de données par notre infrastructure d'instrumentation.
- Curie effectue l'analyse en utilisant les expositions et les données métriques de l'entrepôt de données et stocke les résultats dans le magasin de données.
- Les résultats de l'analyse sont désormais disponibles sur l'interface WebUI de Curie. L'expérience se déroulera pendant un certain temps jusqu'à ce que nous atteignions la taille d'échantillon requise. L'expérimentateur peut suivre l'analyse en continu sur Curie pour confirmer que l'expérience n'a pas d'effets négatifs sur les indicateurs importants.
Les composants de Curie
Zoomons maintenant sur l'architecture de Curie. Curie est un système de bout en bout, où de multiples composants tels que l'interface Web, les travailleurs, le moteur de statistiques et les définitions de métriques fonctionnent collectivement pour analyser les expériences et renvoyer les résultats à l'utilisateur, comme le montre la figure 2 ci-dessous :
Définitions métriques
Curie offre une flexibilité maximale aux scientifiques des données, en leur permettant de définir leurs propres mesures. Les data scientists utilisent des modèles de requête SQL pour définir leurs métriques dans le référentiel Curie, comme illustré ci-dessous :
with
exposures as (
SELECT
exp.BUCKET_KEY as user_id,
MIN(exp.RESULT) as bucket,
FROM PRODUCTION.EXPERIMENT_EXPOSURE exp
WHERE exp.EXPERIMENT_NAME = {{experiment_name}}
and exp.EXPOSURE_TIME::date between {{start_date}} and {{end_date}}
AND exp.EXPERIMENT_VERSION = {{experiment_version}}
group by 1
having count(distinct exp.RESULT) = 1
order by 1
),
SELECT exposures.*,
metric1,
metric2,
FROM exposures exp
LEFT JOIN metric_table metrics
ON metrics.user_id = exp.user_id
Nous générons dynamiquement la requête à l'aide de modèles JinjaSQL en liant les paramètres SQL aux valeurs de la configuration de l'expérience. L'extrait ci-dessus représente la structure des modèles SQL utilisés pour l'analyse. Il récupère les expositions de l'expérience, c'est-à-dire le seau assigné aux utilisateurs et les métriques pour ces utilisateurs.
Comme on peut le voir dans le modèle, tous les détails de l'expérience, y compris le nom de l'expérience, la version de l'expérience et la plage de dates de l'expérience, sont paramétrés et seront remplacés par les valeurs de la configuration Curie. Le paramétrage des détails spécifiques à l'expérience dans les définitions des métriques permet aux scientifiques des données de réutiliser une seule requête SQL pour plusieurs expériences menées par leur équipe, étant donné que la plupart des équipes surveillent un ensemble similaire de métriques pour toutes leurs expériences.
We consider use of these templates as the first step in centralizing all the company's important metric definitions. There is currently an ongoing effort to standardize these metric definitions and create a metrics repository that can allow data scientists to create and edit individual metrics and reuse them across different experiments and teams.
Travailleurs de Curie
Nous disposons d'un ensemble de travailleurs, chacun composé d'un pod Kubernetes avec les contraintes de ressources nécessaires, qui exécutent l'analyse réelle pour toutes les expériences. Un travail cron est programmé pour s'exécuter tous les matins, ce qui déclenche ces travailleurs en ajoutant les tâches dans la file d'attente des travaux (comme le montre la figure 2, ci-dessus).
Lorsqu'un travailleur reçoit une tâche, il récupère dans l'entrepôt de données les expositions à l'expérience et les données métriques nécessaires à l'analyse et effectue cette dernière à l'aide de notre moteur de statistiques Python. Les résultats sont ensuite stockés dans un magasin de données PostgreSQL avec une indexation appropriée pour la visualisation dans l'interface Web Curie.
Nous offrons également aux utilisateurs la possibilité de déclencher l'analyse de l'expérience à tout moment, ce qui s'est avéré très utile car les utilisateurs ne voulaient pas attendre que le programme cron valide leurs résultats. Par exemple, s'il y avait un bug dans la requête SQL utilisée par le programme cron, l'utilisateur pourrait vouloir corriger la requête et voir les résultats immédiatement.
Moteur de statistiques Python
Nous disposons d'une bibliothèque de statistiques Python développée en interne par nos data scientists pour analyser les métriques des expériences. Cette bibliothèque analyse différents types de mesures :
- Les mesures continues, qui ont une valeur numérique continue, par exemple le délai de livraison total.
- Mesures proportionnelles avec une valeur binaire (0/1), par exemple la conversion d'un utilisateur en caisse, qui indique si un utilisateur a effectué un paiement après avoir été exposé à une expérience.
- Les mesures de ratio, qui sont un rapport entre deux mesures continues différentes, par exemple le nombre de tickets d'assistance par livraison, où le numérateur est le nombre de tickets et le dénominateur est le nombre de livraisons.
Based on different factors, including metric type and sample size, the library applies different methodologies, such as linear model, bootstrapping, and delta method to compute the p-value and standard error. Clustering is very common in DoorDash's experiments. For example, all deliveries from a particular store form a cluster. We use multiple methods to adjust the standard error to avoid false positives due to data clustering, such as the Cluster Robust Standard Error (CRSE) method in linear model, delta method, and cluster bootstrapping. We selectively apply variance reduction methods to reduce the noise in the results and improve the power of the experiments. The library also runs imbalance tests to statistically detect imbalance in the bucket sizes for A/B tests.
Explorer l'interface web de Curie
L'interface utilisateur de Curie, construite sur React, est utilisée pour mettre en place la configuration de l'analyse des expériences et visualiser les résultats de l'analyse. Cette interface est soutenue par un service gRPC et une couche BFF (Backend-For-Frontend) pour interagir avec le magasin de données.
Conclusion
An experiment analysis platform is very important for automation and faster iteration on new features. It acts as the data scientist's best friend, analyzing the experiments for them so they can focus their efforts and time on other crucial aspects of experimentation. DoorDash data scientists are adopting Curie to improve their experimental velocity and more quickly determining which new features best serve our customers. Currently, we are working on converting this MVP into a more stable platform with features such as standard metrics, results visualization, and advanced statistical methodologies.
Nous pensons que notre plateforme utilise une architecture et des technologies modernes qui la rendent très utile pour nos scientifiques des données et extensible pour l'avenir. Curie peut servir d'exemple à d'autres entreprises qui mettent en place une pratique d'expérimentation pour améliorer leurs propres applications et offres.
Remerciements
Nous remercions Yixin Tang et Caixia Huang pour leurs contributions à cette plateforme, ainsi que Sudhir Tonse, Brian Lu, Ezra Berger et Wayne Cunningham pour leurs commentaires constants sur cet article.