Новости и статьи об искусственном интеллекте и нейросетях. Мы собираем и обрабатываем самую актуальную информацию из мира AI. О проекте

Статьи

5 полезных скриптов Python для эффективного отбора признаков

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

30 марта 2026 г.
8 мин
25
Иллюстрация к пяти полезным скриптам Python для отбора признаков

Введение

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

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

Здесь представлены пять скриптов на 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 по размерам.

Кросс-валидация стабилизирует оценки. Выводит кривые метрик по числу признаков и оптимальное подмножество — пик или локоть спада отдачи.

Итоги

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

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

Скрипты применяются по отдельности или в пайплайне. Удачного отбора признаков!

Горячее

Загружаем популярные статьи...

5 Python-скриптов для отбора признаков в ML