Sobes.tech
Back to questions
Middle — Senior
13

Что такое target encoding и какие у него проблемы (overfitting, leakage)?

Companies where asked
SelectelSelectel
Rubbles

Answer from AI

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.5
  • Kazan → 0.67
  • Sochi → 0.0

Такой признак затем можно подавать в линейную модель или бустинг.

Пояснение кода:

Код показывает базовую идею без защиты от утечек:

  1. Группируем строки по категории city.
  2. Считаем среднее значение purchase внутри каждой группы.
  3. Подставляем это среднее обратно в строки как новый числовой признак city_te.

На практике так делать на всём датасете опасно, потому что каждая строка участвует в расчёте собственного признака. Для корректного обучения обычно используют:

  • вычисление статистик только на train;
  • out-of-fold target encoding;
  • smoothing для редких категорий;
  • добавление шума или смешивание с глобальным средним.

Ключевые моменты:

  • Target encoding хорошо работает на табличных данных, особенно когда категорий много и они сильно связаны с таргетом.
  • Основная проблема — leakage: если кодировку считать с использованием таргета той же строки, модель получает слишком “подсказочный” признак.
  • Вторая проблема — overfitting, особенно на редких категориях, где среднее считается по 1–2 объектам и становится нестабильным.
  • Для защиты используют out-of-fold схему, сглаживание к глобальному среднему и расчёт статистик только по train.
  • В бустингах target encoding часто полезен, но его всё равно нужно применять аккуратно, чтобы не переоценить качество на валидации.