AI-система оценки здоровья клиентов (Customer Health Score)
Customer Health Score (CHS) — интегральный показатель того, насколько клиент вовлечён в продукт и насколько вероятно продление или отток. Для B2B SaaS и подписочных сервисов это ведущий индикатор NRR (Net Revenue Retention). ML-подход позволяет перейти от интуиции CSM к объективной, воспроизводимой оценке.
Сигналы для модели
Product Usage:
- DAU/WAU/MAU: активность основных юзеров аккаунта
- Feature adoption: процент ключевых фич, задействованных в последние 30 дней
- Глубина использования: advanced features vs. базовые
- Стагнация: снижение использования за последние 4 недели
Support & Success сигналы:
- Открытые тикеты без ответа > 3 дней — отрицательный сигнал
- NPS, CSAT оценки за последние 6 месяцев
- EBR (Executive Business Review) состоялся — положительный сигнал
- Escalations: жалобы уровня руководства
Коммерческие индикаторы:
- Renewal date proximity: < 90 дней → повышенное внимание
- Expansion или сокращение в последние 12 месяцев
- Invoice payment delays: просрочки платежей
- Contract modifications: попытки пересмотреть условия
Relationship сигналы:
- Sponsor changes: ушёл champion из аккаунта — высокий риск
- Multi-threading: скольких контактов знает CSM (< 2 = single-threaded)
- Last meaningful interaction: когда последний раз был реальный разговор
Feature Engineering
def compute_customer_health_features(account_id, lookback_days=90):
usage = get_product_usage(account_id, lookback_days)
support = get_support_tickets(account_id, lookback_days)
commercial = get_crm_data(account_id)
return {
# Usage trends
'usage_trend_slope': np.polyfit(range(lookback_days), usage['daily_active_users'], 1)[0],
'feature_adoption_score': len(usage['active_features']) / total_key_features,
'power_user_ratio': usage['high_frequency_users'] / usage['total_seats'],
# Support health
'open_critical_tickets': support[support['priority'] == 'critical']['count'],
'avg_resolution_time_days': support['avg_resolution_time'],
'recent_nps': support['last_nps_score'],
# Commercial
'days_to_renewal': (commercial['renewal_date'] - today).days,
'logo_expansion_12m': commercial['arr_change_12m'],
'payment_delay_days': commercial['avg_payment_delay'],
# Relationship
'sponsor_change_6m': commercial['sponsor_changed_flag'],
'contacts_known': commercial['known_contacts_count'],
'days_since_last_call': (today - commercial['last_substantive_contact']).days
}
Модели и архитектура
Composite Score (правиловой baseline):
def rule_based_health_score(features):
score = 100 # начинаем со 100
# Usage penalties
if features['usage_trend_slope'] < -0.1:
score -= 20
if features['feature_adoption_score'] < 0.3:
score -= 15
# Support penalties
if features['open_critical_tickets'] > 0:
score -= 25
if features['recent_nps'] and features['recent_nps'] < 7:
score -= 15
# Commercial risk
if features['days_to_renewal'] < 60 and features['logo_expansion_12m'] < 0:
score -= 20
return max(0, min(100, score))
ML-модель поверх: LightGBM или Logistic Regression обученная на исторических данных "продлил/ушёл" через 12 месяцев. Преимущество vs. правила: выявляет нелинейные взаимодействия (например, снижение usage само по себе — не риск, но в сочетании с upcoming renewal — критично).
Temporal validation:
# Walk-forward: обучаем на когортах < 12 месяцев назад, предсказываем на более поздних
# Метрика: AUC на 90-day churn prediction
# Baseline: просто renewal date + последний NPS
Сегментация риска и действия
Risk Tiers:
| Уровень | Score | Действие |
|---|---|---|
| Healthy | 70-100 | Quarterly check-in, expansion play |
| Attention | 50-69 | Monthly CSM review, fix pain points |
| At Risk | 30-49 | EBR scheduling, exec involvement |
| Critical | 0-29 | Save playbook, potential concessions |
Automated Playbooks:
def trigger_playbook(account, health_score, reason_codes):
if health_score < 30:
crm.create_task(owner='csm_manager', type='urgent_review', account=account)
slack.notify('#csm-alerts', f"CRITICAL: {account.name} score={health_score}")
elif health_score < 50 and 'usage_decline' in reason_codes:
gainsight.enroll_in_playbook(account, 'activation_campaign')
elif health_score > 80 and account.days_to_renewal < 90:
crm.create_opportunity(account, type='expansion', amount=account.arr * 0.2)
Интеграция с инструментами CS
Gainsight, ChurnZero, Totango: Эти платформы уже имеют native health scoring. Кастомная ML-модель экспортирует score через API → заменяет или дополняет встроенные правила.
CRM (Salesforce, HubSpot): Custom field "AI Health Score" на объекте Account. Обновляется еженедельно. Используется в reports и forecasting.
Product Analytics (Amplitude, Mixpanel, Heap): Источник usage-данных. Отдельный API/export для B2B account-level агрегации.
Сроки: feature pipeline + rule-based score + Salesforce интеграция — 3-4 недели. ML-модель обучения и валидации + automated playbook triggers + Gainsight integration — 6-8 недель.







