Перейти к содержанию

Моделирование признаков#

Feature Engineering, или моделирование признаков — это процесс создания новых признаков (характеристик или фич) из имеющихся данных, чтобы улучшить работу модели машинного обучения.

Он может включать:
- преобразование данных;
- создание новых признаков на основе существующих;
- удаление ненужных;
- комбинирование нескольких фич.

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

Что такое признаки объекта и зачем их создавать#

Модели машинного обучения работают с данными, представленными в различных форматах:

  • Табличные: CSV-файлы, таблицы Excel, базы данных SQL.
  • Текстовые: сообщения, отзывы, статьи и т. д.
  • Временные ряды: числовые значения, упорядоченные по времени.
  • Изображения: файлы JPEG, PNG и других форматов.
  • Аудио: звуковые файлы, например WAV, MP3.
  • Геопространственные: координаты и другая пространственная информация, например GeoJSON или shapefiles.

Чтобы извлечь из них полезную информацию, их нужно преобразовать в признаки.

Что такое признаки?#

Признаки (фичи, или features) — отдельные характеристики или свойства данных, которые используются моделью для обучения и предсказания.
Они описывают данные и позволяют алгоритму делать выводы.

Пример: в задаче предсказания цены дома признаками могут быть:
- площадь,
- количество комнат,
- возраст здания.

Какие бывают виды признаков#

Числовые признаки (Numeric features):

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

Категориальные (качественные) признаки (Categorical features):

  • Бинарные признаки: принимают два значения (например, пол: мужской/женский, наличие дефекта: да/нет).
  • Множественные категории: могут принимать множество значений (например, цвет карандаша: красный, синий, зеленый).
  • Порядковые признаки (Ordinal features): имеют естественный порядок по уровням, но разница между уровнями может быть неравной (например, уровень образования: среднее, бакалавр, магистр, доктор).

Временные признаки (Temporal features):
- Дата и время (например, дата последней покупки, время суток).

Текстовые признаки (Text features):
- Данные в текстовом формате, которые нужно преобразовать в числовые значения для использования в ML-модели.

Интерфейс программв

Зачем проводить Feature Engineering#

Feature Engineering (генерация признаков) — это процесс преобразования, создания и отбора признаков (features), направленный на улучшение работы моделей машинного обучения. Ниже перечислены основные причины, по которым проводится этот процесс.

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

Учет сложных зависимостей
Не всегда в исходных данных есть признаки, которые явно связаны с целевой переменной. Создание новых признаков, например в виде разностей, произведений или логарифмов, помогает выделить скрытые зависимости.

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

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

Когда проводится моделирование признаков#

Моделирование признаков (feature engineering) проводится после этапов очистки и анализа данных. Ниже представлен общий порядок разработки модели машинного обучения:

Этап Описание
Сбор данных Информация собирается из различных источников и объединяется в единый набор данных.
Предобработка данных Удаление пропусков, очистка, устранение выбросов, приведение к единому формату.
Анализ и визуализация данных (EDA) Исследование данных с целью выявления закономерностей, аномалий и предварительной подготовки.
Моделирование признаков Создание новых признаков или преобразование существующих для улучшения работы модели.
Создание тренировочных и тестовых наборов Разделение данных на обучающую и тестовую выборки.
Выбор модели Определение подходящего алгоритма машинного обучения.
Обучение модели Настройка модели на основе обучающей выборки.
Оценка модели Проверка модели на тестовых данных, анализ метрик качества.
Тюнинг гиперпараметров Настройка параметров модели, которые не изменяются в процессе обучения (например, скорость обучения, глубина дерева и т. д.).
Внедрение модели Развертывание модели в рабочем окружении для использования на практике.

Этап 1. Анализ данных#

Хотя анализ данных (Exploratory Data Analysis, EDA) формально не относится к генерации фич, на этом этапе закладывается основа для работы с признаками. Описание EDA помогает связать логику всего процесса и объяснить, почему и как создаются новые фичи.

Анализ проводится для того, чтобы:

  • Понять структуры данных — определить организацию данных, типы (числовые, категориальные, текстовые и т. д.), количество признаков и их взаимосвязь.
  • Выявить пропуски и выбросы — определить места в данных, где есть пропуски, аномальные значения или выбросы, которые требуют обработки.
  • Найти взаимосвязи — обнаружить взаимосвязи между различными признаками и целевой переменной, что помогает лучше понять важность признаков для модели.
  • Проверить гипотезы — сформулировать и проверить гипотезы о данных, например влияние возраста клиента на его покупательские привычки.

EDA обычно включает визуализацию и статистический анализ:

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

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

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

Этап 2. Создание новых признаков#

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

Для временных рядов можно создать признаки, такие как:

  • Лаги — значения предыдущих периодов, которые могут влиять на текущие;
  • Скользящие средние — сглаженные данные, которые помогают выявить тренды;
  • Временные признаки — день недели или месяц, которые учитывают сезонные или временные паттерны.

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

Также можно комбинировать категориальные признаки.
Например: объединение «города» и «типа недвижимости» может учесть различия в ценах на жилье в разных регионах.

Иногда применяются знания из предметной области. Это позволяет создавать фичи, специфичные для задачи.
Например: в финансовом анализе полезен коэффициент текущей ликвидности, который учитывает соотношение активов и обязательств компании.

Этап 3. Трансформация признаков#

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

Масштабирование (Scaling)#

Масштабирование — это один из важнейших шагов трансформации, особенно для алгоритмов, чувствительных к масштабу признаков (например, линейная регрессия, метод k-ближайших соседей, SVM). Суть масштабирования в том, чтобы привести все признаки к единому диапазону значений.

Примеры методов масштабирования:#

Нормализация (Min-Max Scaling): приводит значения признака в диапазон от 0 до 1, что помогает моделям быстрее сходиться и избегать проблем с численной стабильностью.

Формула:

x' = \frac{x - \min(x)}{\max(x) - \min(x)}

где:

  • x — исходное значение признака;
  • min(x) — минимальное значение признака;
  • max(x) — максимальное значение признака;
  • x′ — нормализованное значение признака.

Пример кода для нормализации с scikit-learn (класс MinMaxScaler):

from sklearn.preprocessing import MinMaxScaler

# Создание объекта MinMaxScaler с диапазоном [0, 1]
scaler = MinMaxScaler(feature_range=(0, 1))

# Обучение и преобразование данных
X_scaled = scaler.fit_transform(X)

Стандартизация (Standardization)#

Стандартизация преобразует данные так, чтобы они имели нулевое среднее значение и стандартное отклонение, равное единице. Это часто используется в алгоритмах, которые предполагают нормальное распределение данных.

Формула:

x_{\text{std}} = \frac{x - \mu}{\sigma}

где:

  • x — исходное значение признака;
  • μ — среднее значение признака;
  • σ — стандартное отклонение признака;
  • x_{\text{std}} — стандартизованное значение признака.

Пример кода для стандартизации с использованием scikit-learn (класс StandardScaler):

from sklearn.preprocessing import StandardScaler

# Создание объекта StandardScaler
scaler = StandardScaler()

# Обучение и преобразование данных
X_scaled = scaler.fit_transform(X)

Robust Scaling (робастное масштабирование)#

Robust Scaling применяется для данных с выбросами, которые могли остаться после очистки. Этот метод минимизирует влияние выбросов, используя медиану и интерквартильный размах вместо среднего и стандартного отклонения.

Формула:

X_{\text{robust}} = \frac{X - X_{\text{median}}}{\text{IQR}}

где:

  • x — оригинальное значение признака;
  • median — медиана признака;
  • IQR (интерквартильный размах) — разница между 75-м и 25-м процентилями (Q3 − Q1);
  • X_{\text{robust}} — масштабированное значение признака.

Пример кода с scikit-learn (класс RobustScaler)#

from sklearn.preprocessing import RobustScaler

# Создание объекта RobustScaler
scaler = RobustScaler()

# Обучение и преобразование данных
X_scaled = scaler.fit_transform(X)

Трансформация для числовых признаков#

Логарифмическая трансформация: применяется для признаков с сильно скошенным распределением, где существует длинный хвост справа (например, доходы, цены), чтобы сделать данные более симметричными.

Каждый элемент признака заменяется на log (x + 1), где log может быть натуральным логарифмом (по основанию e) или логарифмом по другому основанию (например, по основанию 10).

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

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

Каждый элемент признака заменяется на √x.

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

Трансформация Box-Cox: используется для того, чтобы стабилизировать разброс и сделать распределение данных более нормальным.

Этот метод более гибкий, чем логарифмическое или квадратное преобразование, так как включает параметр λ (лямбда), который оптимизируется для каждого признака.

Применяется для непрерывных данных с положительными значениями, которые сильно отклоняются от нормального распределения.

Трансформация для категориальных признаков#

Интерфейс программв

One-Hot Encoding (OHE)#

One-Hot Encoding (OHE): преобразует категориальные признаки в бинарные, создавая новый столбец для каждой уникальной категории. Для этого есть специальный класс OneHotEncoder в библиотеке scikit-learn.

Для каждой категории создается отдельный бинарный признак. Например, категория «Цвет» с тремя значениями «Красный», «Зеленый», «Синий» преобразуется в три столбца:

  • Красный: [1, 0, 0]
  • Зеленый: [0, 1, 0]
  • Синий: [0, 0, 1]

OHE стоит использовать, когда категориальные признаки не имеют порядка и количество категорий не слишком велико.

Label Encoding#

Label Encoding: присваивает каждой категории уникальное числовое значение. Можно сделать с помощью класса LabelEncoder в scikit-learn.

Каждой категории присваивается целочисленное значение. Например, признак «Размер» с категориями «Маленький», «Средний», «Большой» может быть преобразован в 0, 1 и 2 соответственно.

Label Encoding стоит использовать, когда существует естественный порядок категорий или когда One-Hot Encoding может излишне увеличить размерность данных.

Target Encoding#

Target Encoding: заменяет категории числовыми значениями, основанными на целевой переменной. Для этого используют класс TargetEncoder (например, из библиотеки category_encoders).

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

Стоит использовать, когда количество категорий велико и есть прямая зависимость категорий от целевой переменной.

Frequency Encoding#

Frequency Encoding: преобразует категории в числовые значения, основанные на частоте их появления в данных. Для этого можно использовать библиотеку pandas.

Каждой категории присваивается числовое значение, которое соответствует частоте ее встречаемости в данных. Например, если «Красный» встречается в 50% записей, ему присваивается значение 0.5.

Стоит использовать, когда важно сохранить информацию о распределении категорий и минимизировать размерность.

Ordinal Encoding#

Ordinal Encoding: применяется для категорий, которые имеют естественный порядок (например, уровень образования). В scikit-learn для этого есть класс OrdinalEncoder.

Каждой категории присваивается числовое значение в соответствии с их порядком. Например, «Среднее» = 1, «Высшее» = 2, «Аспирантура» = 3.

Стоит использовать, когда категории имеют естественный порядок и этот порядок важен для модели.

Rare Label Encodin#

Rare Label Encoding: объединяет редкие категории в одну общую, чтобы избежать переобучения и улучшить обобщающую способность модели. Для трансформации используют библиотеку pandas.

Категории, которые встречаются реже определенного порога (например, менее 1% данных), объединяются в одну новую категорию (например, «Другое»).

Стоит использовать, когда существует большое количество категорий и некоторые из них встречаются очень редко.

Трансформация для текстовых признаков#

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

  1. Токенизация— разделение текста на отдельные элементы (токены), чтобы текст мог быть представлен в числовом формате.
  2. Лемматизация и стемминг — приведение слов к базовой форме для уменьшения вариативности и упрощения анализа текста. Лемматизация приводит слова к их базовой форме (лемме), а стемминг удаляет окончания для получения корня слова.

Интерфейс программв

После токенизации или лемматизации и стемминга текстовые элементы преобразуют в числовые представления следующими методами:

  • BoW (Bag of Words): создается словарь всех уникальных слов из текста, а затем для каждого документа строится вектор, где подсчитывается количество вхождений каждого слова.
  • TF-IDF (Term Frequency-Inverse Document Frequency): учитывает не только количество вхождений слова в документе, но и его значимость в контексте всех документов.
  • Word Embeddings: современные методы, такие как Word2Vec, GloVe или FastText, создают плотные векторы для слов, учитывая их контекст.
  • N-граммы: создание признаков на основе последовательности из n слов (например, биграммы — пары слов, триграммы — тройки слов).
  • Sentiment Analysis: извлечение тональности текста (положительная, отрицательная, нейтральная), что может быть полезным для конкретных задач.
  • Topic Modeling: выявление скрытых тем в текстах с использованием моделей, таких как LDA (Latent Dirichlet Allocation).

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

Этап 4. Отбор признаков (Feature Selection)#

Отбор признаков — это процесс выбора наиболее значимых переменных из исходного набора для построения модели и предотвращения переобучения.

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

Основные категории методов отбора признаков:#

1. Фильтрационные методы (Filter Methods)
Оценивают признаки на основе их статистических свойств:
- Корреляционный анализ — оценивает взаимосвязь между признаками и целевой переменной; сохраняются признаки с высокой корреляцией.
- Статистические тесты (например, тест Хи-квадрат для категориальных данных) — выбирают значимые признаки.
- Ранжирование признаков — оценивает важность признаков по частоте или значимости.

2. Встроенные методы (Embedded Methods)
Отбор признаков происходит в процессе обучения модели:
- Регуляризация (например, метод Lasso) — штрафует менее значимые признаки, что приводит к их исключению.
- Деревья решений (случайные леса, градиентный бустинг) — предоставляют встроенную оценку важности признаков.

3. Оберточные методы (Wrapper Methods)
Оценивают комбинации признаков по влиянию на производительность модели:
- Вперед-набор (Forward Selection) — признаки добавляются по одному с оценкой улучшения модели.
- Назад-отбор (Backward Elimination) — начинается с полного набора признаков и удаляет менее значимые.
- Брутфорс (Exhaustive Search) — перебирает все возможные комбинации признаков для поиска оптимального набора.

Особый метод:
- Рекурсивный отбор признаков (RFE) — поэтапно удаляет менее значимые признаки, оценивая их влияние на модель. Особенно полезен для моделей с оценкой важности признаков на основе коэффициентов или деревьев.

Методы уменьшения размерности:#

  • PCA (Главные компоненты) — выделяет главные компоненты для снижения размерности данных.
  • LDA (Линейный дискриминантный анализ) — создает линейные комбинации признаков, повышая разделимость классов.

Инструменты для отбора признаков:#

  • Scikit-learn — популярная Python-библиотека с реализациями различных методов отбора.
  • XGBoost и LightGBM — градиентный бустинг с встроенной оценкой важности признаков.
  • Feature-engine и FeatureSelect — специализированные библиотеки Python для продвинутого отбора и создания признаков.
  • SHAP и LIME — инструменты для интерпретации модели и оценки вклада признаков.

Список использованных источник (благодарностей)#

  1. Введение в Feature Engineering для начинающих дата-сайентистов и ML-инженеров
  2. Предварительная обработка данных
  3. Извлечение признаков
  4. Восстановление пропущенных значений
  5. Modern Pandas (Part 6): Visualization