← retour aux snippets

category_encoders: TargetEncoder

encoder des catégories par la moyenne conditionnelle de la cible

category_encoders: TargetEncoder

objectif

Expliquer et montrer comment encoder des catégories par la moyenne conditionnelle de la cible.

code minimal

import numpy as np
import pandas as pd
from category_encoders.target_encoder import TargetEncoder
from sklearn.model_selection import KFold

df = pd.DataFrame({
    "cat": np.random.choice(list("ABCDE"), size=1000),
    "x": np.random.randn(1000),
    "y": (np.random.rand(1000) < 0.2).astype(int)
})
te = TargetEncoder(cols=["cat"], smoothing=0.3)
y = df["y"].values
X_enc = te.fit_transform(df[["cat","x"]], y)
X_enc.head()

utilisation

# CV pour éviter leakage
kf = KFold(n_splits=5, shuffle=True, random_state=0)
oof = np.zeros(len(df))
for tr, te_idx in kf.split(df):
    te_cv = TargetEncoder(cols=["cat"], smoothing=0.3)
    oof[te_idx] = te_cv.fit_transform(df.loc[tr, ["cat"]], y[tr]).loc[te_idx, "cat"]
oof[:5]

variante(s) utile(s)

# ajouter au pipeline scikit-learn (via category_encoders compatible)
# from sklearn.pipeline import make_pipeline
# pipe = make_pipeline(TargetEncoder(cols=["cat"]), LogisticRegression())

notes

  • Toujours générer l’encodage sur le train uniquement (OOF) pour éviter les fuites.
  • Le paramètre smoothing évite l’overfit sur catégories rares.