Skip to content

Предиктивный анализ оттока клиентов

Notifications You must be signed in to change notification settings

schatzederwelt/customer-churn-prediction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 

Repository files navigation

Предиктивный анализ оттока клиентов

Описание проекта

ЦЕЛЬ ПРОЕКТА:

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

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

KPI успеха проекта - F1-score >= 0.59

Это классический таргет для бизнес-задач. Будет отлично, если более детальный анализ позволит получить результаты с еще большей точностью.


ЛИЧНАЯ ЦЕЛЬ:

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

Наша логистическая регрессия показывала нулевой precision и recall для 1-го класса:

  • Теперь мы вооружены методами для борьбы с неравными классами и сможем протестировать их работу на практике.

  • Научимся правильно интерпретировать Recall, Precision, F1_score, ROC_AUC и PR-кривые. Посмотрим, действительно ли они могут искажать результаты на imbalanced классах, как об этом пишут.

Также испытаем новые инструменты:

  1. Попробуем "на лету" строить пайплайны из данных с помощью Pandas и использовать метод make_pipeline для трансформеров.

  2. Проведем эксперименты подбора базовых гиперпараметров c визуализацией learning_curve и validation_curve

  3. Посмотрим, как дополнительные методы корреляции (кроме Пирсона) могут помочь в анализе данных и построении качественной модели.

Посмотреть проект

Новые навыки


✔️ Борьба с дисбалансом классов (custom функции для Оversampling & Undersampling)

✔️ Числовые и категориальные признаки ✔️ Корреляции Спирмена и Пирсона

✔️ Анализ относительных частот ✔️ Использование трэшхолдов в классификации

✔️ ROC AUC ✔️ F1-score ✔️ Precision ✔️ Recall

✔️ Пайплайны обработки данных

Этапы исследования

  1. Исследовали различные факторы ухода клиентов:

    • Проверили валидность всех данных, которые будут использоваться предсказательной моделью
    • Изучили влияние различных признаков, основываясь на корреляции и частотном анализе.
    • Увеличили корреляцию, создав категории для численных признаков c помощью Target Encoding
    • Выбрали те признаки, которые слабо влияют на уход клиентов
  2. Построили базовые модели-классификаторы на базе 3-х алгоритмов:

    • LogisticRegression
    • DecisionTree
    • RandomForest
  3. Провели эксперименты для борьбы с дисбалансом классов:

    • Параметр class_weight=balanced
    • Undersampling
    • Oversampling
  4. Выполнили поиск лучшего трэшхолда для максимизации f1-score

  5. Визуализировали качество предсказаний с помощью Precision-Recall и ROC-AUC кривых.

  6. Выявили сегмент Заказчиков из Германии, на которых базируется точность построенной модели

Результат проекта

Результат проекта - две модели на базе алгоритмов Решающего Дерева и Случайного Леса для предсказания 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