
Введение
Специалисты по машинному обучению хорошо понимают: отбор признаков требует много времени и усилий. Приходится вычислять вклад каждого признака в качество модели, избавляться от лишних переменных, распознавать мультиколлинеарность, отсеивать шумовые данные и подбирать идеальный набор признаков. Для разных методов приходится экспериментировать с порогами, сравнивать итоги и фиксировать удачные варианты.
С увеличением пространства признаков задача усложняется. Когда их сотни после инженерии, нужны организованные способы оценки важности, устранения дубликатов и выбора лучших.
Здесь представлены пять скриптов на Python, которые автоматизируют проверенные приёмы отбора признаков.
1. Удаление постоянных признаков по порогу дисперсии
В чём загвоздка
Признаки с низкой или нулевой дисперсией почти ничего не дают для прогнозирования. Если значение постоянно или почти постоянно во всех примерах, оно не помогает разделять классы цели. Ручная проверка подразумевает расчёт дисперсии по колонкам, подбор порогов и учёт особых случаев вроде бинарных признаков или разных шкал.
Что делает скрипт
Находит и убирает признаки с низкой дисперсией по настраиваемым порогам. Правильно обрабатывает непрерывные и бинарные типы, приводит дисперсию к общему знаменателю для сравнения шкал, выдаёт отчёты о удалённых признаках с причинами.
Как это устроено
Скрипт вычисляет дисперсию для каждого признака с учётом его типа.
- Для непрерывных — стандартная дисперсия, опционально нормированная по диапазону для сопоставимых порогов.
- Для бинарных — доля меньшего класса, так как дисперсия зависит от дисбаланса.
Признаки ниже порога помечаются для удаления. Сохраняется список удалённых с их дисперсиями для ясности.
2. Устранение дублирующих признаков анализом корреляций
В чём загвоздка
Сильно коррелированные признаки избыточны и провоцируют мультиколлинеарность в линейных моделях. Два признака с высокой корреляцией просто раздувают размерность без новой информации. При сотнях признаков нужно находить все пары, решать, что оставить, и отдавать приоритет связанным с целью — это требует системного разбора.
Что делает скрипт
Выявляет пары с высокой корреляцией: коэффициент Пирсона для числовых, V Крамера для категориальных. В паре выбирает тот, что сильнее коррелирует с целью. Удаляет лишние, сохраняя предсказательную силу. Создаёт тепловые карты корреляций и отчёты по удалённым.
Как это устроено
Вычисляется матрица корреляций. Для пар выше порога сравнивается корреляция каждой с целью — слабее связанная удаляется. Процесс итеративный, чтобы обработать цепочки корреляций. Учитываются пропуски, смешанные типы, визуализируются кластеры и решения по парам.
3. Выявление значимых признаков статистическими тестами
В чём загвоздка
Не все признаки статистически связаны с целью. Несвязанные добавляют шум и повышают риск переобучения. Проверка каждого требует подбора тестов, расчёта p-value, коррекции множественности и верной интерпретации.
Что делает скрипт
Автоматически подбирает тест по типам признака и цели: ANOVA F-тест для числовых с классификацией, хи-квадрат для категориальных, взаимная информация для нелинейных связей, F-тест регрессии для непрерывной цели. Применяет коррекцию Бонферрони или FDR для множественности, ранжирует признаки по значимости с p-value и статистиками.
Как это устроено
Определяет типы и направляет на тест. Для классификации ANOVA проверяет различия средних по классам цели. Хи-квадрат — на независимость категориального признака от цели. Взаимная информация дополняет для нелинейностей. Для непрерывной цели — F-тест регрессии.
p-value корректируются: Бонферрони умножает на число признаков, FDR мягче. Значимые (ниже 0,05) приоритетны.
Для строгого статистического подхода к отбору признаков можно доработать скрипт по предложениям ниже.
Что ещё можно доработать
Непараметрические альтернативы при нарушении допущений. ANOVA требует нормальности и равных дисперсий. Для скошенных данных тест Крускала-Уоллиса надёжнее, без распределительных предположений.
Осторожно со sparse категориями. Хи-квадрат ожидает минимум 5 в ячейках. При высококардинальности или редких категориях точный тест Фишера точнее.
Взаимную информацию отдельно от p-value. Это не p-value, не подходит для Бонферрони/FDR. Лучше ранжировать независимо как дополнительный сигнал.
FDR в многомерных данных. Бонферрони строг, может отбросить полезное. Benjamini-Hochberg FDR мощнее для ML-задач.
Размер эффекта с p-value. Значимость не показывает практической ценности. Эффект-сайз дополнит картину.
Перестановочный тест значимости. Для сложных данных: перемешивать цель, проверять случайные совпадения без допущений.
4. Ранжирование признаков по важности от моделей
В чём загвоздка
Важность от моделей напрямую показывает вклад в точность, но разные модели дают разные оценки. Обучение нескольких, извлечение важностей и синтез ранга — сложный процесс.
Что делает скрипт
Обучает разные модели, извлекает важности, нормирует для сравнения. Ансамблирует средним или рангом. Добавляет перестановочную важность. Выдаёт ранги с оценками и рекомендуемые подмножества.
Как это устроено
Обучает модели на всех признаках, берёт нативные важности: для деревьев — деревошные, для линейных — коэффициенты. Перестановочная: перемешивает признак, меряет падение производительности. Нормирует к сумме 1.
Ансамбль — средний ранг или нормированная важность. Сортирует, выбирает топ-N или выше порога.
5. Оптимизация подмножеств признаков рекурсивным исключением
В чём загвоздка
Оптимальное подмножество не всегда топ-N по важности: важны взаимодействия. Слабый сам по себе признак может сиять в комбинации. Рекурсивное исключение тестирует подмножества, убирая слабейшие и переобучая, но требует сотен итераций и слежения за метриками.
Что делает скрипт
Итеративно убирает признаки, переобучает, оценивает. Начинает со всех, удаляет наименее важный. Фиксирует метрики по размерам. Находит optimum по производительности или минимум признаков для цели. Поддерживает кросс-валидацию.
Как это устроено
Начинает с полного набора, обучает, ранжирует по важности, убирает худший. Повторяет. Записывает accuracy, F1, AUC по размерам.
Кросс-валидация стабилизирует оценки. Выводит кривые метрик по числу признаков и оптимальное подмножество — пик или локоть спада отдачи.
Итоги
Эти пять скриптов решают ключевые проблемы отбора, влияющие на качество и скорость обучения моделей. Краткий обзор:
| Скрипт | Описание |
|---|---|
| По порогу дисперсии | Убирает неинформативные постоянные или почти постоянные признаки. |
| По корреляциям | Избавляется от дубликатов, сохраняя предсказательную силу. |
| Статистические тесты | Находит признаки со значимой связью с целью. |
| По моделям | Ранжирует по ансамблю важностей от разных моделей. |
| Рекурсивное исключение | Подбирает оптимальные подмножества итеративно. |
Скрипты применяются по отдельности или в пайплайне. Удачного отбора признаков!