Отбор признаков на 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: классификация методов и место статьи в обзоре

Не пересказывайте статью — позиционируйте её. Сделайте таблицу «фильтры / обёртки / встроенные методы» с колонками: принцип, вычислительная сложность, устойчивость к мультиколлинеарности, пример из статьи. Скрипты 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.
  • Листинги вынесены в приложения, в тексте — ссылки на них.
  • Датасет описан: источник, объём, доля пропусков, дата выгрузки.
  • Проверена уникальность текста и совпадение нумерации рисунков и таблиц.
Типичные ошибки
  1. Отбор до кросс-валидации. Студент применяет SelectKBest ко всему датасету, потом делит на фолды — метрики завышены, результат невоспроизводим. Лечится Pipeline.
  2. Погоня за числом методов вместо глубины. Пять скриптов из статьи, запущенных подряд без единой гипотезы, выглядят как отчёт о лабораторной, а не как исследование. Выберите два метода и объясните расхождение.
  3. Игнорирование стоимости. Улучшение F1 на 0.005 при росте времени обучения в семь раз — не аргумент. Добавьте экономическую часть: сколько стоит час инференса в вашей конфигурации.
Если до защиты осталось меньше двух недель, а экспериментальная глава ещё не собрана — это решаемо. Мы разбираем 120 часов работы над темой: от постановки задачи и подбора датасета до вёрстки приложений по ГОСТ. Первая консультация бесплатная: покажем, где в вашей ВКР слабое место и как его закрыть. Помощь с дипломом — это не «сделать вместо вас», а снять тупик там, где вы застряли.
Материал подготовлен экспертами компании [Название сайта]. Мы помогаем студентам с 2010 года. Если вам нужна помощь в разработке темы или оформлении работы, наши специалисты готовы подсказать.
Последнее обновление: 2026-10-14

Источник: 5 Useful Python Scripts for Effective Feature Selection (опубликовано 2026-03-30)