Сегодня я представлю модель, которая объединяет RNN на основе внимания и полностью подключенную нейронную сеть для прогнозирования коэффициента конверсии клиента и распределения кредитов по разным цифровым каналам. Полный код можно найти здесь. Моя работа в основном вдохновлена ​​статьей, написанной Нин Ли и др.

Предварительные требования: базовые знания о RNN, ANN

ЗАДНИЙ ПЛАН

Недавно я работал над проектом Capstone, который требует от моей команды создания модели, которая могла бы справиться с типичной бизнес-проблемой: многоканальной атрибуцией. Его определение таково:

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

В этом конкретном сценарии (из-за соглашения о секретности я буду использовать вымышленные имена и показывать только часть данных) компании F нужна модель, которая может точно назначать веса цифровым каналам (например, электронная почта, реклама в социальных сетях и т. Д.) которые ведут продажи на своем веб-сайте электронной коммерции. Модель будет получать данные о потребителях за последние 6 месяцев с точки зрения их просмотра и демографического поведения из Adobe Analytics Data Feed.

Часть поддельных данных показана выше. Каждая строка представляет собой сеанс с VISITOR_KEY в качестве идентификатора cookie. Например, в первой строке клиент посетил веб-сайт электронной коммерции по ссылке результата обычного поиска (возможно, поиск в Google) и в итоге ничего не купил (без конверсии). Внутри скрытых данных содержится другая информация о клиентах (например, демография, сегментация и т. Д.).

ИНТЕРПРЕТАЦИЯ ПРОБЛЕМЫ

Расчет атрибуции очень много значит для вашего бизнеса. «Имея более четкое представление о том, какие маркетинговые каналы приводят к конверсиям и продажам, вы можете лучше направлять свои маркетинговые деньги на наиболее эффективные каналы и лучше отслеживать взаимодействия на пути потенциального клиента».

Возьмем для примера конкретного клиента C. Вначале C могла откуда-то слышать компанию F, и она искала F в Google и перешла по ссылке на веб-сайт F 7/11/2018. На тот момент она ничего не покупала, кроме регистрации на сайте. Затем 13.07.2018 она перешла по ссылке в электронном письме, отправленном F, и снова зашла на сайт. 20 июля она снова перешла на веб-сайт после платного поиска, а 31 июля она просмотрела рекламу в определенных средствах массовой информации, к этому времени она, наконец, заключила сделку с сайтом F.

Вопрос в том, если у F есть определенная сумма маркетингового бюджета, как F распределит эти деньги по этим цифровым каналам? Какой канал важнее? Влияет ли профиль клиента на его взаимодействие с этими каналами и даже на окончательный коэффициент конверсии?

МОДЕЛИРОВАНИЕ

На рынке существует несколько моделей, нацеленных на эти вопросы: линейная модель (распределяет веса поровну), первое взаимодействие (отдаёт все первому каналу), последнее взаимодействие (все до последнего канала), цепь Маркова ( вероятностная модель) и т. д. Но каждая из этих моделей имеет недостатки и не может показать полную картину (некоторые из них не учитывают последовательные характеристики пути канала, некоторые не учитывают профиль клиента и т. Д.).

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

По сути, модель должна быть способна обрабатывать как данные канала (с последовательным шаблоном), так и другие данные профиля клиента.

данные обработки

После некоторой обработки данных часть данных пути и данные профиля клиента перечислены ниже (из-за соглашения о конфиденциальности я не буду отображать все данные):

Затем, используя приведенный ниже код, данные каналов векторизуются и дополняются квалифицированными входными данными для модели RNN той же длины. Данные покадровой съемки масштабируются и будут использоваться в измененной функции softmax на слое "Внимание".

РНС с вниманием

  1. LSTM для захвата последовательного шаблона

Давайте посмотрим на средний столбец обработанных данных на рисунке 4. Похоже, что каналы для определенного пути клиента не изолированы, а связаны друг с другом в последовательности. Вы не можете быть обязаны всем успешным преобразованием последнему каналу (например, мультимедиа в приведенном выше случае), но игнорируете влияние предыдущих. В этом плане нетрудно придумать модель RNN (рекуррентная нейронная сеть), которая широко используется для управления последовательными задачами данных, такими как обработка естественного языка.

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

Проще говоря, как показано ниже, модель RNN вводит здесь параметр a (скрытое состояние), чтобы взять на себя роль, которая может запоминать информацию предыдущего шага. Но есть некоторые проблемы, касающиеся базовой модели RNN: например, когда есть больше шагов, трудно распространяться назад и влиять на веса более ранних слоев (исчезающий градиент). Как следствие, появился LSTM.

LSTM - это сокращение от модели долгой краткосрочной памяти. Я не буду здесь много говорить, но, возможно, напишу еще одну статью, чтобы объяснить эту модель, а также всю математику и коды, лежащие в ее основе. По сути, ячейка LSTM представляет собой комбинацию входного элемента, выходного элемента и элемента забывания. Эти три ворот будут регулировать, сколько нужно запоминать и сколько забыть о предыдущей информации, чтобы контролировать поток информации в ячейку и из нее.

Переменные пути в качестве входных данных отправляются на уровень LSTM и получают выходные данные для каждого из них.

Архитектура LSTM способна фиксировать последовательность данных каналов, однако не имеет возможности присвоить им кредиты.

Механизм внимания для присвоения баллов

Когда я изучал машинный перевод, я начал встречаться с механизмом внимания, который решает проблему, заключающуюся в том, что Bleu Score будет падать, когда предложение станет длиннее, путем присвоения весов исходным словам предложения по их важности для перевода. Например, модель переводит предложение с китайского 他 爱 旅游 на английский он любит путешествовать. Когда дело доходит до слова любит, вектор внимания может иметь вид [0,2,0,79,0,05,0,05], что соответствует [他, 爱, 旅, 游]. Причина в том, что 1. означает любовь, поэтому слово имеет наибольший вес; 2. означает он в третьем лице единственного числа. Это повлияет на глагол любить на любит. Таким образом, он занимает второе место по весу. В процессе обучения модель узнает эти веса.

Итак, как выглядит слой «Внимание»? Ниже приведен один из этапов механизма внимания. Давайте посмотрим на правое изображение с более подробной информацией: a - это результат LSTM. Затем объединение a со скрытым состоянием s, ‹a, s›, при отправке входных данных к плотному слою и слою softmax; результатом слоя softmax является вектор с вероятностями (например, [0.2,0.79,0.05,0.05] в примере перевода), используемый для умножения соответствующей матрицы ‹a, s›, , тогда суммирование всех будет одним выходом context ‹t›. В контексте машинного перевода этот шаг будет повторяться для получения выходного вектора context с длиной, равной количеству переведенных слов, а затем эти выходные данные будут отправлены в другой LSTM. еще раз, чтобы получить окончательный результат перевода. Но в данном случае нам нужен только один выход из внимания.

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

Код этой части приведен ниже:

профиль клиента - слой внедрения + ИНС

Затем я построил простую полностью подключенную нейронную сеть для работы с данными клиентов. Эта часть довольно простая и представляет собой не более чем несколько плотных слоев. Единственное, о чем я хотел бы поговорить подробнее, - это встраивание.

Обычно люди сразу же кодируют категориальные переменные для нейронной сети, однако вместо этого я использовал слой внедрения. Проще говоря, встраивание - это процесс преобразования исходных переменных в новые вектор, размерность которого меньше, чем при однократном кодировании. Кто-то утверждает, что слой внедрения может фиксировать отношения между переменными, что легко понять, поскольку некоторые векторы более близки (сходство) с одни векторы, а не другие. Автор этой статьи упомянул, что встраивание захватывает это пространственное измерение, предоставляя последовательность поведения пользователя (в виде индексов) в качестве входных данных для модели и является используется кем-то для изучения поведения пользователей в МООК (Piech et al., 2016) и пути пользователей через интернет-магазин модной одежды (Tamhane et al., 2017). Эти статьи действительно стоит прочитать и изучить.

Код, который я использовал для встраивания данных профиля клиента, выглядит следующим образом:

Полная модель

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

Я случайным образом разделил данные на набор для обучения и тестирования, и модель достигла примерно 96% точности с показателем 0,98 AUC. на тестовом наборе без излишней тонкой настройки гиперпараметров. Сравнивая результат, достигнутый моделью цепи Маркова (0,86 AUC), модель Attention-RNN дала нам гораздо более высокую производительность при прогнозировании конверсии.

Как назначить кредиты каналам?

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

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

Определите наиболее влиятельный путь клиента

Основываясь на рейтинге вероятностей конверсии для каждого пути клиента, я перечислил N самых влиятельных путей. Код здесь:

РЕЗЮМЕ и РЕКОМЕНДАЦИИ

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

Я новый аспирант, активно ищу работу в области анализа данных или науки о данных. Вот мое резюме и не стесняйтесь обращаться ко мне! Большое спасибо!

Если вам нравится то, что вы читаете, нажмите кнопку ♥ внизу - как писатель, это означает весь мир. Также оставьте комментарий, если заметите какие-либо ошибки, которые я сделал. Любовь и мир