lundi 24 octobre 2016

Offre de stage en DataScience

Stage en DataScience : durée 6 mois.

Sujet : Nous (AB Tasty) disposons de beaucoup de données de sites web de type e-commerce. Notre objectif est de fournir des indices statistiques les plus précis et pertinents possible pour nos clients.
En particulier en ce qui concerne les statistiques de valeur de panier. Ces données étant très spécifique au e-commerce, aucune loi connue (simple) ne permet de les modéliser précisément. L'objectif de ce stage est de proposer une méthode de composition de lois permettant, utilisant la notion de prior (basés sur nos données) permettant de faire une meilleure modélisation des valeurs de panier.

Type de profil recherché :
  • bon niveau en stat' (bayésienne, bayésienne hiérarchique, programmation bayésienne.)
  • autonomie en langage de programmation type R ou Python
  • Curieux
Entreprise : AB Tasty (Paris)
Encadrant : Hubert Wassner. (contact : hubert.wassner@gmail.com)
Période : début de stage janvier ou février 2017 (idéalement)

mercredi 5 octobre 2016

Google Optimize 360, un avis de Data Scientist...


Résultat de recherche d'images pour "Optimize 360" 


"Optimize 360", la solution de testing de Google va-t-elle changer le marché des outils déjà existants?

Quand Google entre sur un marché, il est clair que ce n'est pas a négliger, surtout quand ils proposent une offre gratuite (l'offre payante semble être à >150k$ l'année).

Je tiens à préciser que je ne suis pas totalement  impartial dans cette réflexion car je suis Chief Data Scientist à AB-Tasty qui est la solution leader en France sur les solutions de testing et de personnalisation sur les sites web & applications mobiles. Je vais toutefois essayer d'être honnête dans cette comparaison.
Il y a un tas de truc fonctionnels qu'Optimize 360 ne fait pas (test sur mobile, test multi-pages, etc...) même dans la version payante, mais dans cet article je vais principalement aborder le point de vue "Data".

Le défaut principal que j'identifie est qu'Optimize gère la notion de visiteur par session (de 30 mn à 4heures, mais pas plus!) et ne gère pas vraiment la notion d'unicité du visiteur. Ce qui veux dire qu'un visiteur faisant deux visite a un jour d'intervalle (ou même juste 5 heures) sera compté comme deux visiteurs distincts.

Cela à deux conséquences : 
  1. Les taux de clic mesurés seront plus bas que la réalité.
    C'est gênant mais on peut "faire avec".
  2. Il est impossible de mesurer les gains de manière précise.
    Là c'est bien plus gênant...
Voyons cela en détail...

1) Les taux de clic (ou valeur par visiteur) seront donc mesurés notablement plus bas, car les conversions se font rarement à la première visite. Toutes les autres visites (hormis celle de conversion) seront comptées en "échec", ainsi, naturellement, les taux de "réussites" seront mesuré bien plus bas.

Cependant on pourrait se dire "c'est pas si grave, de toutes façon ce qu'on cherche c'est une différence de taux de conversion, on peut se moquer de la valeur absolue de ce KPI". C'est vrai, mais seulement si on s'intéresse uniquement l'existence d'une différence (et qu'on se fiche de sa taille), car en effet le modèle bayésien d'analyse statistique supporte assez bien cette approximation.
On peut le tester ici : https://www.peakconversion.com/2012/02/ab-split-test-graphical-calculator/

Supposons avoir 100 visiteurs sur chaque variation, avec 10 conversion pour A et 15 pour B.


=> cela donne 14% de chance de victoire pour A et 86% pour B
(chiffres de l'avant dernière colonne).

Supposons maintenant que ces conversions sont réalisés en moyenne après 2 visites (donc on double le nombre de "trial") pour simuler qu'on ne gère pas les visiteurs unique mais qu'on utilise la notion de sessions.


=> cela donne 15% de chance de victoire pour A et 85% pour B.
=> soit seulement 1% de différence avec l'analyse précédente.

Vous pouvez faire l'expérience par vous même, et même si on augmente le nombre moyen de visites avant la conversion les "chances de victoire" dévient assez peu.

Donc si on ne s'intéresse qu'à l'existence d'une différence (et pas de sa taille) alors ne gérer que des le sessions (et non les visiteurs uniques), n'est pas très gênant.

Note : Cette conclusion n'est vraie que si le nombre de re-visites par visiteur unique est à peut près le même selon les variations (rien ne nous l'assure vraiment.).

2) Avec cette approche par session il est alors impossible de mesurer proprement les intervalles de confiance du gain.


Note : cet intervalle est très important dans l'analyse et surtout dans la prise de décision car c'est lui qui permettra de prédire la meilleure et la pire des situations que l'ont rencontrera lors de la mise en production de la variation gagnante.

Pour cela je vais utiliser un autre outil, qui fait le même type de calcul bayésien, mais qui montre aussi la distribution du gain potentiels (on appelle cela le 'posterior' en stat')  http://developers.lyst.com/bayesian-calculator/

Voici ce que l'on obtient avec les même chiffre que l'exemple précédent :
  • A) 100 visites, 10 succès
  • B) 100 visites, 15 succès

Cette courbe représente la répartition possible de la vrai valeur du gain qu'apporte la variation B par rapport à la A.
L'intervalle de confiance à 95%, c'est à dire l'intervalle qui a 95% de chance de contenir la vraie valeur du gain, est environ [-0.05;+0.15]. (Il s'agit en fait de sélectionner la partie centrale de ce graphe de manière à représenter 95% de sa surface.) Vu que cet intervalle est globalement plus positif que négatif on fait la même conclusion que précédemment : B est probablement la variation gagnante, mais attention il persiste encore une zone de doute. (B à quand même,"encore" ~15% de chance d'être gagnante.)

Supposons maintenant qu'il faut en moyenne 2 visites avant la conversion, alors on double le nombre de 'trial" comme dans l'exemple précédent pour avoir des données tels qu'Optimize 360 les verrait.
Et voici ce qu'on obtient sur la courbe de distribution des gains :


On voit que cette courbe est notablement plus étroite que la précédente, par conséquent l'intervalle de confiance correspondant paraîtra beaucoup plus petit. Approximativement il vaudrait [-0.025;0.08]. Mais ce n'est pas la réalité! On comprend que les bornes de cet intervalle définissant le meilleure et le pire scénario ne sont plus calculable, car cet effet sera d'autant plus marqué que le nombre de visites moyen avant conversion est grand.
 Le fond du problème est qu'on ne connaît pas le nombre de visites associées à un visiteur unique. On est donc dans l'incapacité de calculer ces bornes qui sont pourtant primordiales pour la prise de décision.


Conclusion :  avec cette approche par session on peut toujours identifier une variation gagnante et mesurer la probabilité de l'existence du gain, mais il est impossible de présager de sa taille! Personnellement je trouve cela très limitant.


Pourquoi ce choix (sous-optimal) ?

La raison est que pour pouvoir "suivre" un visiteur sur une longue période, il est nécessaire de stocker ses informations de visite coté serveur. Or vu les volumes que compte traiter Google (en particulier avec la version gratuite qui aura forcément du succès), ce serait irréalisable (même pour Google).
C'est aussi certainement pour cette raison que l'outil d'analytic de Google fonctionne comme ça, et vu qu'Optimize est basé sur Google Analytics...
Par conséquent, ce choix de ne pas gérer correctement la notion de visiteur unique, a de forte chance de rester tel quel.

Ma conclusion est que Google Optimize va probablement prendre de belles parts de marché chez les "petits" qui choisiront Optimize pour les même raisons qu'ils ont déjà Google Analytics.

Mais pour les plus "gros" (et les plus matures sur le sujet), je pense que les raisons citées ici, et aussi pour le coté confidentialité (comme avoir des serveurs dans le pays du client), préféreront les acteurs historiques de l'A/B test et de la personnalisation.

De plus, cela va peut être aider à la maturation du marché. C'est peut être une bonne chose que les gens s'exercent d'abord avec une solution gratuite aux fonctionnalités limités. Cela leur donnera l'envie d'utiliser des solutions plus complètes, une fois qu'ils auront compris ce qu'ils ont a y gagner.

lundi 5 septembre 2016

Twitter Profiling

Introduction : Après la collecte de plus de 5 milions  de profils d'utilisateurs Twitter. Je vais vous exposer dans cet article une approche d'analyse de ces profils par cartographies thématiques.

L'approche


Sur Twitter il est difficile de savoir qui est qui, car c'est plus un média qu'un réseau social. Les membres ont peu d'espace pour se décrire, et il le font peu. Finalement ce qui défini le mieux un compte Twitter, et son utilisateur, c'est sa liste d'abonnement, c'est à dire les comptes qu'il suit (follow dans la jargon Twitter).
On peut donc utiliser l'adage "Dis moi ce que tu lis, je te dirais qui tu es". Cette approche a l'avantage de pouvoir analyser les profils même s'ils ne tweettent pas ou  très peu. C'est important car sur Twitter "90% des messages sont générés par 10% des utilisateurs".
Cependant, pris comme telle, cette approche est difficilement automatisable, car il faut encore comprendre le sens de ces abonnements. J'ai donc décidé de simplifier l'approche comme suit : "des personnes qui suivent a peu près les mêmes comptes, se ressemblent certainement."
Cette approche là est automatisable, et on peut s'en servir pour créer, algorithmiquement, des cartes. Ces cartes n'ont rien de géographique, elles sont topologiques, cela veut dire qu'elles reflètent les similarités d'abonnements entre utilisateurs. Elles forment naturellement des thématiques. Les utilisateurs qui ont des listes de lectures similaires se trouveront dans les mêmes zones de la carte.
Voici un exemple d'une telle carte : chaque point est un utilisateur de Twitter

Le résultat ("ok, et on en fait quoi de cette carte?")


Il ne reste alors plus qu'a identifier les thématiques de chaque zones. Cela peut se faire par 2 moyens complémentaires.
  • L'échantillonnage : en prenant des échantillons de chaque zone et en les analysant manuellement. Dans la mesure où ces zones sont normalement assez homogène, cette opération peut être bien plus rapide qu'on l'imagine.
    Voici un échantillonnage de profils pris dans une même zone :
     
     
      
    On voit sans peine que dans cette zone sont regroupés les "geek"...
  • Le filtrage par hashtag : certains hashtag (c'est à dire des mot-clés qui indiquent le thème d'une discussion) sont des indicateurs plus ou moins évidents des typologies des groupes qui les utilisent. On peut alors uniquement afficher des utilisateurs s'ils ont utilisés un hashtag donnés. Ainsi on peut identifier de manière très rapide les typologies de ces zones.
    Voici 3 exemples  de hashtag (typés adolescents) ainsi que les zones de la carte où ils se situent: 
    • "#NoControlDay" : il s'agit d'une chanson d'un groupe pour adolescent ("One direction")
    • "#getBeautyParis" : c'est un salon de beauté et de promotion de youtubeuses (jeunes filles qui font des vidéos de conseils beauté sur le site de vidéos Youtube).
    • "Projet X" : Il s'agit d'un film d'adolescents (une comédie sur une soirée qui dérape)
On constate que ces zones sont des zones légèrements différentes mais sont toutes dans la même région, cela nous permet d'identifier globalement une zone "ado".
On peut noter que la zone "Geek" (identifiée précédemment) reste vide car ils n'ont pas tweeté sur ces hashtags, ce qui est totalement cohérent.

Pour visualiser cela j'ai fait une gif animée qui superpose les 3 images précédentes :

Voici une vue globale de la carte (sans sélection de hashtag):

On y voit un peu toutes les populations de twitter ainsi que leur proportions relatives. Il est a noter que même si je n'ai pas fait de sélection de hashtag il s'agit quand même de profils de gens qui twittent sur les "trending topics" (voir la méthodologie de collecte des données). Cela explique la grande prévalence du groupe "ado", et "actu". Il y a deux groupes "politique" car il s'agit de bords politiques différents.

Conclusion

Cet outil de collecte de tweet et de cartographie permet donc d'analyser des hashtags et surtout leur utilisateurs! Le tout fonctionne en live, car le modèle utilisé (un réseau de neurones) est très rapide. Il permet donc de faire des actions automatisées dans un délais inférieur à 3 secondes après l'émission d'un tweet. On peut donc réagir à chaud, massivement/automatiquement, et de manière ciblée !
Je détaillerai cette approche et ses effets dans un article suivant...

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 à ~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 gain potentiel important => indice de confiance fort (quelques soit la méthode de calcul)
  • probabilité faible d'existence d'une différence, et gain potentiel 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 image pour illustrer "Usain Bolt a gagné la course" :












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

Alors que cette autre image donne une idée plus détaillée :


Là on perçoit mieux la réalité : "Usain Bolt à gagné la course avec une énorme marge". Cette information est très importante surtout si on se pose la question "va-t-il gagner la prochaine course ?".  Pour cela, la première image ne nous informe pas beaucoup. On peut se dire qu'il la gagnera car il a gagné la précédente, mais on est pas certain.
La seconde image, par contre, nous permet de dire qu'il va gagner la course suivante, et on peut même se dire qu'on pourrait parier sur le résultat avec peu de risque (au vu de la marge qu'il met à ses concurrents).

Revenons à notre sujet d'interprétation de résultats d'A/B test. On se pose plus ou moins la même question : "La variation gagnante performera-t-elle aussi bien en production?" ("gagnera-t-elle la prochaine course?".). On comprend alors l'intérêt d'avoir plus d'information que seulement "la variation B gagne"...

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. Et laissons de coté la "significance", car elle ne nous apprend pas grand chose.


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...

UPDATES :
  1. j'ai mis à disposition une petite fraction de ces données (40k profils) sur le site Kaggle : https://www.kaggle.com/hwassner/TwitterFriends
  2.  J'ai mis en ligne un article décrivant l'analyse que je fais sur ces données.

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 ...

UPDATE : ça y est j'ai (enfin) écris un article décrivant l'analyse que je fais avec ces données.

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.