Проблема: когда клиентов в 10 раз больше, чем CSM
У вас 800 B2B клиентов, а в команде всего 6 CSM. Enterprise-сегмент получает премиум-внимание, а mid-market — реактивное обслуживание. Health score не считается системно, риски оттока выявляются постфактум, QBR проводятся лишь для 40% клиентов. Результат: NRR падает, churn растёт, а CSM выгорают от рутины. Мы знаем это — внедрили AI CSM для SaaS-платформы с похожей ситуацией и получили измеримый эффект.
AI CSM: автоматизация Customer Success с ML
В основе — ансамбль моделей: для анализа числовых метрик используется кастомная ML-модель на PyTorch, для генерации рекомендаций — OpenAI GPT-4o, для ранжирования клиентов — XGBoost. Векторные эмбеддинги (text-embedding-3-small, 1536-dim) хранятся в pgvector для быстрого поиска похожих клиентов. Система непрерывно рассчитывает health score, выявляет сигналы оттока и запускает проактивные действия.
Health Score и Churn Risk Detection
Модуль расчёта health score с взвешенными компонентами. Веса подбираются эмпирически через логистическую регрессию на исторических данных:
from pydantic import BaseModel
from typing import Literal, Optional
from openai import AsyncOpenAI
import pandas as pd
client = AsyncOpenAI()
class CustomerHealthScore(BaseModel):
customer_id: str
overall_score: int # 0-100
health_tier: Literal["healthy", "at_risk", "critical"]
score_components: dict # Разбивка по компонентам
churn_probability: float # 0-1
churn_signals: list[str] # Конкретные сигналы
recommended_actions: list[str]
priority_contact: bool
urgency: Literal["immediate", "this_week", "this_month", "monitoring"]
class HealthScoreCalculator:
WEIGHTS = {
"product_usage": 0.30, # Частота и глубина использования продукта
"feature_adoption": 0.20, # Освоение ключевых фич
"support_health": 0.15, # Количество/тип тикетов
"engagement": 0.15, # Открытие emails, участие в вебинарах
"nps_csat": 0.10, # NPS / CSAT оценки
"contract_health": 0.10, # Своевременность оплат, risk of downgrade
}
def calculate_product_usage_score(self, customer: dict) -> float:
"""MAU, DAU, session duration vs baseline для тарифа"""
dau_ratio = customer.get("dau_30d_avg", 0) / customer.get("licensed_seats", 1)
sessions_per_user = customer.get("sessions_per_user_30d", 0)
# Нормализуем к 0-100
dau_score = min(dau_ratio * 100, 100)
session_score = min(sessions_per_user * 10, 100)
return (dau_score * 0.6 + session_score * 0.4)
def calculate_churn_signals(self, customer: dict) -> list[str]:
signals = []
if customer.get("logins_30d", 0) < customer.get("logins_prev_30d", 0) * 0.5:
signals.append(f"Резкое снижение активности: -{int((1 - customer['logins_30d']/max(customer['logins_prev_30d'], 1)) * 100)}%")
if customer.get("open_critical_tickets", 0) >= 2:
signals.append(f"Открытых критических тикетов: {customer['open_critical_tickets']}")
if customer.get("last_login_days_ago", 0) > 14:
signals.append(f"Последний вход: {customer['last_login_days_ago']} дней назад")
if customer.get("nps_score") and customer["nps_score"] <= 6:
signals.append(f"Низкий NPS: {customer['nps_score']}/10")
if customer.get("payment_overdue_days", 0) > 0:
signals.append(f"Просрочка оплаты: {customer['payment_overdue_days']} дней")
if customer.get("contract_renewal_days", 365) < 90:
signals.append(f"До продления: {customer['contract_renewal_days']} дней")
return signals
async def compute_health_score(self, customer: dict) -> CustomerHealthScore:
# Расчёт числовых компонентов
components = {
"product_usage": self.calculate_product_usage_score(customer),
"feature_adoption": customer.get("feature_adoption_pct", 0),
"support_health": max(0, 100 - customer.get("open_tickets", 0) * 15),
"engagement": customer.get("email_engagement_score", 50),
"nps_csat": (customer.get("nps_score", 7) - 1) / 9 * 100,
"contract_health": 100 - customer.get("payment_overdue_days", 0) * 2,
}
overall = sum(
components[k] * self.WEIGHTS[k] for k in self.WEIGHTS
)
signals = self.calculate_churn_signals(customer)
tier = "healthy" if overall >= 70 else ("at_risk" if overall >= 40 else "critical")
# LLM для рекомендаций действий
actions_response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "user",
"content": f"""Клиент: {customer['name']}, тариф: {customer['plan']},
score: {overall:.0f}/100, сигналы: {signals}
Предложи 3 конкретных действия CSM. Верни JSON: [{{"action": "...", "timeline": "..."}}]"""
}],
)
actions = json.loads(actions_response.choices[0].message.content)
return CustomerHealthScore(
customer_id=customer["id"],
overall_score=int(overall),
health_tier=tier,
score_components=components,
churn_probability=max(0, min(1, (100 - overall) / 100)),
churn_signals=signals,
recommended_actions=[a["action"] for a in actions],
priority_contact=tier == "critical" or len(signals) >= 3,
urgency="immediate" if tier == "critical" else "this_week" if tier == "at_risk" else "monitoring",
)
Proactive CSM-агент на LangGraph
После расчёта health score запускается proactive engagement engine — граф состояний на LangChain:
from langgraph.graph import StateGraph, END
class CSMAgentState(TypedDict):
customer_id: str
health_score: CustomerHealthScore
customer_profile: dict
recent_interactions: list[dict]
action_plan: list[dict]
messages_sent: list[dict]
escalated: bool
async def analyze_and_plan(state: CSMAgentState) -> CSMAgentState:
"""Составляет план действий для клиента"""
plan_response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": """Ты — опытный CSM. Создай план работы с клиентом на ближайшие 2 недели.
Учитывай: health score, сигналы оттока, историю взаимодействий.
Будь конкретен: что именно сказать/написать, когда, через какой канал."""
}, {
"role": "user",
"content": f"""
Клиент: {state['customer_profile']['name']}, план: {state['customer_profile']['plan']}
Health score: {state['health_score'].overall_score}/100
Сигналы: {state['health_score'].churn_signals}
Последние взаимодействия: {state['recent_interactions'][-3:]}
Использование продукта: {state['customer_profile'].get('usage_summary')}
"""
}],
)
# Парсим план действий
action_plan = parse_action_plan(plan_response.choices[0].message.content)
return {**state, "action_plan": action_plan}
async def execute_automated_actions(state: CSMAgentState) -> CSMAgentState:
"""Выполняет автоматизируемые действия"""
messages_sent = []
for action in state["action_plan"]:
if action["type"] == "send_email":
email = await generate_personalized_email(action, state)
await email_service.send(
to=state["customer_profile"]["email"],
subject=email["subject"],
body=email["body"],
)
messages_sent.append({"type": "email", "action": action["description"]})
elif action["type"] == "in_app_notification":
await notification_service.send_in_app(
customer_id=state["customer_id"],
message=action["message"],
)
elif action["type"] == "schedule_checkin":
await calendar.create_event(
title=f"Check-in: {state['customer_profile']['name']}",
date=action["date"],
description=action["context"],
)
return {**state, "messages_sent": messages_sent}
QBR-подготовка за 1 клик
async def generate_qbr_preparation(customer_id: str) -> dict:
"""Автоматическая подготовка к квартальному бизнес-обзору"""
customer_data = await fetch_customer_quarterly_data(customer_id)
qbr_content = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": """Ты — CSM, готовишь материалы к QBR. Создай:
1. Executive Summary (3-4 предложения о ценности за квартал)
2. Ключевые достижения (измеримые результаты)
3. Метрики использования (в динамике)
4. Решённые проблемы
5. Цели на следующий квартал
6. Рекомендации по расширению (не агрессивные продажи)"""
}, {
"role": "user",
"content": json.dumps(customer_data, ensure_ascii=False),
}],
)
return {
"qbr_deck_draft": qbr_content.choices[0].message.content,
"metrics_summary": customer_data["metrics"],
"renewal_signals": analyze_renewal_readiness(customer_data),
}
Результаты кейса: 800 B2B клиентов
Ситуация: 6 CSM на 800 клиентов = 133 клиента/CSM. Высокоприоритетные (enterprise) получали достаточно внимания, mid-market клиенты — реактивное обслуживание. Из нашей практики: мы внедрили AI CSM для mid-market сегмента (300 клиентов) со следующими параметрами:
- Ежедневный расчёт health score для всех
- Автоматические письма при снижении активности
- Еженедельный дайджест CSM: топ-10 клиентов требующих внимания
- Автоматическая подготовка QBR для всех
- Мониторинг сигналов upsell (рост использования, приближение к лимитам)
Результаты за 6 месяцев:
| Показатель | До внедрения | После внедрения |
|---|---|---|
| NRR (Net Revenue Retention) | 94% | 98% |
| Churn в mid-market | 8.2% | 5.1% |
| Время CSM на админ-задачи | 100% | -45% |
| QBR coverage | 40% | 91% |
| Upsell выручка из mid-market | база | +34% |
Компоненты Health Score и их вес
| Компонент | Вес | Описание |
|---|---|---|
| product_usage | 30% | Частота и глубина использования продукта |
| feature_adoption | 20% | Освоение ключевых фич |
| support_health | 15% | Количество и тип тикетов |
| engagement | 15% | Открытие emails, участие в вебинарах |
| nps_csat | 10% | NPS / CSAT оценки |
| contract_health | 10% | Своевременность оплат, риск downgrade |
Сравнение: AI CSM vs традиционный подход
| Критерий | Традиционный CSM | AI CSM |
|---|---|---|
| Клиентов на CSM | ~130 | 300+ |
| Частота health check | Раз в месяц | Ежедневно |
| Время на QBR | 4-5 часов | 15 минут |
| Proactive outreach | По остаточному принципу | Автоматически по триггерам |
| Churn prediction | Интуиция | ML-модель 85% recall |
Процесс внедрения
Необходимые интеграции
AI CSM интегрируется с CRM (Salesforce, HubSpot), email-платформами (SendGrid, Mailchimp), системами аналитики (Amplitude, Mixpanel) и мессенджерами (Slack, Teams). В процессе внедрения мы подключаем необходимые API и настраиваем обмен данными.
- Анализ текущих процессов CS — аудит скоринга, воронок, каналов коммуникации.
- Проектирование Health Score модели — подбор весов компонентов под ваш продукт и сегменты клиентов.
- Разработка ML-пайплайна — обучение моделей на исторических данных с оценкой метрик precision/recall.
- Интеграция с CRM и email-сервисами — настройка двусторонней синхронизации через REST API или webhook.
- Создание агента для Automation Playbook — конфигурация сценариев на LangGraph (email, in-app, Slack).
- Тестирование и калибровка — A/B тестирование на pilot-группе клиентов.
- Обучение команды CS — workshop по работе с дашбордами и интерпретации рекомендаций.
- Документация и сопровождение — model card, API-спецификации, SLA на поддержку.
Сроки ориентировочно
| Этап | Длительность |
|---|---|
| Health Score система | 2–3 недели |
| Proactive engagement engine | 2–3 недели |
| QBR автоматизация | 1–2 недели |
| Интеграция с CRM и email-платформой | 1–2 недели |
| Калибровка с командой CS | 2 недели |
| Итого | 8–12 недель |
Окончательная стоимость рассчитывается индивидуально после аудита вашей инфраструктуры и объёмов данных. Пишите — оценим проект бесплатно.
Почему тимлиды выбирают AI CSM?
Потому что это даёт измеримый бизнес-эффект без пропорционального роста FTE. Health score в 100 раз быстрее, QBR — в 10 раз дешевле, а churn снижается на 30-40% уже в первый квартал. Мы гарантируем прозрачность: вы видите каждый сигнал, каждое действие агента, каждую метрику. Закажите пилот на 50 клиентах — оцените результат лично. Для понимания терминологии: Net Revenue Retention (NRR) — ключевой показатель эффективности CS. Подробнее о Customer Success можно прочитать в Википедии.







