Отбор признаков на Python в ВКР: от пяти скриптов к защищаемой ML-методике
В статье KDnuggets от 30 марта 2026 года собраны пять компактных скриптов для отбора признаков (feature selection): фильтры на основе статистик, рекурсивное исключение, встроенные методы с регуляризацией. Автор намеренно делает ставку на минимализм — никаких тяжёлых фреймворков, только scikit-learn и чистый Python. Для выпускника это подарок: такой материал легко превращается в экспериментальную главу ВКР, где есть гипотеза, метрика и воспроизводимый результат. Проблема лишь в одном — преподаватель не примет «я запустил пять скриптов». Нужна методология: обоснованный выбор метода, схема эксперимента, сравнение с базовой моделью и корректное оформление. Ниже разберём, как из новостного кейса сделать полноценный раздел диплома.
Частые вопросы студентов по отбору признаков
Какой метод выбрать — фильтр, обёртку или встроенный?
Ответ зависит от размера выборки. До 10–15 тысяч строк и сотен признаков фильтры (mutual information, корреляция Спирмена) считаются за секунды и хорошо защищаются. Обёртки вроде RFECV дают точнее результат, но кратно дороже по времени — в ВКР это придётся объяснять через график «число признаков / время обучения». Встроенные методы (Lasso, дерево с feature_importances_) выигрывают в интерпретируемости. Сильное решение для диплома — сравнить минимум два класса методов и показать разницу на метриках.
Где брать датасет, если нет доступа к данным компании?
Открытые репозитории UCI ML Repository, Kaggle Datasets, OpenML. Для медицинских тем — MIMIC-IV (с ограничениями), для промышленных — NASA Prognostics. Обязательно фиксируйте версию датасета и дату выгрузки: это требование воспроизводимости, о котором почти всегда спрашивают на защите.
Хватит ли одной модели, чтобы доказать эффективность отбора?
Нет. Нужна базовая линия (baseline) — та же модель на полном наборе признаков. Сравнение «до/после» и есть ваш научный результат. Дополнительно посчитайте число признаков и время инференса: часто выигрыш не в F1, а в скорости и стоимости эксплуатации.
Как оформлять код и листинги по ГОСТ?
Листинги выносят в приложения, в тексте — ссылки вида «см. приложение Б». Схемы алгоритмов выполняют по ГОСТ 19.701-90, структуру модулей описывают через UML-диаграммы компонентов или C4. Требования к качеству ПО удобно привязать к ISO/IEC 25010: функциональная полнота, производительность, сопровождаемость.
Три темы ВКР, которые вырастают из статьи
- Сравнительный анализ методов отбора признаков для задачи бинарной классификации.
Актуальность: статья показывает разрозненные скрипты, но не даёт системного сравнения — этот пробел и закрывает ВКР.
Цель: выявить метод, дающий лучший баланс качества и вычислительных затрат.
Задачи: 1) обзор фильтров, обёрток, встроенных методов; 2) подготовка двух датасетов разной размерности; 3) проведение кросс-валидации; 4) статистическая проверка различий (критерий Уилкоксона).
Структура: Глава 1 — теория и обзор литературы. Глава 2 — проектирование эксперимента, выбор метрик. Глава 3 — результаты, таблицы, выводы. - Разработка программного модуля автоматизированного отбора признаков в составе ML-конвейера.
Актуальность: ручной запуск скриптов плохо масштабируется; нужен переиспользуемый компонент.
Цель: спроектировать модуль с конфигурируемой стратегией отбора.
Задачи: 1) спроектировать API модуля; 2) реализовать три стратегии; 3) покрыть тестами; 4) оценить производительность.
Структура: Глава 1 — анализ аналогов. Глава 2 — архитектура (диаграмма C4), реализация. Глава 3 — тестирование, метрики ISO/IEC 25010. - Оценка влияния отбора признаков на интерпретируемость модели прогнозирования.
Актуальность: регуляторы и бизнес требуют объяснимости решений — тема прямо связана с SHAP-анализом.
Цель: измерить, как сокращение признакового пространства меняет объяснимость модели.
Задачи: 1) построить baseline; 2) применить три метода отбора; 3) рассчитать SHAP-значения; 4) собрать экспертную оценку.
Структура: Глава 1 — теория интерпретируемости. Глава 2 — методика оценки. Глава 3 — эксперимент и рекомендации.
Как встроить материал статьи в главы диплома
Глава 1: классификация методов и место статьи в обзоре
Не пересказывайте статью — позиционируйте её. Сделайте таблицу «фильтры / обёртки / встроенные методы» с колонками: принцип, вычислительная сложность, устойчивость к мультиколлинеарности, пример из статьи. Скрипты KDnuggets ложатся в строки «VarianceThreshold», «SelectKBest», «RFE», «Lasso», «feature_importances_». Добавьте схему (UML activity) общего конвейера: загрузка → очистка → кодирование → отбор → обучение → оценка. Такой рисунок по ГОСТ 19.701-90 закрывает сразу два требования нормоконтроля.
| Класс метода | Пример из статьи | Плюс | Минус |
|---|---|---|---|
| Фильтры | SelectKBest + mutual_info_classif | Быстро, не зависит от модели | Игнорирует взаимодействия признаков |
| Обёртки | RFECV | Учитывает модель целиком | Дорого по времени |
| Встроенные | Lasso, важности деревьев | Интерпретируемость | Смещение к конкретному алгоритму |
Глава 2: реализация, которую не стыдно показать
Ключевое правило — отбор признаков должен жить внутри Pipeline, иначе вы получите утечку данных (data leakage) и завышенные метрики. Минимальный воспроизводимый пример:
from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectKBest, mutual_info_classif
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import StratifiedKFold, cross_validate
pipe = Pipeline([
("select", SelectKBest(score_func=mutual_info_classif, k=15)),
("clf", RandomForestClassifier(n_estimators=400, random_state=42)),
])
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_validate(
pipe, X, y, cv=cv,
scoring=["f1", "roc_auc"], n_jobs=-1,
)
print(scores["test_f1"].mean(), scores["test_roc_auc"].mean())
На защите спросят: почему k=15? Отвечайте графиком «число признаков — F1» с явным плато. Это и есть обоснование, а не ссылка на интуицию.
Глава 3: эксперимент, метрики и статистика
Считайте не только качество, но и цену. Для диплома достаточно четырёх групп метрик: F1-score и ROC-AUC (качество), число признаков (сжатие), время обучения и инференса (производительность), стабильность отбора между фолдами (коэффициент Жаккара). Последний пункт редко встречается у студентов — и именно он отличает сильную работу. Подкрепите это диаграммой рассеяния «качество против времени».
Базовый набор (48 признаков) → F1 = 0.812, обучение 42 с
Отбор MI (15 признаков) → F1 = 0.807, обучение 14 с
Отбор RFECV (12 признаков) → F1 = 0.818, обучение 96 с
Отбор Lasso (17 признаков) → F1 = 0.803, обучение 11 с
Оформление: что проверяет нормоконтроль
Схемы — UML или C4, подписи по ГОСТ. Таблицы результатов — с указанием размерности выборки и параметров случайности (random_state). Листинги — в приложения. Требования к программному изделию сошлитесь на ISO/IEC 25010, а структуру ТЗ оформите по ГОСТ 34.602. Это снимет половину замечаний ещё до предзащиты.
- Все задачи из введения дословно повторяются в выводах по главам.
- Есть baseline и минимум два метода отбора — сравнение корректно.
- Метрики описаны формулами, указаны единицы измерения и условия эксперимента.
- Схемы имеют подписи, ссылки в тексте и выполнены по ГОСТ 19.701-90.
- Листинги вынесены в приложения, в тексте — ссылки на них.
- Датасет описан: источник, объём, доля пропусков, дата выгрузки.
- Проверена уникальность текста и совпадение нумерации рисунков и таблиц.
- Отбор до кросс-валидации. Студент применяет SelectKBest ко всему датасету, потом делит на фолды — метрики завышены, результат невоспроизводим. Лечится Pipeline.
- Погоня за числом методов вместо глубины. Пять скриптов из статьи, запущенных подряд без единой гипотезы, выглядят как отчёт о лабораторной, а не как исследование. Выберите два метода и объясните расхождение.
- Игнорирование стоимости. Улучшение F1 на 0.005 при росте времени обучения в семь раз — не аргумент. Добавьте экономическую часть: сколько стоит час инференса в вашей конфигурации.
Источник: 5 Useful Python Scripts for Effective Feature Selection (опубликовано 2026-03-30)