TargetEncoder بومی: کدگذاری با متغیر هدف، بدون نشت داده
TargetEncoder توی scikit-learn موقع fit_transform از cross-fitting داخلی استفاده میکنه: هر سطر با میانگینهایی کد میشه که خودِ اون سطر توی محاسبهشون نبوده، و همین نشت متغیر هدف رو خنثی میکنه.
کاربرد
متغیرهای دستهای با کاردینالیتی خیلی بالا که one-hot براشون اصلاً عملی نیست (هزاران مقدار یکتا).
پیشنیازها
scikit-learn 1.3+
Python
from sklearn.preprocessing import TargetEncoder
from sklearn.pipeline import Pipeline
from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.compose import ColumnTransformer
prep = ColumnTransformer([
("target_enc", TargetEncoder(cv=5, smooth="auto"), ["ville", "code_naf"]),
], remainder="passthrough")
pipe = Pipeline([
("prep", prep),
("clf", HistGradientBoostingClassifier(random_state=42)),
])
# fit_transform utilise le cross-fitting ; transform (en test) utilise
# l'encodage appris sur tout le train -> aucune fuite.
pipe.fit(X_train, y_train)نتیجه
Pipeline(steps=[('prep',
ColumnTransformer(remainder='passthrough',
transformers=[('target_enc',
TargetEncoder(cv=5,
smooth='auto'),
['ville', 'code_naf'])])),
('clf', HistGradientBoostingClassifier(random_state=42))])TargetEncoderFuite de donnéesCardinalitéEncodage