Feature Engineering на собеседовании Data Scientist

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем разбирать на собесе

Feature engineering — часто выигрывает больше, чем выбор алгоритма. На собесе DS: «как кодировать категории», «зачем cyclic features», «как избежать target leakage».

Scaling и normalization

StandardScaler — z-score: (x - mean) / std. Распределение → mean=0, std=1.

MinMaxScaler(x - min) / (max - min). → [0, 1].

RobustScaler — median-based, устойчив к outliers.

Зачем:

  • Linear модели, NN, kmeans, PCA — чувствительны к scale.
  • Деревья (RF, GB) — НЕ чувствительны (всё равно где split).

Encoding categorical

One-hot.

"red" → [1, 0, 0]
"blue" → [0, 1, 0]
"green" → [0, 0, 1]

Плюсы: для linear / NN. Минусы: высокая кардинальность → bloat.

Label encoding.

"red" → 0, "blue" → 1, "green" → 2

Плохо для linear (вводит ложный порядок). OK для деревьев.

Target encoding (mean encoding).

"red" → mean(target | category=red)

Сильно для high-cardinality (city, zip). Опасность leakage — нужно out-of-fold.

Frequency encoding.

"red" → count(category=red) / total

Hashing.

hash("red") % N → bucket

Для очень high-cardinality (миллионы значений). Возможны коллизии.

CatBoost / LightGBM — поддерживают native categorical, лучше всех ручных методов.

Datetime и cyclic features

Простые extracts:

  • year, month, day, dayofweek, hour.
  • is_weekend, is_holiday.

Cyclic encoding. Час 23 близок к часу 0, но как numbers они далеко. Решение:

df["hour_sin"] = np.sin(2 * np.pi * df["hour"] / 24)
df["hour_cos"] = np.cos(2 * np.pi * df["hour"] / 24)

То же для day-of-year (365), month (12).

Lag и rolling features

Для time series — лаги и скользящие.

df["lag_1"] = df["value"].shift(1)
df["lag_7"] = df["value"].shift(7)
df["rolling_mean_7"] = df["value"].rolling(7).mean()
df["rolling_std_30"] = df["value"].rolling(30).std()

Aggregations per group. Среднее по user / категории за прошлые 30 дней.

df.groupby("user_id")["amount"].rolling(30).mean()
Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Target encoding и leakage

Простой target encoding утекает информацию: используем target из тех же строк.

Out-of-fold target encoding:

from sklearn.model_selection import KFold

oof_encoding = np.zeros(len(X))
for train_idx, val_idx in KFold(5).split(X):
    means = X.iloc[train_idx].groupby("city")["target"].mean()
    oof_encoding[val_idx] = X.iloc[val_idx]["city"].map(means)

CatBoost делает это автоматически (ordered target encoding).

Smoothing. Города с 1-2 наблюдениями — нестабильное среднее. Smoothing:

encoded = (count * mean_local + alpha * mean_global) / (count + alpha)

Feature selection

Filter. Корреляция / mutual information с target. Быстрое pruning.

Wrapper. Backward / forward selection, recursive feature elimination.

Embedded. Lasso (L1), feature_importances_ из RF/GB, SHAP.

Стандартный подход:

  1. Удалить near-zero variance.
  2. Удалить высоко коррелирующие (> 0.95).
  3. Train модель, посмотреть feature_importances_.
  4. Permutation importance для надёжности.
  5. Удалить bottom features, если они мешают.

Частые ошибки

Scale на train+test вместе. Leakage — статистика test попадает в train. Fit на train, transform на test.

Target encoding без OOF. Catastrophic leakage.

Lag features без time-aware split. Проверка в случайном CV — leakage из будущего.

One-hot для high-cardinality. 100k категорий → 100k колонок. Используй target / hash encoding.

Использовать feature_importances_ напрямую. Смещён в пользу high-cardinality. Permutation importance честнее.

Cyclic encoding для линейных не-cyclic. Год — не cyclic. Day-of-week — да.

Игнорировать missing values. NaN — иногда сигнал. Создай is_missing флаг.

Связанные темы

FAQ

Когда не нужен feature engineering?

Deep learning часто учит features из raw data (image, text). Tabular — почти всегда нужно.

Что такое feature store?

Система для версионирования и сервинга фич. Feast, Tecton. Обеспечивает train/serve consistency.

Это официальная информация?

Нет. Статья основана на стандартных подходах в ML, документации scikit-learn / CatBoost.


Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.