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.