Что такое target encoding и какие у него проблемы (overfitting, leakage)?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Target encoding — это способ заменить категориальный признак числом, обычно средним значением целевой переменной по категории. Его ценят за высокую полезность на табличных данных, но важно понимать риски: при неправильном расчёте он легко приводит к leakage и переобучению. Хороший ответ должен показать, что encoding считают только на train-данных и желательно с регуляризацией или out-of-fold схемой.
Определение:
Target encoding — это техника кодирования категориальных признаков, при которой каждой категории сопоставляют статистику целевой переменной, чаще всего среднее значение таргета для этой категории.
Примеры:
- для бинарной классификации: доля положительного класса в категории;
- для регрессии: среднее значение целевой переменной;
- иногда используют сглаженные оценки, чтобы не доверять редким категориям слишком сильно.
Смысл в том, чтобы превратить категорию в числовой признак, который несёт информацию о связи категории с таргетом.
Пример использования:
Допустим, есть признак city и таргет purchase:
import pandas as pd
df = pd.DataFrame({
"city": ["Moscow", "Moscow", "Kazan", "Kazan", "Kazan", "Sochi"],
"purchase": [1, 0, 1, 1, 0, 0]
})
target_mean = df.groupby("city")["purchase"].mean()
df["city_te"] = df["city"].map(target_mean)
print(df)
Результат:
Moscow→ 0.5Kazan→ 0.67Sochi→ 0.0
Такой признак затем можно подавать в линейную модель или бустинг.
Пояснение кода:
Код показывает базовую идею без защиты от утечек:
- Группируем строки по категории
city. - Считаем среднее значение
purchaseвнутри каждой группы. - Подставляем это среднее обратно в строки как новый числовой признак
city_te.
На практике так делать на всём датасете опасно, потому что каждая строка участвует в расчёте собственного признака. Для корректного обучения обычно используют:
- вычисление статистик только на train;
- out-of-fold target encoding;
- smoothing для редких категорий;
- добавление шума или смешивание с глобальным средним.
Ключевые моменты:
- Target encoding хорошо работает на табличных данных, особенно когда категорий много и они сильно связаны с таргетом.
- Основная проблема — leakage: если кодировку считать с использованием таргета той же строки, модель получает слишком “подсказочный” признак.
- Вторая проблема — overfitting, особенно на редких категориях, где среднее считается по 1–2 объектам и становится нестабильным.
- Для защиты используют out-of-fold схему, сглаживание к глобальному среднему и расчёт статистик только по train.
- В бустингах target encoding часто полезен, но его всё равно нужно применять аккуратно, чтобы не переоценить качество на валидации.