Как избежать потери достоверности при смешивании признаков
Что проверяют
Под «смешиванием» обычно имеют в виду сборку новых признаков из старых: отношения, агрегаты, target encoding, объединение таблиц. Интервьюер хочет понять, видите ли вы, где в признак протекает информация, которой в момент предсказания не будет. Следом почти всегда просят показать, как вы заметите это на валидации.
Как отвечать
Начните с главного источника потери достоверности, утечки данных, и только потом переходите к корреляциям:
- обучение преобразований только на train:
StandardScaler, импутация,PCA, отбор признаков обучаются на обучающей части. Удобнее всего собрать их вPipelineилиColumnTransformerи отдавать вcross_val_scoreцеликом, тогда каждое разбиение считает статистики заново; - target encoding вне фолда: среднее таргета по категории считается на других фолдах со сглаживанием, иначе редкие категории просто запоминают ответ. В
scikit-learnдля этого естьTargetEncoderсо встроенным cross fitting; - время: агрегаты вроде «средний чек за 30 дней» считаются строго по данным до момента события, а валидация идёт по времени,
TimeSeriesSplitвместо случайного перемешивания; - группы: если у одного клиента много строк, делите через
GroupKFold, иначе модель узнаёт клиента, а не закономерность; - мультиколлинеарность: сильно связанные признаки мало вредят качеству предсказания, но ломают интерпретацию коэффициентов линейной модели и важностей. Смотрите VIF или корреляционную матрицу, помогает L2 регуляризация, объединение признаков или отказ от одного из пары.
Итоговая проверка: метрика на честной отложенной выборке рядом с кросс-валидацией и подозрение к любому признаку, который один забирает почти всю важность.
Где спотыкаются
Делают fit_transform на всём датасете до разбиения. Утечка бывает небольшой, но метрика уже оптимистична, а на проде модель проседает.
Считают мультиколлинеарность главной бедой и лечат её через PCA. Для бустинга это чаще лишнее, а интерпретируемость после PCA теряется совсем.
Не проверяют, доступен ли признак в момент предсказания. Поле, которое заполняется после события, даёт идеальную метрику и бесполезную модель.