Ответ
Прогнозирование оттока — это классическая задача бинарной классификации. Целевая переменная является категориальной: 1 (клиент уйдёт) или 0 (клиент останется).
Практическая реализация и нюансы:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, roc_auc_score
# Загрузка и подготовка данных
# X: признаки (features) - активность, длительность подписки, обращения в поддержку и т.д.
# y: целевая метка (label) - факт оттока в следующий период
df = pd.read_csv('customer_data.csv')
X = df.drop('churned', axis=1)
y = df['churned']
# Разделение на train/test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
# Обучение модели
model = RandomForestClassifier(n_estimators=100, class_weight='balanced') # class_weight для борьбы с дисбалансом
model.fit(X_train, y_train)
# Предсказание и оценка
y_pred = model.predict(X_test)
y_pred_proba = model.predict_proba(X_test)[:, 1] # Вероятность класса 1
print(classification_report(y_test, y_pred))
print(f"ROC-AUC: {roc_auc_score(y_test, y_pred_proba):.3f}")
Ключевые особенности задачи:
- Дисбаланс классов: Ушедших клиентов обычно значительно меньше. Важно использовать метрики вроде Precision-Recall, F1-score, ROC-AUC и методы вроде
class_weight, SMOTE или ансамблирования. - Интерпретируемость: Для бизнеса критично понимать, почему клиент может уйти. Использую SHAP или LIME для объяснения предсказаний модели.
- Постановка как ранжирования: Часто полезнее не просто классифицировать, а ранжировать клиентов по вероятности оттока (
predict_proba), чтобы служба удержания могла работать с наиболее "горячими" случаями.