Занимались ли вы генерацией признаков (feature engineering)?

«Занимались ли вы генерацией признаков (feature engineering)?» — вопрос из категории Предобработка данных, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, генерация признаков — это одна из самых важных и творческих частей в построении ML-моделей. Моя работа здесь всегда начинается с анализа домена и данных.

Конкретные примеры из практики:

  1. Для задачи прогнозирования оттока клиентов (churn prediction):

    • Создавал признаки, описывающие активность пользователя во времени: days_since_last_login, rolling_avg_session_duration_7d, cnt_transactions_last_month.
    • Генерировал статистические признаки по сегментам: avg_invoice_amount_for_user_segment, std_payment_delay_for_user_region.
    # Пример: создание признака "тренд трат"
    df['purchase_trend'] = df.groupby('user_id')['purchase_amount']
                              .transform(lambda x: x.rolling(window=3, min_periods=1).mean().pct_change())
  2. Для временных рядов (прогноз спроса):

    • Извлекал циклические признаки из даты: синус и косинус дня недели, часа дня, чтобы модель понимала цикличность.
    • Создавал лаг-признаки (значения за предыдущие дни) и скользящие статистики (среднее, стандартное отклонение за последнюю неделю).
  3. Работа с категориальными признаками:

    • Помимо One-Hot Encoding и Target Encoding, использовал счётчики (count encoding): как часто конкретное значение встречается в датасете. Это особенно полезно для категорий с высокой кардинальностью.

Методология:

  • После генерации большого пула признаков я всегда провожу отбор.
  • Использую feature_importance из деревьев (XGBoost, LightGBM) и SHAP-значения, чтобы понять, какие признаки действительно вносят вклад в предсказание модели, а какие являются шумом.
  • Domain knowledge — это ключ. Например, для e-commerce признак discount_depth_to_avg_price_ratio (глубина скидки относительно средней цены товара) часто оказывается более значимым, чем просто абсолютное значение скидки.