в 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)
В последовательности есть токен просмотра, поэтому пользователю сегодня отправится письмо.
Важно отправлять письмо, только если есть токен просмотра или покупки, а не получения письма, чтобы сеть не повторяла триггерные рассылки, которые запомнила ранее. Например, если не учитывать просмотр и покупки, можем получить последовательность только с токенами получения письма. И тогда сеть продублирует триггерные настройки маркетолога вместо того, чтобы предсказать открытие письма или покупку:
Как оценивали результат
Чтобы проверить работу модели, провели AB-тесты. В качестве baseline использовали алгоритм, который считает среднее время между покупками пользователя и отправляет email, когда это время проходит. Одна половина пользователей получила письма, исходя из решений baseline, другая — по предсказаниям модели. AB-тесты проводили с клиентской базой зоомагазинов Бетховен и Старая ферма.
Тест длился две недели и достиг статистической значимости. Нейросеть научилась находить в 23 раза больше пользователей, которым стоит отправить email, при этом в процентном соотношении open rate упал всего на 5%, а число открытий в абсолютных числах выросло в 17 раз.
Результат AB-теста для LSTM-модели нейросети и выводы
Так, эксперимент с нейросетью вместо алгоритма оказался успешным. LSTM-модель нейросети стала подходящим инструментом для предсказания лучшей даты отправки email. Мы на своем опыте поняли, что не нужно бояться использовать нестандартные модели для решения тривиальных задач.
Сергей Юдин, ML-разработчик, автор
iiwabor
Однажды я сделал пару покупок в известном онлайн магазине и потом меня завалили спамом. И что характерно — ни разу не прислали что-то реально нужное или интересное, только то, что самому магазину интересно было мне продать со «скидкой 70%.» И даже если бы эти письма приходили в точно рассчитанное нейросетью время и повысили эффективность рассылки в 8,5 раз — 8,5*0 = это все равно был бы ноль. А вот что стало в 23 раза больше целевых отправок email — охотно верю)
sshikov
Ну выж понимаете — их просто занесли в спам. При хорошем почтовом клиенте это так же просто, как отписаться, или даже проще.
imanushin
И это абсолютно рационально, хоть мне самому тоже не нравится. Нет смысла рекламировать то, что и так купят. Нет смысла продвигать то, что и так интересно. Идея рекламы (а значит, и рекламных рассылок, как частного случая) в том, чтобы продать товар, который просто так бы не купили (потому что просто не требуется, завышенная цена и пр.).
С учетом того, что соотношение стоимости/эффективности рекламы снизилось (из-за технологий во многом — таргетинг и пр.), сейчас выгоднее всего тратить деньги не на качество/клиентоориентированность, а на рекламу.
Так что Вы полностью правы — зачастую в рассылках совсем не то, что требуется клиенту на самом деле. Рассылки необходимы прежде всего для продавца, а не для покупателя (по моим наблюдениям).
sshikov
>И это абсолютно рационально
Чтож рационального в том, что вас в спам занесут? Вот скажем, я реально покупаю в одном магазине. И он меня легально спамит время от времени. Иногда глупо — например, присылая мне товары из моего же избранного, которые я все равно сейчас не куплю, потому что хотел бы — купил бы сразу. Избранное — оно вообще не для того, чтобы сразу купить. Но иногда присылают и что-то новенькое. Вот за второе я рассылку и терплю — а иначе бы просто отписался бы.
Ну т.е., зачем слать человеку заведомо одно гавно, ведь кроме цели продать может быть и цель намного более простая — чтобы от вас тупо не отписались.
imanushin
Не "вас", так как я не имею никакого отношения к автору поста, плюс я не занимаюсь рекламой ни прямо, ни косвенно. Я сужу о процессе как получатель вороха спама, не более.
Отписываться от рекламы будет, по моим предположениям, малое число людей. А уж в спам добавлять будет и того меньший процент, хотя бы потому, что для этого недостаточно действий в email клиенте на телефоне, а надо открыть сайт почты и там уже пометить письмо как "спам".
Я не уверен в предположении выше, однако, если оно верно, то спамеры действуют вполне рационально — они увеличивают прибыль с основной аудитории (путем грязных техник), однако, параллельно теряя малый процент от изначальных клиентов. Я подозреваю, что это выгодно для бизнеса, а потому мы имеем огромный поток рекламы и маркетинга.
Причем, с моей точки зрения, техническими средствами такую проблему не решить, так заваливать рекламой просто экономически выгодно. Однако, я знаю как минимум одно решение — в Германии, если я не ошибаюсь, человека нельзя по-умолчанию подписывать на подобные рассылки (таков закон). И раз в год человек должен изъявлять явное согласие получать их. Мне кажется, подобная мера должна снижать как минимум объем безусловного спама. Но есть и другая проблема, когда компания вместе с полезной рассылкой автоматически шлет ворох маркетинговой шелухи (как Вы и сказали). И вот я не знаю, как можно бороться с подобным, кроме жесткого регулирования (которое тоже имеет очевидные минусы).
sshikov
>Не «вас»
Я это прекрасно понимаю. Я тоже говорю с позиции тех, кто рассылает. Какой им смысл слать только то, что выгодно продать им, если это закончится понятно чем?
Мне кажется, вы как-то очень пессимистично оцениваете сложность занесения в спам. В моих клиентах, а это gmail, это делается одной кнопкой, что в вебе, что в мобильной версии. И это обычно намного проще, чем найти способ отписаться.
>потому мы имеем огромный поток рекламы и маркетинга
Возможно поэтому я его и не имею? Ну т.е. я бы сказал, что у меня на сегодня по двум ящикам, один из которых совсем мусорный, поток спама минимален. Ну т.е. одно письмо в неделю, например, или реже. Это какие-то единицы процентов, примерно.
imanushin
Они оставляют возле себя аудиторию, которая готова потреблять спам. Мне кажется, что эта аудитория достаточно большая. И эту аудиторию можно побудить на покупку. Похожим образом, по моим заметкам, зачастую действует и политическая пропаганда — не обязательно убедить всех, главное — убедить побольше колеблющихся.
Верю. А я не использую клиент GMail, так как у меня почтовые ящики на разных ресурсах. И мне надо сделать еще один шаг, чтобы отписаться. Мне казалось, что большинство людей сейчас не использует Gmail клиент на телефоне (даже если почта у гугла). И спамерам не надо дописаться до всех, главное — чтобы охват был бы побольше.
У меня аналогично. И это не меняет того, что спам сейчас выгоден (как минимум, автор данного поста им занимается, и, я думаю, прибыль присутствует). Как я уже написал, мне кажется, что вся выгода строится на том, что большинство людей не будет отписываться, отсюда и плюсы массовой отправки рекламы.
sshikov
>Они оставляют возле себя аудиторию, которая готова потреблять спам.
А, ну да. В такой постановке это логично.
>А я не использую клиент GMail, так как у меня почтовые ящики на разных ресурсах.
А он прекрасно умеет smtp и imap, вообще-то. Так что можно попробовать. Вся почта в одном месте имеет некоторый смысл.
imanushin
Не совсем. У меня в телефоне корпоративная почта и личная. Корпоративную почту я не могу отдавать никакому внешнему провайдеру, ибо такая политика безопасности компании (что довольно разумно).
На ноутбуке у меня нативный почтовый клиент, который мне удобнее. Да, это спорный вопрос и вкусовщина, но это так.
И ради блокирования назойливых рассылок я иногда открываю web интерфейс и "жалуюсь на спам". Но только если кнопка "отписаться" не сработала как надо (например — попросили залогиниться в личный кабинет).
thelightningseas Автор
Да, я понимаю, как раздражает, когда валится спам. Это как раз про те случаи, когда шлют наугад, лишь бы отправить и впарить. Мы, наоборот, работает над алгоритмами, чтобы спрос и предложение совпали и можно было показать клиенту ровно те товары, которые ему нужны именно сейчас.
Например, купил человек корм для собаки, наполнитель для кошки и всякие другие расходники. Мы понимаем, что через месяц ему понадобится ещё, ведь собаку и кошку надо кормить и ухаживать за ними. Направляем письмо-напоминалку. Если клиент нажмет на кнопку из письма, то сразу попадёт в корзину, где лежит весь предыдущий заказ. Ему не придётся ходить по сайту и собирать его заново. Кажется, польза и магазину, и клиенту.
А по поводу 8,5 раз. Речь идёт не об эффективности, а о реальном доходе. Если люди купили, значит товары были им нужны и мы вовремя их показали.