Что такое feature engineering простыми словами

Модель не понимает контекст так, как человек. Feature engineering помогает представить данные в форме, из которой можно извлечь полезный сигнал.

Когда человек смотрит на историю покупок клиента, дату регистрации или список действий на сайте, он быстро видит контекст. Можно предположить, что новый пользователь ведёт себя иначе, чем постоянный, а частые визиты в последние дни могут говорить о высоком интересе к продукту. Модель машинного обучения не делает таких выводов сама по себе. Она получает набор чисел и значений в таблице, поэтому нужный для задачи смысл приходится выразить через признаки.

Feature engineering — это работа по подготовке и созданию признаков для модели. Специалист берёт сырые данные и преобразует их так, чтобы алгоритм мог использовать полезные свойства объекта: возраст записи, количество действий за период, день недели, категорию товара, долю успешных операций или наличие пропуска в важном поле. Эта работа часто определяет качество результата не меньше, чем выбор конкретного алгоритма.

Что модель видит в данных

Признак — это измеряемое свойство объекта, которое подаётся модели на вход. Для клиента это может быть возраст, город, число покупок за месяц или количество обращений в поддержку. Для заказа — сумма, день недели, способ оплаты и время между оформлением и доставкой. Для текста — длина сообщения, частота отдельных слов или другие характеристики, которые можно представить в виде чисел.

Сырая колонка в таблице не всегда является хорошим признаком. Например, дата регистрации в формате 2026-01-15 сама по себе мало говорит модели. Но из неё можно получить количество дней с момента регистрации, месяц, день недели или признак того, что пользователь зарегистрировался недавно. Эти новые значения могут быть ближе к реальному поведению, которое нужно предсказать.

Важно, что признаки создаются не ради увеличения числа колонок. Каждый из них должен быть связан с задачей. Если сервис пытается предсказать вероятность покупки, имеет смысл смотреть на активность пользователя, историю заказов или просмотр карточек товаров. Если задача связана с прогнозом спроса, полезнее учитывать дату, сезонность, цену и прошлые продажи.

Как сырые данные превращаются в признаки

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

Другой важный источник — история действий. Вместо длинного списка событий можно посчитать число визитов за последние семь дней, сумму покупок за месяц, среднее время ответа поддержки или количество отменённых заказов. Такие агрегаты помогают собрать поведение пользователя в компактный набор характеристик, с которыми модели проще работать.

Категориальные данные тоже обычно требуют подготовки. Город, тип устройства или категория товара часто приходят как текст. Чтобы алгоритм мог использовать их в расчётах, значения кодируют. Иногда категорию представляют отдельными признаками, иногда задают естественный порядок, если он действительно есть. Если в данных встречается много редких значений, часть из них может быть разумно объединить в общую группу — но только если это соответствует смыслу задачи.

Пропуски — ещё одна обычная ситуация. Их не всегда нужно просто удалять вместе со строками. Иногда отсутствие значения само по себе несёт информацию: например, пользователь не указал номер телефона или не выбрал дополнительную настройку. В зависимости от данных пропуск можно заполнить, оставить как отдельную категорию или дополнительно создать признак, который отмечает факт отсутствия значения.

Пример на данных сервиса

Представь, что сервис хочет оценить, оформит ли пользователь подписку в ближайшую неделю. В исходной таблице есть дата регистрации, список посещённых страниц, число визитов, обращения в поддержку и информация о предыдущих покупках. Часть этих данных уже полезна, но часть нужно привести к виду, удобному для модели.

user_features = {
    "days_since_registration": 14,
    "visits_last_7_days": 8,
    "visited_pricing_page": True,
    "support_tickets_last_30_days": 1,
    "previous_purchases": 0
}

В этом примере дата регистрации превратилась в количество дней с момента создания аккаунта. История посещений стала числом визитов за выбранный период и логическим признаком просмотра страницы тарифов. Вместо полного списка действий модель получает компактный набор характеристик, которые можно сравнивать между разными пользователями.

Конечно, хороший признак не появляется автоматически только потому, что его можно посчитать. Нужно проверить, известен ли он в момент прогноза, не создаёт ли он ошибочную зависимость и улучшает ли оценку модели на новых данных. Именно эта проверка отличает осмысленную подготовку признаков от случайного добавления колонок.

Почему важно не допустить утечку данных

Одна из самых опасных ошибок в feature engineering — утечка данных. Она возникает, когда в признаки попадает информация, которой не будет в момент реального прогноза. Например, если ты пытаешься предсказать покупку на следующей неделе, нельзя использовать итоговый статус заказа, созданного уже после момента прогноза.

С утечкой модель может показать впечатляющий результат во время эксперимента. Однако после запуска качество резко ухудшится, потому что в реальной ситуации недоступны данные из будущего. Поэтому перед добавлением каждого признака полезно задать простой вопрос: могло ли приложение знать это значение в тот момент, когда нужно было сделать предсказание?

Важно и то, как признаки готовятся для обучающей и тестовой частей данных. Если статистики или правила преобразования рассчитываются сразу по всей таблице, информация из тестовой части может незаметно повлиять на обучение. В дальнейшем для таких преобразований используют pipeline, который учится на обучающих данных и затем применяет те же правила к новым примерам.

Признаки, модель и проверка результата

Feature engineering не существует отдельно от оценки модели. Хорошая идея должна подтверждаться результатом на данных, которые модель не видела во время обучения. Поэтому обычно начинают с базового варианта: берут несколько понятных признаков, выбирают простую модель и фиксируют её метрику. Затем добавляют новые признаки небольшими группами и смотрят, меняется ли качество.

Если новый признак улучшил метрику, это ещё не всегда означает, что его нужно оставлять. Полезно оценить, насколько он понятен, можно ли стабильно рассчитывать его для новых объектов и не делает ли он систему слишком сложной. Иногда несколько хорошо объяснимых признаков дают больше пользы, чем десятки колонок, смысл которых никто не может описать.

При работе с табличными данными особенно важно не торопиться менять алгоритмы. Простая модель с качественно подготовленными признаками часто становится хорошей отправной точкой. Если результат не устраивает, сначала стоит проверить данные, постановку задачи и способ оценки, а уже потом переходить к более сложным моделям.

Где feature engineering встречается в работе

Для Data Scientist подготовка признаков — это способ связать понимание предметной области с моделью. Специалист исследует данные, формулирует гипотезы и проверяет, какие характеристики помогают сделать прогноз полезнее. Для ML Engineer важна и другая сторона: те же преобразования должны одинаково работать при обучении модели и при получении новых предсказаний.

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

Если тебе интересно лучше понять различия между близкими ролями, прочитай статью «ML Engineer или Data Scientist: в чём разница». Она помогает увидеть, почему одна и та же работа с признаками может иметь исследовательский или инженерный акцент.

Что изучить дальше

Feature engineering нельзя освоить только по списку приёмов. Важно научиться видеть задачу, работать с данными, строить базовую модель и проверять, как меняется результат после каждого осмысленного изменения. Именно поэтому подготовка признаков логично идёт после Python, работы с таблицами, статистики и основ машинного обучения.

На TeoBrain эту тему продолжает курс «Scikit-learn и Feature Engineering на Python». В нём можно последовательно разобрать работу с данными, кодирование, масштабирование, пайплайны, подготовку признаков и оценку модели на практике.

Если ты пока только собираешь маршрут в машинном обучении, начни со статьи «С чего начать машинное обучение: понятный путь без лишней спешки» и посмотри профессиональный трек Machine Learning Engineer / Data Scientist. Он помогает увидеть, как Python, данные, статистика, модели и инженерные инструменты постепенно складываются в прикладной навык.

Назад к списку

Обучение и развитие