Проект МАШИННОЕ ОБУЧЕНИЕ В банковской сфере

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

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

Пример использования в бизнесе

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

Потенциальные бизнес-проблемы

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

Увеличить долгосрочные активы, которые можно в дальнейшем инвестировать в различные финансовые инструменты?

Зачем решать эту проблему?

Влияние на бизнес

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

Улучшите прогнозирование — определите правильную целевую аудиторию — эффективный бюджет на маркетинг

Улучшите прогноз — определите правильный частотный интервал для кампании — оптимальная кампания

Информация о наборе данных

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

Есть два набора данных: train.csv со всеми примерами (32950) и 21 вход, включая целевой объект, упорядоченный по дате (с мая 2008 г. по ноябрь 2010 г.). test.csv, который представляет собой тестовые данные, состоящие из 8238 наблюдений и 20 признаков без целевого признака.

Теперь давайте начнем с задачи машинного обучения, чтобы предсказать, подпишется ли клиент на срочный депозит, на основе анализа маркетинговых кампаний, проведенных банком с помощью Classification.

Исследовательский анализ данных

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

1) Импорт библиотек

2) Импорт набора данных

Первое, что мы можем сделать при решении проблемы науки о данных, — это получить представление о наборе данных, с которым вы работаете. Были отмечены ключевые наблюдения и тенденции в данных. Для этого вы можете использовать df.info, df.head() и т. д.

В анализе данных мы постараемся выяснить следующее.

  1. Отсутствующие значения в наборе данных.

2. Все числовые переменные и распределение числовых переменных.

3. Категориальные переменные

4. Выбросы

5. Связь между независимым и зависимым признаком

Проверьте числовые и категориальные признаки

Если вы знакомы с машинным обучением, вы знаете, что набор данных состоит из числовых и категориальных столбцов. Глядя на набор данных, мы думаем, что можем определить в нем категориальные и непрерывные столбцы. Верно? Но также возможно, что числовые значения представлены в виде строк в каком-то объекте. Или категориальные значения в некоторых функциях могут быть представлены как некоторые другие типы данных вместо строк. Следовательно, хорошо проверить типы данных всех функций.

Проверить недостающие данные

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

Заполните нулевые значения в непрерывных функциях

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

Проверка на дисбаланс классов

Дисбаланс классов возникает, когда наблюдения, принадлежащие одному классу в целевом объекте, значительно выше, чем наблюдения другого класса или классов. Распределение классов 80:20 или выше обычно считается дисбалансом для бинарной классификации. Поскольку большинство алгоритмов машинного обучения предполагают, что данные распределены равномерно, их применение к несбалансированным данным часто приводит к смещению в сторону классов большинства и плохой классификации классов меньшинства. Следовательно, нам необходимо выявить и устранить дисбаланс классов. Код ниже, который принимает целевую переменную и выводит распределение классов в цели.

Обнаружение выбросов в непрерывных столбцах

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

Одномерный анализ категориальных столбцов

Одномерный анализ означает анализ одной переменной. В основном он описывает характеристики переменной. Если переменная является категориальной, мы можем использовать гистограмму или круговую диаграмму, чтобы найти распределение классов в переменной.

Из приведенных выше изображений мы можем сделать следующие наблюдения:

  • Три основные профессии, к которым принадлежат наши клиенты, — администрация, рабочие и технические специалисты.
  • Огромное количество клиентов состоит в браке.
  • У большинства клиентов нет кредита по умолчанию
  • Многие из наших прошлых клиентов подали заявку на жилищный кредит, но очень немногие подали заявку на личные кредиты.
  • Мобильные телефоны, по-видимому, являются наиболее предпочтительным способом связи с клиентами.
  • Со многими клиентами связались в мае.
  • График для целевой переменной показывает сильный дисбаланс в целевой переменной.
  • Отсутствующие значения в некоторых столбцах представлены как unknown. unknown представляет отсутствующие данные. В следующей задаче мы будем рассматривать эти значения

Импутация unknown значений категориальных столбцов

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

Одномерный анализ непрерывных столбцов

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

Наблюдение:

  • Как видно из гистограммы, функции age, duration и campaign сильно искажены, и это связано с наличием выбросов, как видно на диаграмме для этих функций. Мы будем иметь дело с этими выбросами в шагах ниже.
  • Глядя на график для pdays, мы можем сделать вывод, что с большинством клиентов связывались впервые, потому что согласно описанию функции для pdays значение 999 указывает на то, что с клиентом ранее не связывались.
  • Поскольку функции pdays и previous состоят в основном только из одного значения, их дисперсия значительно меньше, и, следовательно, мы можем отбросить их, поскольку технически они не помогут в прогнозировании.

Двумерный анализ — категориальные столбцы

Двумерный анализ включает одновременную проверку связи между двумя переменными. В приведенном ниже коде мы наносим каждую категориальную функцию на цель, строя гистограмму.

Обработка выбросов в непрерывных столбцах

С выбросами можно обращаться по-разному. Это зависит от асимметрии признака. Чтобы уменьшить правую асимметрию, мы используем корни, логарифмы или обратные числа (корни самые слабые). Это самая распространенная проблема на практике. Чтобы уменьшить асимметрию влево, мы берем квадраты, кубы или более высокие степени. Но в наших данных некоторые признаки имеют отрицательные значения, а также значение 0. В таких случаях нельзя использовать преобразование квадратного корня или логарифмическое преобразование, поскольку мы не можем извлечь квадратный корень из отрицательных значений, а логарифм нуля не определен.

Поэтому для этих данных мы используем метод под названием Winsorization. В этом методе мы определяем доверительный интервал, скажем, 90%, а затем заменяем все выбросы ниже 5-го процентиля значением 5-го процентиля и все значения выше 95-го процентиля значением 95-го процентиля. Это очень полезно, когда в функциях есть отрицательные значения и нули, которые нельзя обработать с помощью логарифмических преобразований или квадратных корней.

2. Применение ванильных моделей к данным

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

Функция для маркировки кодирования категориальных переменных: для данного набора данных мы собираемся пометить кодирование категориальных столбцов. мы выполним кодирование меток для всех категориальных функций, а также для цели (поскольку она является категориальной) в наборе данных.

Подходящие модели классификации ванили

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

  • Логистическая регрессия
  • Классификатор дерева решений
  • Классификатор RandomForest
  • XGBКлассификатор
  • GradientBoostingClassifier

Три ванильные модели были оценены без выполнения какой-либо настройки гиперпараметров и без обработки дисбаланса классов цели. Модели были: логистическая регрессия, классификатор случайного леса, классификатор XGBoost. Ни одна из трех моделей не смогла дать оценку ROC_AUC выше 70%. Это потребовало выполнения настройки гиперпараметров с помощью поиска по сетке, а также обработки дисбаланса классов с помощью SMOTE для дальнейшего улучшения показателя ROC_AUC.

Выбор функции

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

1. Использование RFE для выбора признаков

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

2. Выбор признаков с использованием случайного леса

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

Примечание. Методы выбора функций могут отличаться от проблемы к проблеме, и методы, применяемые для этой проблемы, могут работать или не работать для других проблем. В этих случаях вы можете попробовать другие методы, такие как PCA, SelectKBest(), SelectPercentile(), tSNE и т. д.

Поиск по сетке и настройка гиперпараметров

Гиперпараметры — это атрибуты функций, которые мы должны указать для алгоритма. Применение лучших параметров, полученных с помощью поиска по сетке, к модели случайного леса. Мы подбираем модель случайного леса, используя лучшие параметры, полученные с помощью поиска по сетке. Поскольку цель несбалансирована, мы применяем синтетическую избыточную выборку меньшинства (SMOTE) для недостаточной и избыточной выборки классов большинства и меньшинства в целевом объекте соответственно.

обратите внимание, что SMOTE всегда следует применять только к обучающим данным, а не к проверочным и тестовым данным.

Прогноз на тестовых данных

Здесь мы выполнили прогноз на тестовых данных. Мы использовали логистическую регрессию для этого прогноза. Вы можете использовать модель по вашему выбору, которая даст вам лучший показатель метрики для данных проверки. Мы должны выполнить те же операции предварительной обработки для тестовых данных, которые мы выполнили для данных поезда. В демонстрационных целях мы предварительно обработали тестовые данные, и эти предварительно обработанные данные представлены в CSV-файле. test_preprocessed.csv Затем мы делаем прогноз на основе предварительно обработанных тестовых данных, используя модель логистической регрессии Grid Search. И в качестве последнего шага мы объединяем этот прогноз со столбцом Id, а затем конвертируем его в файл csv, который становится submission.csv..

Модели и подходы:

Логистическая регрессия › AUC_ROC: 67,17 % После настройки AUC_ROC:72,4 %

Классификатор случайного леса›AUC_ROC: 68,01 % После настройки AUC_ROC:92,48 %

Классификатор XGBoost › AUC_ROC: 68,19 % После настройки AUC_ROC:93,81 %

Окончательные результаты. Из приведенных выше наблюдений можно сделать вывод, что наиболее эффективной моделью была модель XGBoost, дающая показатель AUC_ROC 93,81 %. Хотя XGBoost используется часто, всегда разумно начинать с более простых алгоритмов, а затем переходить к сложным.

Статистика и решения

Целевые клиенты:

Возраст: 30–50 лет.

Образование: университет, средняя школа, профессиональные курсы.

Должность: администратор, рабочий, техник

Цели кампании:

Клиенты, которые ранее не были таргетированы

Клиенты, успешные в предыдущих кампаниях

Планируйте кампании с мая по август

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