UX Analytics & A/B Testing

Overview

Correlation & Anova

Demo : https://github.com/MarvinEdorh/Data-Mining/blob/main/Correlation%20%26%20Anova.py

Lorsque l'on effectue une analyse en ux analytics et que l'on souhaite savoir si des variables ont un lien les unes avec les autres, plusieurs tests statistiques peuvent permettre d'analyser cette question. Le test de corrélation est un test statistique qui permet de savoir quel est le degré de relation linéaire entre 2 variables numériques. Il calcule un coefficient de corrélation pouvant aller de -1 à 1. Plus ce coefficient est proche de 1 en valeur absolue plus il y a une forte relation de proportionnalité (positif ou négatif) entre ces 2 variables et donc cela signifie que ces variables sont liées entre elles. Plus ce coefficient est proche de 0, moins ces variables sont liées entre elles.

Également dans le cadre d'un A/B testing on peut être amené à comparer le nombre moyen de conversions sur plusieurs effectifs. Mais comment savoir si ces effectifs sont significatifs? L'analyse de variance (anova) nous permet justement de savoir si les effectifs sont suffisamment importants pour conclure à une significativité des résultats. En statistique on pose l'hypothèse nulle (H0) estimant d'une égalité entre les groupes. Si cette hypothèse est vraie alors la différence de moyenne est due à un échantillon trop faible puisque chaque effectif provient de la même distribution et en augmentant la taille de l'échantillon les moyennes devraient tendre vers une même valeur. En revanche si l'hypothèse nulle est fausse alors même en augmentant la taille de l'échantillon on ne pourrait pas faire disparaitre les différences entre les moyennes puisque les effectifs viendraient de 2 distributions distinctes. Le test calcule la probabilité (p-valeur) d'observer ces résultats sous H0 et si celle-ci est très petite (souvent inférieure au seuil de 0,05) alors on rejette H0. On se tourne alors vers l'hypothèse alternative (H1), que nos effectifs proviennent de 2 distributions significativement différentes et on conclut alors à une différence significative entre les moyennes. En revanche si la p-valeur est supérieure à 5% alors on ne peut pas rejeter H0.

Chi-2 & Logistic Regression

Demo : https://github.com/MarvinEdorh/Data-Mining/blob/main/Chi-2%20%26%20Logistic%20Regression.py

En A/B testing, lorsqu'on souhaite maintenant savoir s'il y a un lien entre 2 variables catégorielles, par exemple la mise à jour d'une page et le fait d'effectuer une conversion, on peut utiliser le test statistique du chi-2 afin d'analyser la significativité des résultats. Le test du chi-2 est un test statistique qui comme le test de corrélation permet de savoir si des variables sont liées entre elles mais cette fois pour 2 variables catégorielles. Ici la première variable sera le type de page vue (originale, A ou B) et la seconde, le fait d'effectuer une conversion (oui ou non). Comme tout test statistique, le test du chi-2 pose H0 estimant d'une égalité entre les groupes, c'est à dire ici qu'il y aurait en proportion autant de conversions effectuées parmi les personnes qui ont vu la page originale que parmi celles qui ont vu la page A et celles qui ont vu la page B, et l'hypothèse alternative H1 estimant d'une différence significative entre les groupes. Si la p-valeur calculée par le test sous H0 est inférieure à 5% alors on rejette H0 et on se tourne vers H1 pour en conclure qu'il y a bien un lien significatif entre les variables, le type de page vue et le fait d'effectuer une conversion.

Si à la suite du test du chi-2 on conclut à un lien significatif entre les 2 variables et que la variable dépendante est dichotomique (2 modalités) alors il est pertinent d'effectuer un modèle de régression logistique binomiale afin de mesurer l'impact de la variable explicative sur la variable dépendante. Ici on modélise le fait d'effectuer une conversion (variable dépendante) en fonction du type de page vue (variable explicative). Le modèle de régression logistique calcule la probabilité qu'un individu a de prendre la première modalité de la variable dépendante connaissant ses modalités de variables explicatives par rapport au profil de référence. Généralement on prend comme profil de référence les modalités des variables explicatives qui ont le plus fort effectif mais ici dans le cadre d'un A/B testing le profil de référence sera le fait d'avoir vu la page originale. On pourra ainsi mesurer de combien fait évoluer les chances d'effectuer une transaction le fait d'avoir vu la page A ou B par rapport au fait d'avoir vu la page originale.

Également si on veut aussi modéliser une variable numérique en fonction de variables catégorielles on peut utiliser le modèle linéaire généralisé qui comme la régression logistique calcule l'impact des modalités des variables explicatives sur la variable dépendante par rapport au profil de référence. On peut par exemple pour un site de e-commerce analyser le montant des transactions en fonction des versions du site et voir de combien fait évoluer ce montant le fait d'avoir vu la page A ou B par rapport au fait d'avoir vu la page originale.

Factor Analyzes & Clustering

Demo : https://github.com/MarvinEdorh/Data-Mining/blob/main/Clustering%20K-Means.py

En marketing digital il est assez important de bien connaître ses consommateurs, la façon dont ils se comportent afin de bien les segmenter et ainsi de pouvoir diriger des actions marketing ciblées. Le modèle de machine learning de clustering k-means peut justement aider à effectuer une segmentation optimale car il permet de découper une population de manière à ce que les groupes constitués soient à la fois en intra les plus homogènes possible et en extra les plus différents les un des autres. Dans un contexte e-commerce on peut par exemple segmenter les transactions afin de mieux comprendre le comportement des acheteurs sur le site. On va donc créer un jeu de données provenant des données Google Analytics requêtées dans BigQuery, indiquant pour chaque achat le device et son os, la source de traffic et de campagne de l'acheteur, son pays, les produits et catégories produits qu'il a achetés, le nombre de visites que l'acheteur a effectuées sur les produits et catégories produits achetés, et enfin le CA.

L'inconvénient du modelé K-Means est que l'on ne sait pas à priori quel est le nombre optimal de groupes (clusters) il faut choisir pour que le population soit séparée de manière à ce que les clusters constitués soient à la fois le plus homogènes possible et différents les uns des autres. On utilise pour cela la courbe d'elbow en testant une décomposition de 1 à 10 groupes.

Figure 2021-08-20 201348

Le nombre optimal de clusters qu'il faut choisir afin que la population soit découpée de la meilleure des manières est celui du point des abscisses où la courbe marque une cassure et devient linéaire. On voit ici que la meilleure des manières de segmenter nos acheteurs est de les séparer en 3 ou 4 groupes. On verra que ce qui caractérise le plus les clusters constitués est le niveau de CA par transaction. On renvoie ainsi ces résultats vers Google Cloud pour une analyse plus en détail de ce qui différencie ces différents clusters sur un outil BI : https://datastudio.google.com/s/hRcohz4T4DI.

Ce modèle peut également être utiliser de manière prédictive afin d'assigner de nouveaux individus aux goupes dejà existant : https://github.com/MarvinEdorh/Machine-Learning/blob/main/README.md

Kaplan Meier Survival

Demo : https://github.com/MarvinEdorh/Data-Mining/blob/main/Kaplan%20Meier%20Survival.py

Lorsqu'on effectue un A/B testing on peut également être amener à analyser la performance du site en termes de durée. Quelle version permet de gêner une conversion le plus rapidement ? Pour cela il peut être pertinent d'effectuer une analyse de survie de Kaplan Meier. Souvent utilisée en médecine et en finance cette analyse permet de calculer la probabilité qu'un évènement a de ne pas se produire (le décès) à un instant t. C'est la raison pour laquelle elle se nomme analyse de "survie", la fonction S(t) donne la probabilité d'être en vie à l'instant t. Pendant la durée complète de l'analyse on observe des individus pour qui après une certaine durée, soit l'évènement est intervenu (ils sont décédés) soit on a arrêté de les observer (ils sont censurés).

Dans un contexte ux, on peut symboliser le décès par le fait d'effectuer une conversion. Sur un site de e-commerce on va par exemple générer un jeu de données provenant des données Google Analytics requêtées dans BigQuery indiquant pour chaque visiteur la durée entre sa première visite et son premier achat (le décès) s'il en a effectué, et la durée entre sa première et sa dernière visite s'il n'en a pas effectué (la censure). On indique également le device sur lequel il a effectué la transaction ou sa dernière visite s'il n'en a pas effectué afin de voir quelle version du site est la plus performante.

KMF

On voit ici la survie globale, indépendamment des versions du site, qui signifie ici la probabilité de n'avoir effectué aucun achat x jours après sa première visite (99% le premier jour, 58% après 1 an (le site n'est pas très efficace)). Mais l'intérêt de l'analyse est bien de segmenter les individus afin de voir dans quelle situation la survie est la meilleure ou la moins bonne suivant le contexte de l'étude.

KMF_Device

On regarde maintenant la survie en fonction du device et on constate que la survie la moins bonne est celle de la version du site sur desktop, ce qui signifie que l'on y décède plus rapidement. Dans un contexte de santé cela serait négatif mais ici dans notre contexte e-commerce cela signifie en fait que la version du site sur desktop est la plus performante en termes de durée pour gêner une conversion. La probabilité de n'avoir effectué aucun achat 200 jours après sa première visite est de 95% sur mobile et tablet et de 75% sur desktop (plus faible mais tout de même élevé). Afin de savoir si ces résultats sont significatifs on effectue le test statistique du log rank qui pose H0 et H1, et conclut à une significativité des résultats si la p-valeur calculée sous H0 est inférieure à 5%. On peut également à l'aide du modèle de cox calculer l'impact des différents segments sur le risque absolu de décès.

KMF_2 Également si l'on souhaite maintenant non plus analyser la rapidité d'une conversion mais la durée de rétention, on ne calcule plus la durée entre la première visite et le premier achat mais avec le dernier. On voit que l'analyse de survie en termes de rétention vient corroborer la constatation de l'inefficacité du site. La probabilité qu'un individu continue d'acheter sur le site un an après sa première visite est de 48%.

KMF_Device_2

Si on analyse maintenant la survie en fonction du device, on voit que c'est la version sur tablet qui a la meilleure rétention. La probabilité qu'un individu continue d'acheter un an après sa première visite est de 95% sur tablet et de 40% sur desktop. Ce résultat peut néanmoins comporter un biais car on voit que nos fonctions de conversion de rétention sont assez similaires, cela peut en fait signifier que la plupart des individus n'ont en fait réalisé qu'une seule transaction et que ceux qui l'ont fait sur tablet l'ont fait tardivement. Pour mieux analyser la rétention il faudrait ajouter aux individus censurés ceux qui n'ont effectué qu'un seul achat.

Owner
Marvin EDORH
Marvin EDORH
Public repo for automation scripts

Script_Quickies Public repo for automation scripts Dependencies Chrome webdriver .exe (make sure it matches the version of chrome you are using) Selen

CHR-onicles 1 Nov 04, 2021
tidevice can be used to communicate with iPhone device

tidevice can be used to communicate with iPhone device

Alibaba 1.8k Jan 08, 2023
Minimal example of how to use pytest with automated 'devops' style automated test runs

Pytest python example with automated testing This is a minimal viable example of pytest with an automated run of tests for every push/merge into the m

Karma Computing 2 Jan 02, 2022
Python dilinin Selenium kütüphanesini kullanarak; Amazon, LinkedIn ve ÇiçekSepeti üzerinde test işlemleri yaptığımız bir case study reposudur.

Python dilinin Selenium kütüphanesini kullanarak; Amazon, LinkedIn ve ÇiçekSepeti üzerinde test işlemleri yaptığımız bir case study reposudur. LinkedI

Furkan Gulsen 8 Nov 01, 2022
show python coverage information directly in emacs

show python coverage information directly in emacs

wouter bolsterlee 30 Oct 26, 2022
A browser automation framework and ecosystem.

Selenium Selenium is an umbrella project encapsulating a variety of tools and libraries enabling web browser automation. Selenium specifically provide

Selenium 25.5k Jan 01, 2023
Show surprise when tests are passing

pytest-pikachu pytest-pikachu prints ascii art of Surprised Pikachu when all tests pass. Installation $ pip install pytest-pikachu Usage Pass the --p

Charlie Hornsby 13 Apr 15, 2022
Auto-hms-action - Automation of NU Health Management System

🦾 Automation of NU Health Management System 🤖 長崎大学 健康管理システムの自動化 🏯 Usage / 使い方

k5-mot 3 Mar 04, 2022
This is a bot that can type without any assistance and have incredible speed.

BulldozerType This is a bot that can type without any assistance and have incredible speed. This bot currently only works on the site https://onlinety

1 Jan 03, 2022
WomboAI Art Generator

WomboAI Art Generator Automate AI art generation using wombot.art. Also integrated into SnailBot for you to try out. Setup Install Python Go to the py

nbee 7 Dec 03, 2022
catsim - Computerized Adaptive Testing Simulator

catsim - Computerized Adaptive Testing Simulator Quick start catsim is a computerized adaptive testing simulator written in Python 3.4 (with modificat

Nguyễn Văn Anh Tuấn 1 Nov 29, 2021
One-stop solution for HTTP(S) testing.

HttpRunner HttpRunner is a simple & elegant, yet powerful HTTP(S) testing framework. Enjoy! ✨ 🚀 ✨ Design Philosophy Convention over configuration ROI

HttpRunner 3.5k Jan 04, 2023
Multi-asset backtesting framework. An intuitive API lets analysts try out their strategies right away

Multi-asset backtesting framework. An intuitive API lets analysts try out their strategies right away. Fast execution of profit-take/loss-cut orders is built-in. Seamless with Pandas.

Epymetheus 39 Jan 06, 2023
Minimal example of getting Django + PyTest running on GitHub Actions

Minimal Django + Pytest + GitHub Actions example This minimal example shows you how you can runs pytest on your Django app on every commit using GitHu

Matt Segal 5 Sep 19, 2022
Local continuous test runner with pytest and watchdog.

pytest-watch -- Continuous pytest runner pytest-watch a zero-config CLI tool that runs pytest, and re-runs it when a file in your project changes. It

Joe Esposito 675 Dec 23, 2022
DUCKSPLOIT - Windows Hacking FrameWork using Reverse Shell

Ducksploit Install Ducksploit Hacker setup raspberry pico Download https://githu

2 Jan 31, 2022
Hypothesis is a powerful, flexible, and easy to use library for property-based testing.

Hypothesis Hypothesis is a family of testing libraries which let you write tests parametrized by a source of examples. A Hypothesis implementation the

Hypothesis 6.4k Jan 05, 2023
Set your Dynaconf environment to testing when running pytest

pytest-dynaconf Set your Dynaconf environment to testing when running pytest. Installation You can install "pytest-dynaconf" via pip from PyPI: $ pip

David Baumgold 3 Mar 11, 2022
자동 건강상태 자가진단 메크로 서버전용

Auto-Self-Diagnosis-for-server 자동 자가진단 메크로 서버전용 이 프로그램은 SaidBySolo님의 auto-self-diagnosis를 참고하여 제작하였습니다. 개인 사용 목적으로 제작하였기 때문에 추후 업데이트는 진행하지 않습니다. 의존성 G

JJooni 3 Dec 04, 2021
Flexible test automation for Python

Nox - Flexible test automation for Python nox is a command-line tool that automates testing in multiple Python environments, similar to tox. Unlike to

Stargirl Flowers 941 Jan 03, 2023