Feature Engineering
Конструирование признаков преобразует исходные данные в удобные для обучения модели входные данные с учётом предметной области. Основные методы, риски утечки данных, применение и код.
Инжиниринг признаков — это процесс создания, преобразования и отбора входных переменных, или признаков, на основе которых обучается модель машинного обучения. Для этого используют знания о предметной области и данных. Исходную временную метку преобразуют в час суток и день недели, список карточных транзакций — в сумму расходов клиента за последние 30 дней, а расстояние и продолжительность поездки — в скорость. Правильно подобранные признаки позволяют простой модели выявлять закономерности, которые иначе остались бы незамеченными. Особенно важны признаки для табличных данных и временных рядов, где модель может использовать только предоставленные ей столбцы. Модели глубокого обучения извлекают признаки непосредственно из исходных изображений, аудио и текста. Поэтому в этих областях инжиниринг признаков теперь в большей степени связан с подготовкой данных и созданием признаков на основе выходов модели.
Распространённые методы#
- Масштабирование и нормализация: приведение признаков к нулевому среднему и единичной дисперсии не дает признакам с большими единицами измерения доминировать при вычислении расстояний и градиентном обучении, а логарифмическое преобразование сжимает асимметрично распределенные значения, например доходы или цены.
- Кодирование категориальных данных: кодирование one-hot преобразует категорию, например цвет, в двоичные столбцы, а целевое кодирование заменяет каждую категорию средним целевым значением для этой категории. Среднее вычисляется на отдельных фолдах, чтобы при кодировании не раскрывалась метка самой строки.
- Отношения и взаимодействия: отношение долга к доходу, цена за квадратный фут и индекс массы тела объединяют два исходных значения в величину, которая действительно влияет на результат.
- Признаки даты и времени: час, день недели, месяц и признаки праздников выявляют циклы, а кодирование часа синусом и косинусом располагает 23:00 рядом с 00:00.
- Лаги и скользящие окна: предыдущие значения, скользящие средние и подсчеты за последние интервалы предоставляют модели недавнюю историю датчика, учетной записи или продукта.
- Разбиение на интервалы: группировка непрерывных значений по диапазонам, например по возрастным группам, помогает учитывать ступенчатые эффекты и ограничивает влияние экстремальных значений.
- Снижение размерности с помощью PCA: метод главных компонент сжимает множество коррелирующих признаков до нескольких некоррелирующих.
- Отбор признаков: фильтрующие методы ранжируют признаки по корреляции или взаимной информации с целевой переменной, оберточные методы проверяют подмножества признаков с помощью модели, а встроенные методы, такие как L1-регуляризация, удаляют признаки во время обучения.
Признак-отношение показывает, почему это работает. Дерево решений с ограниченной глубиной может разделять данные только по одному признаку за раз, поэтому по одной лишь дистанции и длительности оно плохо аппроксимирует правило «средняя скорость выше 90 км/ч», а после вычисления скорости — точно:
import numpy as np
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
# 1,000 trips: raw distance (km) and duration (h); label = average speed above 90 km/h
rng = np.random.default_rng(0)
distance = rng.uniform(10, 300, 1000)
hours = rng.uniform(0.5, 4.0, 1000)
y = (distance / hours > 90).astype(int)
raw = np.column_stack([distance, hours])
engineered = (distance / hours).reshape(-1, 1) # domain knowledge: speed = distance / time
tree = DecisionTreeClassifier(max_depth=2, random_state=0)
for name, X in [("Raw distance and duration", raw), ("Engineered speed", engineered)]:
print(f"{name}: accuracy {cross_val_score(tree, X, y, cv=5).mean():.3f}")При той же модели дерева глубины 2 точность перекрёстной проверки повышается с 0.861 для исходных значений дистанции и длительности до 1.000 для спроектированного признака скорости, потому что диагональная граница в пространстве «дистанция — длительность» превращается в один порог скорости.
Проверка признаков без утечки данных#
Признак допустим, только если его значение известно в момент предсказания. Модель оттока клиентов, использующая «количество обращений в службу поддержки за месяц после отмены подписки», или целевое кодирование, рассчитанное по всему набору данных, показывает хорошие результаты при тестировании, но не работает в продакшене — это разновидность утечки данных. Поэтому каждое преобразование с обучаемыми параметрами, например средними значениями масштабирования или кодировками категорий, подгоняется только на обучающих фолдах, как это автоматически делают конвейеры scikit-learn, а каждый новый признак сохраняется, только если он улучшает оценку при перекрёстной проверке. В продакшене каждый признак также нужно вычислять точно так же, как при обучении; хранилища признаков обеспечивают это, предоставляя обеим сторонам одни и те же определения признаков.
Проектирование признаков в компьютерном зрении#
В классическом компьютерном зрении использовались признаки, разработанные вручную: карты границ, дескрипторы ключевых точек SIFT и гистограммы ориентированных градиентов, по которым затем классификаторы, например метод опорных векторов, назначали метки. После победы AlexNet в конкурсе ImageNet в 2012 году свёрточные нейронные сети научились извлекать собственные карты признаков из пикселей, и инженерные усилия переключились на обучающие данные — через аугментацию данных — и на выходы моделей компьютерного зрения. Ultralytics SpeedEstimator строит признак скорости по результатам отслеживания объектов моделью YOLO26: когда у трека есть пять положений, он переводит смещение в пикселях между первым и последним положениями в метры с помощью масштаба meter_per_pixel и делит результат на прошедшее время, чтобы получить скорость в км/ч.
Применение#
- Кредитный риск: кредиторы рассчитывают отношение долга к доходу, коэффициент использования кредитного лимита и количество месяцев с момента последнего пропуска платежа по исходным данным счетов. Эти признаки лучше предсказывают дефолт, чем исходные остатки.
- Предиктивное обслуживание: Скользящие средние, скорости изменения и энергия в частотных диапазонах, рассчитанные по потокам вибрации и температуры, выявляют развивающийся износ до того, как какое-либо исходное показание превысит аварийный порог.
- Обнаружение мошенничества: Признаки интенсивности, например количество транзакций по карте за последний час и расстояние между местом покупки и обычным местоположением владельца карты, позволяют отличить мошенничество от обычных трат.
- Прогнозирование спроса: розничные модели объединяют для каждого магазина и товара лаги продаж, скользящие средние, изменения цен, признаки проведения акций и индикаторы праздников.
Проектирование признаков и смежные понятия#
- Извлечение признаков: Автоматически вычисляет признаки с помощью фиксированного алгоритма или обученной модели, например PCA или базовой сети нейронной сети. Эти два термина часто используют как синонимы, хотя проектирование признаков охватывает более широкий процесс, учитывающий предметную область.
- Предварительная обработка данных: Очищает данные и приводит их к нужному формату: исправляет ошибки, заполняет пропущенные значения и преобразует типы. Этот этап предшествует разработке признаков.
- Эмбеддинги: Плотные векторы, которые модель обучается формировать для представления слов, изображений или пользователей; в большинстве языковых систем и систем компьютерного зрения они заменяют признаки, созданные вручную, например частоты слов.










