Как избежать смещения выборки при обучении модели на одобренных кредитах
Что проверяют
Понимаете ли вы, что модель, обученная только на выданных кредитах, видит исходы лишь тех, кого банк уже счёл надёжным, и на остальном потоке заявок ошибается систематически. Эта задача называется reject inference. Следом обычно спрашивают, как вы проверите, что поправка вообще помогла.
Как отвечать
Начните с механизма: дефолт наблюдается только у одобренных, у отказов метки нет, а решение об одобрении зависело от признаков. Выборка смещена не случайно, поэтому кросс-валидация и стратификация внутри одобренных проблему не лечат. Дальше способы:
- контрольная группа: небольшая доля заявок одобряется в обход скоринга. Это единственный честный источник меток по «серой зоне», его цена это прямые потери на дефолтах;
- обратное взвешивание (IPW): модель вероятности одобрения, и каждый одобренный входит в обучение с весом
1 / P(approve | x). Работает, пока у каждого сегмента шанс одобрения ненулевой; - reject inference: присвоение меток отказникам. Parceling, fuzzy augmentation (отказ входит дважды, «плохим» и «хорошим», с весами по предсказанной вероятности), разметка по порогу. Оговорите, что все эти методы предполагают сходство отказов с одобренными при тех же признаках;
- данные бюро: если человеку отказали у вас, а кредит он взял в другом месте, его исход виден в кредитной истории.
Проверка: сравнить распределения признаков (PSI) между потоком заявок и обучающей выборкой и оценивать качество на контрольной группе, а не на отложенной части одобренных.
Где спотыкаются
Предлагают «добавить отклонённые заявки в обучение», не объясняя, откуда взять им целевую метку. Без исхода отказ модели ничего не даёт.
Путают смещение выборки с дисбалансом классов и лечат его class_weight или SMOTE. Дисбаланс про долю дефолтов, смещение про то, какую часть популяции вы вообще видите.
Оценивают Gini на holdout из тех же одобренных и радуются. Такая метрика меряет качество на уже отфильтрованном потоке и ничего не говорит о решениях по новым заявкам.