Как понять, когда остановить отбор признаков?
Что проверяют
Понимаете ли вы, что отбор признаков это такая же подгонка под данные, как обучение, и критерий остановки считается на валидации, а не на трейне. Частый уточняющий вопрос: как не допустить утечки при отборе и что делать, если важности признаков нестабильны.
Как отвечать
Критерий остановки строится по кривой «число признаков против метрики на кросс-валидации»:
- плато: метрика перестаёт расти или падает. Не гонитесь за максимумом, берите наименьший набор, чья метрика в пределах одной стандартной ошибки от лучшей (правило 1SE). Разница в третьем знаке на CV часто шум;
- автоматический критерий:
RFECVиз scikit-learn перебирает число признаков с кросс-валидацией, аSequentialFeatureSelectorсn_features_to_select="auto"и параметромtolостанавливается, когда прирост метрики меньше порога; - стабильность: повторите отбор на разных фолдах или бутстрэп-выборках. Признаки, которые выбираются почти в каждом прогоне, надёжны; набор, меняющийся от сида к сиду, говорит, что вы подбираете шум;
- внешние ограничения: латентность инференса, стоимость признака в проде, интерпретируемость. Иногда останавливаются раньше, потому что следующий признак требует нового источника данных.
Важность признаков у деревьев лучше оценивать через permutation importance на отложенной выборке или SHAP, а не через встроенный feature_importances_: важность по сплитам завышает признаки с большим числом уникальных значений.
Главное про валидацию: отбор живёт внутри Pipeline и выполняется заново в каждом фолде. Если отобрать признаки на всём датасете, а потом запустить кросс-валидацию, оценка выйдет оптимистичной. Итог проверяйте на отложенной выборке, которую процедура отбора не видела.
Где спотыкаются
Отбирают признаки по корреляции с таргетом на всём датасете, а потом меряют качество кросс-валидацией. Это утечка, и метрика в проде окажется ниже.
Останавливаются точно в максимуме CV. Когда перебраны сотни наборов, максимум почти всегда случайно завышен.
Выкидывают признак с низкой важностью, не глядя на коррелированных соседей. Два сильно коррелированных признака делят важность между собой, и по отдельности оба кажутся слабыми.