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

Вместе с Senior Data Scientist Викторией Тюфяковой разбираемся, как устроен процесс Feature Engineering, с какими проблемами можно столкнуться и как их решить. 

Виктория Тюфякова

Senior Data Scientist, ecom.tech

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

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

  • Табличные: CSV-файлы, таблицы Excel, базы данных SQL.

  • Текстовые: сообщения, отзывы, статьи и т. д.

  • Временные ряды: числовые значения, упорядоченные по времени.

  • Изображения: файлы JPEG, PNG и других форматов.

  • Аудио: звуковые файлы, например WAV, MP3.

  • Геопространственные: координаты и другая пространственная информация, например GeoJSON или shapefiles.

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

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

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

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

  • Агрегаты: среднее, медиана, максимум, минимум, стандартное отклонение и т. д.

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

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

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

  • Бинарные признаки: принимают два значения (например, пол: мужской/женский, наличие дефекта: да/нет).

  • Множественные категории: могут принимать множество значений (например, цвет карандаша: красный, синий, зеленый).

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

Временные признаки (Temporal features): 

  • Дата и время (например, дата последней покупки, время суток).

Текстовые признаки (Text features):

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

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

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

  2. Учет сложных зависимостей. Иногда исходные данные не содержат явных признаков, которые могут хорошо объяснять целевую переменную. Генерация новых фич, например путем вычисления разниц, произведений или логарифмов, помогает выделить важные зависимости.

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

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

Рассмотрим на примере:

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

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

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

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

Виктория Тюфякова, Senior Data Scientist, ecom.tech

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

Генерацию фич проводят после предварительной обработки и анализа данных. Для наглядности представим весь процесс разработки ML-модели в виде таблицы:

Этап

Описание

Сбор данных

Собирают информацию из различных источников и объединяют в единый набор для обучения

Предобработка данных

Данные очищают, устраняют пропуски, удаляют выбросы и приводят к единому формату

Анализ и визуализация данных (EDA)

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

Генерация признаков (Feature Engineering)

Создают новые признаки или трансформируют исходные

Создание тренировочных и тестовых наборов данных

Данные разделяют на тренировочную и тестовую выборки для обучения и проверки модели

Выбор модели

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

Обучение модели

Модель обучают на тренировочных данных 

Оценка модели

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

Тюнинг гиперпараметров

Настраивают гиперпараметры модели, такие как количество слоев в нейронной сети или скорость обучения. Гиперпараметры — это настройки модели, которые не изменяются в процессе обучения, но могут значительно влиять на ее производительность.

Внедрение модели (Deploy)

Модель разворачивают в продуктивной среде для использования в реальных предсказаниях

Сначала нужно очистить и преобразовать данные — это что-то вроде подготовки сырья. Потом уже можно трансформировать, создавать и отбирать признаки. Это может быть что-то простое, такое как нормализация числовых данных или кодирование категориальных переменных. Но иногда нужно проявить креативность — создать новые признаки, которые помогут лучше объяснить целевую переменную.

Виктория Тюфякова, Senior Data Scientist, ecom.tech

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • лаги — значения предыдущих периодов, которые могут влиять на текущие;

  • скользящие средние — сглаженные данные, которые помогают выявить тренды;

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

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

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

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

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

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

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

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

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

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

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

Формула:

x' = \frac{x - \text{min}(x)}{\text{max}(x) - \text{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 — исходное значение признака;

  • μ — среднее значение признака;

  • σ — стандартное отклонение признака;

  • xstd​ — стандартизованное значение признака.

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

from sklearn.preprocessing import StandardScaler

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

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

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

Формула:

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

где:

  • x — оригинальное значение признака;

  • median — медиана признака;

  • IQR (интерквартильный размах) — разница между 75-м и 25-м процентилями (Q3 − Q1);

  • xrobust​ — масштабированное значение признака.

Пример кода с 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): преобразует категориальные признаки в бинарные, создавая новый столбец для каждой уникальной категории. Для этого есть специальный класс OneHotEncoder в библиотеке scikit-learn.

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

  • Красный: [1,0,0]

  • Зеленый: [0,1,0]

  • Синий: [0,0,1]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Трансформация для временных рядов

Прямое использование числовых значений времени (например, 23 и 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 — инструменты для интерпретации модели и оценки вклада признаков.

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

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

Виктория Тюфякова, Senior Data Scientist, ecom.tech

Какие проблемы могут возникнуть при генерации фич и как их решить

Переобучение

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

Решения:

  • Регуляризация: введение штрафов за сложность модели помогает снизить вероятность переобучения. Методы регуляризации, такие как Lasso или Ridge, могут автоматически исключать или уменьшать вес менее значимых признаков.

  • Отбор признаков: использование методов отбора для удаления избыточных или нерелевантных фич. 

Мультиколлинеарность

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

Решения:

  • Удаление признаков: исключение одного из коррелирующих признаков для уменьшения мультиколлинеарности.

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

Недостаток данных

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

Решение: 

  • Увеличение данных: сбор дополнительных данных или использование методов data augmentation (например, в задачах с изображениями) для увеличения объема данных.

  • Генерация похожих данных: применение методов генерации данных, таких как синтетические данные или использование генеративных моделей (например, GANs), для создания новых примеров, схожих с исходными.

Пропущенные данные

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

Решение:

  • Заполнение пропусков: использование методов иммутации данных для заполнения пропущенных значений средним, медианой или специальными маркерами.

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

Смешение типов 

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

Решение: корректное кодирование категориальных признаков (например, использование One-Hot Encoding или Label Encoding) и приведение данных к нужному типу перед их использованием в модели.

Шумные признаки 

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

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

Сложная интерпретация

Сложные признаки могут затруднить интерпретацию модели и понимание того, как она принимает решения.

Решение: применение методов, которые делают признаки более понятными и интерпретируемыми, например создание новых простых признаков.

Длительные вычисления

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

Решения:

  • Оптимизация: использование более эффективных алгоритмов и подходов.

  • Параллельные вычисления: использование параллельных вычислений или распределенных систем для ускорения обработки данных и обучения модели.

Для самостоятельного обучения рекомендую пособие «Машинное обучение. Конструирование признаков» (Э. Чжен, А. Казари). В нем подробно описаны методы создания признаков, приведены упражнения для практики и систематизации знаний. Книга поможет глубже понять процесс генерации фич и научиться решать типичные проблемы.

Виктория Тюфякова, Senior Data Scientist, ecom.tech

Как проводить Feature Engineering — кратко

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

  2. Приводим признаки к единому масштабу, нормализуем или стандартизируем их. Преобразуем фичи, чтобы они были удобными и понятными для работы модели.

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

  4. Анализируем, какие признаки важны для модели. Убираем те, которые мало влияют на точность предсказаний, чтобы избежать перегрузки алгоритма и повысить качество результатов.

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


ТГУ и Skillfactory создали магистерскую программу для тех, кто хочет глубже погрузиться в Data Science и машинное обучение. Она охватывает различные области применения — от IT и маркетинга до медицины и анализа данных. Студенты освоят базу по математике и программированию на Python, научатся работать с реальными данными, генерировать и отбирать ключевые фичи для моделей и решать реальные кейсы IT-компаний — партнеров программы.

Комментарии (4)


  1. sergeiosipoff
    11.09.2024 18:57

    Очень много ошибок. Читал наискосок, поэтому только некоторые перлы … “Масштабирование — это один из важнейших шагов трансформации, особенно для алгоритмов, чувствительных к масштабу признаков (например, линейная регрессия…)” Отлично, давайте в линейной регрессии с параметрами “площадь квартиры” - “цена” сделаем масштабирование площади, т.е. нулем станет квартира с минимальной площадью (скажем 30 кв. метров), а не ноль. Догадаетесь, как ваша регрессия будет выглядеть. Теперь представьте, что вы получили параметры регрессии на выборке для обучения и теперь хотите их запустить на тестируемой выборке - в этих двух выборках минимальные и максимальные значения будут отличаться, соответственно, полученная регрессия выдаст неправильные результаты на тестовой выборке. 2. “Логарифмическая трансформация: применяется для признаков с сильно скошенным распределением, где существует длинный хвост справа (например, доходы, цены), чтобы сделать данные более симметричными.” Долго думал, но не смог понять, зачем делать данные более симметричными? Совершенно непонятно, как пользоваться этим советом, если неизвестен его смысл. Я вижу естественную необходимость в трансформации, если того требует используемый способ анализа данных. Например, линейная регрессия ожидает, что параметр на выходе зависит линейно от входных параметров. Если фактически эта зависимость экспоненциальная, то взяв логарифм от значений, вы получите зависимость близкую к линейной. И, кстати, у меня есть подозрение, что вы не понимаете разницу между значениями и распределением значений. Может я и неправ, но вся глава про трансформацию абсолютно неясна - с ужасом представляю человека, который попытается что-то сделать используя эти инструкции. 3. “Прямое использование числовых значений времени (например, 23 и 1) может ввести искажения, потому что эти значения далеки друг от друга как числа, хотя и близки по смыслу. В этом случае можно использовать разные методы трансформации. Например, метод с использованием синусов и косинусов помогает захватить периодические колебания, ввод лаговых признаков помогает модели учитывать предыдущие значения для прогноза будущих, а скользящие средние сглаживают данные и выявляют основные тенденции.” Я честно пытался понять, что это всё означает, вот скажем “эти значения далеки друг от друга как числа, хотя и близки по смыслу” - ну, что это вообще означает? Какой-то набор букв. И было бы интересно, какую обработку вы бы здесь сделали - превратили время в синус времени? И вот такое можно брать и цитировать почти из каждого абзаца. Очень непрофессионально.


    1. CrzyDocTI
      11.09.2024 18:57

      я только интересуюсь ML и возникли вопросы:
      1) почему 30кв.м превращается в 0 а не скажем в 0.03?
      2) почему время, к примеру 3 часа, нельзя превратить в синус 45% +/- 1?


      1. sergeiosipoff
        11.09.2024 18:57

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


        1. CrzyDocTI
          11.09.2024 18:57

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