В Data Science часто можно услышать мнение, что алгоритмы машинного обучения сегодня стали доступным и стандартизированным инструментом. Современные библиотеки позволяют использовать сложные модели, включая нейросети, буквально в несколько строк кода. Однако на практике качество результатов сильно различается: одни модели показывают высокую точность, а другие работают нестабильно. Причина часто кроется не в выборе алгоритма, а в качестве и представлении данных, которыми его кормят.
Чтобы модель могла эффективно работать с исходной информацией, данные необходимо предварительно подготовить. Этим и занимается Feature Engineering (конструирование признаков) — процесс преобразования исходных данных в формат, который лучше подходит для обучения моделей машинного обучения.
Что такое Feature Engineering в машинном обучении и анализе данных
Представим задачу классификации объектов, например, различие между яблоками и апельсинами. В исходных данных может быть указана информация о цвете в формате RGB и весе объекта. Для человека такие характеристики интуитивно понятны, но для модели машинного обучения значения RGB (255, 165, 0) — это просто набор чисел без контекста.
Feature Engineering — это процесс создания новых признаков на основе исходных данных, которые помогают модели лучше выявлять закономерности. Например, вместо трех отдельных цветовых каналов можно добавить один признак, отражающий близость цвета к оранжевому диапазону, или использовать дополнительные характеристики поверхности объекта, если такие данные доступны.
По сути, Feature Engineering — это этап, на котором аналитик или дата-сайентист помогает модели извлечь полезную информацию из данных, делая признаки более информативными и релевантными для конкретной задачи.

Зачем нужен Feature Engineering
Многие новички считают, что достаточно загрузить все данные в сложную нейросеть, и она сама найдет нужные зависимости. На практике это не так. Принцип Garbage In, Garbage Out (мусор на входе — мусор на выходе) работает безотказно. Качественные признаки модели позволяют даже простому алгоритму (вроде линейной регрессии) работать лучше, чем сложной нейросети на плохих данных.
Создание информативных признаков снижает нагрузку на модель. Например, если заранее рассчитать показатель «отношение долга к доходу» для банковской задачи, модели не нужно самостоятельно выводить эту зависимость. Это упрощает обучение, ускоряет вычисления и снижает риск переобучения.
Грамотно подобранные признаки помогают модели выявлять реальные закономерности в данных, а не подстраиваться под случайный шум в обучающей выборке.
Виды признаков
Данные могут поступать в разных форматах, и для каждого типа признаков требуется свой подход к обработке:
Числовые (Numeric) ― наиболее простой и распространенный тип признаков. К ним относятся возраст, цена, рост, количество кликов. Большинство моделей машинного обучения работают с такими данными напрямую, иногда после масштабирования или нормализации.
Категориальные (Categorical) ―признаки, которые группируют объекты по определенным значениям. Например: город проживания (Москва, Париж), марка авто (BMW, Audi), цвет (красный, синий). Модели машинного обучения не интерпретируют текстовые значения, поэтому такие признаки необходимо преобразовывать в числовой формат.
Временные (Datetime) ― признаки, содержащие информацию о дате и времени. В исходном виде значения вроде «2023-10-05» или timestamp обычно неинформативны, однако из них можно извлекать полезные характеристики: день недели, месяц, время суток, признак выходного или праздничного дня.
Текстовые данные и изображения — неструктурированные признаки, которые требуют специализированных методов обработки и извлечения признаков перед использованием в моделях машинного обучения.

Этапы Feature Engineering
Выбор информативных признаков — это не хаотичный креатив, а последовательная работа с данными. На первом этапе проводится исследовательский анализ данных (EDA): строятся распределения и графики, выявляются выбросы, пропуски и аномалии. Цель этого шага — понять структуру и особенности данных.
Далее следует этап генерации признаков (Feature Creation) ― создание новых переменных на основе исходных. Как же создавать признаки в ML? Они могут формироваться путем арифметических операций, агрегаций и комбинаций существующих данных в зависимости от задачи.
Затем выполняется трансформации признаков (Feature Transformation). На этом этапе данные приводятся к виду, более подходящему для обучения моделей. Например, применяется логарифмическое преобразование для сглаживания распределений с большими выбросами или масштабирование признаков.
Заключительный этап — отбор признаков (Feature Selection). Не все созданные признаки оказываются полезными. На этом шаге удаляются избыточные и неинформативные переменные, которые не улучшают качество модели и могут приводить к переобучению.
Методы создания и трансформации признаков
Как же выбрать метод отбора признаков? Все зависит от типа данных и используемой модели. Ниже рассмотрим основные инструменты, применяемые на этапе Feature Engineering.
Масштабирование данных (Scaling)
Если один признак измеряется в диапазоне от 0 до 100 (например, возраст), а другой — от 20 000 до 500 000 (зарплата), многие алгоритмы будут придавать больший вес второму признаку из-за масштаба значений.
Методы масштабирования, такие как MinMaxScaler и StandardScaler, приводят числовые признаки к сопоставимому масштабу (например, к диапазону от 0 до 1 или к распределению с нулевым средним и единичным стандартным отклонением).
Кодирование категориальных признаков (Encoding)
Категориальные значения, такие как цвет («красный», «зеленый», «синий»), необходимо преобразовывать в числовой формат.
Один из распространенных методов — One-Hot Encoding, при котором для каждой категории создается отдельный бинарный признак. Например, для значения «красный» в соответствующем столбце ставится 1, а в остальных — 0.
Другой подход — Label Encoding, при котором категориям присваиваются числовые метки (1, 2, 3). Такой метод следует использовать с осторожностью, так как модель может интерпретировать порядок чисел как наличие отношения «больше — меньше», которого в данных нет.
Работа с временными признаками
Данные о времени редко бывают полезны в исходном виде. Вместо передачи в модель «сырой» даты или timestamp из них обычно извлекают отдельные признаки: год, месяц, день недели, час.
Дополнительно часто создаются бинарные признаки, такие как «является ли день выходным» или «попадает ли дата на праздничный день». Такой подход позволяет модели учитывать временные закономерности и сезонность.
Работа с текстовыми данными
Для работы с текстом применяются специальные методы извлечения признаков. Базовый подход — Bag of Words, при котором учитывается количество вхождений слов в документе.
Более информативный метод — TF-IDF, который оценивает важность слова с учетом его частоты в документе и во всем корпусе текстов. Для более сложных задач используются word embeddings, представляющие слова в виде векторов, отражающих их семантическую близость.
Отбор признаков (Feature Selection)
Использование слишком большого количества признаков может ухудшать качество модели и усложнять обучение. Это связано с эффектом высокой размерности, при котором модель хуже обобщает данные и становится чувствительной к шуму.
На этапе отбора удаляются признаки, которые не несут полезной информации.К ним относятся столбцы с почти постоянными значениями (например, признак «планета = Земля» в клиентской базе банка), а также признаки, дублирующие друг друга. Если в данных присутствуют «температура в Цельсиях» и «температура в Фаренгейтах», один из них избыточен и может быть исключен.
Отбор информативных признаков обычно начинают с простых шагов: удаляют столбцы, где одно и то же значение встречается у всех или почти всех объектов. Далее применяются методы, встроенные в модели, например оценки важности признаков (feature_importances_ в случайном лесе), которые позволяют количественно оценить вклад каждого признака. Дополнительно используется корреляционный анализ для выявления сильно связанных и дублирующих признаков.
Перед обучением модели также важно провести базовую очистку данных. На этом этапе удаляются полные дубликаты строк, исправляются очевидные ошибки и несоответствия в данных. Затем анализируются выбросы — аномально большие или малые значения, которые могут искажать обучение. В зависимости от задачи такие значения либо удаляются, либо заменяются на более устойчивые оценки, например медианные значения.

Типичные ошибки в Feature Engineering
При Feature Engineering часто возникают ошибки, которые ухудшают качество модели. Рассмотрим основные проблемы и способы их решения.
Как обрабатывать пропуски в данных?
Пропуски — частая проблема в реальных наборах данных. Простое удаление строк с пропущенными значениями может привести к потере информации. Обычно пропуски заполняют средним или медианой по столбцу для числовых признаков, а для категориальных используют отдельную категорию или специальную метку.
Если доля пропусков слишком велика (например, более 50%), этот признак лучше удалить. В сложных случаях применяются алгоритмы импутации, такие как KNN, которые позволяют предсказать недостающие значения на основе похожих объектов.
Мультиколлинеарность
Мультиколлинеарность возникает, когда два или более признаков содержат практически одинаковую информацию (например, стаж в годах и стаж в месяцах). Это особенно критично для линейных моделей, так как коэффициенты становятся нестабильными и трудно интерпретируемыми.
Как убрать мультиколлинеарность?
Для выявления мультиколлинеарности используют корреляционный анализ и тепловые карты. Пары признаков с высокой корреляцией (коэффициент > 0.9) считаются избыточными. В таких случаях рекомендуется оставить один признак — наиболее информативный и понятный с точки зрения бизнеса.
Утечка данных (Data Leakage)
Data Leakage происходит, когда в признаки попадает информация, недоступная на момент прогнозирования. Например, при предсказании возврата кредита использование признака «количество звонков коллекторов» является утечкой, так как звонки происходят после просрочки.
Чтобы избежать утечки данных, важно строго контролировать источники признаков и разделять данные по времени при обучении и тестировании модели.
Примеры Feature Engineering
Недвижимость
Если в данных есть признаки «Общая площадь» и «Количество комнат», можно создать новый признак «Средняя площадь комнаты», который лучше отражает класс жилья и помогает модели точнее предсказывать цену или сегмент объекта.
Такси
Из GPS-координат посадки и высадки можно вычислять не только расстояние, но и направление движения. С учетом времени поездки становится возможным определять, едет ли пассажир из центра на окраину вечером (домой) или наоборот — утром на работу.
Ретейл
Вместо работы с сырой историей покупок создаются агрегированные признаки: «Средний чек за последние 3 месяца», «Количество дней с последней покупки», «Любимая категория товаров». Такие признаки позволяют моделям быстрее выявлять закономерности в поведении клиентов.
Заключение
Feature Engineering — это этап, где аналитика встречается с пониманием предметной области. Даже самые современные модели глубокого обучения не смогут компенсировать плохое качество данных. Владение навыками конструирования информативных признаков отличает профессионального дата-сайентиста от человека, который просто умеет использовать библиотеки Python.
Часто задаваемые вопросы
Как масштабировать данные правильно?
Используйте инструменты вроде StandardScaler или MinMaxScaler. Главное правило: масштабатор (fit) обучается только на тренировочных данных, а метод transform применяется как к тренировочному, так и к тестовому набору. Это предотвращает утечку информации из будущего в модель.
Как нормализовать числовые признаки?
Если распределение данных сильно скошено (имеет длинный хвост), примените логарифмическое преобразование. Оно делает разброс значений более компактным и понятным для алгоритма. Метод особенно эффективен для денежных величин, таких как доходы или цены на недвижимость.
Как улучшить модель с помощью фич?
Создавайте производные признаки, комбинируя имеющиеся столбцы с помощью математических действий (сложение, деление, умножение). Применяйте предметную логику: например, отношение суммы кредита к доходу в банковской задаче лучше отражает платежеспособность клиента, чем размер дохода отдельно.
Как выбрать метод отбора признаков?
Для начала можно использовать методы фильтрации — удалять признаки с низкой корреляцией с целевой переменной. При наличии ресурсов применяются методы «обертки» (Wrapper methods), такие как RFE, которые перебирают комбинации признаков и находят оптимальный набор.
Как визуализировать важность фичей?
Постройте горизонтальный столбчатый график (bar plot), где длина полосы соответствует весу признака в модели. Для более детального анализа используйте библиотеку SHAP: она показывает, как каждый признак влияет на итоговое предсказание (в положительную или отрицательную сторону).
Как расширить датасет новыми фичами?
Попробуйте создавать полиномиальные признаки: возведите значения в квадрат или перемножьте столбцы между собой. Также полезно обогащать данные внешними источниками: погодой, курсами валют или статистикой по региону, если это имеет отношение к задаче.
Как построить пайплайн для feature engineering?
Используйте класс Pipeline (например, из библиотеки Scikit-learn), чтобы объединить все шаги в одну цепочку. Это гарантирует последовательное применение заполнения пропусков, масштабирования и обучения модели без ошибок.













