Тематическое исследование:

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

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

Модель искусственной нейронной сети (ИНС) кажется лучшим решением этой проблемы.

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

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

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

Прежде чем создавать любую модель машинного обучения, вы должны установить некоторые библиотеки и фреймворки, которые помогут вам в этом. Фреймворки, которые вы будете загружать, — это Tensorflow и Keras. Scikit Learn уже предустановлен, поэтому загружать его не нужно.

Но для этого проекта мы будем использовать платформу Google Colaboratory, которая не требует установки каких-либо библиотек.

Предварительная обработка данных

Для этого будут импортированы такие библиотеки, как Numpy (для числового анализа), Matplotlib (для визуализации) и Pandas (для импорта наборов данных).

Затем вы можете импортировать набор данных банка. Для этого проекта вы можете получить доступ к этому набору данных, посетив мой профиль Github и перейдя в репозиторий. Вот ссылка на репозиторий: https://github.com/samietex/Churn_Modelling_ANN

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

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

Теперь, когда набор данных загружен на платформу Google Colaboratory, мы можем использовать pandas для импорта данных для нашей модели ANN.

С помощью печати (набора данных) вы можете получить представление о том, какие данные

Независимые переменные:

Зависимые переменные:

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

На этом этапе мы будем кодировать категориальные данные. Эта процедура включает преобразование категорийных данных в числовые данные. Поскольку модель машинного обучения может считывать только числовые данные, а не текст, это сделано. Давайте сначала посмотрим на столбец «Местоположение». В столбце местоположения есть данные трех категорий (Франция, Испания и Германия). Чтобы преобразовать его в числовые данные, мы будем использовать LabelEncoder из библиотеки Sklearn.

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

Из рис. выше вы заметите, что Франция была преобразована в 0, Испания в 2, а Германия в 1.

Мы также сделаем то же самое для столбца Gender, где мы используем LabelEncoder для изменения категориальных данных Gender на числовые данные.

С помощью этих строк кода вы заметите, что столбец пола был преобразован в числовой столбец.

Женщин на рисунке выше 0, а мужчин 1. Также стоит отметить, что категории категориальных переменных не имеют порядка отношений. Это указывает на то, что Франция не является Германией, а Испания не является Испанией, согласно столбцу «Местоположение».

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

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

Теперь, когда мы закончили процесс кодирования признаков, мы можем приступить к разделению набора данных на набор поездов и тестовый набор. 80 % набора данных будет использоваться для обучения модели, а 20 % — для тестирования модели.

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

Ниже приведены выходные данные X_train и X_test после масштабирования функции.

X_поезд:

X_тест:

Мы успешно завершили предварительную обработку набора данных. Я знаю… это довольно беспокойно… LOL

Давайте построим искусственную нейронную сеть. А не ___ ли нам?

На этом этапе мы будем использовать библиотеку Keras для построения нашей ИНС. Для начала приступим к импорту необходимых библиотек для этого проекта.

Вы заметите, что некоторые модули также были импортированы. Эти две импортированные модели (последовательный модуль и плотный модуль) очень важны для построения модели искусственной нейронной сети (ИНС). Модуль Sequential требуется для инициализации нейронной сети, а модуль Dense требуется для построения слоев искусственной нейронной сети.

Давайте построим искусственную нейронную сеть

Мы приступим к инициализации искусственной нейронной сети теперь, когда мы завершили предварительную обработку данных и импортировали библиотеки tensorflow и keras с необходимыми модулями. ИНС можно инициализировать двумя способами: определением последовательности слоев и определением графа.

Мы настроим модель ANN для этого проекта, определив последовательность слоев. Этого можно достичь, сначала создав объект последовательного класса. Этот объект последовательного класса представляет собой нейронную сеть, которая будет выполнять функцию классификатора. Это связано с тем, что проблема, которую мы пытаемся решить, является проблемой классификатора, в которой мы пытаемся предсказать класс (если клиент покинет банк… правда или ложь).

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

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

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

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

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

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

Мы будем использовать 10 нейронов в качестве начального, 5 скрытых слоев и 1 выходной слой, чтобы предсказать, уйдет ли клиент из банка, потому что у нас есть 10 зависимых факторов. Для входного и скрытого слоев мы будем использовать функцию активации выпрямителя, также известную как «relu», а для выходного слоя мы будем использовать сигмовидную функцию активации.

Теперь, когда мы добавили входной слой, скрытые слои и выходной слой, мы можем приступить к компиляции модели ANN. Это делается с помощью оптимизатора Адама, а также с указанием потерь (среднеквадратичная ошибка, RMSE) и точности.

Затем мы можем приступить к подгонке обучающих наборов к классификатору (модель ANN). Для этого проекта мы будем использовать 10 пакетов и 100 эпох. Эти параметры можно регулировать до тех пор, пока не будет достигнута требуемая точность. То же самое можно сделать с количеством нейронов и скрытых слоев.

Вот краткое изложение модели ИНС, которую мы только что построили.

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

В приведенном ниже коде в основном говорится, что если y_pred больше 0,5, вернуть true, иначе, если y_pred меньше 0,5, вернуть false.

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

Можно сделать вывод, что из 2000 наблюдений 1534 + 193 являются правильными предсказаниями, а 212 + 61 — неверными предсказаниями.

Мы почти закончили этот проект. Давайте посмотрим на некоторые визуализации.

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

Вы прошли долгий путь, спасибо, что прочитали эту статью. Для получения дополнительных сообщений и статей по теме подписывайтесь на меня в LinkedIn и Twitter.

Подробнее об этой модели ИНС: https://github.com/samietex/Churn_Modelling_ANN/blob/main/ChurnRatePred.ipynb.