.. blogpost:: :title: Tranformer les variables catégorielles et contrastes :keywords: categorie, scikit-learn :date: 2016-11-30 :categories: machine learning :lid: encoding-categorie-id 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 :math:`\{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 `_.