🏢 Ситуация
Финтех-направление Datacore запускает рассрочку. Нужен скоринг: одобрять ли заявку. Игорь отдаёт вам подготовку признаков:
«Модель у нас будет простая, а вот признаки — это где выигрывается качество. Правило индустрии: лучшая модель на слабых признаках проигрывает простой модели на сильных признаках. У тебя три таблицы: заявки, история транзакций кошелька и история прошлых рассрочек. Собери из них матрицу признаков. И аккуратно с категориями и пропусками — в проде заявки приходят кривые.»
🎯 Ваша задача
- Освоить агрегатные признаки из транзакционной истории.
- Правильно кодировать категориальные признаки.
- Обрабатывать пропуски так, чтобы это работало и в проде.
📚 Теория
Feature engineering — что это
Преобразование сырых данных в признаки, которые «подсвечивают» задачу для модели. Виды:
- Агрегаты по истории: суммы, средние, счётчики, доли за окна времени (30/90/180 дней).
- Отношения и разности: платёж / доход, дней с последней просрочки.
- Временные признаки: день недели, срок жизни аккаунта, сезонность.
- Кодирование категорий — превращение строк в числа.
- Трансформации: log для скошенных сумм, биннинг возраста.
Кодирование категориальных признаков
| Метод | Как | Когда |
|---|---|---|
| One-Hot | колонка на каждую категорию | мало категорий (< 15–20) |
| Ordinal | категория → номер | категории реально упорядочены (образование) |
| Target encoding | категория → среднее таргета по ней | много категорий; ⚠️ риск утечки — считать только на train, с кросс-валидацией/сглаживанием |
| Частотное | категория → её частота | быстро и часто на удивление хорошо |
⚠️ Ловушка: one-hot для «города» с 900 значениями → 900 колонок, разреженная матрица, переобучение на редких городах.
Пропуски: думаем как продакшен-инженер
- Заполняйте статистиками, посчитанными на train (иначе утечка).
- Часто полезен флаг пропуска отдельной колонкой: «не указал доход» — сам по себе сигнал риска.
- В проде придёт категория/значение, которого не было в обучении — пайплайн должен это переживать (
handle_unknown="ignore", дефолтные значения).
Утечка данных через признаки (главный враг скоринга)
Признак не должен содержать информацию из будущего относительно момента заявки. Пример фейла: признак «число звонков коллекторов» — он появляется только у тех, кто уже просрочил. Модель с ним покажет фантастический AUC на истории и рухнет в проде. Правило: все признаки считаются строго на данных до момента заявки (point-in-time).