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% вернулись в течение месяца, средний чек повторной покупки — $32–46. Конверсия в 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. Мы не просто запускаем модель — мы гарантируем рост метрик и предоставляем полную документацию.
Готовы протестировать систему на своей базе? Закажите демо — покажем, как работает сегментация на ваших данных. Получите консультацию по вашему проекту — напишите нам.







