Введение:

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

Понимание проблемы:

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

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

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

voda.columns.values

Выход[321]:

array(['customerID', 'gender', 'SeniorCitizen', 'Partner', 'Dependents',
       'tenure', 'PhoneService', 'MultipleLines', 'InternetService',
       'OnlineSecurity', 'OnlineBackup', 'DeviceProtection',
       'TechSupport', 'StreamingTV', 'StreamingMovies', 'Contract',
       'PaperlessBilling', 'PaymentMethod', 'MonthlyCharges',
       'TotalCharges', 'Churn'], dtype=object)

Благодаря визуализации и статистическому анализу мы можем получить ценную информацию о взаимосвязях между этими переменными и оттоком клиентов.

voda.info(verbose = True)

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7043 entries, 0 to 7042
Data columns (total 21 columns):

Вопросы, которые мы задавали:

1. Какая интернет-услуга наиболее предпочтительна для клиентов?

2. Какие выводы можно сделать, анализируя демографические данные клиентов по полу?

3. Какая услуга наиболее популярна у клиентов?

4. Вероятно ли, что клиенты без иждивенцев будут платить больше, чем те, у кого есть иждивенцы?

Гипотеза:

Нулевая гипотеза. Вероятность оттока клиентов DSL меньше, чем клиентов оптоволоконного интернета.

Альтернативная гипотеза: клиенты, использующие DSL, скорее всего, отточат больше, чем клиенты, пользующиеся интернет-услугами Fiber.

Давайте сделаем некоторое понимание данных:

Примечание. мы использовали plotly library для всех диаграмм, и GitHub может не отображать эти диаграммы в .ipynb, поэтому я загрузил html версию блокнота, чтобы вы могли скачать и просмотреть все графики. У меня также есть папка, содержащая все диаграммы.

  • Мы проверили, сколько у нас отбойников:

Понимание:

  • На диаграмме видно, что из 7043 клиентов ушли 186. Это значительное количество клиентов, и важно понимать, почему они уходят.
  • Мы уже видим, что это крайне несбалансированный набор данных, который необходимо устранить.

Исследование данных

  1. График распределения отдельных предикторов по оттоку

Одномерный анализ

используя этот блок кодов:

for i, predictor in enumerate(data.drop(columns=['Churn', 'TotalCharges', 'MonthlyCharges'])):
    fig = px.histogram(data, x=predictor, color='Churn', barmode='group',
                       color_discrete_sequence=['#1f77b4', '#aec7e8'],
                       title=f"Countplot of {predictor} by Churn")
    fig.update_layout(xaxis_title=predictor, yaxis_title="Count",
                      legend_title="Churn", height=400)
    fig.show()

Это лишь некоторые из множества диаграмм, нарисованных в этом блоке; все графики вы можете посмотреть на моей странице GitHub.

Нулевая гипотеза: Senior_citizen не коррелирует с тенденцией оттока клиентов.
Альтернативная гипотеза: Senior_citizen коррелирует с тенденцией оттока клиентов.

In [24]:

from scipy.stats import chi2_contingency
Crosstabresults = pd.crosstab(index= voda['SeniorCitizen'], columns = voda['Churn'])
chisqresult  = chi2_contingency(Crosstabresults)

In [25]:

print('p-value: ', chisqresult[1])
p-value:  1.510066805092378e-36

Выводы:
P-значение меньше 0,05, что означает, что мы отвергаем нашу нулевую гипотезу. Senior_citizen коррелирует с оттоком клиентов.

Пол и тенденция к оттоку клиентов

In [26]:

Crosstabresults1 = pd.crosstab(index= voda['gender'], columns = voda['Churn'])
chisqresult1  = chi2_contingency(Crosstabresults1)

In [27]:

chisqresult1[1]

Вышли[27]:

0.48657873605618596

Выводы:
P-значение больше 0,05, что означает, что мы принимаем нашу нулевую гипотезу. Пожилой гражданин коррелирует с оттоком клиентов.

Вопросы

Примечание: все коды доступны в моем GitHub

  1. Какая интернет-услуга наиболее предпочтительна для клиентов?

2. Какие выводы можно сделать, анализируя демографические данные клиентов по полу?

Статистика:

  • Большинство клиентов не пенсионеры. То есть клиентская база в основном молодежь.
  • Большинство клиентов не женаты.
  • У большинства клиентов нет иждивенцев.

3. Какая услуга наиболее популярна среди клиентов?

4. Возможно ли, что клиенты без иждивенцев будут платить больше, чем те, у кого есть иждивенцы?

Мы также проверили взаимосвязь между MonthlyCharges и TotalCharges:

Мы видим, что эти два показателя положительно коррелированы.

Мы также сопоставляем все предикторы с оттоком:

Информация:

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

НИЗКИЙ Отток наблюдается в случае долгосрочных контрактов, подписок без подключения к Интернету и клиентов, привлекаемых более 5 лет.

Двумерный анализ:

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

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

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

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

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

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

в этом сеансе есть еще и их можно просмотреть вместе со всеми исходными кодами на моем GitHub

Статистика:

  • Электронный чековый носитель является самым высокопроизводительным.
  • Тип контракта. Ежемесячные клиенты с большей вероятностью уйдут, это может быть связано с отсутствием условий контракта.
  • Категории «Безопасность в Интернете» и «Техническая поддержка» часто вызывают отторжение.
  • Не пожилые граждане являются высокими текучками.

Подход машинного обучения:

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

Модели и оценка:

Корпорация Vodafone экспериментировала с несколькими моделями классификации, в том числе:

  • Классификатор дерева решений
  • Случайный лес
  • Классификатор повышения градиента
  • Логистическая регрессия

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

Это наш прогноз до балансировки набора данных:

Model  Accuracy  Precision    Recall  F1 Score
0                 Decision Tree  0.796309   0.639073  0.520216  0.573551
1  Gradient Boosting Classifier  0.792761   0.632107  0.509434  0.564179
3     Logistic Regression Model  0.799858   0.663004  0.487871  0.562112
2      Random Forest Classifier  0.796309   0.669355  0.447439  0.536349

Мы должны иметь дело с балансировкой набора данных, используя SMOTEENN()

и наш прогноз после балансировки:

sm = SMOTEENN()
Model  Accuracy  Precision    Recall  F1 Score
3     Logistic Regression Model  0.743080   0.507293  0.843666  0.633603
2  Gradient Boosting Classifier  0.731725   0.494382  0.830189  0.619718
1      Random Forest Classifier  0.690561   0.454545  0.876011  0.598527
0                 Decision Tree  0.678495   0.442577  0.851752  0.582488

Комментарий:

Из двух таблиц видно, что:

  • Балансировка целевых переменных улучшила производительность наших моделей.
  • Двумя наиболее эффективными моделями, основанными на оценке F1, являются классификатор повышения градиента и классификатор логистической регрессии.

Затем мы перешли к Настройке гиперпараметров.

models = [ gb_clf_bal, lr_bal]

Настройка модели классификатора повышения градиента

models[0].get_params()

Вышел[81]:

{'ccp_alpha': 0.0,
 'criterion': 'friedman_mse',
 'init': None,
 'learning_rate': 0.1,
 'loss': 'log_loss',
 'max_depth': 6,
 'max_features': None,
 'max_leaf_nodes': None,
 'min_impurity_decrease': 0.0,
 'min_samples_leaf': 8,
 'min_samples_split': 2,
 'min_weight_fraction_leaf': 0.0,
 'n_estimators': 100,
 'n_iter_no_change': None,
 'random_state': 100,
 'subsample': 1.0,
 'tol': 0.0001,
 'validation_fraction': 0.1,
 'verbose': 0,
 'warm_start': False}

Эти сведения дают представление о конфигурации и поведении первой модели в списке.

GradientBoostingClassifier

GradientBoostingClassifier(max_depth=8, min_samples_leaf=8, n_estimators=1000,
                           random_state=100)
models

Вышел[88]:

[GradientBoostingClassifier(max_depth=6, min_samples_leaf=8, random_state=100),
 LogisticRegression(random_state=101),
 GradientBoostingClassifier(max_depth=8, min_samples_leaf=8, n_estimators=1000,
                            random_state=100)]

Пожалуйста, найдите подробные коды и результаты на моем GitHub.

Настройка модели логистической регрессии

In [89]:

models[1].get_params()
models

Вышел[95]:

[GradientBoostingClassifier(max_depth=6, min_samples_leaf=8, random_state=100),
 LogisticRegression(random_state=101),
 GradientBoostingClassifier(max_depth=8, min_samples_leaf=8, n_estimators=1000,
                            random_state=100),
 LogisticRegression(C=3.0, max_iter=1000, random_state=101)]

После этого мы экспортировали наши ключевые компоненты:

components = { 'scaler': scaler,
               'model': models
    }

In [97]:

components

Вышел[97]:

{'scaler': MinMaxScaler(),
 'model': [GradientBoostingClassifier(max_depth=6, min_samples_leaf=8, random_state=100),
  LogisticRegression(random_state=101),
  GradientBoostingClassifier(max_depth=8, min_samples_leaf=8, n_estimators=1000,
                             random_state=100),
  LogisticRegression(C=3.0, max_iter=1000, random_state=101)]}

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

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

Затем мы создали папку и экспортировали components:

#Create Folder
!mkdir export

In [99]:

#Create a destination folder
destination = os.path.join('.','export')

In [100]:

#export
with open(os.path.join(destination,'ml.pkl'),'wb') as f:
    pickle.dump(components, f)

Наконец, мы экспортировали его:

#save file in export
!pip freeze > export/requirement.txt

Итак, мы продолжим этот проект, мы еще не закончили. Мы собираемся создать API для этой модели, чтобы использовать его в приложении.

Спасибо, что дочитали до этого момента. Гитхаб

Основные выводы и результаты:

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

Влияние и преимущества:

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

Вывод:

Проект «Классификация машинного обучения» корпорации Vodafone демонстрирует возможности машинного обучения в решении важнейших бизнес-задач. Используя данные о клиентах и ​​модели классификации, мы успешно определили модели оттока клиентов и реализовали упреждающие стратегии удержания. Этот проект не только улучшил качество обслуживания клиентов, но и положительно повлиял на итоговую прибыль компании. Уроки, извлеченные из этого проекта, могут послужить ориентиром для всех поставщиков телекоммуникационных услуг, стремящихся оптимизировать удержание клиентов и стимулировать рост бизнеса.

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

Гидеон Дадзи

Уильямс Джордж

Фредрик Боатенг и:

Эфоби Годвину — за самоотверженность, упорный труд и вклад в успех этого проекта.

Спасибо вам, ребята.

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