ЦЕЛЬ ПРОЕКТА:
Провести исследование и построить модель прогнозирования ухода клиентов из банка, что позволит сократить затраты
на привлечение новых клиентов.
В нашем распоряжении обезличенные данные пользователей и история использования услуг
.
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 |