Как работать с большим количеством признаков
Что проверяют
Понимаете ли вы, чем опасна высокая размерность и чем отбор признаков отличается от их сжатия. Следом почти всегда спрашивают, где в пайплайне делать отбор, чтобы не получить утечку данных.
Как отвечать
Начните с проблем: переобучение, когда признаков много, а объектов мало; мультиколлинеарность, из-за которой веса линейной модели нестабильны; время обучения и инференса; стоимость поддержки признаков в продакшене.
Дальше два разных пути. Отбор оставляет исходные, интерпретируемые признаки:
- фильтры:
VarianceThresholdдля почти константных колонок, взаимная информация, корреляция с целевой, удаление сильно коррелирующих пар. Быстро, но признаки оцениваются поодиночке; - встроенные методы: L1-регуляризация (
Lasso,LogisticRegressionсpenalty="l1"), важности деревьев черезSelectFromModel; - обёртки:
RFE,RFECV,SequentialFeatureSelector. Точнее, но дороже, модель обучается много раз; - важности после обучения: permutation importance и SHAP надёжнее встроенной важности деревьев, которая завышает признаки с большим числом уникальных значений.
Сжатие строит новые признаки как комбинации старых:
PCA: линейная проекция с максимальной дисперсией, перед ней нужна стандартизация;TruncatedSVD: то же для разреженных матриц, например после TF-IDF;- LDA: учитывает классы, но даёт компонент не больше, чем число классов минус один.
t-SNE и UMAP в основном для визуализации. У t-SNE нет преобразования для новых объектов, его компоненты в модель не отправишь.
Градиентный бустинг (CatBoost, LightGBM, XGBoost) неплохо переносит сотни признаков, иногда хватает регуляризации без агрессивного отбора.
Где спотыкаются
Отбирают признаки на всём датасете, а потом делят на train и test. Это утечка, и метрика завышена. Отбор должен жить внутри Pipeline и повторяться на каждом фолде кросс-валидации.
Применяют PCA к нестандартизированным данным. Компоненты тогда отражают масштаб единиц измерения, а не структуру.
Считают, что чем меньше признаков, тем лучше. Отбор проверяют по метрике на валидации, иначе легко выбросить признак, слабый поодиночке, но полезный в сочетании с другими.