80% попыток реактивации «спящих» клиентов проваливаются из-за шаблонных писем и неверного тайминга. Привлечение нового покупателя обходится в 5–7 раз дороже, чем возврат существующего, но стандартные скидочные кампании дают лишь 2–5% отклика. Мы разрабатываем AI-систему, которая анализирует поведение неактивных клиентов, выделяет причины оттока и формирует персонализированное предложение для каждого сегмента — от сегментации до отправки.
Почему стандартные реактивационные кампании не работают?
Типичная ошибка — рассылка одинаковых купонов всей базе. В результате 80% пользователей игнорируют письма, а 5% отписываются. Проблема в том, что разные сегменты требуют разного подхода: кто-то ушёл из-за плохого сервиса, кто-то — из-за высокой цены, а третьи просто забыли о магазине. Наша система выделяет 5–7 сегментов с помощью customer churn анализа и подбирает уникальную стратегию для каждого.
Как мы сегментируем неактивных
Используем комбинацию KMeans-кластеризации и LLM: модель группирует клиентов по числовым признакам (дни неактивности, сумма заказов, частота, давность последней покупки), а затем нейросеть описывает каждый сегмент и предлагает реактивационную стратегию. Ниже — пример реализации на Python с использованием Anthropic Claude API.
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from anthropic import Anthropic
class InactiveCustomerAnalyzer:
def __init__(self, inactivity_threshold_days: int = 90):
self.threshold = inactivity_threshold_days
self.llm = Anthropic()
self.scaler = StandardScaler()
def identify_inactive(self, customers_df: pd.DataFrame,
last_activity_col: str = 'last_purchase_date') -> pd.DataFrame:
"""Определение неактивных клиентов"""
customers_df['days_inactive'] = (
pd.Timestamp.now() -
pd.to_datetime(customers_df[last_activity_col])
).dt.days
inactive = customers_df[
customers_df['days_inactive'] >= self.threshold
].copy()
return inactive
def segment_inactive(self, inactive_df: pd.DataFrame) -> pd.DataFrame:
"""Кластеризация неактивных по паттерну поведения"""
features = pd.DataFrame()
features['days_inactive'] = inactive_df['days_inactive']
features['total_orders'] = inactive_df.get('total_orders', 1)
features['avg_order_value'] = inactive_df.get('avg_order_value', 0)
features['order_frequency'] = inactive_df.get('order_frequency', 0)
features['last_order_value'] = inactive_df.get('last_order_value', 0)
features['support_issues'] = inactive_df.get('support_tickets_total', 0)
X = self.scaler.fit_transform(features.fillna(0))
km = KMeans(n_clusters=5, random_state=42, n_init=10)
inactive_df['segment'] = km.fit_predict(X)
# Описание сегментов
segment_profiles = features.copy()
segment_profiles['segment'] = inactive_df['segment']
segment_stats = segment_profiles.groupby('segment').mean()
# LLM называет каждый сегмент
for seg_id in range(5):
if seg_id not in segment_stats.index:
continue
stats = segment_stats.loc[seg_id].to_dict()
stats_str = ", ".join([f"{k}: {v:.1f}" for k, v in stats.items()])
response = self.llm.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=100,
messages=[{
"role": "user",
"content": f"""Name this inactive customer segment (3-5 words) and suggest reactivation approach.
Stats: {stats_str}
Return: "Segment Name | 1-sentence strategy" """
}]
)
print(f"Segment {seg_id}: {response.content[0].text}")
return inactive_df
class ReactivationCampaign:
"""Кампания реактивации с персонализацией"""
def __init__(self):
self.llm = Anthropic()
self.reactivation_offers = {
0: {'discount': 20, 'message_theme': 'we_miss_you'},
1: {'discount': 15, 'message_theme': 'best_of_what_they_liked'},
2: {'discount': 10, 'free_shipping': True, 'message_theme': 'new_arrivals'},
3: {'special_access': True, 'message_theme': 'exclusive_comeback'},
4: {'survey': True, 'small_incentive': True, 'message_theme': 'help_us_improve'},
}
def create_reactivation_email(self, user: dict, segment: int) -> dict:
"""Персонализированное письмо реактивации"""
offer = self.reactivation_offers.get(segment, {'discount': 10})
days_inactive = user.get('days_inactive', 90)
past_categories = user.get('top_categories', ['products'])
response = self.llm.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=300,
messages=[{
"role": "user",
"content": f"""Write a reactivation email for an inactive customer.
Customer: {user.get('first_name', 'Customer')}
Inactive for: {days_inactive} days
Past purchases: {', '.join(past_categories[:3])}
Offer: {offer}
Requirements:
- Subject line (engaging, personal, 50 chars max)
- Body (150 words max, warm tone, mention specific past interest)
- Clear CTA
Return JSON: {{"subject": "...", "body": "...", "cta": "..."}}"""
}]
)
try:
import json
return json.loads(response.content[0].text)
except Exception:
return {'subject': f"We miss you, {user.get('first_name', '')}!",
'body': response.content[0].text[:400], 'cta': 'Come Back'}
def predict_reactivation_probability(self, user: dict,
offer: dict) -> float:
"""Вероятность реактивации при данном предложении"""
# Упрощённая эвристика (в реальности — обученная модель)
base_prob = 0.05 # Базовая вероятность
# Факторы, повышающие вероятность
if user.get('total_orders', 0) > 5:
base_prob += 0.05 # Лояльный клиент
if user.get('days_inactive', 999) < 180:
base_prob += 0.08 # Недавно ушёл
if offer.get('discount', 0) >= 20:
base_prob += 0.06 # Хорошая скидка
if user.get('email_open_rate', 0) > 0.3:
base_prob += 0.04 # Открывает письма
return min(base_prob, 0.4)
Таблица конверсий по временным окнам
| Период неактивности | Средний CRR | Рекомендуемое предложение |
|---|---|---|
| 0–90 дней | 15–20% | Напоминание + эксклюзивный контент |
| 90–180 дней | 10–15% | Персональная скидка 15–20% |
| 180–365 дней | 5–10% | Сильный оффер (скидка 25%+ или бесплатная доставка) |
| > 365 дней | 2–5% | Опрос + небольшая мотивация (5% скидка) |
Что даёт использование LLM в реактивации?
LLM (Large Language Models) позволяют генерировать персонализированные тексты, учитывающие историю покупок и предпочтения каждого клиента. Вместо шаблонного «Мы по вам скучаем» модель создаёт письмо с упоминанием конкретного товара или категории, которые клиент покупал раньше. Это увеличивает открываемость (OR) на 20–40% и конверсию (CRR) в 2–3 раза по сравнению с массовыми рассылками. Кроме того, LLM интерпретируют сегменты — автоматически дают им названия вроде «Ценовые скептики» или «Забывшие», что упрощает настройку стратегий.
Сравнение подходов: традиционный vs AI
| Критерий | Традиционный подход | AI-подход с LLM и ML |
|---|---|---|
| Сегментация | По одному признаку (давность покупки) | Многомерная кластеризация + интерпретация |
| Персонализация | Шаблонные письма | Генерация уникального текста под каждого |
| Таргетинг скидок | Единая скидка для всех | Дифференцированный оффер по сегментам |
| Время настройки | 1–2 дня | 2–3 недели (первично), далее автоматически |
| CRR на тестовой выборке | 3–5% | 12–20% |
Кейс: возврат 12% клиентов за месяц
Один из проектов — интернет-магазин электроники с базой 50 000 неактивных. Мы внедрили описанную систему, сегментировали клиентов на 6 групп, сгенерировали персонализированные письма через Claude API. Результат: 12% вернулись в течение месяца, средний чек повторной покупки — 3 500 руб. Конверсия в 3 раза выше, чем в предыдущей кампании с шаблонными письмами.
Что входит в работу
- Аудит базы: анализ текущих данных, выявление пропусков, рекомендации по сбору недостающих полей.
- Разработка модели сегментации: выбор признаков, кластеризация, интерпретация сегментов через LLM.
- Генератор персонализированных писем: интеграция с Anthropic/OpenAI, шаблоны для разных сегментов, A/B-тестирование заголовков.
- Панель мониторинга: дашборд с метриками CRR, ROI, CTR, OR. Автоматические отчёты.
- Интеграция с CRM: модуль экспорта сегментов и сгенерированных предложений через REST/SOAP API.
- Обучение команды: 2-часовая сессия по управлению кампаниями и настройке триггеров.
- Гарантия результата: первые 3 месяца поддержки + корректировка модели под ваши данные.
Сроки и стоимость
Базовая версия системы с одной кампанией запускается за 2–3 недели. Полный цикл под ключ с несколькими сегментами и интеграцией — от 1 до 2 месяцев. Стоимость рассчитывается индивидуально в зависимости от объёма базы и сложности интеграции. Оценим ваш проект за 1 день — пишите.
Почему выбирают нас: 5+ лет опыта в AI/ML, более 20 успешных внедрений в e-commerce и ритейле. Сертифицированные специалисты по стеке Hugging Face, LangChain, Anthropic. Мы не просто запускаем модель — мы гарантируем рост метрик и предоставляем полную документацию.
Готовы протестировать систему на своей базе? Закажите демо — покажем, как работает сегментация на ваших данных. Получите консультацию по вашему проекту — напишите нам.







