Проблема: коли клієнтів у 10 разів більше, ніж CSM
У вас 800 B2B клієнтів, а в команді лише 6 CSM. Enterprise-сегмент отримує преміум-увагу, а mid-market — реактивне обслуговування. Health score не рахується системно, ризики відтоку виявляються постфактум, QBR проводяться лише для 40% клієнтів. Результат: NRR падає, churn зростає, а CSM вигорають від рутини. Ми знаємо це — впровадили AI CSM для SaaS-платформи з подібною ситуацією та отримали вимірний ефект. Економія на масштабуванні команди CS становить $50-100K на рік при 300 клієнтах, а ROI досягає 300% за перший рік.
AI CSM: автоматизація Customer Success з ML
В основі — ансамбль моделей: для аналізу числових метрик використовується кастомна ML-модель на PyTorch, для генерації рекомендацій — OpenAI GPT-4o, для ранжування клієнтів — XGBoost. Векторні ембеддінги (text-embedding-3-small, 1536-dim) зберігаються в pgvector для швидкого пошуку схожих клієнтів. Система безперервно розраховує health score, виявляє сигнали відтоку та запускає проактивні дії. AI CSM у 10 разів швидше виявляє ризики, ніж ручний аналіз, і в 3 рази ефективніше за традиційний підхід.
Як AI CSM допомагає знизити churn?
Модуль розрахунку 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, # Відкриття email, участь у вебінарах
"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% | Відкриття email, участь у вебінарах |
| 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?
Процес впровадження складається з наступних етапів:
Необхідні інтеграції
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 на підтримку.
Що входить у роботу?
У вартість впровадження AI CSM входить:
- Технічна документація: model card, API-специфікації, інструкції користувача
- Доступи до системи: адмін-панель, дашборди, логування дій агента
- Навчання команди CS: 2 воркшопи + 4 тижні супроводу
- Підтримка: SLA 8/5 з часом відповіді до 4 годин, оновлення моделей щомісяця
Строки орієнтовно
| Етап | Тривалість |
|---|---|
| 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 можна прочитати в Вікіпедії. Цифровий менеджер по роботі з клієнтами, відомий як AI CSM, використовує ML для CSM та онбординг клієнтів AI.







