Массовые рассылки с одинаковым контентом для всей базы — это устаревший подход: open rate 15–20%, а отток подписчиков достигает 5–8% в месяц. Наши инженеры замечают, что медиа теряют до 70% потенциала вовлечения из-за игнорирования поведенческих сигналов. Мы строим pipeline персонализации на базе LLM и event streaming, который поднимает open rate до 35–50%: профиль читателя → скоринг статей → генерация темы письма через большую языковую модель. Технически это цепочка, включающая Apache Kafka для событий, Redis для профилей и batch-обработку за 1–2 часа до отправки. В результате каждый подписчик получает дайджест, релевантный его интересам, что сокращает отток в 2–3 раза и экономит до 40% бюджета на email-маркетинг за счёт снижения числа нецелевых отправок.
Какие данные критичны для персонализации?
Для качественного профиля требуется минимум 10–15 прочитанных статей. Собираем события: просмотры, время на странице, лайки, шеринг. До этого порога используем категорийную персонализацию — выбираем разделы на основе последних интересов. Данные хранятся в Redis с TTL 30 дней; топики взвешиваются с экспоненциальным затуханием. Без достаточной истории алгоритм переключается на fallback, чтобы не ухудшать опыт.
Почему массовые рассылки проигрывают персонализации?
Однотипные дайджесты игнорируют поведенческие сигналы: какой раздел читатель открывает чаще, какие темы пропускает. LLM-персонализация учитывает свежесть контента, редакционную оценку и даже время суток. Сравните:
| Метрика | Массовая рассылка | Персонализированный дайджест |
|---|---|---|
| Open rate, % | 15–20 | 35–50 |
| Click-through rate, % | 2–5 | 8–15 |
| Отток за месяц, % | 5–8 | 2–4 |
| Время на чтение | 30–60 с | 2–5 мин |
После внедрения персонализации open rate вырос с 18% до 41% за три месяца, — отмечает технический директор одного из клиентов.
Как мы строим pipeline персонализации?
Шаг 1. Профилирование читателя. Собираем события через Apache Kafka: просмотры, лайки, время на статье. Сохраняем в Redis с TTL 30 дней. Топики взвешиваем с экспоненциальным затуханием. Для каждого читателя формируем 1536-мерный embedding на основе истории просмотров.
Шаг 2. Скоринг статей. Для каждого непрочитанного материала рассчитываем комбинированный score:
- Соответствие топикам (50%)
- Свежесть (30%) — чем моложе статья, тем выше
- Редакционная оценка (20%)
Шаг 3. Генерация темы письма. Используем Claude 3.5 Sonnet с few-shot промптом. Модель получает три лучшие статьи и интересы читателя, выдаёт заголовок до 55 символов на русском. Пример кода:
from anthropic import Anthropic def generate_personalized_digest(user_profile, available_articles, n_articles=5): llm = Anthropic() read_ids = user_profile.get('read_ids', set()) unread = [a for a in available_articles if a['id'] not in read_ids] topics = user_profile.get('topics', {}) scored = [] for article in unread: topic_score = topics.get(article.get('topic', 'general'), 0.05) freshness = max(0, 1.0 - article.get('hours_old', 24) / 48) quality = article.get('editorial_score', 0.7) scored.append({**article, 'score': topic_score*0.5 + freshness*0.3 + quality*0.2}) top_articles = sorted(scored, key=lambda x: -x['score'])[:n_articles] article_titles = [a['title'] for a in top_articles] response = llm.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=80, messages=[{ "role": "user", "content": f"Write a compelling email subject line for a news digest in Russian.\nArticles: {article_titles[:3]}\nReader's main interests: {list(topics.keys())[:3]}\nMax 55 chars. No clickbait." }]) return {'articles': top_articles, 'subject': response.content[0].text.strip()} Порог запуска персонализации — 10–15 прочитанных статей. Иначе включается категорийная персонализация (выбор раздела) без статейного уровня. При необходимости используем fine-tuning модели на корпусе редакционных материалов с помощью LoRA.
Какие результаты даёт персонализация?
Персонализированные дайджесты в 2–3 раза эффективнее массовых рассылок по основным метрикам. Мы проводим A/B-тестирование для каждой модели, фиксируя lift на уровне p99 latency менее 200 мс. Опыт нашей команды в MLOps и NLP позволяет быстро адаптировать pipeline под любую редакцию. Экономия на нецелевых отправках достигает 30–40% при сохранении качества контента.
| Метод | Требуемые данные | Латентиность | Холодный старт |
|---|---|---|---|
| Коллаборативная фильтрация | История оценок | Высокая | Проблема |
| Контентная фильтрация | Профили, метаданные | Средняя | Частично |
| LLM-персонализация (наш) | Поведение + NLP | Низкая (batch) | Нет |
Что входит в работу «под ключ»
- Архитектура решения с блочной схемой
- Код pipeline на Python с использованием LangChain и Redis
- Интеграция с CRM и ESP через REST API
- Документация и обучение команды
- Гарантия на 3 месяца и поддержка при релизах
Сроки и стоимость
Срок внедрения: от 2 до 6 недель в зависимости от сложности интеграций. Стоимость рассчитывается индивидуально после аудита текущего стека. Оценим проект бесплатно — получите консультацию через форму на сайте.
Как начать?
Расскажите о вашей базе подписчиков, текущих метриках и задачах. Мы подготовим предложение с точным составом работ и календарным планом. Свяжитесь с нами — поможем поднять open rate до 50%.







