Статус: Проект завершен.
Заказчиком в данном проекте является оператор связи «ТелеФон», который предоставляет два основных типа услуг: стационарную телефонную связь и интернет. Для предотвращения оттока клиентов необходимо создать модель машинного обучения для предсказания ухода клиента.
Python, pandas, sklearn, seaborn, matplotlib, phik, Pipeline, One-Hot-Encoder, StandardScaler, GridSearchCV, LogisticRegression, CatBoostClassifier, SGDClassifier.
В ходе данного проекта были изучены данные по клиентам оператора связи "ТелеФон".
Перед проведением анализа и моделирования была сделана предобработка данных, в ходе которой были выявлены следующие моменты и проведены следующие действия:
- После объединения датафреймов появились пропуски в 8 столбцах. Они были заполнены значением 'Not used'.
- Обнаружены неявные пропуски в столбце
total_charges
. Их оказалось 0.16% от общего объема данных в этом столбце. Эти строки с пробелами были удалены. - Названия столбцов приведены к "змеиному" регистру.
- Были обнаружены 4 строчки с явными дубликатами. Они были удалены.
- Неявных дубликатов нет.
- Были преобразованы типы данных в столбцах
total_charges
,begin_date
иend_date
.
На этапе исследовательского анализа данных:
- созданы новые признаки: целевой
quit
, длительность контракта в дняхduration
, количество новых и ушедших пользователейnum_new_clients
иnum_quit_clients
- выявлен дисбаланс классов в целевом признаке: действующих абонентов (класс "0") в 5.4 раз больше, чем ушедших (класс "1")
- изучено распределение и описательные статистики всех количественных признаков.
- построены столбчатые диаграммы для всех категориальных признаков для понимания распределения различных классов данных в датасете
- проанализировано изменение количества новых и ушедших пользователей со временем. В целом наблюдается положительный прирост: количество новых клиентов превышает количество ушедших в среднем на 200 человек.
В ходе корреляционного анализа данных были расчитана матрица корреляции коэффициентов Фи. Было выявлено, что мультиколлинеарность между признаками (от 94 до 97%), относящимися к интернет-услугам: internet_service, online_security, online_backup, device_protection, tech_support, streaming_tv, streaming_movies. Для моделирования оставили из них один признак streaming_movies, а остальные удалили. Также удалили признак gender, т.к. у него практически нулевая взаимосвязь со всеми признаками.
На этапе обучения модели было построено 3 модели: LogisticRegression, CatBoostClassifier, SGDClassifier. Для обучения использовались 8 входных признаков: 'type', 'paperless_billing', 'payment_method', 'senior_citizen', 'partner', 'dependents', 'streaming_movies', 'multiple_lines'. По результатам кросс-валидации лучшей оказалась модель CatBoostClassifier с параметрами {'depth': 4, 'learning_rate': 0.1, 'l2_leaf_reg': 3}. Ее метрика ROC-AUC на кросс-валидации равна 91%. Метрика ROC-AUC на тестовых данных оказалась чуть ниже, чем на кросс-валидации - 90.9%
Затем был сделан анализ важности признаков с помощью SHAP-значений. Топ-5 наиболее значимых признаков:
- длительность контракта в днях
duration
, - общие расходы
total_charges
, - тип подключения
type
, - месячные расходы
monthly_charges
, - семейный статус
partner
.
Матрица ошибок показала хороший результат: верно были предсказаны 1617 (TP+TN), а неверно 140 (FP+FN). Для 120 случаев модель выдала ложноотрицательный результат, а для 20 - ложноположительный. Таким образом, существует больший риск не предложить спецусловия клиенту, который затем уйдет, чем предложить их тому, кто не собирался уходить.
Анализ кривой ROC-AUC также показал лучшее качество модели CatBoost по сравнению с другими.
Рекомендации:
- Протестировать различные техники для снижения дисбаланса классов, чтобы уменьшить количество ложноотрицательных прогнозов модели.