Введение:
В современной конкурентной телекоммуникационной отрасли обеспечение исключительного качества обслуживания клиентов и минимизация оттока клиентов имеют решающее значение для устойчивого успеха бизнеса. Корпорация 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. Это значительное количество клиентов, и важно понимать, почему они уходят.
- Мы уже видим, что это крайне несбалансированный набор данных, который необходимо устранить.
Исследование данных
- График распределения отдельных предикторов по оттоку
Одномерный анализ
используя этот блок кодов:
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
- Какая интернет-услуга наиболее предпочтительна для клиентов?
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 демонстрирует возможности машинного обучения в решении важнейших бизнес-задач. Используя данные о клиентах и модели классификации, мы успешно определили модели оттока клиентов и реализовали упреждающие стратегии удержания. Этот проект не только улучшил качество обслуживания клиентов, но и положительно повлиял на итоговую прибыль компании. Уроки, извлеченные из этого проекта, могут послужить ориентиром для всех поставщиков телекоммуникационных услуг, стремящихся оптимизировать удержание клиентов и стимулировать рост бизнеса.
Я не закончу это, не поблагодарив своего товарища по команде, команду Сидни. Как команда, мы работали вместе и поделились своими сильными сторонами и опытом, чтобы завершить этот проект. Хочу выразить благодарность членам моей команды.
Гидеон Дадзи
Уильямс Джордж
Фредрик Боатенг и:
Эфоби Годвину — за самоотверженность, упорный труд и вклад в успех этого проекта.
Спасибо вам, ребята.
Подпишитесь на меня, чтобы получить дополнительную информацию, подобную этой.