Сохраните свою клиентскую базу с помощью нейронных сетей!

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

Что такое отток?

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

Так кто же читатели этой статьи?

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

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

Чего мы ждем? Начнем !!

Итак, в этом наборе данных мы будем иметь дело с моделированием оттока, т.е. мы будем писать искусственную нейронную сеть, чтобы выяснить причины того, почему и какие клиенты фактически покидают банк, и их зависимости друг от друга.
Это классификация. проблема, например, классификация 0-1 (1, если клиент уходит, и 0, если клиент остается)
Мы можем использовать Theano или Tensorflow, но дело в том, что эти библиотеки требуют, чтобы мы написали большую часть кода Ml с нуля, поэтому вместо этого мы делаем использование Keras, которое позволяет нам писать мощные нейронные сети с помощью нескольких строк кода, который Keras работает на Theano и Tensorflow, и вы можете думать об этом как о Sklearn для глубокого обучения.

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

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

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

Сохраните его в Pycharm Projects / Name of Project и загрузите с помощью pandas.

dataset = pd.read_csv('Churn_Modelling.csv')

Глядя на функции, мы видим, что номер строки, имя не будет иметь никакого отношения к клиенту, покинувшему банк.
Поэтому мы отбрасываем их из X, который содержит индексы функций от 3 до 12.

X = dataset.iloc[:, 3:13].values

Мы сохраняем зависимое значение / прогнозируемое значение в y, сохраняя 13-й индекс в переменной y.

y = dataset.iloc[:, 13].values

Распечатка значений…

X → который содержит функции
y → который содержит целевую переменную

print(X)
print(y)

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

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

Создание объекта кодировщика этикеток № 1 для кодирования названия региона (индекс 1 в функциях)

labelencoder_X_1 = LabelEncoder()

Область кодирования от строки до 3 цифр 0,1,2 соответственно

X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])

Создание объекта кодировщика этикеток № 2 для кодирования имени пола (индекс 2 в характеристиках)

labelencoder_X_2 = LabelEncoder()

Кодирование пола от строки до 2 цифр 0,1 (мужской, женский) соответственно

X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])

Теперь создаем фиктивные переменные

onehotencoder = OneHotEncoder(categorical_features = [1])
X = onehotencoder.fit_transform(X).toarray()
X = X[:, 1:]

Разделение набора данных на обучающий набор и тестовый набор

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 = 0)

Масштабирование функций

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

Часть 2 - А теперь давайте создадим ИНС!

Перечисление шагов, связанных с обучением ИНС с помощью стохастического градиентного спуска: -
1) Произвольно инициализируйте веса маленькими числами, близкими к 0 (но не 0).
2) Введите первое наблюдение вашего набора данных на входном слое каждая функция в одном входном узле.
3) Прямое распространение слева направо, нейроны активируются таким образом, что влияние активации каждого нейрона.
ограничено весами .Распространяйте активации, пока не получите прогнозируемый результат y.
4) Сравните прогнозируемый результат с фактическим результатом. Измерьте сгенерированную ошибку.
5) Обратное распространение: справа налево, ошибка распространяется обратно. Обновите веса в зависимости от того, насколько они
ответственны за ошибку. Скорость обучения говорит нам, как во многих случаях мы обновляем веса.
6) Повторите шаги с 1 по 5 и обновите веса после каждого наблюдения (обучение с подкреплением).
Или: повторите шаги с 1 по 5, но обновите веса только после того, как наблюдения (пакетное обучение).
7) Когда весь обучающий набор проходит через ИНС, что завершает Эпоху. Повторить больше эпох.

Импорт библиотек и пакетов Keras

import keras

Для построения нейронной сети слой за слоем

from keras.models import Sequential

Для случайной инициализации весов маленькими числами, близкими к 0 (но не 0)

from keras.layers import Dense

Инициализация ИНС…

Итак, на самом деле существует 2 способа инициализации модели глубокого обучения
- - - 1) Определение каждого слоя по одному
- - - 2) Определение графа

Мы не добавляли никаких параметров в объект Sequential, так как мы будем определять слои вручную.

classifier = Sequential()

Добавление входного слоя и первого скрытого слоя…

До сих пор остается без ответа вопрос о том, сколько узлов скрытого слоя нам действительно нужно?
Не существует правила большого пальца, но вы можете установить количество узлов в скрытых слоях как среднее от количества узлов на входе и выходной слой соответственно. (Работает в 90% случаев !!)
- → Здесь avg = (11 + 1) / 2 == ›6 Итак, установите Output Dim = 6
- → Init будет равномерно инициализировать веса скрытого слоя
- → Функция активации - функция активации выпрямителя (Relu)

Input dim сообщает нам количество узлов на входном слое. Это делается только один раз и не будет указываться в последующих слоях.

classifier.add(Dense(output_dim = 6, init = 'uniform', activation = 'relu', input_dim = 11))

Добавление второго скрытого слоя…

classifier.add(Dense(output_dim = 6, init = 'uniform', activation = 'relu'))

Добавление выходного слоя…

classifier.add(Dense(output_dim = 1, init = 'uniform', activation = 'sigmoid'))

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

Составление ИНС…

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

Подгонка ИНС к обучающей выборке

classifier.fit(X_train, y_train, batch_size = 10, nb_epoch = 100)

Часть 3 - Прогнозы и оценка модели

Прогнозирование результатов набора тестов

y_pred = classifier.predict(X_test)
y_pred = (y_pred > 0.5)

если y_pred больше 0,5, возвращается истина (1) иначе ложь (2)

print(y_pred)

Эта модель при обучении на данных поезда и при тестировании на данных теста дает нам точность около 86% в обоих случаях. Что, с нашей точки зрения, здорово !!!

Создание матрицы путаницы

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
print(cm)

Получено из матрицы неточностей. Вы можете изменить значения в соответствии с тем, что получено в вашей матрице неточностей.

print(accuracy)

Поздравляю! вы только что написали свою собственную нейронную сеть для банка, который дал вам эту задачу. Теперь вы можете определить 10% клиентов, которые с наибольшей вероятностью покинут банк (что очень важно для банка). Теперь банк может принять корректирующие меры, чтобы не потерять своих клиентов, и не сделал бы этого без вашей помощи: п

Надеюсь, вам понравился мой учебник! Я прикрепляю ссылки github (теперь Gitlab: P) к коду и набору данных.



Ссылки-Курс машинного обучения Кирилла Ерёменко и Хаделин де Понтевес