www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Практическое руководство: предсказать отток клиентов

Дата публикации Jan 15, 2019

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

Прежде чем мы начнем, давайте кратко напомним, что такое отток на самом деле: «Отток» определяет количество клиентов, которые отписались или аннулировали свой контракт на обслуживание. Клиенты, отворачивающиеся от ваших услуг или продуктов, не приносят удовольствия любому бизнесу. Очень дорого отыграть их, когда они проиграли, даже не думая, что они не сделают все от них зависящее, если не будут удовлетворены.Узнайте все об основах оттока клиентов в одной из моих предыдущих статей, Теперь давайте начнем!

Как мы прогнозируем отток клиентов?

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

Процесс высокого уровня
  1. Вариант использования / бизнес-кейс
    Первый шаг - это понимание бизнеса или варианта использования с желаемым результатом. Только понимая конечную цель, мы можем построить модель, которая действительно полезна. В нашем случае цель состоит в том, чтобы уменьшить отток клиентов, заранее определив потенциальных кандидатов на отток, и предпринять активные действия, чтобы заставить их остаться.
  2. Сбор и очистка данных
    Понимая контекст, можно определить правильные источники данных, очистить наборы данных и подготовиться к выбору функций или разработке. Звучит довольно просто, но это, вероятно, самая сложная часть. Модель прогнозирования хороша только как источник данных. И особенно у стартапов или небольших компаний часто возникают проблемы с поиском достаточного количества данных для адекватного обучения модели.
  3. Выбор функций и инжиниринг
    На третьем этапе мы решаем, какие функции мы хотим включить в нашу модель, и подготавливаем очищенные данные для использования в алгоритме машинного обучения для прогнозирования оттока клиентов.
  4. моделирование
    С подготовленными данными мы готовы кормить нашу модель. Но чтобы делать хорошие прогнозы, нам, во-первых, нужно найти правильную модель (выбор), а во-вторых, оценить, что алгоритм действительно работает. Хотя обычно это занимает несколько итераций, мы будем делать это довольно просто и остановимся, как только результаты будут соответствовать нашим потребностям.
  5. Идеи и действия
    И последнее, но не менее важное: мы должны оценивать и интерпретировать результаты. Что это значит и какие действия мы можем извлечь из результатов? Поскольку прогнозирование оттока клиентов - это только половина дела, и многие люди забывают, что, просто прогнозируя, они все равно могут уйти. В нашем случае мы действительно хотим, чтобы они перестали уходить.

Инструменты, которые мы используем

Инструменты для прогнозирования оттока в Python

Чтобы предсказать, изменится ли клиент или нет, мы работаем с Python и его удивительными библиотеками с открытым исходным кодом. Прежде всего мы используем Jupyter Notebook, приложение с открытым исходным кодом для живого программирования, которое позволяет нам рассказать историю с помощью кода. Кроме того, мы импортируемПанды, который помещает наши данные в простую в использовании структуру для анализа данных и преобразования данных. Чтобы сделать исследование данных более понятным, мы используемplotlyвизуализировать некоторые из наших идей. Наконец сscikit учитьсямы разделим наш набор данных и обучим нашу прогнозную модель.

Набор данных

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

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")from pylab import rcParams%matplotlib inline# Loading the CSV with pandas
data = pd.read_csv('..Customer Churn/Telco-Customer-Churn.csv')

Исследование и выбор функций

Этот раздел довольно короткий, так как вы можете узнать больше об общих исследованиях данных в лучших руководствах. Тем не менее, чтобы получить первоначальное представление и узнать, какую историю вы можете рассказать с помощью данных, исследование данных имеет определенный смысл. Используя функции python data.head (5) и «data.shape», мы получаем общий обзор набора данных.

Взгляд на набор данных - всего 7043 строки с 21 столбцом

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

# Data to plot
sizes = data['Churn'].value_counts(sort = True)
colors = ["grey","purple"]
rcParams['figure.figsize'] = 5,5# Plot
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=270,)plt.title('Percentage of Churn in Dataset')
plt.show()

Подготовка данных и разработка функций

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

  1. Удаление неактуальных данных
    Там могут быть данные, которые не нужны для улучшения наших результатов. Лучше всего это определить с помощью логического мышления или создания корреляционной матрицы. В этом наборе данных у нас есть, например, идентификатор клиента. Так как это не влияет на наш прогнозируемый результат, мы удаляем столбец с помощью функции «drop ()» для панд.
data.drop(['customerID'], axis=1, inplace=True)

2. Недостающие ценности
Кроме того, важно обрабатывать недостающие данные. Значения могут быть определены, например, функцией «.isnull ()» в пандах. После определения нулевых значений это зависит от каждого случая, имеет ли смысл заполнить пропущенное значение, например, средним значением, медианой или режимом, или если имеется достаточно обучающих данных, полностью отбросить запись. В наборе данных, с которым мы работаем, есть очень необычный случай - нулевые значения отсутствуют. Нам повезло на сегодня, но важно знать, что обычно мы должны справиться с этим.

3. Преобразование числовых признаков из объекта
Из нашего исследования данных (в данном случае «data.dtypes ()») мы видим, что столбцы MonthlyCharges и TotalCharges являются числами, но на самом деле в формате объекта. Почему это плохо? Наша модель машинного обучения может работать только с фактическими числовыми данными. Поэтому с помощью функции «to_numeric» мы можем изменить формат и подготовить данные для нашей модели машинного обучения.

data['TotalCharges'] = pd.to_numeric(data['TotalCharges'])

4. Категориальные данные в числовые данные
Поскольку мы не можем ничего вычислить со строковыми значениями, мы должны преобразовать эти значения в числовые. Простой пример в наборе данных Telcom - это пол. Используя функцию Pandas «get_dummies ()», два столбца заменят гендерный столбец на «гендерный_мале» и «гендерный_мале».

Кроме того, мы могли бы использовать функцию «get_dummies ()» для всех категориальных переменных в наборе данных. Это мощная функция, но может быть неприятно иметь так много дополнительных столбцов.

5. Разделение набора данных
Во-первых, наша модель должна быть обучена, во-вторых, наша модель должна быть протестирована. Поэтому лучше иметь два разных набора данных. На данный момент у нас есть только один, очень распространено разделить данные соответственно. X - данные с независимыми переменными, Y - данные с зависимой переменной. Переменная размера теста определяет, в каком соотношении данные будут разделены. Довольно часто это делается в соотношении 80 тренировок / 20 тестов.

data["Churn"] = data["Churn"].astype(int)Y = data["Churn"].values
X = data.drop(labels = ["Churn"],axis = 1)# Create Train & Test Data
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=101)

Логистическая регрессия и тестирование моделей

Логистическая регрессия является одним из наиболее часто используемых алгоритмов машинного обучения, и в основном используется, когда зависимая переменная (здесь отток 1 или отток 0) является категориальной. Независимые переменные, напротив, могут быть категориальными или числовыми. Обратите внимание, что, конечно, имеет смысл детально понять теорию, лежащую в основе модели, но в этом случае наша цель состоит в том, чтобы использовать прогнозы, которые мы не пройдем через эту статью.

Шаг 1. Давайте импортируем модель, которую мы хотим использовать из sci-kit learn
Шаг 2. Делаем экземпляр модели
Шаг 3. Проводится ли обучение модели на основе набора обучающих данных и сохраняется ли информация, извлеченная из данных?

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
result = model.fit(X_train, y_train)

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

from sklearn import metrics
prediction_test = model.predict(X_test)# Print the prediction accuracy
print (metrics.accuracy_score(y_test, prediction_test))

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

# To get the weights of all the variables
weights = pd.Series(model.coef_[0],
index=X.columns.values)
weights.sort_values(ascending = False)

Можно заметить, что некоторые переменные имеют положительное отношение к нашей предсказанной переменной, а некоторые имеют отрицательное отношение. Положительное значение оказывает положительное влияние на нашу прогнозируемую переменную. Хорошим примером является «Контракт-месяц-месяц»: положительное отношение к оттоку означает, что наличие такого типа контракта также увеличивает вероятность оттока клиента. С другой стороны, «Контракт_Два года» находится в крайне негативном отношении к прогнозируемой переменной, а это означает, что клиенты с таким типом контракта вряд ли будут набирать деньги. Но мы также видим, что некоторые переменные не имеют смысла в первом пункте. «Fiber_Optic» находится на верхней позиции с точки зрения положительного влияния на отток. Хотя мы ожидаем, что это заставит клиента остаться, поскольку он предоставляет ему быстрый интернет, наша модель говорит о другом. Здесь важно копать глубже и получить некоторый контекст для данных.

Да, мы сделали это - что дальше?

Обними своего клиента и заставь его остаться :)

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

Два - Взаимодействие с клиентами, которые могут отменить,
Да, есть история, что вы должны позволить спящим собакам лгать. Но в случае потенциального оттока это чушь собачья. Быть спокойным и надеяться, что ваш клиент не уйдет, рано или поздно на 100% обернется. Вместо этого не пугайтесь, выходите на улицу и общайтесь со своими клиентами. Вариантов много, но самый лучший - самый очевидный: поговорите с ними.

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

************************************************** ************

Статьи, связанные с этим:

Практическое руководство: настройка среды данных с помощью Docker

Устранение оттока - это Хакерство Роста 2.0

Вводить в заблуждение с данными и статистикой

************************************************** *************

Большая часть того, о чем я пишу, заставляет меня быть занятым нашим собственным стартапомinvestory.io,
Будем рады услышать ваш опыт :)

************************************************** ************

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map