Crowd sourcing, machine learning et intérêt général

[ J’avais envie d’envoyer ce message par mail à mes anciens collègues du laboratoire de recherche Personalization and Knowledge Lab de Motorola mais je me suis dit que ça pourrait inspirer d’autres personnes alors je le poste sur mon blog… ]

Salut les ex-PKLers…

J »ai une idée tordue et j’aimerais avoir votre avis à son sujet, si vous avez le temps et que le c½ur vous en dit… C’est un peu long, je vous préviens, on ne se refait pas…

La finalité de mon idée est de faire bénéficier certaines associations humanitaires (ou d’autres organismes d’intérêt général) des possibilités de prédiction et de recommandation offertes par les technos du machine learning.

La raison pour laquelle je réfléchis à ce sujet est triple :

  1. le machine learning, c’est vachement rigolo et ça me manque…
  2. il y a une grosse SSII qui me propose des informaticiens mais uniquement si c’est sur des projets ayant une dimension plutôt innovante sur le plan scientifique,
  3. je rêve de trouver un moyen d’utiliser mes notions de  machine learning pour des projets humanitaires ou d’intérêt général.

Pour avoir encore un peu de contexte, mes sources d’inspirations, pour cette idée, sont :

Mon idée est de trouver un moyen pour faire travailler de nombreux salariés de SSII en intercontrat sur la production de services de prédiction/recommandation, pour des ONG, via une plate-forme conçue à cet effet. Ma question est : est-ce faisable et si oui comment ?

Autrement dit, peut-on abaisser la « barrière à l’entrée » pour permettre à des informaticiens non spécialistes du machine learning et qui ont peu de temps à consacrer à ce projet, de contribuer de manière utile pour produire à plusieurs un service de prédiction/recommandation ?

Autrement dit encore et avec quelques détails en plus : en supposant que j’ai chaque jour 20 informaticiens en intercontrat à ma disposition, que chacun reste sur le projet sur une durée de 2 à 5 semaines, est-ce que je peux utilement les faire travailler via une plate-forme conçue à cet effet pour produire un service de prédiction/recommandation ? Est-ce que les résultats produits risquent de converger très rapidement (en 1 ou 2 mois) vers un certain niveau de qualité médiocre et ne jamais en décoller pendant le reste de l’année ? Ou bien est-ce que je peux espérer, en les faisant travailler de manière adéquate, produire une progression qui se poursuive pendant 1 an sur le même dataset ? jusqu’à obtenir des prédictions de qualité acceptable ?

Là où mon idée commence à devenir tordue, c’est que les informaticiens en question n’ont aucune compétence en machine learning. Ça va de l’analyste-réalisateur mainframe senior au spécialiste du module SAP dédié à la comptabilité des amortissements des sociétés de transports, en passant par le développeur J2EE junior et l’administrateur réseau Cisco. Comment faire travailler ensemble sur ce projet une foule d’informaticiens non spécialisés en analyse de données ?

Or, à la fois dans le Netflix prize et dans les prix de kaggle, il semble y avoir comme un leitmotiv :

  1. bien sûr, la qualité et la taille du dataset d’origine est absolument essentielle,
  2. au final, c’est l’approche « ensemble learning » qui semble marcher le mieux,
  3. les types d’algorithmes à mettre dans cet ensemble (réseaux de neurones, classifieurs bayésiens, ou autres) n’importent pas tant que ça, et il y a des algorithmes généralistes assez robustes qui donnent des résultats souvent pas trop mauvais (les decision trees mis en random forests par exemple), l’important c’est d’avoir une bonne diversité d’algorithmes et de paramétrage de ces algorithmes,
  4. la différence entre les gagnants se fait en grande partie sur leur capacité à traiter les données en amont de ces algorithmes : pour en extraire des indicateurs et des paramètres qui seront pertinents pour les algorithmes (normalisation, moyennage, discrétisation, combinaison de données, réduction/sélection des données, dérivation des données éventuellement en faisant intervenir des jeux de données de référence supplémentaires, etc.)
  5. pour avoir de bonnes intuitions quand aux enrichissements/dérivations/réductions à apporter au dataset en amont des algorithmes d’apprentissage, une certaine connaissance du métier ou du domaine fonctionnel dont parlent les données peut aider, mais ce n’est pas indispensable et une absence de connaissance du métier peut être partiellement compensée par la mise en place de bonnes visualisations de ces données.

Résumé de l’approche qui est sensée marcher le mieux : Bon dataset => Visualisation inspirantes => Nombreuses et diverses dérivation ou réductions => Divers algos d’apprentissage => Ensemble.

Est-ce que ce que je dis là vous semble plutôt vrai ? ou est-ce que le démon se cache dans le détail de mes erreurs ?

En continuant sur cette lancée, je me dit que des informaticiens qui ne sont pas des « data scientists » mais ont 3 ou 4 semaines à consacrer à ce type de problèmes pourraient commencer par apprendre à produire des visualisation du jeu de données pour chercher des intuitions quant à la manière dont il faudrait l’enrichir (point 5 ci-dessus). Ensuite, ils pourraient écrire des petits scripts dans le langage de leur choix pour enrichir le dataset avec des données dérivées (point 4 ci-dessus) ou pour en réduire la dimension en sélectionnant certaines de ces données. Leur travail s’arrêterait là.

Ensuite, une batterie pré-définie de quelques algorithmes plutôt pas mauvais en général pourrait mouliner ces datasets enrichis et, en mettant le tout dans un Ensemble, fournir des résultats pas trop médiocres ? En ayant un nombre et une diversité suffisamment grands de contributeurs, en les faisant partager leurs intuitions via une bonne animation en ligne (rencontres, discussions, forum, wiki,…) et en les faisant travailler avec les bons outils collaboratifs (partage de code, …), qu’est-ce que ça donnerait ?

Autrement dit, est-ce qu’on peut compenser une absence d’expertise en machine learning par :

  • une population suffisamment grande et diverse d’informaticiens non experts et ne pouvant rester plus d’1 mois ou 2 sur le sujet,
  • et une plate-forme de machine learning bien pensée.

Est-ce que, ainsi, pour un dataset donné et moyennant un travail initial de quelques semaines pour mettre en place la plate-forme puis pour la « régler » pour ce dataset, je pourrais faire utilement travailler pendant un an 20 informaticiens disponibles chacun pour une durée de 2 à 6 semaines ?

Ou bien est-ce que je ne fais qu’énoncer le paradoxe du singe savant ?

Voila. Si jamais cela inspire quelqu’un, qu’il réagisse en commentaire SVP !

5 réflexions au sujet de « Crowd sourcing, machine learning et intérêt général »

  1. Ping : Crowd sourcing, machine learning et intérêt général « Jean, aka Sig ... | Analyse prédictive | Scoop.it

  2. khaldoun

    Bonjour,
    Informaticien et habitué des SSII, je suis un peu sceptique de la praticité de ce genre d’initiative. Le souci principal c’est que l’on connait pas la durée de l’intercontrat, cela peut etre de 2 mois comme 5 jours, difficile de faire un planning dans ce cadre la

  3. Sig Auteur de l’article

    Non, aucun planning individuel n’est nécessaire. L’idée est justement de proposer des tâches courtes (1 à  5 jours) de scripting sur le point 4 du processus proposé ci-dessus.

  4. ajp024

    Il me semble que pour faire des choses de type « machine learning », il y a quelques principes de base à connaitre, qui peuvent un certain temps pour un développeur lambda. Quand j’avais suivi la Machine Learning Summer School à Taipei (et plus récemment une formation à l’INSEE), tous les intervenants avaient le discours suivant:
    – bien connaitre ses données est essentiel: ca veut dire les regarder de près, s’immerger dedans, sentir leur caractère physique – c’est probablement la partie la plus difficile et qui sera nécessaire pour chaque nouvelle personne sur le projet
    – commencer avec des méthodes simples: naive Bayes, régression logistique, arbre de décision; le choix des méthodes se fait en fonction des données… Les méthodes simples donnent en général des résultats acceptables (bon évidemment, ça dépend du domaine, si c’est pour la santé, un taux d’erreur de 20% n’est pas bon).
    Les méthodes avancées deviennent vite très mathématiques si on veut les comprendre et pas juste les appliquer – ce qui nécessite suffisamment de temps.

    Avec un grand nombre de personnes sur un faible temps dédié, l’approche la plus pratique me semble être d’utiliser un framework du type Weka (http://prdownloads.sourceforge.net/weka/weka.ppt) qui a des interfaces graphiques assez pratiques pour faire des tests sans écrire de code (ex. créer un flux qui prend en entrée une source de données, l’adapte (par ex discretisation de parametres) et l’envoie vers différents types de classifier.
    Je pense qu’un tel workflow peut relativement facilement être repris entre deux personnes (pour peu qu’elles puissent passer quelques heures auparavant à jouer avec l’outil). Weka a l’avantage de permettre de commencer avec des algos simples et d’aller progressivement vers des choses plus compliquées, en combinant potentiellement plusieurs algos. Bref, je pense que cette plateforme est relativement adaptée meme si pas super user-friendly.

    La difficulté principale réside probablement dans la coordination entre personnes; si la durée de l’intercontrat est faible, ça parait un peu difficile.

  5. Sig Auteur de l’article

    Jérôme, merci pour ton commentaire. La durée moyenne de disponibilité de mes contributeurs est de 14 jours.hommes. Ça fait peu. Le problème supplémentaire, c’est qu’ils n’y connaissent rien en analyse de données et que ce ne sont pas des développeurs « nouvelles technologies ». Ils connaissent chacun des langages différents. Typiquement, le contributeur est une informaticienne de 40 ans, de province, spécialiste d’un module SAP de gestion de la facturation pour opérateurs télécoms ou bien experte en méthode de test logiciel pour l’industrie…

    Je cherche un moyen de permettre à 20 personnes de ce type de contribuer utilement sur une même analyse de données sans avoir à leur apprendre l’utilité des différents algo. Pour leur permettre de découvrir le dataset et d’essayer de « sentir » les données, l’idée pourrait être de leur fournir un outil genre weka ou des visualisations ou outils de visualisations comme R, avec des tutoriaux et un accès aux visualisations déjà produites par les contributeurs précédents. Et j’essaierais forcément de commencer par des domaines de données dont ces contributeurs sont susceptibles d’être familiers (pour qu’ils aient au moins un début d’intuition du sujet traité…).

    Jusque là, je ne dis rien d’original et je suis d’accord avec tes remarques.

    Mon idée, ensuite, est d’utiliser un algo simple ou une combinaison d’algos simple, éventuellement trouvée (par moi) avec Weka, et de les faire travailler sur un autre aspect du problème.

    Cet « autre chose », c’est l’enrichissement (et/ou la réduction) du dataset. Ça veut dire que je leur laisse utiliser leur langage de prédilection (de la formule Excel au module Java) pour ajouter ou sélection des colonnes dans le dataset.

    Par exemple, pour un dataset de 10.000 lignes/individus et 20 colonnes/attributs, je laisse chacun écrire des scripts ou formules qui permettent d’ajouter des colonnes/attributs dérivés de manière plus ou moins sophistiquée mais sans chercher à produire directement une classification avec un algo trouvable dans weka.

    Je prends un exemple. Si il s’agissait de classifier des mails en spam ou non-spam, je prendrais un algo de naive bayes et je proposerais aux contributeurs de faire leur propre script de tokenization. Quels indices sont discriminants pour dire que tel mail est ou non un spam ? Ya la fréquence des mots, mais on peut aussi regarder les autres champs du mail, c’est les trucs de base. Mais un contributeur malin pourrait ajouter comme attribut le nom de domaine de l’expéditeur, ou bien la corrélation entre le nom de domaine de l’expéditeur et les adresses IP via lesquelles le mail a été acheminé, ou encore le fait que telles ou telles expression apparaissent dans le texte, ou la police de caractères utilisé dans un mail HTML, ou la présence d’une image, le nombre ou la taille de pièces-jointes, etc. Donc, sans changer l’algo, je demande juste aux contributeurs d’ajouter des attributs au dataset (en fournissant les scripts qu’ils ont écrits pour cela) et de sélectionner les champs qui leurs paraissent les plus pertinents (pour réduire la dimensionalité quand nécessaire).

    Pour la coordination, chacun dépose ses colonnes supplémentaires sous forme de fichiers plats sur un serveur, ainsi que ses sélections d’attributs. Et c’est toujours le même algo qui tourne et est relancé à chaque contribution, et qui produit un score à l’aide d’un dataset de validation. Toutes les contributions sont ainsi classées à la manière des compétitions habituelles d’analyse prédictive de données.

    La différence avec les compétitions classiques serait que le travail des contributeurs n’a pas porté sur la recherche de méthodes avancées de machine learning (algos « sophistiqués ») mais uniquement sur l’enrichissement et la sélection des données de base.

    Dans ces conditions, est-ce que tu penses (intuitivement) que cette approche aurait des chances significatives de produire des résultats égaux ou supérieurs à ce qu’un spécialiste du machine learning tout seul, ou avec 1 ou 2 collègues, pourrait produire ?

Les commentaires sont fermés.