python

Как с помощью нейросети определить лучшую дату отправки email и повысить доход рассылки в 8,5 раз

  • суббота, 13 февраля 2021 г. в 00:36:29
https://habr.com/ru/company/mindbox/blog/542132/
  • Блог компании Mindbox
  • Python
  • Big Data
  • Машинное обучение
  • Natural Language Processing


Чтобы email-рассылка не затерялась во входящих, а клиенты чаще открывали письма и покупали, важно угадать правильное время отправки. С помощью нейросети мы проанализировали поведение клиентов и спрогнозировали дату отправки следующего email, чтобы порекомендовать клиенту товары в то время, когда он захочет их купить. Протестировали в зоомагазинах на рассылках с предложением повторной покупки и оценили результат с помощью AB-тестов. Получили следующие результаты:

в 23 раза
больше целевых отправок email с помощью нейросети по сравнению с триггером

в 8,5 раз
увеличился доход от email-рассылки по атрибуции last click

в 2 раза
уменьшилось число отписок

в 17 раз
выросло число открытий


Ниже поделимся опытом и расскажем:
  • почему решили использовать LSTM-модель нейросети для предсказания даты отправки email вместо алгоритма градиентного бустинга;
  • как устроена LSTM;
  • какие данные нейросеть использует для обучения;
  • какую архитектуру нейросети использовали и с какими сложностями столкнулись;
  • каких результатов достигли и как их оценивали.


Почему решили отказаться от алгоритма на градиентом бустинге в пользу LSTM


Email-рассылки помогают рассказать клиентам о новинках, реактивировать уходящих в отток клиентов или показать персональные рекомендации. Для каждого клиента дата лучшей отправки писем разная: кто-то совершает покупки в выходные, поэтому лучше всего отправить письмо в субботу; а кто-то недавно купил домик для кошки, и стоит поскорее отправить письмо и посоветовать ему корм. Определить лучшую дату отправки email и угадать потребность клиента нам помогла нейросеть.

Сначала мы использовали стандартные алгоритмы. Целый год создавали признаки из истории действий клиентов и обучали на них градиентный бустинг, чтобы спрогнозировать лучшую дату отправки email. Например:
  • рассчитывали, сколько дней пройдет с момента покупки до следующей покупки;
  • пробовали сделать классификацию признаков и предсказать вероятность отправки письма в определенный день;
  • пытались определить интересы пользователя в зависимости от места жительства, чтобы увеличить вероятность просмотра письма и кликов.

Но эта модель не давала стабильный положительный результат по всем проектам, не могла находить сложные закономерности в поведении пользователей и не приносила достаточно денег.

Когда мы уже думали отказаться от алгоритма и идеи предсказать дату отправки email, решили попробовать что-нибудь экзотическое и обучить этой задаче LSTM-модель нейросети. Обычно её используют для анализа текста, реже — для анализа курса акций на финансовых рынках, но никогда в маркетинговых целях. И LSTM сработала.

Что такое LSTM


LSTM (Long Short Term Memory) — архитектура нейросетей, пришедшая из анализа естественного языка.

Разберем работу LSTM на примере машинного перевода. На вход нейросети по очереди подаются все буквы текста, а на выходе мы хотим получить перевод на другой язык. Чтобы перевести текст, сеть должна хранить информацию не только о текущей букве, но и о тех, что были перед ней. Обычная нейросеть не помнит, что ей показывали раньше, и не может сделать перевод всего слова или текста. LSTM, напротив, имеет специальные ячейки с памятью, где хранится полезная информация, поэтому выдает результат на основе суммарных данных и переводит текст с учетом всех букв в словах. Со временем нейросеть может очищать ячейки и забывать информацию, которая больше не нужна.

Такой же принцип оказался важен и для предсказания действий пользователя. Нейросеть учитывала всю историю действий и выдавала релевантные результаты — например, определяла лучшую дату отправки email.

Внутреннее устройство одного слоя LSTM



Внутренний слой LSTM состоит из операций сложения +, умножения ×, сигмоиды σ и гиперболического тангенса tanh

Какие данные использует нейросеть


Чтобы научиться прогнозировать лучшую дату отправки email, нейросеть анализирует набор исторических данных. Мы передаем в последовательность время, прошедшее между действиями, и 9 видов токенов:
  • покупка дешевого товара,
  • покупка товара средней цены,
  • покупка дорогого товара,
  • просмотр дешевого товара,
  • просмотр товара средней цены,
  • просмотр дорогого товара,
  • получение письма,
  • открытие письма,
  • клик по любому объекту внутри письма.

Так выглядит типичный пример входной последовательности:

(view_medium, 0.5, view_cheap, 24, buy_cheap)

Пользователь с такой последовательностью посмотрел товар средней цены, через полчаса посмотрел дешевый товар, а еще через сутки решился и купил дешевый товар.

Последние пять действий пользователя — целевая переменная. Их нейросеть и научилась предсказывать.

Какую архитектуру нейросети применяли


Первые попытки обучить нейросеть были неуспешны: она переобучалась и всегда предсказывала только отправку письма, а не другие действия, например вероятность открытия письма или покупки. Так как клиенты чаще получают письма, чем открывают их или что-то покупают, «получение письма» — самый частый токен. Нейросеть получала по метрикам неплохие результаты, хотя реальный результат был негативным. Ведь нет смысла в алгоритме, который всегда говорит, что клиент получит письмо — и ничего больше.

Например, есть входная последовательность из трех токенов «получение письма» и одного «покупка товара». Нейросеть обрабатывает её и предсказывает последовательность с четырьмя токенами " получение письма". В 3 из 4 случаев она угадает, и клиент действительно получит письмо, но в таком предсказании нет смысла. Главная задача — предугадать, когда клиент откроет письмо и совершит покупку.

После проверки нескольких архитектур и способов обучения мы нашли то, что работает.

Как и обычно для Seq2Seq-моделей, сеть состоит из двух частей: энкодера и декодера. Энкодер небольшой и состоит из LSTM и embedding-слоев, а вот в декодере, помимо этого, используется self attention и dropout. В обучении мы используем teacher forcing — иногда даем предсказание сети в качестве входных данных для следующего прогноза.

Энкодер кодирует входную последовательность в вектор, который содержит важную, по мнению сети, информацию о действиях пользователя. Декодер, наоборот, декодирует полученный вектор в последовательность — это и есть предсказание сети.

Получение предсказания с помощью LSTM-сети




Время обучения: модель обучалась около суток на Tesla V100 и по завершении обучения получила ROC-AUC 0.74.

Как LSTM-модель работает с реальными данными (инференс)


Чтобы применить модель для какого-нибудь пользователя и узнать, стоит ли отправлять ему письмо, соберем из его последних действий вектор и прогоним через нейросеть. Предположим, что ответ нейросети был такой:

(email_show, 10, email_open, 0.5, view_cheap, 0.5 view_medium, 15 buy_medium)

Модель предсказывает не только действия, но и сколько времени пройдет между ними. Обрежем все события, которые произойдут позже, чем через сутки. Их мы будем обрабатывать на следующий день, потому что за это время может появиться новая информация о действиях клиента, которую нужно будет учесть. Получим следующую последовательность:

(email_show, 10, email_open, 0.5, view_cheap, 0.5)

В последовательности есть токен просмотра, поэтому пользователю сегодня отправится письмо.

Важно отправлять письмо, только если есть токен просмотра или покупки, а не получения письма, чтобы сеть не повторяла триггерные рассылки, которые запомнила ранее. Например, если не учитывать просмотр и покупки, можем получить последовательность только с токенами получения письма. И тогда сеть продублирует триггерные настройки маркетолога вместо того, чтобы предсказать открытие письма или покупку:

(email_show, 10, email_show,15, email_show, 0.5)

Как оценивали результат


Чтобы проверить работу модели, провели AB-тесты. В качестве baseline использовали алгоритм, который считает среднее время между покупками пользователя и отправляет email, когда это время проходит. Одна половина пользователей получила письма, исходя из решений baseline, другая — по предсказаниям модели. AB-тесты проводили с клиентской базой зоомагазинов Бетховен и Старая ферма.

Тест длился две недели и достиг статистической значимости. Нейросеть научилась находить в 23 раза больше пользователей, которым стоит отправить email, при этом в процентном соотношении open rate упал всего на 5%, а число открытий в абсолютных числах выросло в 17 раз.

Результат AB-теста для LSTM-модели нейросети и выводы




Так, эксперимент с нейросетью вместо алгоритма оказался успешным. LSTM-модель нейросети стала подходящим инструментом для предсказания лучшей даты отправки email. Мы на своем опыте поняли, что не нужно бояться использовать нестандартные модели для решения тривиальных задач.

Сергей Юдин, ML-разработчик, автор