Jeu de données avec des catégories

Le jeu de données Adult Data Set ne contient presque que des catégories. Ce notebook explore différentes moyens de les traiter.

données

La variable fnlwgt représente une forme de pondération : le nombre d'individus que chaque observation représente. Elle ne doit pas servir à la prédiction, comme pondération qu'on ignorera : cette pondération n'est pas liée aux données mais à l'échantillon et elle est impossible à construire. Il faut s'en passer.

catégories

On garde la liste des variables catégorielles.

La fonction get_dummies est pratique mais problématique si les modalités de la base d'apprentissage et la base de test sont différentes, ce qui est fréquemment le cas pour les catégories peu fréquentes. Il faudrait regrouper les deux bases, l'appliquer puis sépareer à nouveau. Trop long. On veut utiliser OneHotEncoder et LabelEncoder mais ce n'est pas très pratique parce que OneHotEncoder n'accepte que les colonnes entières et LabelEncoder et peut traiter qu'une colonne à la fois.

On utilise OneHotEncoder du module category_encoders.

C'est assez compliqué à lire. On renomme les colonnes avec les noms des catégories originaux. Il y a probablement mieux mais ce code fonctionne.

C'est plus clair. Une dernière remarque sur le paramètre handle_missing et handle_unknown. Le premier définit la façon de gérer les valeurs manquantes, le premier la façon dont le modèle doit gérer les catégories nouvelles, c'est-à-dire les catégories non vues dans la base d'apprentissage.

premier jet

On construit un pipeline.

On essaye avec une RandomForest.

On regarde l'importance des features.

On compare avec XGBoost. L'âge semble la variable plus importante. Cela dit, si ce graphique donne quelques pistes, ce n'est pas la vérité car les variables peuvent être corrélées. Deux variables corrélées sont interchangeables.

On retrouve presque les mêmes variables mais pas dans le même ordre. On essaye un dernier module catboost.

Les modèles sont à peu près d'accord sur la performance mais pas vraiment sur l'ordre des features les plus importantes. Comme ce sont tous des random forests, même apprises différemment, on peut supposer qu'il existe des corrélations entre les variables. Des corrélations au sens du modèle donc pas nécessairement linéaires.

Courbe ROC

GridSearch

On cherche à optimiser les hyperparamètres sur la base d'apprentissage. On vérifie d'abord que les données sont bien identiquement distribuées. La validation croisée considère des parties contigües de la base de données. Il arrive que les données ne soient pas tout-à-fait homogènes et qu'il faille les mélanger. On compare les performances avant et après mélange pour vérifier que l'ordre des données n'a pas d'incidence.

L'ordre de la base n'a pas d'incidence.

Il faudrait continuer à explorer les hyperparamètres et confirmer sur la base de test. A priori, cela marche mieux avec plus d'arbres.

Features polynômiales

On essaye même si cela a peu de chance d'aboutir compte tenu des variables, principalement catégorielles, et du fait qu'on utilise une forêt aléatoire.

Ca n'améliore pas.

Interprétation

On souhaite en savoir plus sur les variables.

Ce n'est pas facile à voir. Il faudrait essayer avec bokeh ou essayer de procéder autrement.

ACM

Ce qui suit n'est pas tout-à-fait une ACM mais cela s'en inspire. On considère les variables comme des observations et on les projette sur des plans définis par les axes d'une ACP. On normalise également car on mélange variables continues et variables binaires d'ordre de grandeur différents. Les calculs sont plus précis lorsque les matrices ont des coefficients de même ordre. Le dernier exercice de cet examen Programmation ENSAE 2006 achèvera de vous convaincre.