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. Ми не просто запускаємо модель — ми гарантуємо зростання метрик і надаємо повну документацію.
Готові протестувати систему на своїй базі? Замовте демо — покажемо, як працює сегментація на ваших даних. Отримайте консультацію по вашому проєкту — напишіть нам.







