AI-система персоналізації email-розсилок для медіа

Масові розсилки з однаковим контентом для всієї бази — це застарілий підхід: open rate 15–20%, а відтік підписників сягає 5–8% на місяць. Наші інженери зауважують, що медіа втрачають до 70% потенціалу залучення через ігнорування поведінкових сигналів. Ми будуємо pipeline персоналізації на базі LLM і

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Масові розсилки з однаковим контентом для всієї бази — це застарілий підхід: 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 Ukrainian.\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%.