Mis à jour le 14/05/2018
  • 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Exploitez au mieux votre jeu de données

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Le jeu de données (dataset) dont vous disposez constitue une ressource précieuse, il faut pouvoir l’utiliser à bon escient afin de pouvoir à la fois choisir un modèle et l'entraîner (ce que nous avons fait dans le chapitre pratique précédent)... mais aussi de pouvoir tester la qualité de ce modèle.

Voyons cela de plus près !

Echantillonnez les données

La première question à se poser est : est-ce qu’on va utiliser toutes les données d'exemple dont on dispose ?

En effet, s'il s’avère qu’on a beaucoup de données d’entraînement et/ou que l’algorithme d’apprentissage est lourd, il est possible qu’utiliser toutes les données prennent énormément de temps et/ou de ressources hardware. Dans ce cas, il faut naturellement échantillonner et ne récupérer qu’un petit pourcentage du dataset qui servira au travail de modélisation pour aller plus vite. On parle d'étape de sampling en anglais.

Ça ne sert à rien d'utiliser toutes les données pour tester des modèles et se retrouver à attendre à chaque fois plusieurs minutes au lieu de quelques secondes, n'est-ce pas ? 😇

Le clavier c'est pas très confortable comme oreiller
Le clavier n'est pas très confortable comme oreiller...

Le problème lorsqu’on effectue un échantillonnage, c'est que l’on doit être bien sûr que cet échantillon est représentatif de toutes les données. En effet, dans l’exemple des loyers par exemple, si je ne récupère que des données qui proviennent d'Ile-de-France, je serai forcément biaisé pour mes prédictions de loyer qui proviennent d'autres régions. Il faut donc s’assurer de piocher les données de manière uniforme sur toute la population que l'on souhaite considérer. 

Si on ne fait pas attention, on peut mal sélectionner au sein de la population et introduire un biais!
Si on ne fait pas attention, on peut mal sélectionner au sein de la population et introduire un biais!

Pour effectuer un échantillon, c'est assez simple. Une technique est de récupérer des identifiants tirées aléatoirement grâce à la fonction de numpy  randint 

sample = np.random.randint(data_size, size=data_size*0.1)
sampled_data = data[sample]

Mettez de côté une partie des données pour tester votre modèle

Comme nous l’avons vu dans les deux chapitres précédents, l’entraînement d’un modèle revient à mesurer l’erreur de la sortie de l’algorithme avec les données d’exemples, et chercher à la minimiser. 

Un premier piège à éviter est donc d'évaluer la qualité de votre modèle final à l'aide des mêmes données qui ont servies pour l'entraînement. En effet, le modèle est complètement optimisé pour les données à l'aide desquelles il a été créé. L'erreur sera précisément minimum sur ces données. Alors que l'erreur sera toujours plus élevée sur des données que le modèle n'aura jamais vues ! 

Pour minimiser ce problème, la meilleure approche est de séparer dès le départ notre jeu de données en deux parties distinctes :

  • Le training set, qui va nous permettre d’entraîner notre modèle, et sera utilisé par l’algorithme d’apprentissage. C'est celui dont on a parlé depuis le début en fait.

  • Le testing set, qui permet de mesurer l’erreur du modèle final sur des données qu’il n’a jamais vues. On va simplement passer ces données comme s'il s'agissait de données que l’on n'a encore jamais rencontrées (comme cela va se passer ensuite en pratique pour prédire de nouvelles données) et mesurer la performance de notre modèle sur ces données. On appelle aussi cela held-out data, vraiment pour souligner que ce sont des données auxquelles on ne va pas toucher avant la toute fin pour pouvoir être bien sûr que le modèle fonctionne.

C'est à vous de définir la proportion du dataset que vous souhaitez allouer à chaque partie. En général, les données sont séparées avec les proportions suivantes : 80% pour le training set et 20% pour le testing set. 

On peut cette fois utiliser la fonction de scikit-learn  train_test_split qui peut prendre en paramètre la proportion désirée :

from sklearn.model_selection import train_test_split
xtrain, xtest, ytrain, ytest = train_test_split(x, y, train_size=0.8)

Pourquoi ne pas utiliser toutes les données pour l’entraînement et réutiliser ensuite toutes les données pour tester le modèle ?

En fait, il s’avère que si on entraîne le modèle avec des données, il va naturellement être plus performant sur ces données-là. Ce qui nous intéresse c’est de mesurer sa performance sur des données qu’il n’a jamais vues puisque c’est ce qui va se passer en pratique. Cette performance est appelée la généralisation du modèle : sa capacité à effectuer des prédictions de qualité sur des situations jamais rencontrées. On étudiera ça plus en détails dans la prochaine partie de ce cours. 😀

En résumé

On a maintenant une meilleure idée de la manière dont on peut correctement exploiter nos données :

  • S’il y en a beaucoup, on travaille d'abord uniquement avec un échantillon représentatif de la population pour pouvoir aller plus vite.

  • On sépare dès le départ en deux parties notre jeu de données : un training set pour créer le modèle et un testing set pour tester la qualité du modèle.

 

Exemple de certificat de réussite
Exemple de certificat de réussite