Простое руководство по внедрению искусственных нейронных сетей для прогнозирования оттока клиентов банка.
Содержание статьи:
- что такое нейронная сеть?
- Как работают нейронные сети?
- Как реализовать нейронные сети (ANN) в Python?
- Использование искусственной нейронной сети для прогнозирования оттока клиентов банка.
- Оценка производительности модели нейронной сети.
Что такое нейронная сеть?
Искусственная нейронная сеть — это вычислительная система, вдохновленная биологическими нейронными сетями, составляющими человеческий мозг. ИНС основаны на наборе узлов или единиц, которые называются нейронами, и моделируют нейроны в биологическом мозге.
Искусственный нейрон получает сигнал, затем обрабатывает его и передает сигнал другим связанным с ним нейронам. Сигнал на соединении является действительным числом, а выход нейрона вычисляется некоторой нелинейной функцией суммы входов. Входы сопровождаются весами, назначенными соответственно, вес входа увеличивает или уменьшает силу сигнала при подключении.
Нейроны могут иметь порог, при котором сигнал отправляется только в том случае, если совокупный сигнал пересекает этот порог. Искусственные нейроны объединены в разные слои, которые выполняют различные преобразования на входе.
сигналы проходят от входного слоя к последнему слою (выходному слою) после многократного прохождения слоев
- Здесь v1 и v2 являются входными данными.
- Входной слой (в этом случае входной макет 2dim, так как у нас есть 2 входные переменные/независимые функции)
- Скрытые слои состоят из функций, которые применяют веса к входам и направляют их через функцию активации в качестве выходных данных, скрытые слои выполняют нелинейные преобразования входов, введенных в сеть.
- Выходной слой — это последняя нейронная сеть, которая производит выходные данные программы.
- Y — выходная переменная.
Как работают нейронные сети?
Выход нейрона является функцией взвешенной суммы входных сигналов плюс систематическая ошибка.
ПРИМЕЧАНИЕ: что такое предвзятость?
Смещение — это константа, которая помогает модели наилучшим образом соответствовать заданным данным. Другими словами, предвзятость — это константа, которая дает свободу действовать наилучшим образом.
Связи между одной единицей нейронов с другой представлены числом, называемым весом, веса могут быть положительными (если одна единица возбуждает другую) или отрицательными (если одна единица подавляет или тормозит другую).
Чем выше вес, тем большее влияние он оказывает на другой, сила (вес) связи между любыми двумя единицами постепенно корректируется по мере обучения сети.
Веса добавляются к нейронам, как только нейронные сети получают входные данные.
Как работают нейронные сети?
Информация течет в нейронной сети двумя путями, когда она обучается (обучается) и когда она нормально работает после обучения. Информация подается в сеть, которая затем запускает уровни скрытых единиц, которые, в свою очередь, поступают к выходным единицам.
Такой дизайн нейронной сети называется сеть с прямой связью,каждая единица получает входные данные, и эти входные данные умножаются на веса соединений, через которые они проходят.
Каждый юнит суммирует все входы, которые он получает слева, и если сумма превышает пороговое значение, юнит срабатывает и запускает юниты, к которым он подключен (те, что справа).
Фото: обучение езде на велосипеде.
Вы узнаете, как делать искусные вещи с помощью нейронной сети в вашем мозгу, каждый раз, когда вы пытаетесь кататься на велосипеде, вы падаете, и вы узнаете, какие исправления вам нужно сделать дальше, чтобы вы не упали снова.
Чтобы нейронная сеть обучалась, должен быть задействован элемент обратной связи — так же, как дети учатся, когда им говорят, что они делают правильно или неправильно. На самом деле, мы все постоянно пользуемся обратной связью. Вспомните, когда вы впервые научились кататься на велосипеде.
Когда вы начали кататься на велосипеде, у вас не было равновесия, и вы падали, но ваш мозг следил за вашими движениями. В следующий раз, когда вы снова попытаетесь сесть на велосипед, ваш мозг вспомнит, что вы сделали не так, и вы приспособитесь, и результат будет лучше.
Итак, вы использовали обратную связь, чтобы сравнить желаемый результат с тем, что произошло на самом деле, выяснить разницу между ними и использовать ее, чтобы изменить свои действия в следующий раз («Мне нужно раздвинуть ноги при езде на велосипеде», «Мне нужно сесть». прямо» и так далее). Чем больше разница между предполагаемым и фактическим результатом, тем радикальнее вы изменили бы свои ходы.
Нейронные сети изучают вещи точно таким же образом, как правило, с помощью процесса обратной связи, называемого обратным распространением, который включает сравнение выходных данных сети с выходными данными, которые она должна была произвести, и использование разницы между ними для изменения веса связей между единицами в сети, работающие от выходных единиц через скрытые единицы к входам, другими словами, в обратном направлении.
Обратное распространение заставляет сеть учиться, уменьшая разницу между фактическим и предполагаемым выводом до точки, где они точно совпадают, поэтому сеть вычисляет вещи именно так, как они должны быть.
Примечание. Красные линии показывают обратное распространение.
Как реализовать нейронную сеть в Python
Здесь я собираюсь использовать простую искусственную нейронную сеть, чтобы предсказать, уйдет ли клиент банка с учетом независимых и зависимых функций.
Загрузка данных
Набор данных из:
Импорт необходимых библиотек
import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf print(“TensorFlow version:”, tf.__version__)
Чтение данных
# reading data data = pd.read_csv(‘/content/Churn_Modelling.csv’) data.head()
Я выполнил всю необходимую предварительную обработку набора данных и не буду вдаваться в подробности.
Чтобы узнать о методах предварительной обработки, которые я использовал, обратитесь к моему коду на GitHub:
Разделение данных для обучения и тестирования
x = data_clean.drop(“Exited”, axis = ‘columns’) y = data_clean[‘Exited’] from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.2,random_state=5)
X_train.shape
X_test.shape
Давайте посмотрим краткое описание x_train(10 rows)
x_train[:10]
Мы видим, что данные масштабируются.
Построение нейронной сети
from tensorflow import keras model = keras.Sequential([ keras.layers.Dense(26 , input shape =(12,), activation = ‘relu’), keras.layers.Dense(10 , activation = ‘relu’), keras.layers.Dense(1 , activation = ‘sigmoid’) ]) model.compile(optimizer=’adam’, loss=’binary_crossentropy’, metrics=[‘accuracy’]) model.fit(x_train , y_train , epochs = 100)
Первым шагом является импорт необходимых библиотек для построения нашей нейронной сети. Мы создаем объект для нашей последовательной модели, используя библиотеку Keras.
После инициализации нашей сети мы создаем скрытые слои, здесь я создаю 3 слоя, один входной слой, затем один скрытый слой и, наконец, один выходной слой.
Класс Dense принимает два параметра:
- единицы — это количество нейронов, которые будут присутствовать в слое.
- Активация — это для функции активации.
На входном слое я использовал 26 нейронов и указал входную форму на 12, поскольку у нас есть 12 столбцов для входных переменных и функция активации в RELU (выпрямленная линейная единица).
Relu — это функция, которая возвращает 0, если она получает любое отрицательное значение на входе, и положительное значение x возвращает это значение обратно, таким образом, давая диапазон от 0 до бесконечности.
Relu — это простая функция, которая требует меньше вычислений, и в ней нет сложной математики. Одним из важных аспектов, которые мы рассматриваем relu для функции активации, является ее разреженность.
Для скрытых слоев мы всегда используем Relu, и нам не нужно указывать входную форму, поскольку нейронная сеть уже знает из входного слоя.
Для выходного слоя нам нужен только один нейрон для этой проблемы, так как я пытаюсь предсказать, будут ли клиенты уходить. Нейрон сработает 1, если клиенты уйдут, и 0, если они останутся. Я использовал только один нейрон, так как эта задача представляет собой проблему бинарной классификации, но если это проблема многоклассовой классификации, мы будем использовать один нейрон для каждой категории. Например, если выходные данные имеют четыре (4) категории, мы создаем четыре (4) нейрона для каждого нейрона.
Для бинарной классификации мы используем сигмовидную функцию, но если это многоклассовая классификация, мы используем SoftMax.
На приведенном выше рисунке показаны результаты нашей нейронной сети после компиляции и подгонки к обучающим данным.
При компиляции я использовал adam в качестве оптимизатора, оптимизатор используется для выполнения стохастического градиентного спуска. Оптимизатор находит наилучшую строку для соответствия данным для достижения наилучших результатов.
loss указывает, какая функция используется для расчета потерь, в этом случае у нас есть проблема бинарного класса, поэтому мы используем binary_crossentropy, но если это была проблема классификации нескольких классов, мы используем categorical_crossentropy.
метрики предназначены для измерения производительности нейронной сети, и здесь я использовал точность в качестве метрики производительности.
Наконец, я подогнал нейронную сеть к обучающим наборам данных:
x_train — это функция матрицы для тренировочного набора.
y_train — это вектор нашей целевой или ответной переменной.
эпохи - это указывает, сколько раз должна быть обучена нейронная сеть, и я обучил сеть 100 раз.
Нейронная сеть работала хорошо, мы видим, что потери уменьшились до 0,317, а точность 86,7, что довольно круто для простой сети.
Ура!
Сеть работает идеально. Давайте проверим это!
Я тестирую нейронную сеть на клиенте номер один в наборе данных.
Как мы видим на изображении выше, мы видим, что модель предсказала, что клиент уйдет, и если мы сравним результат модели и фактический результат, мы увидим, что модель предсказала правильно.
Код для этой статьи доступен на моей странице GitHub:
Помните, практика делает совершенным!
Чтобы узнать больше, подпишитесь и подпишитесь на еженедельные обновления концепций науки о данных!
Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.