← Volta Neobank

Extended · проект 5 из 23

Random Forest даёт +0,03 ROC-AUC над логистической регрессией; топ-драйвер оттока — частота ошибок устройства (23,7%), а не баланс или активность.

Ситуация
Отток считали маркетинговой проблемой, но рычаг удержания нужно было выбрать по данным
Задача
Понять, что реально двигает уход клиентов
Действия
Логистическая регрессия против Random Forest, ROC-AUC и важность признаков, SHAP-сводка и локальный разбор одного прогноза
Результат
Random Forest +0,03 ROC-AUC над LR; топ-драйвер — device_error_rate 23,7%, далее usage_frequency 18,7% и days_since_last_activity 16,5%
Стек
Pythonpandas / NumPySciPy / Statsmodelsscikit-learnMatplotlib / Seabornuv + ruff
Содержание
  1. Ситуация
  2. Задача
  3. Действия
  4. Локальный SHAP
  5. Результат
  6. Рекомендации
  7. Документация

Volta — Прогноз оттока

Ситуация

Отток — не только маркетинговая проблема: нужно понять, что реально двигает уход, чтобы выбрать рычаг.

Задача

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

Действия

  • Логистическая регрессия vs Random Forest, ROC-AUC и важность признаков.
  • SHAP-сводка (средний |SHAP|) и локальный разбор отдельного прогноза.

Локальный SHAP

SHAP-разбор отдельного прогноза

Почему конкретный пользователь получил высокий риск: вклад каждого признака.

Результат

  • Random Forest даёт +0,03 ROC-AUC над LR — прирост скромный, но устойчивый.
  • Топ-драйвер — частота ошибок устройства (23,7%), далее usage_frequency (18,7%) и days_since_last_activity (16,5%).
  • Баланс и активность уступают надёжности продукта.

Рекомендации

  • Направлять churn-профилактику в надёжность продукта и поддержку, а не только в офферы.
  • Использовать SHAP для точечного таргетинга риска.
  • Мониторить device-error rate как guardrail-метрику удержания.

Документация

Аналитика

Данные: github.com/NikitaBoyarkin/volta-banking — 22 projects; figures recomputed from the repo's own datasets (data/*.csv) via its analysis scripts. Funnel counts from data/volta_funnel_data.csv (10,000 users); A/B, retention, segmentation, churn, RFM, CLV, attribution, anomalies, spend, support, NPS, JTBD, unit economics, premium, KYC deep-dive, referral, assisted CAC, FX sourcing, premium offers, anchor CAC and dormant win-back follow the published project narrative (README + part pages).

Драйверы оттока: важность признаков

Важность признаков Random Forest (топ-8) для прогноза оттока. RF даёт +0.03 ROC-AUC над логистической регрессией.

0 10 20 30 device_error_rate — RF importance: 23.7 23.7 usage_frequency — RF importance: 18.7 18.7 days_since_last_activity — RF importance: 16.5 16.5 avg_transaction_value — RF importance: 11.2 11.2 age — RF importance: 9.2 9.2 customer_tenure_months — RF importance: 9.2 9.2 support_tickets — RF importance: 6.9 6.9 channel_google_play — RF importance: 1.3 1.3 device_error_rate usage_frequency days_since_last_activity avg_transaction_value age customer_tenure_months support_tickets channel_google_play Признак Важность, %
Выводы
  • Топ-драйвер оттока — частота ошибок устройства (device_error_rate, 23.7%), а не баланс или активность.
  • Профилактика должна идти через надёжность продукта/поддержку: device_error_rate опережает usage_frequency (18.7%).

ROC-кривые churn-моделей

True Positive Rate против False Positive Rate для логистической регрессии и Random Forest на тестовой выборке (25% данных).

0 0.5 1 Logistic Regression 0.00 — Logistic Regression: 0 0.01 — Logistic Regression: 0.17 0.03 — Logistic Regression: 0.27 0.04 — Logistic Regression: 0.34 0.06 — Logistic Regression: 0.41 0.08 — Logistic Regression: 0.45 0.10 — Logistic Regression: 0.5 0.12 — Logistic Regression: 0.54 0.14 — Logistic Regression: 0.57 0.17 — Logistic Regression: 0.61 0.19 — Logistic Regression: 0.64 0.22 — Logistic Regression: 0.68 0.25 — Logistic Regression: 0.71 0.28 — Logistic Regression: 0.74 0.33 — Logistic Regression: 0.77 0.37 — Logistic Regression: 0.79 0.41 — Logistic Regression: 0.82 0.46 — Logistic Regression: 0.85 0.51 — Logistic Regression: 0.87 0.57 — Logistic Regression: 0.89 0.65 — Logistic Regression: 0.92 0.71 — Logistic Regression: 0.94 0.78 — Logistic Regression: 0.96 0.86 — Logistic Regression: 0.98 1.00 — Logistic Regression: 1 Random Forest 0.00 — Random Forest: 0 0.01 — Random Forest: 0.05 0.03 — Random Forest: 0.13 0.04 — Random Forest: 0.21 0.06 — Random Forest: 0.27 0.08 — Random Forest: 0.32 0.10 — Random Forest: 0.37 0.12 — Random Forest: 0.43 0.14 — Random Forest: 0.49 0.17 — Random Forest: 0.52 0.19 — Random Forest: 0.55 0.22 — Random Forest: 0.6 0.25 — Random Forest: 0.65 0.28 — Random Forest: 0.69 0.33 — Random Forest: 0.73 0.37 — Random Forest: 0.77 0.41 — Random Forest: 0.81 0.46 — Random Forest: 0.84 0.51 — Random Forest: 0.87 0.57 — Random Forest: 0.89 0.65 — Random Forest: 0.92 0.71 — Random Forest: 0.95 0.78 — Random Forest: 0.98 0.86 — Random Forest: 0.99 1.00 — Random Forest: 1 0.00 0.06 0.14 0.25 0.41 0.65 1.00 False Positive Rate True Positive Rate Logistic Regression Random Forest
Выводы
  • Random Forest обгоняет логистическую регрессию на +0,03 ROC-AUC — нелинейность добавляет сигнал.
  • При FPR ≈ 0,10 Random Forest ловит 37% оттока, логистическая регрессия — 50%: выигрыш RF в площади под кривой, а не в каждой точке.

SHAP-важность драйверов оттока

Средний |SHAP| по 500 пользователям: вклад признака в прогноз оттока в единицах логита.

0 0.05 0.1 0.15 0.2 device_error_rate — mean |SHAP|: 0.15 0.15 days_since_last_activity — mean |SHAP|: 0.1 0.1 support_tickets — mean |SHAP|: 0.09 0.09 usage_frequency — mean |SHAP|: 0.08 0.08 customer_tenure_months — mean |SHAP|: 0.04 0.04 avg_transaction_value — mean |SHAP|: 0.01 0.01 is_premium — mean |SHAP|: 0.01 0.01 channel_website — mean |SHAP|: 0.01 0.01 device_error_rate days_since_last_activity support_tickets usage_frequency customer_tenure_months avg_transaction_value is_premium channel_website mean |SHAP|
Выводы
  • device_error_rate — главный драйвер (0,150 mean |SHAP|), в 1,5× выше второго признака.
  • Частота ошибок устройства и дни без активности (0,102) вместе дают больше, чем поддержка и частота использования.

Карта подпроектов Volta

Обзор Volta →