jeudi 25 août 2016

A/B testing: différents outils, différents résultats?

Introduction

En tant que Data Scientist dans une entreprise fournissant un logiciel d'A/B testing je suis souvent confronté à la question suivante : "j'ai deux outils d'analyse qui me donnent des indices statistiques différents, est-ce normal ?"
La réponse est OUI, et je vais essayer de vous faire comprendre pourquoi. Et surtout, Je vais essayer de vous aider à répondre à LA vraie question : "Comment décider si une variation est vraiment meilleure qu'une autre ?"

Commençons par un exemple

Voici les données d'un test A/B :

VariationVisiteursClics
A102991439
B105051495

Ce qui donne un taux de clic (Click Thru Rate ou CTR) de 13.97% pour A et 14.23% pour B. Très naïvement on pourrait dire que B à un meilleur taux de clic et donc est la meilleure variation. Mais il faut tenir compte du fait que ces mesures sont incertaines car incomplètes. Il faudrait avoir un nombre infini de visiteurs pour espérer avoir une mesure de CTR avec une précision absolue. Comme cela n'est pas réalisable en pratique, on utilise des indices statistiques pour nous aider a représenter cette imprécision, et faire un pari avisé sur la vrai variation gagnante.

Et c'est là que ça se complique ...

Ces indices statistiques, ou indices de confiance, sont utilisés par des gens de marketing qui n'ont pas forcément les bases pour les appréhender (leur compétences sont plus dans la connaissance de leur marché et de leurs clients). De plus cela se fait dans un contexte commercial : toutes les solutions d'A/B testing essayent de vendre leur solution, c'est bien normal. Il est plus aisé pour un commercial de conforter une vision approximative du client tant que celle-ci est en accord avec la solution qu'il cherche à vendre. Ainsi les fausses idées perdurent...
La vrai bonne manière de faire serait plutôt d'essayer d'éduquer le client pour qu'il comprenne (au moins pour le coté fonctionnel) quelques bases de statistique... Mais bon, éduquer c'est le rôle d'un prof' (chiant) pas d'un commercial (qui est plus dans l'objectif de "séduire/convaincre").

En tant qu'ancien prof' j'aimerai bien éduquer un peu, tout en essayant d'être le plus impartial possible. Donc mon objectif n'est pas de vous convaincre que notre manière de faire est la meilleure, mais de faire comprendre pourquoi des outils peuvent donner des résultats différents sans forcément être faux...

Différents outils => différents résultats ?

Reprenons les données de l'exemple précédent et mettons les dans différents outils disponible en ligne.

Pour http://www.splittestcalculator.com, l'indice de confiance est à environ 42%


Mais pour cet autre outil (de la solution KissMetric): http://getdatadriven.com/ab-significance-test, l'indice est à 70%.

 
Pour Visual Website Optimizer (VWO) : https://vwo.com/ab-split-test-significance-calculator/, l'indice est à "0.296"... Il s'agit d'une "pValue" qui estime la probabilité d'avoir ces données même si les deux variations A & B sont les mêmes... Il faut donc le "traduire" pour qu'il corresponde aux indices précédents : confiance = (1-0.296)*100 soit 70.4%.
 

Ainsi les 2 derniers outils semblent s'accorder mais donnent un résultat différent du premier. Qui croire ?
Bien sûr ces différences s'expliquent car il s'agit de méthodes de calcul différentes. Naturellement on est en droit de s'attendre à ce qu'elles s'accordent, au moins globalement, ce qui n'est malheureusement pas le cas...

Quel est le fond du problème ?

En fait tout le monde a raison et tort à la fois. Le fond du problème est de vouloir résumer la prise de risque à un seul chiffre. C'est le contexte commercial qui a amené la plupart des outils à fournir un seul chiffre, pour donner une apparence de simplicité. Ce n'est cependant pas une bonne manière de faire.
Pour comprendre intuitivement ce problème, imaginons le pari suivant :
  • Prendriez vous un pari avec un indice de confiance qui dit que vous allez gagner à 97% de chances ?
Naturellement, votre réponse sera une autre question : "qu'est ce qui est en jeu ?" Si on vous dit que l'enjeu c'est de payer sa tournée au bar en cas de perte et de se faire offrir à boire toute la soirée en cas de victoire, là vous direz "oui, je prend le pari". Si on vous dit que c'est la chance de gagner 1M€ ou de mourir, là non vraisemblablement vous ne prendrez pas le pari.

Pour mesurer finement une notion de confiance on doit gérer deux concepts de nature différente :
  • la probabilité qu'il ait ou non une différence
  • l'importance de cette différence (et son impact)
Typiquement, si le risque est faible mais l'importance de la différence est importante, on ne peut pas combiner ces deux informations sans perdre en précision.

Implicitement, selon les formules choisies pour calculer ces indices de confiance, on aura des résultats numérique différents selon que l'importance est donné à la probabilité de la différence, à sa taille, ou à un mélange des deux.

L'approche bayésienne va mixer les deux concepts et donner un indice "fort". Dans notre exemple d'A/B test l'indice de confiance est à ~70% car il y a un gain potentiel non négligeable (voir + bas), mais avec une probabilité assez faible.

À l'inverse l'approche fréquentiste (le test du Chi² par exemple) ne s'intéresse pas à la taille de la différence mais sur tout à sa probabilité d'existence. Il donne alors un indice bien plus bas ~42% car la probabilité d'existence de la différence est faible.

L'un et l'autre ont raison et tord à la fois.

C'est seulement quand les situations sont très tranchées que la plupart des indices s'accordent :
  • probabilité forte d'existence d'une différence, et taille importante => indice de confiance fort (quelques soit la méthode de calcul)
  • probabilité faible d'existence d'une différence, et taille faible => indice de confiance faible (quelques soit la méthode de calcul)
Mais dans la réalité les situation sont rarement aussi simples

C'est quoi la solution alors ?

La solution est simplement d'accepter de considérer plusieurs chiffres pour comprendre finement une situation.

Vouloir à tout prix se contenter d'une seule information pour qualifier la différence entre deux variations vous force à avoir une vue partielle.
C'est comme voir cette (fausse) image pour illustrer "Usain Bolt a gagné la course" :

Cela revient à ne donner qu'une information, un seul chiffe: son classement.

Alors que la vrai image (et donc l'information complète) est ceci :

Là on comprend mieux la réalité : "Usain Bolt à gagné la course avec une énorme marge".

Si on reprend les données du test A/B, on peut se faire une idée bien plus précise de la réalité en s'intéressant aux valeurs possibles du gain de CTR qu'on aurait en passant de la variation A à la B.


Ces deux chiffres : [-4.8% ; 8.85%] vont nous permettre de comprendre finement la situation.

Il s'agit de l'intervalle de confiance (à 95%) du gain. Cela s'interprète comme suit : "la vraie mesure du pourcentage d'amélioration a 95% de chance de se situer entre -4.8% et 8.85%" on comprend donc qu'il y a un risque important puisque cet intervalle est encore passablement négatif, mais il y a quand même une (petite) chance que le gain soit conséquent (>8%.)
On comprend alors en un coup d'œil la complexité de la situation.

Typiquement, le conseil que je donnerai pour ce test, est d'attendre d'avoir encore plus de données pour que cet intervalle de confiance se réduise. Dès que la borne de gauche devient positive, le risque devient alors quasi nul, à ce moment là on aura aussi une vision plus précise du gain maximum (borne de droite).

Voici l'analyse complète proposé par l'outil AB Tasty : https://fr.abtasty.com/ d'où a été extrait l'intervalle de confiance du gain ci-dessus.

A/B testing: différents outils, différents résultats?

Introduction

En tant que Data Scientist dans une entreprise fournissant un logiciel d'A/B testing je suis souvent confronté à la question suivante : "j'ai deux outils d'analyse qui me donnent des indices statistiques différents, est-ce normal ?"
La réponse est OUI, et je vais essayer de vous faire comprendre pourquoi. Et surtout, Je vais essayer de vous aider à répondre à LA vraie question : "Comment décider si une variation est vraiment meilleure qu'une autre ?"

Commençons par un exemple

Voici les données d'un test A/B :

VariationVisiteursClics
A102991439
B105051495

Ce qui donne un taux de clic (Click Thru Rate ou CTR) de 13.97% pour A et 14.23% pour B. Très naïvement on pourrait dire que B à un meilleur taux de clic et donc est la meilleure variation. Mais il faut tenir compte du fait que ces mesures sont incertaines car incomplètes. Il faudrait avoir un nombre infini de visiteurs pour espérer avoir une mesure de CTR avec une précision absolue. Comme cela n'est pas réalisable en pratique, on utilise des indices statistiques pour nous aider a représenter cette imprécision, et faire un pari avisé sur la vrai variation gagnante.

Et c'est là que ça se complique ...

Ces indices statistiques, ou indices de confiance, sont utilisés par des gens de marketing qui n'ont pas forcément les bases pour les appréhender (leur compétences sont plus dans la connaissance de leur marché et de leurs clients). De plus cela se fait dans un contexte commercial : toutes les solutions d'A/B testing essayent de vendre leur solution, c'est bien normal. Il est plus aisé pour un commercial de conforter une vision approximative du client tant que celle-ci est en accord avec la solution qu'il cherche à vendre. Ainsi les fausses idées perdurent...
La vrai bonne manière de faire serait plutôt d'essayer d'éduquer le client pour qu'il comprenne (au moins pour le coté fonctionnel) quelques bases de statistique... Mais bon, éduquer c'est le rôle d'un prof' (chiant) pas d'un commercial (qui est plus dans l'objectif de "séduire/convaincre").

En tant qu'ancien prof' j'aimerai bien éduquer un peu, tout en essayant d'être le plus impartial possible. Donc mon objectif n'est pas de vous convaincre que notre manière de faire est la meilleure, mais de faire comprendre pourquoi des outils peuvent donner des résultats différents sans forcément être faux...

Différents outils => différents résultats ?

Reprenons les données de l'exemple précédent et mettons les dans différents outils disponible en ligne.

Pour http://www.splittestcalculator.com, l'indice de confiance est à ~42%


Mais pour cet autre outil (de la solution KissMetric): http://getdatadriven.com/ab-significance-test, l'indice est à 70%.

 
Pour Visual Website Optimizer (VWO) : https://vwo.com/ab-split-test-significance-calculator/, l'indice est à "0.296"... Il s'agit d'une "pValue" qui estime la probabilité d'avoir ces données même si les deux variations A & B sont les mêmes... Il faut donc le "traduire" pour qu'il corresponde aux indices précédents : confiance = (1-0.296)*100 soit 70.4%.
 

Ainsi les 2 derniers outils semblent s'accorder mais donnent un résultat différent du premier. Qui croire ?
Bien sûr ces différences s'expliquent car il s'agit de méthodes de calcul différentes. Naturellement on est en droit de s'attendre à ce qu'elles s'accordent, au moins globalement, ce qui n'est malheureusement pas le cas...

Quel est le fond du problème ?

En fait tout le monde a raison et tord à la fois. Le fond du problème est de vouloir résumer la prise de risque a un seul chiffre. C'est le contexte commercial qui a amener la plupart des outils à fournir un seul chiffre, pour donner une apparence de simplicité. Ce n'est cependant pas une bonne manière de faire.
Pour comprendre intuitivement ce problème, imaginons le pari suivant :
  • Prendriez vous un pari avec un indice de confiance qui dit que vous allez gagner à 97% de chances ?
Naturellement, votre réponse sera une autre question : "qu'est ce qui est en jeu ?" Si on vous dit que l'enjeu c'est de payer sa tournée au bar en cas de perte et de se faire offrir à boire toute la soirée en cas de victoire, là vous direz "oui, je prend le pari". Si on vous dit que c'est la chance de gagner 1M€ ou de mourir, là non vraisemblablement vous ne prendrez pas le pari.

Pour mesurer finement une notion de confiance on doit gérer deux concepts de nature différente :
  • la probabilité qu'il ait ou non une différence
  • l'importance de cette différence (et son impact)
Typiquement, si le risque est faible mais l'importance de la différence est importante, on ne peut pas combiner ces deux informations sans perdre en précision.

Implicitement, selon les formules choisies pour calculer ces indices de confiance, on aura des résultats numérique différents selon que l'importance est donné à la probabilité de la différence, à sa taille, ou à un mélange des deux.

L'approche bayésienne va mixer les deux concepts et donner un indice "fort". Dans notre exemple d'A/B test l'indice de confiance est à ~70% car il y a un gain potentiel non négligeable (voir + bas), mais avec une probabilité assez faible.

À l'inverse l'approche fréquentiste (le test du Chi² par exemple) ne s'intéresse pas à la taille de la différence mais sur tout à sa probabilité d'existence. Il donne alors un indice bien plus bas ~42% car la probabilité d'existence de la différence est faible.

L'un et l'autre ont raison et tord à la fois.

C'est seulement dans les situations sont très tranchées que la plupart des indices s'accordent :
  • probabilité forte d'existence d'une différence, et taille importante => indice de confiance fort (quelques soit la méthode de calcul)
  • probabilité faible d'existence d'une différence, et taille faible => indice de confiance faible (quelques soit la méthode de calcul)
Mais dans la réalité les situation sont rarement aussi simples

C'est quoi la solution alors ?

La solution est simplement d'accepter de considérer plusieurs chiffres pour comprendre finement une situation.

Vouloir à tout prix se contenter d'une seule information pour qualifier la différence entre deux variations vous force à avoir une vue partielle.
C'est comme voir cette (fausse) image pour illustrer "Usain Bolt a gagné la course" :

Cela revient à ne donner qu'une information, un seul chiffe: son classement.

Alors que la vrai image (et donc l'information complète) est ceci :

Là on comprend mieux la réalité : "Usain Bolt à gagné la course avec une énorme marge".

Si on reprend les données du test A/B, on peut se faire une idée bien plus précise de la réalité en s'intéressant aux valeurs possibles du gain de CTR qu'on aurait en passant de la variation A à la B.


Ces deux chiffres : [-4.8% ; 8.85%] vont nous permettre de comprendre finement la situation.

Il s'agit de l'intervalle de confiance (à 95%) du gain. Cela s'interprète comme suit : "la vraie mesure du pourcentage d'amélioration a 95% de chance de se situer entre -4.8% et 8.85%" on comprend donc qu'il y a un risque important puisque cet intervalle est encore passablement négatif, mais il y a quand même une (petite) chance que le gain soit conséquent (>8%.)
On comprend alors en un coup d'œil la complexité de la situation.

Typiquement, le conseil que je donnerai pour ce test, est d'attendre d'avoir encore plus de données pour que cet intervalle de confiance se réduise. Dès que la borne de gauche devient positive, le risque devient alors quasi nul, à ce moment là on aura aussi une vision plus précise du gain maximum (borne de droite).

Voici l'analyse complète proposé par l'outil AB Tasty : https://fr.abtasty.com/ d'où a été extrait l'intervalle de confiance du gain ci-dessus.

lundi 13 juin 2016

Retours sur "Que Du Web"


J'ai été invité à la conférence "Que Du Web", voici ce que j'y ai appris ...

Tout d'abord je tiens à préciser que je n'y connais pas grand chose en SEO (Search Engine Optimisation). Beaucoup de sujets étaient dans cette thématique j'ai donc beaucoup appris. Pour tout dire j'ai même été sidéré par certaines pratiques (qui sont pourtant certainement très courantes.)

En comparaison, les pratiques de CRO ("Conversion Rate Optimisation", sujet que je connais mieux) on est des anges ;) ...

J'ai d'ailleurs été assez étonné de voir que le sujet de l'optimisation des conversions est très peu évoqué, apparemment pour certaines personnes le volume du trafic semble être le graal. Il y a encore du travail d'"évangélisation" sur le sujet...

Voici les sujets qui m'ont marqués...

L'achat de nom de domaines "abandonnés"


Le page-rank qui est une mesure de popularité des sites web,
ce véritable flux vital à entendre les experts du SEO, ne se perd pas, il se recycle!
Pour rappel, le page rank est une simulation de parcours d'internautes sur le graphe des pages web, cela permettant d'identifier les sites les plus "centraux" par rapport à une thématique. C'est bien sur un des paramètres qui sert à Google (et autres) pour classer les sites dans la page de résultat d'une recherche.

J'ai vu la présentation de Romain Mikula, sur la récupération de noms de domaines expirés. Voici la tactique :
  • Identifier des nom de domaines expirés (par exemple des entreprises qui rationalisent leur usage de noms de domaines).
  • Les racheter (ça coûte quelques euros seulement)
  • Identifier les liens existants sur le net, qui pointent vers ce nom de domaine,
  • et re-créer les pages pour que ces liens ne soient plus "cassés".
  • Le nom de domaine est alors à nouveau "opérationnel" et possède "du page rank" (ou "du jus" apparemment c'est l'expression consacrée... )
  • C'est ce "jus" qui est alors renvoyé vers le site principal dont on veux augmenter le "page rank" et donc le trafic.
J'ai vu qu'il y avait encore au moins une autre présentation sur le sujet mais que je n'ai pas suivi (il y avait des présentations en parallèles, je n'ai donc pas pu tout voir). Cette pratique doit donc être relativement connue et fréquemment exploitée...

Black Hat SEO


Le terme "Black hat" SEO fait référence aux hackers, et le black pour spécifier le coté sombre,c'est donc des opération "illégales" ou plus généralement avec un objectif de nuisance. À ce sujet, la présentation de Kaddiern Sauvage, m'a bien déniaisé ;).
  • Il existe des sites qui servent uniquement à "générer du page rank" sans réel contenu. Ces sites peuvent redistribuer du page rank à des sites "réels" via des liens. En augmentant leur page-rank ces sites réels augmentent donc leur trafic (parce qu'il remontent dans le classement Google), même si le site d'origine du lien n'a pas vraiment de trafic.
  • Cette pratique est évidement condamnée par Google. Goole a même fait des bots qui passent sur le net pour identifier ces fraudes au page-rank, et les "punir" en abaissant leur page rank.
  • Il existe donc la possibilité d'acheter un tel lien, non pas pour son site, mais pour un site concurrent. Il n'y a alors plus qu'a attendre la punition de Google envers le site concurrent...
Bien sûr cette pratique est risquée et malhonnête. Mais c'est très intéressant de voir que tout action entraîne une réaction, et que même avec une bonne intention, cette action de Google peut finir par générer des outils pour guerroyer sur le web.

Mais il y a des "white hat" (des gentils) aussi ...


Le tracking (même avec les meilleurs intentions du monde, comme chez AB Tasty (mon employeur)) peut être vu comme intrusif. En particulier le retargeting semble cristalliser le rejet de la pub et du tracking. Vous savez quand une thématique de pub vous suit de site en site, à cause d'un abandon de panier ou de recherche sur un site de e-commerce.

Et bien Qwant le moteur de recherche français, respecte votre vie privé et vous évite ce genre de désagréments en se refusant de faire du tracking.
Il est même conseillé par les services de cyber sécurité français!
D'autres, comme "duck duck go", qui se vantent de faire pareil sont en fait bien moins sûr, en particulier à cause de leur hébergement tierce (contrairement à Qwant qui gèrent eux même leur serveurs!).

De la pub ciblée sans tracking !? ...


Sylvain Peyronnet, nous a fait une présentation où il nous a démontré qu'il était possible de faire de la pub ciblée sans tracking. Un test est d'ailleurs en cours sur le moteur Qwant. J'ai hâte d'en connaître les résultats, et encore plus d'en savoir un peu plus sur la stratégie employée. J'aimerai bien faire un truc un peu similaire pour AB Tasty, donc Sylvain, si tu me lis, saches que je te bombarderais bien de questions sur le sujet... ;)

Conclusion


C'était une super conf' j'ai appris plein de trucs et rencontré plein de gens très intéressants (on a même eu une avant première d'un futur service d'OVH par Vincent Terrasi). Même si c'est une conférence de taille moyenne, à force de Tweets on a réussi à être en "Trending Topics" sur Twitter pendant quelques heures.
La conférence iSWAG scientifique qui se déroulait en parallèle était aussi très intéressantes, mais cela fera peut être l'objet d'un autre article...

jeudi 9 juin 2016

Récupérer des profils Twitter en masse

Introduction

Pour un projet, j'ai besoin de données de issues de Twitter. J'ai donc monté un serveur, ainsi qu'une chaîne d'acquisition. Dans  cet article Je vais décrire: l'objectif, l'architecture, les technologies utilisées, les résultats,  mais aussi les emm*rdes ;) , et les solutions...

L'objectif

 Je veux faire de la classification non-supervisée d'utilisateurs de Twitter. C'est à dire que je veux utiliser un algorithme pour classer des utilisateurs Twitter sans donner d'objectif précis de classification. C'est l'algorithme lui-même qui va décider du classement en fonction des données dont il dispose.  Je discuterai de l'interprétation des résultats de cet algorithme dans un autre article.

Les données

Je cherche a acquérir une base de données de comptes Twitter. Je veux que mon classement se base sur les abonnements des utilisateurs de Twitter. De plus j'aimerai avoir surtout des données venant de gens qui tweetent.
(Sur Twitter : 90% des messages sont crée par 10% des utilisateur).

Le protocole

J'ai crée un programme en Java qui exploite l'API publique de Twitter. Ce programme va aller chercher les "Trending Topics" (TT), toutes les 5 minutes. Les TT sont des sujets qui sont les plus discutés sur Twitter pour une région données au niveau d'une ville ou d'un pays (j'utilise la zone France), il s'agit simplement d'une liste de mots.

Grâce à cette liste de mots, je peux alors ouvrir un flux (stream) de tweets filtrés par les sujets en questions. Je dispose donc d'un échantillonnage de tweets en français.

À partir des ces tweets, je collecte l'identifiant des émetteurs de ces tweets (ou re-tweets), et je collecte alors leur liste d'abonnement. Je stocke le tout en base de données.

Cela peut se résumé comme ceci :

   Trending Topics --> stream tweets --> user ID --> liste d'abonnements

L'implémentation

Pour l'accès aux données Twitter j'utilise leur API publique, via Twitter4j (en Java)

Pour le stockage, j'utilise mongoDB.







Pour contrôler mongoDB, (ainsi qu'un serveur web qui accède à ses données) j'utilise Docker



Les Emm*rdes ... et leur solutions

  • L'API Twitter est raisonnablement généreuse pour ce qui est des tweets, mais pour ce qui est des listes de lecture de ses utilisateur c'est autre chose... Twitter limite à 15 liste d'abonnements par minute.
    C'est vraiment peu, et d'après ce que j'ai pu me renseigner auprès de revendeur de données Twitter (swift & Gnip), aucun ne donne accès à ces information.
    => J'ai donc fédèré plusieurs comptes (plus précisemment les clés d'application) pour disposer d'un débit plus confortable sur la donnée qui m'intéresse...
  • mongoDB c'est bien mais, ça bouffe toute la mémoire disponible. C'est très efficace pour la base de donné, mais du coup le serveur ne peut plus faire grand chose d'autre. Et dans mon cas mon serveur doit aussi faire la collecte de tweets et de de profiles Twitter. J'ai donc opté pour Docker pour contenir mongodb

Résultats

Les données stockées par utilisateur Twitter sont :
  • L'ID, le screenName (les nom qui commence par @...)
  • la liste des abonnements.
  • la liste des hashtag sur lequel l'utilisateur à tweeté
  • le nombre de follower
  • la photo d'avatar

 Et voici quelques chiffres le serveur tourne depuis près d'un an a enregistrer les trending topics, et surtout les gens qui tweetent sur ces sujets.

La suite ...

Vous vous en doutez probablement cette collecte de donnée n'est qu'une première étape. La suite est la création d'un algorithme profilage automatique en fonction des abonnements des utilisateurs. J'ai déjà beaucoup avancé sur le sujet mais il faut maintenant le temps d'écrire l'article qui sera bientôt publié ici ...

lundi 2 mai 2016

Pourquoi X9.99€ est un bon prix ?

Comment sont créés les prix pratiqués dans les magasins ou en e-commerce ?

Afficher l'image d'origineIntroduction : Naïvement on peut penser que le prix dépend principalement du coût de fabrication et le coût de vente... Mais de plus en plus le prix est plutôt calculé en fonction de ce qu'on appelle le "willingness to pay" ou "propension à payer". Schématiquement il s'agit d'une approche plus psychologique qu'économique. En particulier, l'étude de perception des prix à montré que le cerveau humain est surtout sensible aux "digits de poids fort".

C'est à dire que quand on voit 12.50€, on voit surtout le 1 et on simplifie en se disant "c'est environ 10€"... Ça peut paraître stupide, mais c'est très fonctionnel, et vous allez voir que c'est très utilisé!

Qu'est ce que ça change ?

Je vais montrer l'impact que cela a sur les distributions de valeur de panier.

Qu'est ce que la distributions de valeur de panier ? il s'agit d'un graphique qui permet de voir comment se repartit la valeur de panier d'un magasin. Sur l'axe des X (abscisse) il s'agit de valeur de panier, sur l'axe Y (ordonnée) il s'agit de la proportion de paniers ayant eu cette valeur.

Un moyen simple de faire ce calcul est de faire un histogramme. On découpe les valeur possible de panier en zones (exemple : 1 à 9.99€, 10€ à 19.99€, etc...) et on compte le nombre de paniers correspondants.

Pour l'intérêt de l'étude ce découpage de l'histogramme est fait de 1 € en 1€. En temps normal on déconseille de faire des zones aussi petites car apparaissent alors des pics qui gênent la lecture, et surtout qui ne sont pas statistiquement significatif car calculés sur de trop petits échantillons.
Nous allons voir que cette approche un peu 'extrême' est pourtant instructive...


Prix "psychologiques", préférant les prix "ronds" et "demi-ronds"
Voici l'histogramme des valeurs de panier d'un site d'e-commerce de détail.
On peut y voir que les valeurs les plus probables se situent entre 10 et 50€, et que les valeurs les plus faibles sont aussi les plus fréquentes.
On y voit surtout des  pics qui sont très loin d'être disposés aléatoirement :
  • les pics élevés sont placés sur des prix ronds, 10 €, 20€, 30€, etc...
  • les pics moins élevés sont placé sur les prix "demi-ronds" : 15€, 25€, 35€, etc...
Cela est bien la preuve qu'il y a notablement plus de prix de produits à dont le dernier digit est environ 5€ ou 0€. Si ces pics étaient dus à un effet de sous-échantillonnage, ils seraient disposés aléatoirement, ce qui n'est pas le cas. La règle du prix psychologique conseille au marchant que si il peut vendre un article à 12.50€, il le vendra aussi bien à 14.99€ car l'attention de l'acheteur s'est arrêté au digit de poids fort : 1. Donc autant pousser les prix vers le prix rond (ou demi-rond) supérieur. 

Cette sur-représentation des prix ronds et demi-ronds est encore plus visible sur cet agrandissement de histogramme précédent.
Zoom du schéma précédent.

Prix "réels"
Pour être sur qu'il ne s'agit pas simplement de fluctuations aléatoires, voyons un autre exemple. Le graphique à droite correspond à la distribution de valeur de panier d'un site de vente en ligne de séjours de vacances.Il s'agit donc de prix plus élevés que pour le commerce de détail. Il y a ici un intérêt bien moindre de gagner quelques euros en arrondissant au prix rond supérieur.

De plus ces "paniers" ne contiennent qu'un seul produit. Ainsi l'effet des prix finissant en 0 ou 5€ ne peut pas s'amplifier comme dans l'exemple d'un magasin de détails où l'on achète souvent plusieurs produits.
On voit bien que ces pics sont disposés aléatoirement. La courbe en bleu représentant la distribution est donc dans le vrai en lissant ces détails qui ne correspondent à aucune réalité.
Une telle "simplification" pour approcher la distribution de probabilité de valeur de panier pour le site de e-commerce de détail serait alors fausse car il lisserai des pics qui existent vraiment.

Conclusion

Il y a un véritable défi dans l'analyse des données des sites de e-commerce car aucune loi statistique classique ne colle à ces spécificités. Il faut donc être très critique quand aux stratégies classiques d'analyse de données statistique pour ce genre de données.

mardi 26 janvier 2016

Hackathon "Nec Mergitur", la suite...

Lors du hackathon "Nec Mergitur" j'ai participé au projet avec le groupe "Chasseurs de Rumeurs".

UPDATE : nous sommes parmi les 10 projets sélectionnés.

L'objectif était d'essayer de contrôler les message de type rumeur et de pousser les gens à réfléchir avant de re-tweeter n'importe quoi. Je dis bien contrôler car il n'est pas forcement que question de stopper un message dont on ne sait pas si il est vrai ou faux... En poussant les gens à la réflexion, on peur espérer profiter de la "sagesse des foules" et non de l'effet panique.

Voici un exemple : Le soir du 13 novembre il y avait eu des rumeurs de coups de feux à châtelet. Dans la panique beaucoup de gens l'on retweeté dans réfléchir. Alors que si ses messages avaient été identifié comme possible rumeur, on aurait pu envoyer un message de rappel des bonnes pratique sur les réseaux sociaux.
Les gens concerné auraient peut être alors pris le temps de regarder si, au moins quelques uns de ces messages étaient bien géolocalisés à châtelet, avant de les retweeter.

On peut alors imaginer que cette rumeur se serait alors éteinte d'elle même.
Dans l'éventualité ou cela avait été une réalité on peut imaginer que les gens ayant fait la vérification auraient alors été encore plus actif pour propager le message.

Ma contribution au groupe est dans l'analyse de données sur Twitter, je travaille
depuis longtemps sur un système de "profiling" d'utilisateurs de twitter. Schématiquement j'ai un algorithme qui peut classer automatiquement les
comptes twitter en fonction de leur listes d'abonnements.
 Je me suis rendu compte que les hashtags de la soirée du 13 novembre avaient une particularité : il étaient partagé par tout les types de profil !
Ce qui est unique. Les hashtag classiques, ceux des "buzz",  ne sont partagés que par certain type de profils, les profils concerné par la thématique du buzz en question.

Il est donc possible, automatiquement, de détecter les rumeurs lors de situation de crise. Une fois le hashtag identifié comme possible "rumeur", il est simple pour Twitter de trouver tous les utilisateurs exposés à ce hashtag et leur envoyer un message de rappel des bonnes pratique des réseaux sociaux.

Voici mes slides de présentation de l'utilisation de ce système de profilage pour identifier les rumeurs. C'est des slides "vite fait", mais j'espère qu'ils permettent de comprendre visuellement la faisabilité, d'un "détecteur de rumeur".

lundi 18 janvier 2016

Hackathon "nec mergitur", le bilan

J'ai participé au hackathon "nec mergitur" (Note : à l'heure où j'écris ce post, le lien est "cassé" (erreur 404), c'est très symptomatique de la situation décrite ci-dessous...) ce week-end dans les locaux de l'école 42, voici ma vision du bilan de l'événement :
  • Tout d'abord on a pu constater le gouffre qu'il y a entre ce qu'il est possible de faire (et les techno' qui existent) et les capacité des pouvoir public en terme de "digital"... Manque de moyen , certes, mais je pense aussi qu'il s'agit d'une "dette technologique" du à un isolement des pouvoirs publiques par rapport aux "technophiles" qui lui préfèrent les entreprises privées et les start-up. Mais on peut espérer cet isolement est entrain de prendre fin, grâce à des événements de ce type...
  • Si le coté traditionnel des ces institutions a pris du retard, il n'en est pas de même avec les gens qui la constituent. J'ai pu croiser et discuter avec beaucoup de gens de ces institutions (police, préfecture, sécurité civile, etc...) qui eux étaient demandeur pour exploiter toutes ces nouvelles technologies. Mais plus qu'être demandeur, ils sont aussi prêt! Je veux dire par là que j'ai constaté une grande intelligence et une vivacité à identifier rapidement et précisément des cas d'usage de ces technologies.
    C'était très enthousiasmant.
  • Il n'y avait finalement qu'1/3 de développeur, c'est étonnant pour un hackathon, mais cela a donné un intérêt supplémentaire à l'événement. Car de toutes façon on allait pas faire en un week-end une application qui allait tout solutionner. Ce rendez vous a donc plutôt été l'occasion d'échanges de connaissance, de conseils, qui ont permis de structurer la réflexion. Car au delà de la technique, le sujet exige d'autres compétence qu'uniquement la technique. L'éthique, la protection de la vie privé, la psychologie sont des aspects très importants du problème. Si on les oublie on peut vite arriver à un système qui génère plus de dangers que de protection. 
Bref une très bonne initiative que l'on pourrait résumer par : "mettre en liens les compétences et les  acteurs, directement, sans passer par la case politique."