- BrainTools - https://www.braintools.ru -

Модель с AUC ниже заработала больше — пока отсечка стояла по скору

Две модели кредитного скоринга на открытых данных Home Credit. У модели A AUC выше, у модели B — ниже. При обычной отсечке «одобряем лучшие x %» B зарабатывает на 113 млн больше, и это не шум: B впереди в 200 из 200 бутстрэп-выборок. Как только решение принимается по каждому кредиту — откалиброванная PD × сумма × срок, — разрыв исчезает, а обе модели зарабатывают больше, чем при любой отсечке по скору. Ниже — почему так, сколько это стоит и что из этого следует для того, кто подписывает кредитную политику.

Модель с AUC ниже заработала больше — пока отсечка стояла по скору - 1

Я руковожу розничными кредитными рисками. В этой работе кредиты не одобряют «по AUC». Вопрос всегда один: где поставить отсечку и сколько заработает одобренный портфель. Весь код — в ноутбуке Home Credit: From AUC to Money — Cutoff Economics [1] на Kaggle. Он самодостаточен: три модели обучаются внутри за несколько минут на CPU, экономические параметры лежат в одной ячейке, их можно поменять и перезапустить.

Сокращения. AUC (area under the ROC curve) — площадь под ROC-кривой, метрика качества ранжирования; Джини = 2·AUC − 1. PD (probability of default) — вероятность дефолта. LGD (loss given default) — доля потерь при дефолте. EAD (exposure at default) — сумма под риском, здесь сумма кредита. OOF (out-of-fold) — прогнозы на отложенных фолдах кросс-валидации. ДИ — доверительный интервал. п. п. — процентные пункты.

Данные и три модели

application_train.csv из соревнования Home Credit Default Risk: 307 511 заявок, доля целевого события 8,07 %. Три модели LightGBM на одних и тех же пяти стратифицированных фолдах, прогнозы OOF:

  • полная — 124 признака: поля анкеты и четыре отношения (срок = сумма / аннуитет, кредит / доход, аннуитет / доход, цена товара / кредит), AUC 0,7680;

  • A, «только внешние скоры» — три поля EXT_SOURCE_1..3, самые сильные признаки соревнования, AUC 0,7237;

  • B, «без внешних скоров» — все остальные 121 признак: сумма, аннуитет, срок, доход, возраст, занятость, документы, регион; AUC 0,7202.

Разница AUC между A и B — 0,0035 в пользу A (бутстрэп по заявкам, 90 % ДИ разницы B − A от −0,0072 до −0,0001). Разница маленькая, но знак устойчив по сидам обучения [2], и AUC, взвешенная суммой кредита, тоже предпочитает A: 0,7238 против 0,7145. По любой метрике ранжирования A лучше.

Экономика одного кредита

Модель намеренно простая и целиком иллюстративная — ни у какого банка параметры не взяты. Ставка 24 % годовых, стоимость фондирования 10 %, операционные расходы 2 %, итого чистая маржа m = 12 % годовых; LGD 60 %. Хороший кредит амортизируется до нуля, средний остаток — половина суммы, поэтому приносит m · EAD · T / 2. Плохой теряет LGD · EAD. Срок T — сумма, делённая на аннуитет, ограничен 6–60 месяцами; медиана 20 месяцев.

MARGIN = 0.24 - 0.10 - 0.02                      # ставка − фондирование − опер. расходы
LGD    = 0.60
EAD  = df["AMT_CREDIT"].values
TERM = (df["AMT_CREDIT"] / df["AMT_ANNUITY"]).fillna(20).clip(6, 60).values / 12   # лет

good = MARGIN * EAD * TERM / 2                   # доход, если кредит хороший
bad  = LGD * EAD                                 # потеря, если плохой
realised = np.where(y == 1, -bad, good)          # что кредит заработал бы, если одобрить

Из формулы следует точка безубыточности по PD для каждого кредита: PD < (m·T/2) / (m·T/2 + LGD). Медиана — 14,3 %, у 90 % кредитов — от 7,4 до 22,4 %. Порог зависит от срока: длинный кредит выдерживает более высокую PD. Это и есть ключ ко всей истории.

Если одобрить всех, портфель заработает 13,14 млрд в единицах датасета — 7,14 % от объёма выдач.

Результат: отсечка по скору

При каждой доле одобрения модель одобряет заявки с лучшим скором, прибыль считается по фактическим исходам. Это картинка в начале статьи.

B зарабатывает больше. В максимуме кривой разница +113 млн (90 % ДИ от +54 до +173 млн). Поточечно нижняя граница 90 % бутстрэп-полосы выше нуля на долях одобрения от 64 до 94 % — там, где лежат все разумные отсечки. Ниже 60 % одобрения модели идут вровень или A чуть впереди. При «привычных» 70 % одобрения B впереди на 151 млн (13,01 против 12,86 млрд).

Масштаб честно: 113 млн — это 0,8 % прибыли портфеля. Немного. Но это деньги, которые AUC записала бы в минус.

Почему AUC — не цель

AUC — вероятность того, что случайный плохой клиент получит скор хуже случайного хорошего. Она усредняет по всем порогам и считает всех клиентов равными.

Решение кредитора устроено иначе. Порог один или несколько по сегментам, поэтому важно ранжирование около него, а не везде. Клиенты не равны: отказ хорошему теряет его процентный доход, одобрение плохому теряет долю тела, обе величины пропорциональны сумме, а доход — ещё и сроку. Чтобы поставить отсечку по экономике, нужна вероятность, а не ранг, — а AUC к калибровке слепа. Цель — максимум прибыли одобренного портфеля при заданном аппетите к риску и капитале (последние два здесь за скобками).

Калибровка: скор → PD

LightGBM на log-loss обычно близок к откалиброванному, но «близок» надо проверять. На OOF-скорах полной модели — изотоническая регрессия и Platt scaling (логистическая регрессия на логите скора) с кросс-фитом: калибратор учится на четырёх фолдах и применяется к пятому, так что PD тоже остаётся OOF.

Сырые скоры уже хороши: ECE (expected calibration error, ожидаемая ошибка [3] калибровки) по 20 бинам — 0,0035; изотоника доводит её до 0,0010, средняя PD 8,07 % против наблюдаемых 8,07 %. AUC при этом почти не меняется (0,7680 → 0,7674). В этом и проблема: по AUC не видно, верна ли PD.

Где оптимальная отсечка

На полной модели: при каждой доле одобрения берём заявки с лучшим скором и суммируем фактическую прибыль, рядом — ожидаемую по откалиброванной PD.

Модель с AUC ниже заработала больше — пока отсечка стояла по скору - 2

Политика

Одобрено

Прибыль, млрд

К оптимуму, млрд

одобрить всех

100 %

13,14

−1,40

«по привычке», 70 %

70 %

13,56

−0,99

порог KS (Колмогорова — Смирнова) / Йодена, максимум разделения

65,1 %

12,97

−1,57

оптимальная единая отсечка (задним числом)

87,2 %

14,55

0

правило по заявке: E[прибыль] > 0

82,0 %

14,73

+0,19

Фактическая и ожидаемая кривые почти совпадают — откалиброванной PD можно планировать, а не только ранжировать. Порог, который лучше всего разделяет хороших и плохих, одобряет сильно меньше, чем нужно для прибыли: разделение и деньги — разные цели, отказ хорошему стоит всей его маржи. Кривая плоская у вершины: несколько пунктов доли одобрения около оптимума стоят мало, отсечка далеко от него — много.

Главное — последняя строка. Единая отсечка «задним числом» подобрана на тех же данных и льстит себе. Правило E[прибыль] > 0 не использует исходы оцениваемых кредитов — только их OOF-PD, сумму и срок — и всё равно обыгрывает её на 0,19 млрд. Та же модель, другое правило решения.

expected = (1 - pd_oof) * good - pd_oof * bad   # ожидаемая прибыль кредита
approve  = expected > 0                          # правило по заявке

Та же AUC, неверная PD

AUC не меняется при любом монотонном преобразовании скора. PD, смещённая в шансах в константу раз, имеет ровно ту же AUC. Так бывает после обучения с перевзвешиванием классов (scale_pos_weight, is_unbalance), которое забыли откатить, или после сдвига потока заявок. Правило, которое использует уровень PD, начинает работать с неверными числами.

Модель с AUC ниже заработала больше — пока отсечка стояла по скору - 3

PD в правиле

AUC

Средняя PD

Одобрено

Прибыль, млрд

К откалиброванной, млрд

шансы × 0,5

0,7674

4,4 %

93,2 %

14,28

−0,45

шансы × 1

0,7674

8,1 %

82,0 %

14,73

0

шансы × 2

0,7674

14,0 %

64,6 %

13,87

−0,86

шансы × 4

0,7674

22,7 %

42,4 %

10,95

−3,79

Одна AUC в каждой строке, разные деньги. Калибровка — то, что превращает ранжирование в решение. Отдельный разбор — в ноутбуке Home Credit: PD Calibration — AUC Is Not Enough [4].

Чувствительность: LGD ±10 п. п., маржа ±5 п. п.

LGD и маржа точно не известны никогда: взыскание дрейфует, фондирование идёт за ключевой ставкой.

Модель с AUC ниже заработала больше — пока отсечка стояла по скору - 4

Оптимальная доля одобрения двигается вместе с экономикой: ±10 п. п. LGD сдвигают её между 83 и 90 %, ±5 п. п. маржи — между 77 и 92 %. Привычные 70 % теряют от 0 до 13 % оптимальной прибыли и дёшевы только там, где случайно оказались у оптимума. Отсечку пересчитывают, когда меняются фондирование или взыскание, а не наследуют от прошлогоднего кредитного комитета.

Откуда у B лишние деньги

При одной доле одобрения две модели одобряют в основном одних и тех же людей. Деньги делаются на swap set — кредитах, которые одна модель одобрила, а другая отклонила. При 88 % одобрения (оптимум B) это 17 % заявок — по построению поровну у каждой модели.

Группа

Кредитов

Доля плохих

Средняя сумма

Средний срок, мес.

Доход, если хороший, % суммы

Прибыль, млн

одобрили обе

244 549

4,9 %

624 730

22,1

11,1 %

+14 213

одобрила только A

26 122

17,2 %

490 988

18,5

9,2 %

−259

одобрила только B

26 122

17,8 %

525 021

21,2

10,6 %

−114

Обе группы «только одна модель» при такой доле одобрения убыточны, но B теряет меньше. Плохих у неё даже чуть больше; зато её лишние кредиты длиннее и крупнее и приносят больше, когда оказываются хорошими.

Механизм виден по срокам.

Срок, мес.

Кредитов

Доля плохих

Средний скор A

Средний скор B

AUC A

AUC B

8–16

76 903

8,9 %

8,7 %

8,8 %

0,7292

0,7495

16–20

80 220

7,8 %

8,2 %

7,9 %

0,7192

0,7186

20–27

73 609

9,0 %

8,2 %

8,9 %

0,7314

0,7261

27–45

76 779

6,6 %

7,2 %

6,5 %

0,7040

0,6581

Внутри полос срока B ранжирует не лучше A, на самых длинных кредитах — заметно хуже. Её преимущество — между полосами. Длинные кредиты реже уходят в дефолт. B видит срок — он есть среди её признаков — и ставит им скор по фактической частоте; A длинные переоценивает, а полосу 20–27 месяцев недооценивает. Срок — множитель дохода, и AUC его не видит.

Когда разрыв исчезает

Переведём обе модели на правило по заявке: откалибруем скор каждой (кросс-фит изотоники) и одобрим, если E[прибыль] > 0.

Модель

AUC

Лучшая отсечка по скору (задним числом), млрд

Правило по заявке, млрд

Одобрено по правилу

A: только внешние скоры

0,7237

13,986

14,265

83,1 %

B: без внешних скоров

0,7202

14,099

14,258

82,5 %

полная модель

0,7680

14,547

14,733

82,0 %

Разница между A и B исчезает: 14,265 против 14,258 млрд. Как только правило само учитывает срок, лучшее ранжирование A и знание срока у B гасят друг друга. Обе модели зарабатывают больше, чем при своей лучшей отсечке по скору: A — на 0,28 млрд, B — на 0,16. Полная модель бьёт обеих — больше информации по-прежнему выигрывает.

Поэтому заголовок верен только наполовину, и это главное. Модель с AUC ниже выиграла не потому, что ниже AUC лучше, а потому, что правило решения было слепым к сроку, а она — нет. Смена правила на той же модели принесла больше, чем вся разница между моделями.

Что из этого следует для руководителя риска

  1. Челленджера принимать в деньгах и под тем правилом, которое реально запускается. Отчёт о новой модели — это кривая прибыли с бутстрэп-полосой в рабочем диапазоне одобрения и swap set: какие кредиты переходят из рук в руки и сколько они приносят. Прирост Джини — вторая строка, не первая.

  2. Сначала правило решения, потом модель. Здесь замена модели A на B при отсечке по скору дала +0,11 млрд, а переход от отсечки к правилу по заявке на той же модели A — +0,28. Если отсечка не видит сумму и срок, деньги теряются на любой модели.

  3. Калибровку мониторить так же, как ранжирование. Сдвиг PD вдвое в шансах не виден по Джини и стоит здесь 0,86 млрд. В регулярный мониторинг — график надёжности (предсказанная PD против наблюдаемой частоты) по свежим поколениям, а не только Джини и PSI.

  4. Отсечку пересчитывать при движении фондирования и взыскания. ±5 п. п. маржи сдвигают оптимум на 15 п. п. одобрения. Когда меняется ключевая ставка, вопрос «где теперь отсечка» должен звучать на ближайшем кредитном комитете.

  5. Точку максимального разделения (KS) не использовать как политику. Она отвечает на вопрос «где модель лучше всего отличает плохих», а не «где портфель больше всего зарабатывает». Здесь между ними 22 п. п. одобрения и 1,57 млрд.

Ограничения

Экономические параметры иллюстративные; предоплат, дисконтирования, комиссий, капитала и стоимости фондирования плохого кредита во время взыскания нет. TARGET в Home Credit — трудности с ранними платежами, а не полный дефолт; это поглощает LGD. Для револьверных продуктов (около 10 % строк) «срок» — лишь прокси. Ранняя остановка на том же фолде делает OOF AUC чуть оптимистичной; процедура одна для всех трёх моделей. Бутстрэп — по заявкам при фиксированных моделях, случайность [5] обучения в полосу не входит. Данные и метод — настоящие; параметры меняются в одной ячейке ноутбука.

Продолжение — про дрейф потока заявок и пересчёт отсечки: Home Credit: PSI, Drift and Re-setting the Cutoff [6].

Ссылки. Соревнование Home Credit Default Risk [7]. D. J. Hand, Measuring classifier performance: a coherent alternative to the area under the ROC curve [8], Machine Learning, 2009. T. Verbraken, C. Bravo, R. Weber, B. Baesens, Development and application of consumer credit scoring models using profit-based classification measures [9], EJOR, 2014. scikit-learn, Probability calibration [10]. Мои ноутбуки и датасеты — kaggle.com/truenikita [11], сайт — ageev.dev [12].

Автор: big_ageev

Источник [13]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/37318

URLs in this post:

[1] Home Credit: From AUC to Money — Cutoff Economics: https://www.kaggle.com/code/truenikita/home-credit-from-auc-to-money-cutoff-economics

[2] обучения: http://www.braintools.ru/article/5125

[3] ошибка: http://www.braintools.ru/article/4192

[4] Home Credit: PD Calibration — AUC Is Not Enough: https://www.kaggle.com/code/truenikita/home-credit-pd-calibration-auc-is-not-enough

[5] случайность: http://www.braintools.ru/article/6560

[6] Home Credit: PSI, Drift and Re-setting the Cutoff: https://www.kaggle.com/code/truenikita/home-credit-psi-drift-and-re-setting-the-cutoff

[7] Home Credit Default Risk: https://www.kaggle.com/competitions/home-credit-default-risk

[8] Measuring classifier performance: a coherent alternative to the area under the ROC curve: https://link.springer.com/article/10.1007/s10994-009-5119-5

[9] Development and application of consumer credit scoring models using profit-based classification measures: https://doi.org/10.1016/j.ejor.2014.04.001

[10] Probability calibration: https://scikit-learn.org/stable/modules/calibration.html

[11] kaggle.com/truenikita: https://www.kaggle.com/truenikita

[12] ageev.dev: https://ageev.dev

[13] Источник: https://habr.com/ru/articles/1097704/?utm_campaign=1097704&utm_source=habrahabr&utm_medium=rss

www.BrainTools.ru

Rambler's Top100