Aborder un problème de Machine Learning – Partie 1

By | 11 mars 2017
13 Flares Twitter 0 LinkedIn 13 Reddit 0 Google+ 0 Filament.io 13 Flares ×

Dans cet article, je vais décrire une méthodologie de travail pour résoudre un problème de Machine Learning.

Comme tout projet de développement informatique, avoir une méthodologie rigoureuse de travail permet d’avancer rapidement et d’augmenter les chances d’atteindre le résultat souhaité. Les problèmes de Machine Learning ne dérogent pas à la règle.

Cet article décrira les grandes lignes d’un processus de travail de 5 étapes. Pour faciliter la lecture du billet, je ne parlerai que des deux premières étapes. Les trois étapes restantes feront l’objet du prochain article.

Processus en 5 étapes

Parce qu’un problème de Machine Learning est souvent complexe à résoudre, découper la problématique en étapes plus petites nous en facilitera la résolution.

Personnellement, je recense 5 étapes pour aborder un projet de machine learning :

  1. Définition du problème
  2. Préparation des données
  3. Choix des bons algorithmes
  4. Optimisation des résultats
  5. Présentation des résultats finaux

1. Définition du problème

Définir la problématique à résoudre permet de clarifier les idées dans notre tête. On pense souvent, à tort, que les idées sont claires dans notre tête et qu’on est prêt à mettre la main dans le cambouis.

Pour mieux définir le cadre de notre problème, voici quelques questions utiles à se poser quand on veut aborder un problème de ML :

  • Que cherche-t-on à résoudre ?
  • Pourquoi c’est utile de le résoudre ?

Que cherche-t-on à résoudre ?

Description informelle

On peut à cette phase décrire le problème d’une façon informelle, comme si nous le décrivons à un ami ou un proche. Le but étant de pouvoir formuler le problème en une phrase précise et concise :

Exemple : Je veux un programme capable d’estimer le prix des appartements

Une description informelle permet de clarifier le but final à atteindre.

Formalisme

En se basant sur la description informelle, nous pouvons donner une description plus formelle au problème.

Tom Mitchell en 1997 a défini un programme de machine learning comme suit :

A computer program is said to learn if its performance at a task T, as measured by a performance P, improves with experience E

Que je traduis en : 

Un programme est dit apprend si sa performance à une tâche T, mesurée par P s’améliore avec l’expérience E

Utilisez cette définition pour définir T, P et E. Par exemple :

Tâche (T) : Estimer le prix des appartements

Performance (P) : La précision de la prédiction faite par l’algorithme et à quel point elle est proche du prix réel

Expérience (E) : La description de l’appartement et son prix réel

Pourquoi c’est utile de résoudre le problème ?

Les motivations pour résoudre le problème peuvent être multiples. L’intérêt de connaitre ces motivations vous permettra de mettre l’accent sur ces derniers pour présenter le résultat de votre travail.

Si vous résolvez un problème pour apprendre une nouvelle technique, clarifiez bien ce que vous souhaitez apprendre. Si vous vous faites un POC (Proof Of Concept) d’une nouvelle fonctionnalité, clarifiez bien ce que les gens du management veulent voir comme résultat (des graphiques, des captures d’écran, des prévisions d’augmentation de ventes grace à votre outil….). L’important n’est pas la résolution du problème en soi mais les bénéfices à en tirer une fois résolu.

2. Préparation des données

Tout problème de Machine Learning se base en grande partie sur les données. Cette étape consiste à :

  • Recenser le type des données utiles pour la résolution du problème
  • Définir la difficulté pour les récupérer
  • Définir les traitements préparatoires de ces données

Recenser le type des données utiles

 Le monde a connu une explosion de production des données. Ces dernières sont aussi diverses que variées. Face à cette diversité, la difficulté sera de recenser les données susceptibles de nous être utiles pour résoudre le problème.

Si on souhaite faire un programme classifiant un film par son type (action, romance….), quelles sont les données utiles ? Cela peut être :

  • Le descriptif textuelle du film (les synopsis)
  • La bande d’annonce du film
  • Le film tout entier
  • etc…

Que savons nous sur ces données ?

Comme le succès de notre projet Machine Learning dépend grandement de la quantité et la qualité de données, cette étape consiste :

  • Définir les sources de données
  • Définir le degré de difficulté pour les récupérer

Définir les sources de données

Une fois les données à récupérer connues, il reste à savoir les sources depuis lesquelles il faudra puiser. Cela peut être des API externes (comme celle de Facebook, Twitter….), des bases de données, des fichiers de données (excel, CSV, XML….),  de l’OpenData, des données d’entreprises etc….

La source de données n’est pas le seul paramètre à prendre en compte. En effet, il est important de s’interroger sur la qualité de ces données. Ces dernières sont-elles fraîches ? régulièrement mises à jour ? sont-elles précises ? sont-elles biaisées en fonction de conditions particulières ?

la pertinence des données permettra un bon apprentissage à l’algorithme de Machine Learning

Définir la difficulté de récupération des données

Après avoir défini nos sources de données, il reste à savoir si elles nous sont accessibles. Est-ce que ces données sont libres de droits ? doit-on payer pour les avoir ? Quels sont les organismes détenteurs de ces données ? Quelles sont les modalités de communication avec la source de données pour les récupérer ?

En plus de s’interroger sur la provenance de nos données, il faut savoir où est ce qu’il faut les sauvegarder pour pouvoir les traiter ?  peut-on les demander à la volée ? doit-on les stocker ? Si oui, avons nous l’espace de stockage nécessaire ?

Toutes ces interrogations sont sur la frontière entre le machine learning et le Big Data. Il convient donc de leur trouver des réponses pour mener à bien le projet.

 

La suite

L’article touche à sa fin mais le sujet n’est pas encore terminé ! le prochain article traitera les trois points restants. Stay tuned ! 😉

Inscrivez-vous à la Newsletter
Rejoignez la communauté Mr mint, le blog Français dédié à la Data Science et recevez des contenus exclusifs et d'autres goodies !
Nous détestons les spams. Votre adresse e-mail ne sera pas vendue ou partagée avec quelqu'un d'autre.
13 Flares Twitter 0 LinkedIn 13 Reddit 0 Google+ 0 Filament.io 13 Flares ×

3 thoughts on “Aborder un problème de Machine Learning – Partie 1

  1. Pingback: Aborder un problème de Machine Learning – Partie 2 - Mr mint le blogueur sur le Java et le big data

  2. Siradio

    Bonjour Younes,

    J’ai un problème que je voudrais voir si je peux traiter avec du machine Learning.
    En fait je reçois des adresses de trois sources (A, B, C) différentes que je voudrais standardiser dans une cible X qui stocke les informations de l’adresse dans des champs différents (Type de voie, numéro, nom, …)
    Les deux premières sources (A, B) m’envoient des informations séparément c’est-à-dire le numéro de la voie, le type de voie, le nom de la rue, … C’est idéal !
    Par contre la 3ème (source C) envois l’adresse complète dans un seul champ et pas forcément dans l’ordre (c’est là le problème). Je dois détecter c’est quoi le numéro, le type de voie, etc… J’ai au moins un référentiel qui me liste tous les types de voies envoyés par la source. Par exemple pour boulevard (BLD, BOULEVARD), Avenue (AVENUE, AV), Rue (Rue, R), Allée (AL, ALEE)
    La grosse difficulté c’est de pouvoir reconnaître qu’une chaine de caractère est un type de voie.
    Exemple : si j’ai cette adresse : 2 Rue de l’Aviation en faisant un lien avec mon référentiel il m’enverra deux types de voies : Rue et Avenue (à cause de l’Aviation).
    En gros peut-on avec du machine Learning et à partir d’une chaine de caractère en entrée, faire une classification (Numéro de voie, Type de voie, libellée de la voie ?).

    Merci beaucoup pour ton aide .

    Reply
    1. wavatarYounes Benzaki Post author

      Bonsoir Siradio,

      Je pense que dans un premier temps, il faudra “standardiser” et tokénizer tes adresses, notamment, remplacer “AL” par allée (ou allee),
      idem pour BLD, boulevard etc….

      Donc grosso modo, quand tu vois une variante de boulevard (avec majucule ou miniscule etc), la remplacer par une un “token” qui
      indiquera qu’il s’agit d’un boulevard. idem pour rue et allée

      Regarder pour cela les techniques de NLP (Natural Language Processing) : Notamment Text stemming, enlever les stop-words, et tokenizer en (n-gram
      spécialement bi-gram (2-gram))

      Pour le NLP avec Python voir la librairie NLTK

      Une fois tokénizer, tu peux par la suite mettre un label sur chaque adresse de ton Data Set (dire si c’est un boulevard, rue etc….)

      Ensuite entrainer un classifieur (problème de classification) : notamment avec Bag-of-words, Naive Bayes, SVM ….

      quand t’as une nouvelle adresse, tu pourra faire le même process (nettoyage/tokenization), et l’injecter dans ton classifieur pour classifier

      Bon courage 🙂

      Reply

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *