Encodage de la cible et gestion avancée des catégories
Encodage de la cible, encodage par fréquence, encodage binaire et représentations vectorielles pour les colonnes à forte cardinalité.
Encodage de la cible et gestion avancée des catégories est une leçon Learn AI with Python gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn AI with Python, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn AI with Python comprend 4 leçons au total.
Le problème de l’encodage des catégories
Les modèles ont besoin de nombres, mais les catégories sont textuelles. L’encodage à chaud convient à un petit nombre de catégories, mais les variables à forte cardinalité (des milliers de villes ou de produits) créent trop de colonnes.
Limites des encodages à chaud et par étiquettes
L’encodage à chaud fait exploser la dimension des données. L’encodage simple par étiquettes invente un ordre qui n’existe pas (la ville 5 n’est pas supérieure à la ville 2). Pour les données à forte cardinalité, nous avons besoin d’encodages plus adaptés.
Qu’est-ce que l’encodage par cible
L’encodage par cible remplace chaque catégorie par la moyenne de la cible pour cette catégorie. Une ville devient le taux d’attrition moyen des clients de cette ville : un unique nombre informatif.
import pandas as pd
means = df.groupby("city")["target"].mean()
df["city_encoded"] = df["city"].map(means)Le risque de surapprentissage
Les catégories rares, associées à peu de lignes, obtiennent des moyennes extrêmes qui divulguent la cible et provoquent un surapprentissage. Une catégorie observée une seule fois reproduirait exactement cette étiquette unique. Nous corrigeons cela par un lissage.
Lissage de l’estimation
Le lissage combine la moyenne de la catégorie avec la moyenne globale, en pondérant le résultat selon le nombre d’échantillons de la catégorie. Les catégories rares se rapprochent de la moyenne globale, ce qui réduit la variance.
import pandas as pd
global_mean = df["target"].mean()
agg = df.groupby("city")["target"].agg(["mean", "count"])
smoothing = 10
agg["enc"] = (agg["count"] * agg["mean"] + smoothing * global_mean) / (agg["count"] + smoothing)
df["city_enc"] = df["city"].map(agg["enc"])La bibliothèque category_encoders
Le paquet category_encoders implémente ces encodeurs avec une API scikit-learn. Ils s’intègrent donc aux chaînes de traitement et s’appliquent de manière cohérente aux ensembles d’entraînement et d’évaluation.
import category_encoders as ce
encoder = ce.TargetEncoder(cols=["city", "product"], smoothing=10)
X_enc = encoder.fit_transform(X_train, y_train)
X_test_enc = encoder.transform(X_test)Éviter les fuites en pratique
Effectuez toujours le fit de l’encodeur uniquement sur les données d’entraînement, puis appliquez transform aux données de validation et d’évaluation. Mieux encore, utilisez la validation croisée ou un encodage hors pli, afin que chaque ligne soit encodée à partir de données qui l’excluent.
import category_encoders as ce
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
pipe = make_pipeline(
ce.TargetEncoder(cols=["city"]),
LogisticRegression(),
)
# fit inside CV to encode without leakageEncodage binaire
BinaryEncoder convertit les catégories en chiffres binaires, en utilisant seulement log2(N) colonnes au lieu de N. C’est un compromis compact entre l’encodage indicateur et l’encodage de la cible.
import category_encoders as ce
encoder = ce.BinaryEncoder(cols=["product_id"])
X_enc = encoder.fit_transform(X_train)
# 256 categories -> 8 binary columnsAutres encodeurs utiles
category_encoders propose également CountEncoder (fréquence de chaque catégorie), LeaveOneOutEncoder (moyenne de la cible en excluant la ligne actuelle) et CatBoostEncoder (statistiques ordonnées de la cible).
import category_encoders as ce
count_enc = ce.CountEncoder(cols=["city"])
loo_enc = ce.LeaveOneOutEncoder(cols=["city"])Gérer une grande cardinalité
Pour une très grande cardinalité, l’encodage par la cible ou par le nombre compresse les données en une seule colonne, l’encodage binaire reste compact et le regroupement des catégories rares dans un compartiment « autres » réduit le bruit. Choisissez la méthode en fonction de la cardinalité et du risque de fuite.
import pandas as pd
freq = df["product"].value_counts()
rare = freq[freq < 20].index
df["product"] = df["product"].replace(rare, "other")Choisir un encodeur
Peu de catégories : encodage indicateur. Modèles arborescents avec de nombreuses catégories : encodage par la cible ou CatBoost. Si la compacité est nécessaire : encodage binaire. Protégez-vous toujours contre les fuites en effectuant le fit uniquement sur l’entraînement et en utilisant le lissage ou des méthodes hors pli.
Vérification rapide
Évaluez vos connaissances sur l’encodage catégoriel.
Récapitulatif
Récapitulatif : l’encodage de la cible remplace une catégorie par sa moyenne de la cible et utilise le lissage pour limiter l’effet des catégories rares. Utilisez category_encoders (TargetEncoder, BinaryEncoder, CatBoost/LeaveOneOut) et effectuez le fit uniquement sur l’entraînement ou hors pli pour éviter les fuites. Les encodeurs compacts gèrent les caractéristiques à grande cardinalité, contrairement à l’encodage indicateur.
Questions Fréquemment Posées
La leçon « Encodage de la cible et gestion avancée des catégories » est-elle gratuite ?
Oui — le texte complet de « Encodage de la cible et gestion avancée des catégories » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn AI with Python, passe à CoddyKit PRO. Le cours Learn AI with Python comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Encodage de la cible et gestion avancée des catégories » ?
Encodage de la cible, encodage par fréquence, encodage binaire et représentations vectorielles pour les colonnes à forte cardinalité. Tu pratiques Learn AI with Python avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Learn AI with Python ?
Aucune expérience préalable n'est requise. Learn AI with Python sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Encodage de la cible et gestion avancée des catégories » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Learn AI with Python ?
Oui. Chaque leçon Learn AI with Python inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Méthodes de sélection des caractéristiques
- Créer des caractéristiques d’interaction et polynomiales
- Encodage de la cible et gestion avancée des catégories
- Ingénierie automatisée des caractéristiques avec Featuretools