Прогнозирование вероятности того, что клиент не выплатит сумму остатка по кредитной карте в будущем, на основе его ежемесячного профиля клиента. Наш проект был частью конкурса Kaggle с American Express, чтобы помочь им лучше внедрять решения для управления рисками.

Автор: Рианна Патель, Алиша Суд, Висва Тедж,Аникет Патил, Кай Чжан

Введение и предыстория

Давайте будем честными, мы живем в эпоху прокрастинации. Все прокрастинируют, некоторые хуже других. Но есть одна вещь, которую мы не откладываем на потом, — это оплата счетов по кредитной карте.

Просроченный платеж по кредитной карте стоит дорого. Банки обычно предлагают APR по кредитным картам (процентная ставка на просроченный остаток) в диапазоне от 12% до 24%. Это в три-четыре раза выше, чем процентная ставка по обычному кредиту. Американцы ежегодно платят 120 миллиардов долларов в виде процентов и комиссий по кредитным картам.

С другой стороны, дефолты по кредитным картам представляют собой большой риск для банков. Шесть крупнейших банков Америки выделили 4,5 миллиарда долларов в третьем квартале 2022 года для покрытия будущих потерь по кредитам из-за роста процентных ставок и экономических потрясений. Согласно отчету Accenture, это число стало самым худшим, когда в 2020 году банки США столкнулись со списанием кредитов на сумму до 320 миллиардов долларов США из-за COVID-19. Это огромное количество ликвидности, которое финансовые учреждения были вынуждены откладывать более чем на год, потому что они переоценивали дефолты по кредитным картам.

American Express, одна из крупнейших компаний, выпускающих кредитные карты, находится в авангарде этого риска. В этом блоге мы поговорим о конкурсе Kaggle, в котором мы участвовали, в котором мы пытаемся предсказать дефолты по кредитным картам на индивидуальном уровне.

Сбор/описание данных

Выбранный нами набор данных содержал набор из 458 913 уникальных клиентов и 190 агрегированных характеристик профиля, которые мы будем использовать для определения вероятности невыполнения клиентом своих обязательств. Хотя существует множество факторов, которые объясняют дефолт по кредитной карте, мы можем объединить 190 функций профиля в пять категорий: переменные просрочки (D_), переменные расходов (S_), переменные платежа (P_), переменные баланса (B_) и переменные риска. (Р_). Хотя большинство этих переменных представляют числовые значения, существует 145 переменных просрочки, девять из которых являются категориальными переменными (D_114, D_116, D_117, D_120, D_126, D_63, D_64, D_66, D_68). Имеется 42 балансовые переменные, две из которых являются категориальными (B_30 и B_38). На приведенном ниже графике показано, как данные распределяются по каждой из категорий переменных. Мы видим, что эти переменные неравномерно распределены среди каждой категории с большим количеством переменных просрочки (96) и очень небольшим количеством переменных платежа (3).

Этот набор данных уже преобразовал эти категориальные переменные в двоичные значения, анонимизировал и нормализовал набор данных. В результате мы продолжили тестирование без дополнительной очистки данных. Используя эти переменные, мы определим целевую бинарную переменную, которая представляет вероятность дефолта клиента в будущем. Это будет рассчитываться на основе того, выплачивает ли клиент причитающуюся сумму через 120 дней после даты последней выписки, используя 18-месячное окно производительности после последней выписки клиента по кредитной карте.

При дальнейшем тестировании мы столкнулись с двумя основными проблемами:

  1. Большое количество NaN в нашем наборе данных
  2. Размер нашего набора данных. Мы протестировали различные методы и в конечном итоге нашли оптимальные решения для решения этих проблем, получив при этом высокий балл оценки без ущерба для целостности наших данных.

Во-первых, мы исследовали NaN в нашем наборе данных, чтобы определить, насколько они будут влиять на нашу окончательную модель. Мы обнаружили, что 13% объектов, включенных в набор данных, имеют более 70% нулевых значений, а примерно 22% объектов имеют более 20% всех данных. Первоначально мы оценили, как повлияет на нашу модель, если мы заменим нулевые значения на 0 или среднее значение признака. Поскольку мы имеем дело с финансовыми данными, мы решили, что замена NaN числовым значением исказит наши результаты из-за того, что эти значения имеют финансовое значение. Затем мы поэкспериментировали с подмножеством данных и удалили функции, которые имеют более 20% нулевых значений. Однако это привело к значительной потере данных, что заставило нас двигаться дальше и включить NaN в наше тестирование.

Поскольку наш набор данных содержит 458 913 уникальных клиентов и 190 функций, наш набор данных был очень большим и сложным для обработки, учитывая его размер. Первоначально мы использовали JupyterLab на облачной платформе Google, но, поскольку наш целевой файл находился в отдельном файле, объединение их было неэффективным с точки зрения вычислений в бесплатной версии этой платформы. Затем мы рассмотрели возможность уменьшения размера нашего набора данных с помощью файлов рассола, паркета и перьев. При использовании модуля pickle мы обнаружили, что он работает медленно и чрезмерно сериализуется, что может вызвать проблемы при тестировании в будущем. Хотя модуль паркета может обрабатывать сложные данные и функции по-разному для более эффективного сжатия данных, он по-прежнему работает медленно. С модулем перьев мы обнаружили, что он в 100 раз быстрее по сравнению с файлами CSV, pickle и parquet. Несмотря на скорость сокращения файла, эти методы одновременно снижают точность наших данных, и мы будем помнить об этом при оценке нашей окончательной модели. В конечном счете, мы решили продолжить тестирование с перьевой напильником.

Вот ссылка на наши данные:



Предварительная обработка и исследование данных (часть I)

Для исследовательского анализа данных мы сосредоточились на нескольких ключевых аспектах. Во-первых, мы рассмотрели, как наш набор данных был несбалансированным. При взгляде на целевую переменную около 25% клиентов в обучающей выборке не выполнили обязательства, а 75% заплатили. Мы также обнаружили, что эта доля тех, кто заплатил и не выполнил свои обязательства, была постоянной и в дневном масштабе.

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

Наконец, мы рассмотрели, какие переменные больше и меньше всего коррелируют с целевой переменной. Платеж 2 имел наибольшую отрицательную корреляцию с целевой переменной и имел корреляцию -0,67. Переменной с наибольшей положительной корреляцией была Делинквентность 48 с корреляцией 0,61.

Нет выбора функций

Для этой первой части нашего проекта мы решили не выбирать функции, так как мы используем данные из реального мира. Мы хотели убедиться, что American Express сможет запустить нашу модель на своем наборе данных без влияния на ожидаемую оценку.

Обучение/моделирование

Сначала мы решили подогнать модель LightGBM к набору данных. LightGBM использует новый метод односторонней выборки на основе градиента (GOSS) для фильтрации экземпляров данных для поиска значения разделения. Он также объединяет функции для ускорения традиционного алгоритма точки разделения, сложность которого пропорциональна размеру строки и размеру функции. LightGBM может обрабатывать категориальные функции, вводя имена функций. Он не преобразуется в горячее кодирование и работает намного быстрее, чем горячее кодирование. Мы выбрали LightGBM, поскольку он устойчив к нулевым значениям, выбросам и неравномерному распределению признаков, которые преобладали в нашем наборе данных. Light GBM также имеет несколько преимуществ, заключающихся в более высокой скорости обучения и эффективности, а также в возможности обработки больших наборов данных.

Что касается выбора и настройки параметров, мы настроили наиболее важные параметры num_leaves и max_depth. Параметр num_leaves влияет на изучение большего, поэтому мы устанавливаем широкий диапазон для num_leaves и узкий диапазон для max_depth. Умный выбор гиперпараметров помог уменьшить размер сетки и, в свою очередь, вычислений.

Результаты традиционных моделей:

При оценке нашей модели мы обнаружили, что ROC для каждой из 10 кратностей перекрестной проверки (показаны ниже) почти перекрываются и имеют средний AUC 0,96. Это указывает на то, что модель имеет минимальную дисперсию, и поэтому ожидается, что она будет хорошо работать в частной таблице лидеров конкурса Kaggle.

Мы обнаружили, что переменная «Платеж 2» имеет наибольшую важность, несмотря на то, что в наборе данных всего 4 платежные переменные. Кроме того, переменные со 2-м и 3-м наивысшим значением характеристик — это переменные «Баланс 4» и «Расходы 3». Это было интересно, учитывая, что функции просроченной задолженности имеют наибольший объем этих функций в наборе данных и могли бы дать больше информации, если бы у нас был словарь данных. Важность этих переменных показана на графике ниже и соответствует тому, что мы ожидали от нашего

ЭДА.

Соревнование Kaggle, в котором мы участвуем, использует метрику оценки (M) и ее компоненты (D и G) для определения производительности моделей и ранжирования конкурентов. Метрика оценки M для этого соревнования представляет собой среднее значение двух показателей ранжирования: 1) нормализованный коэффициент Джини (G) и 2) коэффициент по умолчанию, зафиксированный на уровне 4% (D):

M = 0.5 * (G+D)

Коэффициент по умолчанию, зафиксированный на уровне 4%, представляет собой процент положительных меток (значений по умолчанию), полученных в пределах 4% прогнозов с наивысшим рейтингом, и представляет статистику чувствительности/отзыва. Для корректировки субметрики и отрицательных меток присваивается вес 20.

После подгонки модели LightGBM к нашему набору данных и решения конкурса Kaggle мы представили наши результаты, чтобы увидеть, как они сравниваются с другими конкурентами Kaggle. Мы получили оценку 0,7979, при этом наивысшая оценка составила 0,8097 в частной таблице лидеров, при этом около 2000+ человек находятся между нашей оценкой и самой высокой. В целом мы видим, что, основываясь на оценочной метрике, полученной от конкурса Kaggle, наша модель работает относительно хорошо.

Предварительная обработка и исследование данных (Часть II)

После решения конкурса Kaggle и получения оценки 0,79 мы пошли дальше и взяли подмножество данных для разработки функций. Для работы с нулевыми значениями мы использовали KNNImputer. Этот метод следует основному подходу алгоритма KNN и по существу вменяет пропущенные значения, находя ближайших соседей с евклидовой матрицей расстояний. Мы выбрали этот метод вместо замены всех отсутствующих значений средним значением, потому что использование среднего значения приведет к тому, что все наши точки данных будут похожими. Кроме того, мы решили не заменять все отсутствующие значения на 0, потому что 0 имел значение в нашем наборе данных. В конце концов, мы использовали функцию KNNImputer, чтобы заменить все нули в нашем наборе данных.

Затем мы приступили к нашему исследовательскому анализу данных. Поскольку у нас не было словаря данных, мы не могли углубиться в EDA, поэтому воспользовались AutoViz. AutoViz — это автоматизированная библиотека визуализации, которая автоматически анализирует ваш набор данных и предлагает рекомендации по очистке. Этот инструмент способен определить наиболее важные функции набора данных и построить визуализацию с использованием этих выбранных функций. Некоторыми сильно искаженными переменными, выявленными AutoViz, были Spend_5, Spend_9 и Balance_5. Распределения для этих переменных представлены ниже.

Изучая переменные, определенные AutoViz как «сильно искаженные», мы также обнаружили некоторые интересные тенденции среди переменных «Платежи». Сначала взглянув на Payment_2 слева, мы видим, что по мере увеличения этой переменной вероятность дефолта снижается. Затем мы рассмотрели переменную Payment_4 справа. Тенденция, наблюдаемая здесь, заключается в том, что когда Payment_4 равен 1, существует 50% вероятность того, что платеж будет выполнен по умолчанию. Кроме того, когда Payment_4 равен 0, возникает много случаев, но лишь небольшая часть из них по умолчанию.

Обучение/Моделирование (Часть II)

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

Техника моделирования, которую мы решили попробовать сейчас, — это стекирование. Этот ансамблевый алгоритм машинного обучения способен научиться наилучшим образом комбинировать прогнозы нескольких хорошо работающих моделей машинного обучения. Мы попробовали стекировать, потому что смогли получить хорошие результаты с несколькими базовыми учащимися, а стекирование обычно хорошо работает с базовыми учащимися с хорошей производительностью. Базовыми учащимися, используемыми для этого метода моделирования, были KNN, Naive Bayes и Gradient Boosted Trees.

Наша модель стекирования сопровождалась перекрестной проверкой, чтобы уменьшить переобучение моделей в обучающие данные. Мы провели 10-кратную перекрестную проверку и повторили это 3 раза. Мы использовали эту стратегию разделения данных для разработки более обобщенной модели, которая будет хорошо работать с невидимыми данными.

Результаты (Часть II)

После проведения разработки признаков мы подогнали к набору данных четыре традиционные модели машинного обучения.

Глядя на производительность среди четырех традиционных моделей машинного обучения, Random Forest показал самый высокий балл F1. Мы можем сделать вывод, что случайный лес и деревья решений в целом более точны, чем KNN и логистическая регрессия. Тем не менее, KNN сделал значительно меньше ложных отрицательных прогнозов (промах-прогнозирование клиента по умолчанию как недефолтного), что, по нашему мнению, будет более дорогостоящим с точки зрения Amex.

Проблема с традиционными моделями заключается в том, что все они имеют высокий уровень ложных срабатываний около 20% и низкий показатель AUC около 0,5 (LightGBM имеет показатель AUC 0,96). Традиционные машинные модели давали результаты с высокой дисперсией, и поэтому ожидается, что они будут плохо работать, если их внедрить. Эти результаты подтверждают наше решение об использовании LightGBM.

Наконец, мы смотрим на показатель Джини (0,5 * (G+D)), который используется в качестве показателя точности, определенного этим соревнованием Kaggle. Мы видим, что традиционные модели имеют баллы только в диапазоне 0,01, в то время как модель LightGBM имеет гораздо более высокий балл 0,7. Эти результаты подтверждают наше решение об использовании LightGBM.

Заключение

В целом, наш проект был разделен на две части, в первой части мы решали конкурс Kaggle, а во второй занимались разработкой функций. Для первой части нашего проекта мы выбрали LightGBM в качестве модели из-за ее устойчивости к нулевым значениям, выбросам и неравномерному распределению признаков, которые преобладали в нашем наборе данных. Этот метод моделирования также имеет несколько преимуществ: более высокую скорость обучения и эффективность, а также возможность обработки больших наборов данных, что было очень привлекательно для нашего проекта. Затем мы представили наши результаты, чтобы увидеть, как они сравниваются с другими конкурентами Kaggle, и получили 0,7979 балла, при этом наивысший балл составляет 0,8097 в частной таблице лидеров, при этом около 2000 человек находятся между нашим результатом и самым высоким. После решения конкурса Kaggle мы обратились к KNNImputer, чтобы удалить все нулевые значения в нашем наборе данных. Затем мы использовали AutoViz для автоматического предоставления предложений по очистке нашего набора данных. Модель, которую мы выбрали для этой части проекта, представляла собой наложение, поскольку мы смогли получить хорошие результаты с несколькими базовыми учащимися, а наложение обычно хорошо работает с базовыми учащимися, которые имеют хорошие показатели. Базовыми учащимися, используемыми для этого метода моделирования, были KNN, Naive Bayes и Gradient Boosted Trees. Мы хотели уменьшить переобучение, поэтому суммирование сопровождалось 10-кратной перекрестной проверкой, которая повторялась 3 раза. После проектирования признаков мы подгоняем к набору данных четыре традиционные модели машинного обучения. Глядя на производительность среди случайного леса, деревьев решений, KNN и логистической регрессии, случайный лес дал самый высокий балл F1. В целом, случайный лес и деревья решений в целом более точны, чем KNN и логистическая регрессия, но у KNN было значительно меньше ложных отрицательных прогнозов (промах-прогнозирование клиента по умолчанию как отсутствия по умолчанию). Мы думаем, что это будет намного дороже с точки зрения American Express. Наконец, давайте посмотрим на показатель Джини, который был показателем точности, определенным соревнованием Kaggle. Традиционные модели имеют только 0,01 баллов, в то время как модель LightGBM имеет гораздо более высокий балл 0,7. Эти результаты подтверждают наше решение об использовании LightGBM.

В процессе создания нашей модели главный урок, который мы усвоили, заключался в том, как работать с большими объемами данных. Изначально мы не могли эффективно обрабатывать нашу модель на полном наборе данных и исследовали различные методы, чтобы справиться с этим. Узнав о преимуществах и недостатках напильников для травления, паркета и перьев, мы можем применить эти знания и к будущим проектам с большими наборами данных. Кроме того, имея практический опыт преобразования нашего файла с помощью метода растушевки, мы получили ценный опыт, чтобы увидеть, как исследования, которые мы провели в отношении методов сокращения файлов, применяются в реальном мире. Кроме того, этот опыт работы с реальными данными заставил нас проанализировать влияние наших методов на данные, а не на сфабрикованные данные исключительно для проекта. Оценка влияния NaN на достоверность наших финансовых данных открыла нам глаза на различные способы, которыми данные могут быть скомпрометированы в процессе очистки данных. В конце концов, самый важный урок, который мы усвоили, заключался в том, как применять стратегии моделирования, которые мы изучили на занятиях, в реальных бизнес-ситуациях. У нас появилась возможность поставить себя на место компании, чтобы лучше понять, как American Express использует машинное обучение для поддержки своих бизнес-стратегий и минимизации рисков.

Двигаясь вперед с этим проектом, наши будущие шаги включают эффективное использование метода стекирования в нашей модели. Мы оценим различные методы для этого и изучим более эффективные технологии, которые позволят нам сделать это эффективным с точки зрения вычислений способом. Кроме того, мы продолжим исследовать альтернативные методы уменьшения размера данных, чтобы определить, есть ли лучшая альтернатива файлам растушевки, которая доказала бы вычислительную эффективность без значительного снижения точности наших данных.

Ссылки







Если вы хотите более подробно ознакомиться с кодом нашей команды, вот ссылка на GitHub:



Пожалуйста, не стесняйтесь оставлять отзывы или комментарии!