К какому типу задач машинного обучения относится прогнозирование оттока пользователей (churn prediction): регрессии, кластеризации или классификации?

«К какому типу задач машинного обучения относится прогнозирование оттока пользователей (churn prediction): регрессии, кластеризации или классификации?» — вопрос из категории Классическое ML, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Прогнозирование оттока — это классическая задача бинарной классификации. Целевая переменная является категориальной: 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), чтобы служба удержания могла работать с наиболее "горячими" случаями.