Feature Engineering на собеседовании Data Scientist
Карьерник — 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) / totalHashing.
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()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.
Стандартный подход:
- Удалить near-zero variance.
- Удалить высоко коррелирующие (> 0.95).
- Train модель, посмотреть feature_importances_.
- Permutation importance для надёжности.
- Удалить 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 флаг.
Связанные темы
- Bias-variance trade-off на собесе DS
- Cross-validation на собесе DS
- Time series CV и features на собесе DS
- SHAP и interpretability на собесе DS
- Подготовка к собесу Data Scientist
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+ вопросами для собесов.