Как мы учили машину говорить с миллионами людей +2



Маркетинг в Х5 – это большие объемы данных. «Пятёрочка», например, отправляет более 30 млн коммуникаций каждый месяц, и это число постоянно растёт. Одному клиенту одновременно можно отправить несколько предложений, и важно правильно выбрать, какие именно. Акции магазина должны быть интересны клиенту и экономически обоснованы для ритейлера. В этом посте расскажем, как мы начали определять действительно востребованные предложения с помощью машинного обучения и исключать эффект спама.



Над тем, чтобы улучшить коммуникации с покупателями «Пятерочки», «Перекрестка» и «Карусели», в Х5 Retail Group работает большая команда.

Сейчас для поддержания этой системы требуется работа десятков людей и систем: аккуратное накопление данных в Oracle, анализ данных и настройка кампаний в SAS, настройка правил начисления бонусов в Comarch. Аналитики каждый день принимают решения о том, как подобрать наиболее релевантное на данный момент предложение, выбирая из огромного множества вариантов, основываясь на исторических данных о результатах акций. Работаем и над тем, чтобы коммуникации были по адресу и не имели ничего общего со спамом.

Мы задумались, как перевести процесс подбора актуального для клиента предложения в автоматический режим с использованием машинного обучения, чтобы при этом:

  • учитывалась накопленная информация по клиентам и прошлым кампаниям
  • система сама училась на новых данных
  • планирование было просчитано больше, чем на один шаг вперед

Так мы пришли к реализации самоорганизующихся систем и началась эпоха разработки системы Reinforcement Learning в X5.

Немного о Reinforcement Learning
*RL (Reinforcement Learning) — это обучение с подкреплением. Один из способов машинного обучения, в ходе которого испытуемая система (агент) обучается, взаимодействуя с некоторой средой.

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



Если предположить, что:

  • агент – клиент
  • действие – коммуникация с клиентом
  • состояние – состояние (Набор метрик) клиента
  • функция цели – дальнейшее поведение клиента (например, увеличение выручки или отклик на целевую кампанию)

…то описанная система должна решать поставленную цель и агенты (клиенты) сами будут выбирать себе действия (вознаграждения и кампании) ради их комфорта и осмысленных отношений с магазином.

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

Про инструменты:


Про применение RL к аналогичным задачам в маркетинге:


Но все они не подходили под наш случай или не внушали доверия.

Этап 1. Прототип решения

Поэтому мы решили разработать свой подход.

Чтобы минимизировать риски и не попадать в ситуацию, когда долго разрабатывали систему без реального использования, а потом она в итоге не взлетела, мы решили начать с прототипа, который не реализовывал бы метод RL в чистом виде, но имел понятный бизнес-результат.

В основе базовых реализаций обучения с подкреплением лежит матрица «состояние-действие-результат», обновляемая каждый раз при получении новой информации от среды.

Чтобы уменьшить пространство состояний, в рамках прототипа был сделан переход от клиента к сегменту, где все клиенты были разделены 29 групп на основе параметров:

  • средний чек
  • частота покупок
  • стабильность корзины
  • наполнение корзины
  • лояльность клиента (доля количества недель с покупками к количеству недель, в течение которых человек участвовал в программе лояльности магазина)

Таким образом, задача свелась к обучению матрицы следующего вида:



На пересечении матрица должна была заполняться значением функции цели.

В первой версии алгоритма в качестве функции цели был выбран удельный отклик на кампанию.

Первый прототип мы разработали за пару недель на SQL (Oracle) и Python. У нас были исторические данные по коммуникациям, поэтому мы смогли частично заполнить матрицу предполагаемым весом пар «сегмент-предложение». К сожалению, оказалось, что для некоторых пар не хватает данных. Нас это не остановило, мы жаждали боевых испытаний.

Департамент маркетинга «Пятерочки» доверил нам данные о двух миллионах клиентов на 10 недель экспериментов. На это время эти покупатели были отключены от всех остальных коммуникаций. Половину клиентов мы определили в контрольную группу, на остальных группах тестировали прототип.

Теория RL говорила нам о том, что мы должны не только выбирать наилучшее действие, но и непрерывно продолжать обучение. Поэтому каждый раз на небольшом проценте клиентов мы тестировали случайную кампанию. Соответственно, остальные клиенты получали оптимальное предложение (лучшая кампания). Таким образом, мы получили свою реализацию ? – жадного метода выбора наиболее оптимального предложения.



После трех запусков системы стало ясно, что выбор лучшей кампании по отклику не приводит к увеличению удельного РТО на кампанию (именно этот показатель является главным мерилом эффективности любой целевой кампании в любой организации).

Изменив функцию цели (а значит, и алгоритм выбора лучшей кампании) непосредственно на инкрементальное РТО, мы узнали, что самые успешные с этой точки зрения кампании являются убыточными с точки зрения ROI.

Так к восьмому запуску системы мы поменяли функцию цели в третий раз, теперь на ROI.

Выводы из разработки прототипа

Ниже приведены графики эффективности по основным показателям:

  • Чистый отклик клиента на коммуникацию
  • Инкрементальное РТО
  • Маржинальность







Можно заметить, что к последнему запуску эффективность прототипа (по инкрементальному РТО) превзошла средний результат кампаний, запускаемых аналитиками, а если рассматривать только “лучшие” сегменты и предложения, то разница — больше чем в два раза.

На будущее мы сделали для себя следующие выводы:

  1. Заранее проговорить с бизнесом KPI может быть недостаточно. KPI бизнес-заказчика тоже меняются. (Так мы перешли от РТО к маржинальности).
  2. Косвенные цели (в нашем случае отклик) — это хорошо, но рано или поздно вас попросят учитывать непосредственные показатели эффективности.
  3. Найдены лучшие пары сегмент-кампания, которые показывают стабильно хорошие результаты. Эти кампании были запущены на всей базе и регулярно приносят прибыль.

Итого:

  1. схема работает
  2. стоит учитывать затраты клиента (победа по иРТО не обеспечила роста ROI)
  3. хотелось бы учитывать историю откликов
  4. теперь не так страшно переходить на уровень клиента

Этап 2. Допиливаем систему

Вдохновившись результатами первого этапа, мы решили доработать систему и внести следующие функциональные улучшения:

1) перейти от выбора предложения сегменту клиентов к выбору предложения индивидуально для клиента, описывая его набором метрик:

  • Флаг отклика на последнее предложение
  • Отношение РТО клиента за 2 недели к РТО за 6 недель
  • Отношение количества дней с последней покупки к среднему расстоянию между транзакциями
  • Число недель с момента последней коммуникации
  • Отношение суммы использованных бонусов за месяц к сумме РТО за месяц
  • Достижение цели на предшествующих двух неделях
  • Флаги откликов на предложения с разными типами вознаграждений
  • выбирать не 1, а цепочку из двух последующих кампаний

2) уточнить функцию цели, добавив в нее помимо отклика рост РТО :).

Теперь, выбирая индивидуальное предложение для клиента, мы ориентируемся на ожидаемое значение целевой функции Q1:

  • Q = 1, если клиент откликнулся на кампанию и его 2-х недельный РТО на протяжении эпизода вырос на m%
  • Q = 0, если клиент НЕ откликнулся на кампанию и его 2-х недельный РТО на протяжении эпизода вырос на m%
  • Q = 0, если клиент откликнулся на кампанию и его 2-х недельный РТО на протяжении эпизода вырос МЕНЕЕ, чем на m%
  • Q = -1, если клиент НЕ откликнулся на кампанию и его 2-х недельный РТО на протяжении эпизода вырос МЕНЕЕ, чем на m%

Сейчас пилотирование второго подхода в самом разгаре, но мы уже превзошли предыдущие результаты.

Что дальше

К счастью, результаты радуют не только команду внедрения и разработки, но и бизнес-заказчиков, поэтому в будущем, помимо функциональных доработок, планируется создать аналогичные системы, работающие для real-time- и онлайн-маркетинга.

Кроме того, внимательный читатель заметит, что до настоящего момента мы не использовали RL в чистом виде, а только его концепцию. Тем не менее, даже при таком упрощении мы наблюдаем положительный результат и теперь готовы двигаться дальше, усложняя наш алгоритм. Своим примером мы хотим вдохновить других идти «от простого к сложному».

Редакция Хабра X5 благодарит компанию Glowbyte Consulting за помощь в подготовке поста. Пилот выполнен объединенной командой из шести специалистов «Пятерочки» и Glowbyte.

Кстати, мы ищем менеджера по развитию продуктов Big Data, специалиста по работе с данными, специалиста по аналитике и менеджера программ лояльности.

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (7):

  1. VaalKIA
    /#19379324 / +4

    Статья написана так оптекаемо, что вообще не понятно о чём. Если это о купонах, к чекам в пятёрочке, то у вас полный провал: если раньше я хотя бы оставлял ваши бешенные чеки что бы в конце недели закупиться на пару тысяч и его обналичить, получив балы, то в последующем просто выкидывал, потому что купить на 30% больше уже завтра, это за гранью, я не для того хожу в магазин, что бы на следующий день нужно было купить ещё больше. Дальше вообще пошли какие-то непонятные акции, которые неделями меня долбят купить пиво или молочку для детей, хотя я ни то ни другое не пью и никогда не покупаю, так что стал экономить время, не дожидаясь печати купона, который у вас печатается со значитальной задержкой (вот бы что вам оптимизировать). Короче, спасибо, буду знать теперь, что это ИИ.

    • X5RetailGroup
      /#19379354 / -1

      Пилот касался SMS- и e-mail-рассылок. За предложение о купонах спасибо )

      • fedorro
        /#19379538

        Да, купоны бесполезные. Пару раз попытался воспользоваться, но то акция-не акция, то срок прошел — так ни разу и не вышло, теперь тоже их не дожидаюсь, и судя по тому что я вижу на кассе — явление массовое)

        • SergeyKuznetsov
          /#19380446 / -1

          fedorro, здравствуйте! Я представитель «Пятёрочки» в соцсетях. Мы работаем над нашей системой лояльности и делаем её лучше для вас! Расскажите, пожалуйста, о последнем подобном случае с проблемой применения купона мне в ЛС. Разберёмся, почему не получилось им воспользоваться.

          • fedorro
            /#19381082 / +2

            В общем я уже всё и так описал — куча условий: дата начала действия, дата окончания действия, следующая покупка, необходимость покупать определенные товары или определённых категорий и т.д. ради бонусов на 20 р. — вместо этих игр я лучше что то полезное сделаю и больше заработаю. Поэтому я давно уже их не беру, просто поглядываю иногда.

  2. azmar
    /#19380142

    Я не маркетолог, и в акциях пятерочки не участвую, но мне кажется, что если хочется больше продавать в оффлайновых магазинах вроде пятерочки, нужно не спамить клиентам предложениями продуктов по лучшим ценам, а сделать так, чтобы в магазин было приятно заходить. А в пятерочке обычно дурно пахнет, половина пластиковых корзинок сломано и в узких проходах (которые еще иногда завалены коробками с товаром) иногда сложно протиснуться человеку даже средней комплекции.

    По этой причине, какими бы точно таргетированными не были предложения от пятерочки, я просто пойду в другой магазин, в котором, может быть, будет на 5-10% дороже, но зато мне не придется протискиваться между коробок с бананами второй свежести и проросшей картошкой а потом стоять в очереди в единственную работающую кассу.

    • SergeyKuznetsov
      /#19380456 / -2

      azmar, здравствуйте! Пожалуйста, свяжитесь со мной в ЛС и расскажите о последнем посещении магазина нашей сети, когда вы столкнулись с описанными неудобствами. Укажите его адрес, дату и время визита, а также ваш контактный телефон. Разберёмся!