Pour ce TP, on va utiliser ce projet Kaggle. Vous pouvez également télécharger le jeu de données gratuitement via le site Kaggle.
Exploration et cleaning des données
Pourquoi utiliser le label encoding n’est pas une très bonne chose?
Tout d’abord, car comme son nom l’indique le LabelEncoder est plutôt pensé pour encoder la target (les labels). Concernant les features, on peut utiliser, par exemple, un OrdinalEncoder. Mais aussi et surtout car il faut nous poser une question : Existe-t-il un “ordre” dans nos données.
En effet, transformer A, B, C en 1, 2, 3 n'est possible que si A > B > C, autrement dit, si la variable est bien “ordinale”. Si tel n’est pas le cas, il vaut mieux utiliser des transformations telles que le OneHotEncoding.
Préparation des données et classifieur naïf
Pourquoi utiliser un classifieur naïf ?
Valider que la forme des données est compatible avec une modélisation.
Avoir un score de base. On utilise le DummyClassifier pour nous donner une idée du score de base que l'algorithme le plus simple obtiendrait en faisant des prédictions.
Attester du bon apprentissage de nos futurs modèles. En effet, imaginons que notre DummyClassifier ait un score à 0.55 et notre Régression Logistique à 0.56. Il y a donc un delta très faible entre l’un et l’autre. Autrement dit, notre régression logistique n’est pas très bonne. Pour pouvoir établir ce constat, il nous faut une baseline, celle fournie par le DummyClassifier.
Pourquoi y a-t-il d’autres scores que l’accuracy score?
Comme évoqué dans la vidéo, prédire 1 alors que la vraie valeur était 0 n’a souvent pas le même impact que prédire 0 alors que la vraie valeur était 1.
Remplaçons 1 par True, 0 par False et mettons nous dans le cadre classique du diagnostic d’une maladie possiblement grave. Vaut-il mieux faire un test qui renvoie False (pas malade) alors que la vraie valeur est True (malade), ou bien l’inverse ? Je vous laisse réfléchir là-dessus.
Concernant les autres scores très souvent utilisés, voici l’article dédié d’un site que vous connaissez sûrement.
Régression Logistique et SVM
Quelques éléments abordés rapidement dans la vidéo doivent faire l'objets de compléments d'information:
Dit-on un ou une SVM?
Cela dépend. Certains en disent un, d'autres en disent une. Faites comme il vous convient !
D'où viennent les messages d’erreurs ?
Et bien, le solveur est en quelque sorte l'algorithme utilisé pour effectuer l'entraînement du modèle. Il en existe de nombreux, certains sont meilleurs sur les gros datasets, d’autres sur les petits, par exemple. On parle généralement de la capacité du modèle à “converger”. Retrouvez la liste de ces solveurs et leurs spécificités sur la page dédiée de sklearn (en anglais).
Optimisation des modèles
Quelques éléments abordés rapidement dans la vidéo doivent faire l'objets de compléments d'information :
Qu'est ce que la validation croisée ?
La validation croisée consiste, en quelques mots, à subdiviser le jeu de données de train en différents sous jeux de données train / test afin de d'avoir non pas un score, mais plusieurs scores, sur le jeu de données de train.
1% de gain, ça n'est pas grand chose ?
Certes … mais voyons les choses autrement. Nous avions 5% d'erreurs, et nous avons 4% d’erreurs, soit 1 / 5 = 20% d'erreurs en moins !
Allez plus loin
Le LabelEncoder n’est pas conseillé dans ce genre de configuration. On lui préférera par exemple un OrdinalEncoder ou un OneHotEncoder . Quelles sont les limites de ce types d’encoders, quand peut-on ou ne peut-on pas les utiliser? Quels autres encoders peut-on utiliser à la place ? Quels sont leurs limites ?
Nous avons travaillé sur les données brutes, mais il peut être intéressant de scaler les données, avec un StandardScaler par exemple. Quel aurait été l’impact d’une telle transformation ? Quels sont les autres scalers les plus souvent utilisés ?
Nous n’avons pas non plus fait de réduction de dimension sur le jeu de données. Était-il utile ou pertinent de prendre toutes les dimensions à notre disposition ? Appliquer une méthode de réduction de dimensionnalité comme une PCA aurait-il été judicieux ?
Nous avons utilisé une Régression Logistique et une SVM Linéaire. D’autres estimateurs auraient-ils été performants ? Par exemple un KNN Classifier ou un Decision Tree Classifier. Si oui, quels hyper-paramètres aurait-on pu tester ?
Nous avons vu l'impact de certains hyper-paramètres sur nos modèles, pouvez vous faire un graphique avec le mean_test_score en fonction de chaque hyper-paramètre ?
Nous avons travaillé sur le ROC-AUC et l’accuracy score. Quelles sont les autres métriques souvent utilisées en classification ? Qu’est-ce que le recall, la précision ou le f1-score par exemple ?
Ressources internes
Cours OpenClassrooms : Initiez vous au Machine Learning.
Ressources externes
Une vidéo de la chaîne freecodecamp qui couvre de façon très structurée les basiques du Machine lLearning : vidéo (en anglais).
La playlist de la chaine machine learnia : série de vidéos (notamment vidéos 20 à 27).
la chaine statquest, notamment video sur la régression logistique (en anglais) et sur les SVM (en anglais).