Механика машинного обучения
Инженерия признаков
От сырых данных к ценным признакам
Модели машинного обучения, по сути, являются сложными математическими функциями. Они не понимают текст, категории или даты в том виде, в котором мы их привыкли видеть. Их язык — это числа. Инженерия признаков (feature engineering) — это процесс перевода наших сырых, необработанных данных на этот язык чисел, превращая их в информативные векторы, которые модель сможет эффективно использовать для обучения.
Качество модели напрямую зависит от качества признаков, которые мы ей предоставляем. Даже самая продвинутая архитектура нейронной сети покажет плохие результаты на «грязных» или неинформативных данных. Именно поэтому инженерия признаков — это не просто технический этап, а скорее искусство, требующее понимания как самих данных, так и бизнес-задачи.
Чистка и подготовка
Первый шаг на пути к качественным признакам — это работа с несовершенствами данных. В реальном мире данные редко бывают идеальными. В них почти всегда есть пропуски и аномальные значения, или выбросы.
Пропущенные значения могут появиться по разным причинам: технический сбой при сборе данных, ошибка пользователя или просто отсутствие информации. Самый простой способ борьбы с ними — удалить строки или столбцы с пропусками, но это чревато потерей ценной информации. Более щадящий подход — импутация, то есть замена пропусков. Для числовых признаков их можно заменить средним или медианой, а для категориальных — самым частым значением (модой).
Выбросы — это значения, которые сильно отличаются от основной массы данных. Например, в данных о зарплатах сотрудников зарплата генерального директора может быть выбросом. Такие значения могут искажать обучение некоторых моделей, особенно тех, что чувствительны к масштабу, вроде линейной регрессии или метода опорных векторов. Их можно либо удалять, если это явная ошибка, либо заменять на более типичные значения, например, на 99-й перцентиль.
| Метод обработки пропусков | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Удаление строк/столбцов | Просто и быстро. | Ведет к потере данных. | Когда пропусков очень мало (<1-2%). |
| Замена средним/медианой | Сохраняет размер датасета. | Искажает исходное распределение данных. | Для числовых признаков без сильных выбросов. |
| Замена модой | Отлично подходит для категориальных данных. | Может создать перекос в сторону одного значения. | Для категориальных признаков. |
| Замена с помощью модели (KNN, регрессия) | Высокая точность заполнения. | Вычислительно сложно и долго. | Когда качество данных критически важно. |
Язык чисел для категорий
Предположим, у нас есть признак «Город» со значениями «Москва», «Сочи», «Казань». Модель не сможет работать с текстом напрямую. Нам нужно закодировать эти значения в числа.
Самый популярный метод — (OHE). Он создает новый бинарный признак для каждого уникального значения категории. Если в данных 100 разных городов, OHE создаст 100 новых столбцов. Для строки с городом «Москва» в столбце Город_Москва будет стоять 1, а во всех остальных «городских» столбцах — 0. Этот подход прост и понятен, но приводит к резкому росту числа признаков, если в категории много уникальных значений (высокая кардинальность). Это может замедлить обучение и привести к «проклятию размерности».
Альтернативой для категорий с высокой кардинальностью является (кодирование по целевой переменной). Для каждого значения категории (например, для каждого города) мы вычисляем среднее значение целевой переменной (допустим, средний чек покупки). Затем мы заменяем название города на это среднее значение. Так, «Москва» может превратиться в 1543.5, а «Сочи» — в 2105.2.
Этот метод очень мощный, так как он напрямую вносит в признак информацию о целевой переменной. Но у него есть серьезный риск — переобучение. Модель может слишком сильно «поверить» в эти вычисленные средние, особенно для редких категорий, где среднее посчитано по малому числу примеров. Чтобы сгладить этот эффект, часто используют различные техники регуляризации, например, смешивают среднее по категории со средним по всей выборке.
Приведение к общему знаменателю
Представьте, что у нас два признака: «возраст» (от 18 до 80) и «доход» (от 30 000 до 1 000 000). Для моделей, основанных на расстоянии (например, KNN) или градиентном спуске (линейная регрессия, нейронные сети), признак с большим диапазоном значений будет иметь больший «вес» и доминировать в процессе обучения. Чтобы этого избежать, признаки нужно масштабировать.
Два основных метода — это стандартизация и нормализация.
Стандартизация (Standardization) преобразует данные так, чтобы их среднее значение было равно 0, а стандартное отклонение — 1. Она не приводит данные к конкретному диапазону, что делает ее устойчивой к выбросам.
Нормализация (Normalization), чаще всего Min-Max Scaling, приводит все значения к диапазону от 0 до 1. Этот метод чувствителен к выбросам: если появится одно очень большое значение, большинство остальных данных «сожмется» в узком диапазоне около 0.
Для большинства моделей на основе градиентного спуска стандартизация является более безопасным выбором по умолчанию из-за ее устойчивости к выбросам. Древовидные модели (случайный лес, градиентный бустинг) не требуют масштабирования, так как они нечувствительны к масштабу признаков.
Создание и отбор признаков
Часто самые сильные признаки — это не те, что были в исходных данных, а те, которые мы создаем сами, опираясь на доменные знания. Например, имея дату рождения, мы можем создать признак «возраст». Имея длину и ширину участка, можно создать признак «площадь». В данных о продажах можно создать признаки вроде «день недели» или «является ли день праздничным» из даты покупки.
После генерации множества признаков мы сталкиваемся с другой проблемой: не все они полезны. Некоторые могут быть просто шумом, другие — дублировать информацию. Использование избыточных признаков усложняет модель и может привести к переобучению. Здесь на помощь приходят методы отбора признаков (Feature Selection).
Они делятся на три большие группы:
- Фильтр-методы оценивают важность признаков на основе их статистических свойств (например, корреляции с целевой переменной), независимо от используемой модели. Они очень быстрые, но могут упустить сложные взаимосвязи.
- Методы-обертки используют саму модель машинного обучения для оценки наборов признаков. Они перебирают различные комбинации, обучают на них модель и выбирают ту, что дает лучшее качество. Это очень точный, но вычислительно затратный подход.
- Встроенные методы выполняют отбор признаков непосредственно в процессе обучения модели. Примерами являются L1-регуляризация (), которая обнуляет веса наименее важных признаков, и оценка важности признаков в древовидных моделях.
Инженерия признаков — это итеративный процесс. Вы создаете и отбираете признаки, обучаете модель, анализируете ее ошибки и возвращаетесь к первому шагу, чтобы создать еще более качественные данные. Это ключ к построению высокоточных и надежных моделей.