Введение
В предыдущих статьях я объяснил, почему использование деревьев решений с градиентным усилением «как есть» проблематично для кредитного скоринга, и дал представление о факторах, используемых в этой области. Сегодня давайте обсудим подход, который Equifax использовал для создания наборов данных, и то, как применить экстраполяцию деревьев решений с градиентным усилением к этой проблеме.

Набор данных
О цели. Проверяем, вернул ли заявитель кредит в течение трех месяцев: вернул → «0», не вернул → «1». Это создает дополнительную головную боль: к тому времени, когда цель станет известна, набор данных устареет уже на три месяца.

У Equifax было несколько миллионов заявок в базе данных Oracle. Насколько я помню, уникальных заявителей было сотни тысяч. Наша задача заключалась в том, чтобы выполнить массивную операцию GROUP BY по базе данных и вычислить такие показатели, как количество уникальных адресов, номеров телефонов и т. д. Это был не последний шаг: для каждого «сырого» фактора мы также получали набор двоичных факторов — так называемых «флагов».

Map-Reduce вместо Oracle
Оказалось, что скорость этой процедуры нелинейно зависела от размера фрагмента, поэтому я написал самый длинный PL/SQL-скрипт в своей жизни — около 400 строк. Он извлекал фрагменты из примерно 100 000 записей, обрабатывал их и сохранял результаты. После обработки всей таблицы все фрагменты были объединены вместе. Так сказать, MapReduce поверх Oracle. Расчеты заняли около пяти дней. Переходя с платформы MapReduce Яндекса, я был в тихом недоумении: GROUP BY более пары миллионов записей должен занимать пять минут, а не пять дней. Я все еще думаю, что нам не хватает инструментов для мезомасштабных данных — что-то среднее между DataFrame pandas и полноценным MapReduce — но это тема для другого поста.

Препятствия
Имея этот набор данных на руках, мы начали эксперименты. Несколько примечательных моментов:

  • Я нашел ошибку в XGBoost (что-то об импорте данных из массивов Python).
  • GBDT для функций двоичных флагов имел то же качество, что и линейная регрессия (повышение позволяет найти лучшие пороговые значения, которые заморожены в флагах).
  • Прогнозы были нестабильными; качество со временем быстро ухудшается.

К сожалению, преодоление этих препятствий не привело к построению прочных отношений с моим менеджером. Напротив, это привело к увольнению с моей работы в Equifax по окончании испытательного срока.

Рождение подхода
К концу этого периода у меня возникла идея: если система нестабильна с течением времени, мы можем использовать это, пытаясь изучить временные зависимости. Именно в этом и заключается идея деревьев решений с градиентным усилением и экстраполяцией. Я хорошо помню этот момент — это была пятница, 13-е, 13 апреля 2018 года.

Чтобы завершить описание набора данных: бинарная цель с положительной долей ~ 1%; десяток-другой «сырых» функций вроде «количества уникальных номеров телефонов в предыдущих приложениях»; и около 75 производных «флаговых» функций, созданных на основе этих необработанных функций.

Я попрощался с этим набором данных, но идея была слишком интересной, чтобы отказаться от нее — мне очень хотелось ее реализовать.