← Назад к вопросам

Расскажи про фактор в модели, оказавший наибольшее влияние

2.0 Middle🔥 181 комментариев
#Machine Learning

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Фактор с наибольшим влиянием на модель: Анализ интенсивности обращений в поддержку

Я расскажу о проекте, где один признак радикально переменил результат предсказания. Это было при разработке модели чёрна (оттока) клиентов в телеком-компании.

Контекст проекта

Мы строили модель для предсказания, какой клиент уйдёт в течение 30 дней. В модели были обычные признаки:

  • Средний чек (среднее потребление)
  • Возраст аккаунта
  • Количество использованных сервисов
  • Географическое местоположение
  • История платежей
  • Net Promoter Score (NPS)

Модель давала AUC ~0.72, что хорошо, но недостаточно для бизнес-решений. Нужно было выше 0.80+.

Открытие: признак обращений в поддержку

При анализе данных обращений в call-центр я заметил интересный паттерн:

SELECT 
    customer_id,
    churn_flag,
    COUNT(*) as support_calls_30d,
    AVG(EXTRACT(DAY FROM (resolved_at - created_at))) as avg_resolution_days
FROM support_tickets
WHERE created_at >= NOW() - INTERVAL '30 days'
GROUP BY customer_id, churn_flag

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

ГруппаСредн. звонковПроцент оттока
0 звонков02%
1-2 звонка1.53%
3-5 звонков48%
6-10 звонков818%
11+ звонков1552%

Клиенты, звонящие в поддержку 11+ раз в месяц, уходили в 26 раз чаще, чем те, кто не звонит вообще!

Почему этот фактор столь мощный

Причина 1: Это индикатор проблем, которые клиент не может решить сам

Если клиент звонит в поддержку, это значит:

  • У него есть проблема с сервисом
  • Сервис недостаточно интуитивен
  • Качество услуг снизилось
  • Он готов потратить время на решение

Причина 2: Это поведенческий сигнал, а не шум

Этот признак отражает реальное действие клиента, указывающее на дискомфорт.

Включение в модель

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split

# Признак количество звонков
df['support_calls_30d'] = df.groupby('customer_id')['support_ticket_id'].transform('count')

# Категоричные бины
df['support_calls_category'] = pd.cut(
    df['support_calls_30d'],
    bins=[-1, 0, 2, 5, 10, np.inf],
    labels=['none', 'low', 'medium', 'high', 'critical']
)

# Производные признаки
df['support_calls_trend'] = (
    df.groupby('customer_id')['support_calls_30d']
    .shift(1) - df['support_calls_30d']
)

df['days_since_last_call'] = (
    df['current_date'] - df.groupby('customer_id')['last_support_call_date'].transform('max')
).dt.days

features = [
    'support_calls_30d',
    'support_calls_category',
    'support_calls_trend',
    'days_since_last_call',
    'avg_call_duration_minutes',
    'support_satisfaction_score',
]

X = df[features]
y = df['churn_flag']

model = GradientBoostingClassifier(n_estimators=200, max_depth=5)
model.fit(X, y)

Результаты анализа важности

Топ признаки в итоговой модели:

ПризнакВажность
support_calls_30d0.242
days_since_last_call0.156
support_calls_category0.134
avg_monthly_spend0.098
support_satisfaction_score0.089

support_calls_30d объяснял 24% дисперсии целевой переменной — невероятно высокий показатель!

Влияние на качество модели

До добавления признака: AUC = 0.72 После добавления: AUC = 0.84

Прирост на 12 п.п. — огромный скачок!

Интерпретация для бизнеса

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

На основе этого мы разработали две стратегии:

1. Проактивная помощь

  • При 2-3 звонках за неделю запускается программа VIP-поддержки
  • Выделяется специалист для отслеживания решения

2. Улучшение самообслуживания

  • Анализ темы звонков создание FAQ и видео
  • Снижение количества повторяющихся вопросов

Практический результат

После внедрения модели и intervention программ:

  • Churn rate снизился на 3.2 п.п. (с 12% до 8.8%)
  • Удержано 18,000+ клиентов в год
  • LTV увеличилась на 28%
  • Среднее количество звонков на клиента снизилось с 8.2 до 4.6

Главный вывод

В машинном обучении часто думают, что нужны сложные признаки. Но иногда самый мощный признак — это просто количество событий, отражающих реальное поведение клиента.

Этот проект научил меня:

  1. Domain knowledge больше, чем волшебные фичи
  2. EDA стоит на первом месте перед моделированием
  3. Простые признаки часто мощнее сложных
  4. Результаты модели должны быть actionable — если модель показывает проблему, нужна стратегия её решения