← retour aux snippets

category_encoders: CountEncoder et WOE

encoder par fréquence (CountEncoder) et Weight of Evidence

category_encoders: CountEncoder et WOE

objectif

Expliquer et montrer comment encoder par fréquence (CountEncoder) et Weight of Evidence.

code minimal

import numpy as np, pandas as pd
from category_encoders.count import CountEncoder
from category_encoders.woe import WOEEncoder

df = pd.DataFrame({"cat": np.random.choice(list("ABCD"), 500), "y": (np.random.rand(500)<0.3).astype(int)})
ce = CountEncoder(cols=["cat"]).fit(df, df["y"])
df_ce = ce.transform(df)
we = WOEEncoder(cols=["cat"]).fit(df, df["y"])
df_we = we.transform(df)
df_ce.head(), df_we.head()

utilisation

# pipeline avec logistic regression
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
pipe = Pipeline([("woe", WOEEncoder(cols=["cat"])), ("lr", LogisticRegression(max_iter=1000))])
# pipe.fit(df[["cat"]], df["y"])

variante(s) utile(s)

# CountEncoder peut être normalisé (normalize=True)
CountEncoder(cols=["cat"], normalize=True)

notes

  • WOE utile en scoring crédit (monotonicité).
  • CountEncoder faible fuite mais encore à valider en CV.