2016-11-30 Tranformer les variables catégorielles et contrastes

Certains modèles de machine learning requiert de transformer les variables catégorielles en variables numériques. Il existe plusieurs façons de faire cela : Patsy: Contrast Coding Systems for categorical variables. Les extensions de scikit-learn incluent un module qui fait cela aussi mais façon scikit-learn : category_encoders implémente les transformations suivantes :

  • Backward Difference Coding : Voir Backward Difference Coding

  • Binary : cette transformation est identique à One Hot mais toutes les colonnes sont regroupées en une seule. Chaque nombre a une représentation binaire identique aux colonnes regroupées.

  • Hashing : chaque catégorie est transformée en hash. Cela veut dire chaque catégorie est transformée en une chaîne de caractères de longueur fixe. On peut ajuster le hash de telle sorte que plusieurs catégories seront encodées de la même manière si le nombre de catégories est trpo grand.

  • Helmert Coding : Voir Helmert.

  • One Hot : chaque catégorie devient une colonne à part entière qui prend ses valeurs dans \{0,1\} indiquant si l’observation fait partie de cette catégorie ou non. Si la catégorie est renseignée à chaque fois, la somme de ces colonnes fait toujours 1. Le nouveau jeu de données peut poser des problèmes pour toutes les méthodes supposant que la matrice des covariances est inversible.

  • Ordinal : convertit les catégories en entier stocké dans une seule colonne.

  • Polynomial Coding : Voir Orthogonal Polynomial Coding.

  • Sum Coding : Voir Sum (Deviation) Coding.

L’idée de base derrière tous ces schémas est la notion de contraste. On souhaite affecter à chaque catégorie une valeur réelle qui soit en adéquation avec le problème de machine learning considéré et celles-ci sont estimées en fonction de la variable Y à prédire, le plus souvent avec une régression linéaire.

Voir également Coding schemes covered.