samedi 19 septembre 2015

Facebook : Find the robots



Each year, Facebook using Kaggle platform to find their future data scientist.


The best competitor participants could pass a job interview. The interest of this contest is the members of kaggle couldn't exchange trick and models, its imply that your rating is the real rating and not a copy/paste program, method process.


We must find if a bidder is a human or a robot with bidding data provided by Facebook.
The score is an area under the ROC curve which quantifies the overall ability of the test to discriminate between human and robot.

At the end of the competition, my score is a 0.92, near to the best score of 0.94. My rank is 198 of 989, not bad.

lundi 18 mai 2015

Using python to build a CART algorithm

In this article, I described a method how we can code CART algorithm in python language. I think it is a good exercise to build your own algorithm to increase your coding skills and tree knowledge. It's not the fastest algorithm implementation but it's enough to understand CART and object oriented programming.


Cart algorithm

In 1983, Breiman et al first described CART algorithm like classified and Regression Tree. It could be used for regression and classification of binary target.
It's a recursive algorithm, at each iteration it finds the best splitting of data which could increase the probability of predicting the target values.


Tree definition

A tree is composed of nodes. Each node could have one, two children or could be a leaf node, a node with no children.

In a list, I stored each object Node.
Tree=[node1, node2, node3, node4….]


jeudi 10 avril 2014

Récupérer les flux Twitter

Aujourd'hui pour disposer de l'information la plus fraîche il est nécessaire d'utiliser Twitter. Les grandes entreprises, les décideurs, les experts, les journalistes utilisent ce média pour communiquer, il n'est plus nécessaire d'attendre la parution de la presse pour avoir à un instant t une idée des tendances sur divers sujets.

Le fait que Bloomberg, entreprise sérieuse, propose depuis un peu plus d'une année un outil d'analyse des sentiments des tweets à destination des traders souligne le fait que l'utilisation de ces outils va se généraliser dans d'autres domaines. (Détail de la plateforme de Bloomberg)

Dans cet article, je présenterai les deux façons de récupérer les flux provenant de twitter en utilisant la librairie tweepy sous Python.
J'utiliserai pour illustrer les derniers jours de la campagne municipale parisienne opposant Nathalie Kosciusko-Morizet et Anne Hidalgo.

mercredi 15 janvier 2014

Facebook Recruiting III - Keyword Extraction

http://www.kaggle.com/c/facebook-recruiting-iii-keyword-extraction

Plusieurs fois par an Facebook propose sur Kaggle un concours pour dénicher leur futur data scientist. Pour cette troisième édition, l'accent a été mis sur le textmining, au-delà de l'aspect statistique ou du machine learning, le défi principal est la capacité à manipuler de larges bases de données en ayant de fortes contraintes en mémoire vive.
À partir de 6 millions de questions issues de Stack Overflow (un site de discussion au sujet de la programmation) avec les variables suivantes : le titre, le détail de la question et les tags de la question il faut réussir à prédire pour 2 autres millions de questions les tags correspondants.

Le but est de maximiser la moyenne du score F1 :

F1 = 2[ p*r / (p+r) ]

Soit p, la précision c'est le rapport du nombre de vrais positifs sur l'ensemble des positifs prédits (vrais et faux positifs).

Soit r, le rappel c'est le rapport du nombre de vrais positifs sur l'ensemble des positifs réels non prédits (vrai positif et faux négatifs)

Résultat : le meilleur modèle a un score de 0.81350, mon modèle arrive à un score de 0.68622. En classement final, j'obtiens la 130e place sur un total de 367 participants. Mes contraintes en mémoire ont fait que j'ai du simplifier mon modèle initial. La modélisation a été réalisée entièrement sous Python.

dimanche 22 décembre 2013

Personalize Expedia Hotel Searches - ICDM 2013


Expedia est une agence de voyages en ligne. Lorsque vous effectuez une recherche le site vous affiche une liste d’hôtels susceptible de vous intéresser, le résultat qui en résulte est calculé en amont par Expédia. Ce calcul provient d'un algorithme de classement (ranking) qui vise à augmenter la probabilité que le client procède à une réservation. Cet algorithme est fonction de la caractéristique des hôtels, du pays de destination, de l'historique d'achat ainsi que des prix proposés par la concurrence. L'objectif est de réussir à créer un modèle qui a de meilleurs résultats que celui déjà existant.

Critère de classement
5 - Si l'utilisateur a pris une chambre à cet hôtel
1 - L'utilisateur a cliqué pour avoir plus d'information sur l’hôtel
0 - L'utilisateur n'a ni cliqué ni pris une chambre à cet hôtel 

Il faut donc pour chaque recherche proposer le meilleur classement soit pour les trois premiers résultats : 5,1,0

Résultat : 
Le critère d'évaluation est le NDCG. Il fallait battre le NDCG d'Expedia qui est de 0.49748.
En conclusion, le meilleur modèle a un de NDCG de 0.54075, mon modèle obtient un NDCG de 0.47527.
En classement final, j'obtiens la 132e place sur un total de 337 équipes participantes. La taille de la mémoire nécessaire à l'apprentissage et à la prédiction, la lenteur de divers traitement sous R ont rendu plus ardue la recherche du meilleur modèle.

lundi 18 novembre 2013

Manipuler de gros fichiers en ayant peu de mémoire vive

SAS a une gestion très poussée de la mémoire, cet outil propriétaire permet de manipuler des bases de données de très grande taille et utilise la mémoire vive ainsi que le disque dur comme espace de travail, or cet outil n'est pas toujours disponible dans les petites structures et présente un coût non négligeable en licence.

R est un outil puissant de modélisation, mais dans le domaine du datamanagement il a un certain nombre de faiblesses : la taille des tables est limitée par la taille de la mémoire vive, les modules complémentaires de R qui facilitent le chargement de grosses tables ne permettent pas d'accéder à l'ensemble des librairies de modélisation.
Pour la partie modélisation, il semble difficile de s'astreindre des contraintes en mémoire vive, on utilisera volontiers des technologies cloud telles qu' Amazon EC2. Pour le datamanagement, il est possible de réaliser la plupart des manipulations de fichier avec des ressources très faibles avec PostgreSQL ou le langage de programmation PYTHON.

samedi 11 mai 2013

Calcul matriciel

À la suite du concours Heritage Health Prize j'ai constaté que sous R le moteur de calcul matriciel n'était pas rapide (je ne fais pas référence aux calculs des librairies spécialisées) ce qui n'est pas vraiment compatible avec une utilisation professionnelle. 
Il existe pourtant des solutions qui permettent de faire du calcul matriciel avec un rapport coût/performance intéressant. J'en ai testé quelques-unes.

mercredi 10 avril 2013

Heritage Provider Network Health Prize


L'Heritage Provider Network Health Prize est une compétition qui a pour objectif de créer un modèle qui sera à même de prévoir le nombre de jours d'hospitalisation à partir de données historiques.

À partir des données historiques d'un patient (nombre et type de consultation, prise de médicaments, catégories de maladie...) à la période n, nous devons estimer le nombre de jours d'hospitalisation à la période n+1. 

Pour cela nous disposons de données années 1 avec le nombre de jours d'hospitalisation années 2, de données années 2 avec le nombre de jours d'hospitalisation années 3 et enfin de données années 3 à partir desquelles on estimera le nombre de jours d'hospitalisation années 4.

J'utilise les données années 1 avec le nombre de jours d'hospitalisation années 2 en échantillon d'apprentissage.
J'utilise les données années 2 avec le nombre de jours d'hospitalisation années 3 en échantillon de test.

Le but est de minimiser le score suivant :
Soit : i : un individu, n : le total d'individu, pred : prévision du nombre de jours hospitalisés, act : le nombre de jours passés à l’hôpital.

Résultat : le meilleur modèle a un score de 0.461197, mon modèle arrive à un score de 0.470774.
En classement final, j'obtiens la 241e place sur un total de 1358 équipes participantes.

jeudi 28 février 2013

Course aux algorithmes ?

Les données doivent devenir le pétrole du 21ie siècles. À travers de nombreux cours et de concours de modélisation une communauté de data scientist est en train de se constituer. Le big data est un terme à la mode alors que déjà les statisticiens font du big data depuis un certain temps.

Pourquoi une telle effervescence ?

  • des outils libres ont fait leurs apparitions et ainsi ont permis de diffuser le data mining, alors qu'auparavant seuls des outils onéreux étaient disponibles.
  • il est possible de louer de la puissance de calcul en faisant appel à des services de cloud comme Azure ou Amazon EC2 pour quelques euros

La contrepartie à ce développement est de mettre de coté l'importance des statistiques pour la réalisation et la compréhension des modèles.

jeudi 20 décembre 2012

Retour sur le Census

L’intérêt des compétitions de Kaggle est qu'une fois l'épreuve terminée il est possible de découvrir les meilleures solutions. La méthodologie gagnante sera bientôt accessible dans le détail, car le bureau du recensement a décidé de partager le modèle avec l'ensemble de la communauté, en attendant il ressort plusieurs pistes qui ont permis aux compétiteurs de s'élever en haut du classement

- à partir des variables de départ de nouvelles variables ont été créées à la suite d'étude des relations des variables entres-elles souvent en réalisant de simples régressions, à noter qu'un module de R : Mars permet de rechercher ces interactions (à voir)

- Les modèles n'ont pas été simplement lancés en testant différents paramètres, mais un gros travail de "fitting" a été réalisé c'est-à-dire que pour chacun des paramètres des modèles des intervalles ont été définis et le programme de recherche du modèle a tourné le temps que les modifications de ces paramètres permettent de réduire l'erreur du modèle. Cette méthode a donné de bons résultats, mais a été gourmande en calcul : pour trouver le nombre d'arbres optimal en utilisant le gradient boosting cela a nécessité sur un ordinateur personnel près de trois journées de calcul. Il est donc nécessaire de savoir programmer pour trouver les meilleurs paramètres.

- il semble obligatoire de réaliser un ensemble model c'est-à-dire en utilisant différents modèles pour réaliser la prévision

mardi 6 novembre 2012

Predict census mail return rates

https://www.kaggle.com/c/us-census-challenge

1: En 2010 des courriers ont été envoyés dans les foyers américains pour réaliser le recensement. Afin d'optimiser sa communication le bureau du recensement recherche le meilleur modèle qui sera à même de prévoir le taux de retour des plis, pour cela nous avons à notre disposition le taux de retour réel de 2010, ainsi qu'un ensemble de données sociodémographique. Les données sont au niveau des "block group" qui regroupent jusqu'à 25 000 habitants. Il a été possible d'inclure des données externes après validation par le bureau du recensement américain.

L'évaluation se fait par la moyenne absolue des erreurs pondérées par le poids des populations (weighted mean absolute error).


Résultat : le meilleur modèle a un WMAE de 2.54476, mon modèle arrive à un WMAE de 3.27624.
En classement final j'obtiens la 98e place sur un total de 244 équipes participantes.

samedi 29 septembre 2012

Best Buy mobile web site

http://www.kaggle.com/c/acm-sf-chapter-hackathon-small

On recherche à déterminer le comportement d'achat de jeux Xbox à partir de requêtes sur la plate forme mobile de Best Buy. À partir d'une requête comment peut-on prévoir le clic sur un produit ?

Pour cela nous disposons d'un historique de deux années comportant 67 millions de clics et 27 millions de recherches, ainsi d'un catalogue des jeux Xbox avec leur référence produit respective.


Résultat : la meilleure méthodologie arrive à prévoir en moyenne 78 % de clics sur un produit, ma méthodologie arrive à en prévoir en moyenne 64 %. En classement final, j'obtiens la 65e place sur un total de 97 équipes participantes.


lundi 17 septembre 2012

Give Me Some Credit

https://www.kaggle.com/c/GiveMeSomeCredit

Il faut prévoir la probabilité qu'un client aura des difficultés de paiement les deux années suivant la contraction du crédit, pour cela nous disposons de l'historique de 250 000 emprunteurs.

Le meilleur modèle sera celui qui aura la sensitivité la plus élevée (taux de vrai positif) et la (1-specificité (taux de faux positif) le plus faible. On recherche donc l'index ROC le plus élevé cela sera le score du modèle.


Résultat : le meilleur modèle a un ROC index de 0.869558, mon modèle obtient un ROC index de 0.853525. Je ne suis pas dans le classement final, le modèle ayant été réalisé hors compétition.