ЦЕЛЬ ПРОЕКТА:
Провести исследование и построить модель прогнозирования ухода клиентов из банка, что позволит сократить затраты на привлечение новых клиентов.
В нашем распоряжении обезличенные данные пользователей и история использования услуг.
KPI успеха проекта - F1-score >= 0.59
Это классический таргет для бизнес-задач. Будет отлично, если более детальный анализ позволит получить результаты с еще большей точностью.
ЛИЧНАЯ ЦЕЛЬ:
В прошлом проекте с рекомендацией тарифов мы успели заметить проблему дисбаланса классов, а после обучения моделей обнаружили, что accuracy была неподходящей метрикой.
Наша логистическая регрессия показывала нулевой precision и recall для 1-го класса:
-
Теперь мы вооружены методами для борьбы с неравными классами и сможем протестировать их работу на практике.
-
Научимся правильно интерпретировать
Recall,Precision,F1_score,ROC_AUCиPR-кривые. Посмотрим, действительно ли они могут искажать результаты на imbalanced классах, как об этом пишут.
Также испытаем новые инструменты:
-
Попробуем "на лету" строить пайплайны из данных с помощью
Pandasи использовать методmake_pipelineдля трансформеров. -
Проведем эксперименты подбора базовых гиперпараметров c визуализацией
learning_curveиvalidation_curve -
Посмотрим, как дополнительные методы корреляции (кроме Пирсона) могут помочь в анализе данных и построении качественной модели.
✔️ Борьба с дисбалансом классов (custom функции для Оversampling & Undersampling)
✔️ Числовые и категориальные признаки ✔️ Корреляции Спирмена и Пирсона
✔️ Анализ относительных частот ✔️ Использование трэшхолдов в классификации
✔️ ROC AUC ✔️ F1-score ✔️ Precision ✔️ Recall
✔️ Пайплайны обработки данных
-
Исследовали различные факторы ухода клиентов:
- Проверили
валидность всех данных, которые будут использоваться предсказательной моделью - Изучили влияние различных признаков, основываясь на корреляции и частотном анализе.
- Увеличили корреляцию, создав категории для численных признаков c помощью
Target Encoding - Выбрали те признаки, которые слабо влияют на уход клиентов
- Проверили
-
Построили базовые модели-классификаторы на базе 3-х алгоритмов:
- LogisticRegression
- DecisionTree
- RandomForest
-
Провели эксперименты для борьбы с дисбалансом классов:
- Параметр
class_weight=balanced - Undersampling
- Oversampling
- Параметр
-
Выполнили поиск лучшего трэшхолда для максимизации
f1-score -
Визуализировали качество предсказаний с помощью Precision-Recall и ROC-AUC кривых.
-
Выявили сегмент Заказчиков из Германии, на которых базируется точность построенной модели
Результат проекта - две модели на базе алгоритмов Решающего Дерева и Случайного Леса
для предсказания Churn Customer.
====> RandomForest (Случайный Лес, 60 деревьев, max_depth=7)
Результаты на валидационной и тестовой выборках:
-
Порог = 0.50 | Точность = 0.512, Полнота = 0.718, F1_score = 0.598 | roc_auc = 0.770
-
Порог = 0.50 | Точность = 0.510, Полнота = 0.742, F1_score = 0.604 | roc_auc = 0.785
====> DecisionTree (Решающее Дерево, max_depth=8)
Результаты на валидационной и тестовой выборках:
-
Порог = 0.40 | Точность = 0.502, Полнота = 0.712, F1_score = 0.589 | roc_auc = 0.764
-
Порог = 0.40 | Точность = 0.508, Полнота = 0.705, F1_score = 0.591 | roc_auc = 0.771
Даже на несложных моделях мы построили решение, которое удовлетворяют целевому KPI.
Возможности для развития проекта - использовать CatBoost Classificator для повышения точности предскаазний.
import pandas as pd
df = pd.read_csv("https://code.s3.yandex.net/datasets/Churn.csv")
display(df.iloc[:, :6].head(3))
df.iloc[:, 6:].head(3)| RowNumber | CustomerId | Surname | CreditScore | Geography | Gender | |
|---|---|---|---|---|---|---|
| 0 | 1 | 15634602 | Hargrave | 619 | France | Female |
| 1 | 2 | 15647311 | Hill | 608 | Spain | Female |
| 2 | 3 | 15619304 | Onio | 502 | France | Female |
| Age | Tenure | Balance | NumOfProducts | HasCrCard | IsActiveMember | EstimatedSalary | Exited | |
|---|---|---|---|---|---|---|---|---|
| 0 | 42 | 2.0 | 0.00 | 1 | 1 | 1 | 101348.88 | 1 |
| 1 | 41 | 1.0 | 83807.86 | 1 | 0 | 1 | 112542.58 | 0 |
| 2 | 42 | 8.0 | 159660.80 | 3 | 1 | 0 | 113931.57 | 1 |