Рубрика развивается при поддержке

Решаем проблему атрибуции в digital-маркетинге при помощи машинного обучения

Кажется очевидным: маркетологи должны знать, какие из их маркетинговых инвестиций действительно сработали. Однако сделать это на практике оказывается не всегда так просто, как это звучит. Вот почему рекламная «атрибуция» становится все более незаменимой для успешной работы маркетинговых команд.

В закладки
Аудио

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

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

Среди этих источников могут быть:

  • органический поиск;
  • контекстная поисковая реклама;
  • реклама в социальных сетях;
  • партнерские сети;
  • ретаргетинг;
  • почтовая рассылка;
  • и т.д.

Убедиться в этом можно посмотрев отчет Конверсии > Многоканальные последовательности > Анализ путей конверсии в Google Analytics:

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

Атрибуция в маркетинге — это набор правил, по которым определяется вклад каждого рекламного или маркетингового канала в итоговую целевую конверсию

Какие бывают виды атрибуции

Все модели атрибуции условно можно разделить на два типа:

  • одноканальные
  • многоканальные
Стандартные модели атрибуции​

Стандартные одноканальные модели атрибуции

Исходя из своего опыта я вижу, что многие компании до сих пор используют first-/last‑click модели атрибуции. Модель first‑click (первое касание) присваивает 100% вклада первой точке касания потребителя (первому переходу), в то время как модель last‑click присваивает 100% вклада последней точке касания, приводящей к конверсии.

Использование модели last-click (в том числе и ее вариации last-non-direct-click) означает, что вы игнорируете раннюю активность в верхней части воронки, а вместо этого сосредотачиваетесь на каналах нижней части воронки, таких как брендовый поиск и ретаргетинг. Без придания ценности каналам верхнего уровня, весь потенциал ретаргетинга очень быстро будет исчерпан.

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

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

Стандартные многоканальные модели атрибуции

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

  • Большинство многоканальных моделей атрибуции полны эвристики - правил, заданных людьми (пусть и опытными). Например, в линейной модели атрибуции (Linear) одно и та же ценность присваивается каждому каналу; в U-shape модели наибольшее значение присваивается первому и последнему каналу, а что осталось делится между оставшимися. Эти модели атрибуции основаны на алгоритмах, которые люди придумали для отражения реальности, но в действительности реальность гораздо сложнее.
  • Стандартные мультиканальные модели атрибуции, даже такие как Data-Driven, учитывают только факт перехода на сайт. Поэтому, подобные модели не устойчивы к фроду (например, подмене utm-меток).
  • Все модели атрибуции всегда "смотрят" в прошлое, все они являются ретроспективными. Они сообщают нам, что произошло в прошлом, в то время как в действительности мы хотим знать, как действовать в будущем;

Приведу небольшой пример. На изображении ниже представлена статистика по двум кампаниям, запущенным в ноябре:

CRR (Cost Revenue Ration) на русском звучит как ДРР (Доля Рекламных Расходов)

Исходя из данных очевидно, что November Offer 1 в 2 раза эффективнее с точки зрения ДРР в сравнении с November Offer 2. Если бы мы знали это заранее, мы могли бы выделить больше бюджета в Offer 1, уменьшив вложения в Offer 2. Однако, повернуть время вспять, увы, невозможно.

Предположим, что декабре мы планируем запустить совершенно новые рекламные кампании. Очевидно, что использовать знания, накопленные в ноябре, будет невозможно:

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

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

Как машинное обучение изменило подход к атрибуции

Машинное обучение позволяет изменить подход к атрибуции с алгоритмического, где Данные + Правила = Результат (не всегда желаемый), к предиктивному, где Желаемый результат + Данные = Правила.

В действительности, даже само определение атрибуции очень хорошо ложится на принцип работы supervised машинного обучения:

Именно поэтому, мы решили построить атрибуцию, которая:

  • Будет устойчива к фроду;
  • Сможет использовать накопленные в прошлом знания;
  • Сможет справедливо распределять вклад между множеством каналов (без жестко заданных заранее правил и коэффициентов);
  • Будет учитывать не только переходы на сайт и UTM-метки, но и реальное поведение пользователя на сайте;

Ниже я расскажу в деталях, по какому принципу устроена работа нашей атрибуции.

Как работает поведенческая атрибуция SegmentStream

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

Давайте разберем пример, изображенный на картинке выше:

  • Пользователь впервые пришел на сайт из медийной кампании Facebook. Мы предсказали вероятность купить для этого пользователя в начале сессии, и она оказалась равна 10%. Почему вероятность не равна нулю? Потому что помимо поведенческих данных есть также контекстные данные, такие как регион, браузер, тип устройства, разрешение экрана, день недели и т.д., основываясь на которых у пользователя всегда будет какая-то не нулевая вероятность купить.
  • В течение сессии пользователь просмотрел несколько товаров, добавил какие-то товары в корзину, посмотрел страницу с контактами, после чего покинул сайт без покупки. Мы предсказали вероятность купить в конце сессии, и она оказалась равна 25%.
  • Это означает, что сессия, которую инициировала кампания из Facebook продвинула вероятность купить для данного пользователя с 10% до 25%. Поэтому, мы присваиваем кампании Facebook вклад, равный 15%.
  • Далее, через 2 дня пользователь вернулся на сайт после клика на ретаргетинг баннер Criteo. Во время новой сессии вероятность купить не сильно изменилась (возможно не было нужного размера, или пользователь не изменил своего решения). В соответствии с моделью, вероятность купить увеличилась всего на 2%. Таким образом, Criteo будет присвоен вклад 2%.
  • и т.д.

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

Ниже я расскажу, как построить подобную атрибуцию.

Как реализовать поведенческую атрибуцию при помощи машинного обучения

Шаг 1: Сбор данных о поведении пользователей

При помощи SegmentStream JavaScript SDK мы собираем абсолютно все взаимодействия пользователя с сайтом без каких-либо лимитов и отправляем их напрямую в облачное хранилище Google BigQuery для дальнейшего анализа.

Почему Google BigQuery? Это один из самых популярных инструментов для облачного хранения данных на сегодняшний день. В первую очередь это связано с тем, что инструмент является очень мощным, функциональным, недорогим и простым в использовании. Кроме того, Google BigQuery можно использовать не только для сбора данных и построения сквозной маркетинговой аналитики, но для построения атрибуции на основе нелинейного поведения пользователей при помощи машинного обучения.

Похожий результат можно достигнуть, если у вас есть Google Analytics 360, позволяющий делать выгрузку в Google BigQuery на уровне хитов. Однако даже там есть лимит на 500 событий за сессию, который очень легко превысить.

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

  • Просмотры фотографий;
  • Клики на фотографии;
  • Проверка наличия размера;
  • Выбор необходимого размера;
  • Прочтение подробной информации о товаре;
  • Просмотр размерной сетки;
  • Добавление в избранное;
  • и т.д.

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

​Пример разметки для поведенческого трекинга

С точки зрения стандартной e-commerce воронки, переход на карточку товара с просмотром одной фотографии и переход на карточку товара с просмотром всех фотографий будут эквивалентны. В реальности же, это два кардинально разных просмотра карточки товара с точки зрения поведения пользователя и его вовлеченности!

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

Шаг 2: Майнинг фич

Использование машинного обучения невозможно без предварительного определения, что будет являться фичами, на которых обучается модель (features), и что будет являться результатом предсказания (label). Для обучения мы решили собирать все возможные фичи следующих типов:

  • Recency features - как давно было совершено действие или микро-конверсия в рамках выбранного временного окна;
  • Frequency features - как часто совершалось действие или микро-конверсия в рамках выбранного временного окна;
  • Monetary features - ценность действий или микро-конверсий в рамках выбранного временного окна;
  • Contextual features - информация об устройстве, браузере, регионе, разрешении экрана, дне недели и т.д.;
  • Feature permutations - формирование нелинейных зависимостей между описанными выше типами фич.

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

Шаг 3: Обучение предсказательной модели

В темные времена до появления Google BigQuery ML, обучение модели машинного обучение было довольно сложной data science и data engineering задачей, особенно если необходимо также автоматизировать постоянное переобучение модели на новых данных.

Необходимо было постоянно перемещать данные из хранилища к себе на компьютер (или куда-то в облако), чтобы потом при помощи Tensorflow, Jupiter Notebook, Python или R обучить модель или делать предсказания, а затем результаты снова загружать в базу данных:

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

И все эти сложные процессы реализовываются на доступном любом аналитику SQL языке.

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

CREATE OR REPLACE MODEL `projectId.segmentstream.mlModel` OPTIONS ( model_type = 'logistic_reg') AS SELECT features.* labels.buyDuring7Days AS label FROM `projectId.segmentstream.mlLearningSet` WHERE date BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'

И все! Через несколько минут у вас будет обученная модель! И самое прекрасное заключается в том, что эту модель можно переобучать ежедневно без каких-либо усилий.

Шаг 4: Построение модели атрибуции

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

Как уже было сказано выше, в основе атрибуции SegmentStream лежит информация о разнице между вероятностью совершения покупки в начале и конце сессии. В базе Google BigQuery все эти расчеты для каждой сессии будут выглядеть примерно следующим образом:

Где:

  • session_start_p - предсказанная вероятность купить в начале сессии;
  • session_end_p - предсказанная вероятность купить в конце сессии;
  • attributed_delta - пропорция вклада, присвоенная данной сессии;

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

Шаг 5: Подготовка финального отчета для маркетологов

Всё что остается — это агрегировать данную информацию в сводный отчет, где будут отображены:

  • Источники трафика (source/medium);
  • Расходы на каждый источник трафика (сost);
  • Сколько денег принес источник трафика (revenue), основываясь на нашей атрибуции.

Вертикальная черта в колонке Cost Revenue Ratio обозначает целевой для бизнеса ДРР (доля рекламных расходов). Таким образом, маркетологи могут легко увидеть неэффективные рекламные кампании/баннеры/ключевые слова, и принять решение по перераспределению рекламного бюджета для оптимизации ROAS и снижения ДРР.

Плюсы и минусы поведенческой атрибуции SegmentStream

Плюсы:

  • В отличие от алгоритмических решений мы можем обрабатывать сотни и тысячи различных фич;
  • Маркетологи и аналитики имеют возможность добавлять любое количество фич, специфичных для доменной области конкретного бизнеса;
  • Предсказания имеют очень высокую точность (до 95% ROC-AUC);
  • Возможность переобучать модель хоть каждый день, что позволяет адаптироваться под сезонность и изменения UI/UX сайта;
  • Возможность выбирать любую цель для оптимизации (label): вероятность купить в течение Х дней, LTV, вероятность купить в текущей сессии, вероятность вернуться на сайт в будущем и стать постоянным пользователем (для паблишеров) и.д.
  • Нет необходимости определять какие-либо правила вручную.

Минусы:

  • Необходимо настроить продвинутый трекинг поведенческих событий на сайте или в мобильном приложении;
  • Чтобы обучить модель нужно иметь как минимум 4-8 недель исторических данных;
  • Не применимо для сайтов с очень маленьким трафиком;
  • Возникают дополнительные расходы на обучение/переобучение модели;
  • Нет возможности анализировать post-view конверсии, где не было перехода на сайт.

Вместо вывода

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

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

Более техническая версия моей статьи на CXL: https://cxl.com/blog/attribution-google-bigquery-ml/

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Constantine Yurevich", "author_type": "self", "tags": [], "comments": 13, "likes": 32, "favorites": 55, "is_advertisement": false, "subsite_label": "marketing", "id": 108652, "is_wide": false, "is_ugc": true, "date": "Mon, 02 Mar 2020 11:30:23 +0300", "is_special": false }
Простой коллтрекинг
для малого бизнеса
Новый алгоритм с
настройкой в два клика
Узнать больше
Коллтрекинг
без боли
Простые настройки
Умный алгоритм
Чистая аналитика
Подробнее
Простой коллтрекинг
для малого бизнеса
Знание источников продаж
постичь ты сможешь
познать
Простой коллтрекинг
для малого бизнеса
Знание источников продаж
постичь ты сможешь
постичь
(function(d, w) { var analyticsCategory = "CoMagic branding"; var sendEvent = function sendEvent(label) { var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "Click"; var value = "" .concat(analyticsCategory, " \u2014 ") .concat(label, " \u2014 ") .concat(action); console.log("Analytics: %c".concat(value), "color: #E87E04"); if (window.dataLayer !== undefined && analyticsCategory) { window.dataLayer.push({ event: "data_event", data_description: value }); } }; var rand = function rand(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; }; var id = rand(1, 4); var head = document.querySelector(".comagic-branding-head"); head.setAttribute("data-comagic", id); sendEvent(id + " — Header", "Init"); head.addEventListener("click", function() { sendEvent(id + " — Header"); }); var branding = document.querySelector( '.comagic-branding[data-comagic="' + id + '"]' ); branding.style.display = "block"; sendEvent(id + " — Footer", "Init"); branding.addEventListener("click", function() { sendEvent(id + " — Footer"); }); })(document, window);
0
13 комментариев
Популярные
По порядку
Написать комментарий...
3

Rocket science! Очень круто!

Ответить
3

Да, статья весьма достойная!

Ответить
1

Добавлю в избранное!

Ответить
3

Привет! Классная статья, спасибо за новое виденье подхода к аттрибуциям. Но есть несколько вопросов:
1) Получается модель обучается на сущностях из пользователей, у которых в фичах отражается вся их история с начала появления на сайте: сколько было сессий, какие события и в каком количестве были отправлены, сколько проходило времени между сессиями, Соц. Дем, Гео, платформа девайса итд. В Лейблы, соответственно, - оставил пользователь заявку или нет (Нет - например, если он не оставил еще заявку и не появлялся ни разу на сайте уже месяца 3).
Таким образом, модель оценивает количество «полезных» действий в каждой сессии; такой лидскоринг во имя аттрибуции:)
Так?
2) Помимо логистической регрессии ещё используете какие-нибудь модели?

Ответить
2

1) Так
2) Использовали, но перестали. Это как из пушки по мухам стрелять.

Ответить
2

Отличная статья, все по полочкам.

Ответить
–1

Я тогда ничего не найду.

Ответить
2

В той же контекстной рекламе эти самые "паттерны" очень сильно зависят от ключей "купить машину" и "купить ВАЗ-2001 в Нижнем Новгороде авито не старше 50 лет" - просто 2 совсем разных паттерна. И без анализа на каком-то низовом уровне - ключей - говорить об анализе кампании, формировании на этом паттерна и его использования при предсказании результатов кампаний совсем на других ключах - невероятно :)
Модель атрибуции - это всегда про ретроспективу. Как разложить статистику так, чтобы вытащить оттуда максимально много пользы. Бизнесу нужно понимать не только, какой канал "недооценён", но и спуститься в этом канале - если говорим про контекст - до ключа.  
Возможно, я немного зануден(

Ответить
1

интересно почитать ;)

Ответить
1

классная статья! надо будет на своем проекте реализовать часть идей.

жаль, что вы не работаете с бюджетами меньше 3х млн рублей в месяц.

Ответить
0

Статья хорошая, есть НО: "Предположим, что декабре мы планируем запустить совершенно новые рекламные кампании. Очевидно, что использовать знания, накопленные в ноябре, будет невозможно:

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

Именно тут на помощь приходить машинное обучение на основе сырых данных, которое лежит в основе атрибуции, которую мы применяем в SegmentStream. "

Нет. Тут на помощь никто и ничто не придёт. Ваша модель показывает недооценённость - по её расчётам - того или иного ракламного канала. Предиктив тут нигде не зашит. На самом деле - увы и ах. Думаю, вы уже пилите условную "атрибуцию атрибуций"? ML'ку ML'ек, которая будет учиться на результатах других моделей и строить свою - предиктивную. Правда, там ещё неплохо бы сторонних данных добавить - цены, конкуренты и проч. - интересно было бы посмотреть.

Возвращаясь к текущей теме - посмотреть на свои расходы под другим углом - очень полезно, и при достаточно крупной группировке данных - даже будет "выхлоп". А вот для использования в будущем - максимум, поможет увеличить долю одного канала (каналов) за счёт других - не то, что даже в объявлении в условном Директе или кампании - канале! "Тонкая" настройка всё равно остаётся за конкретным специалистом, вносящим изменения руками.

Ответить
1

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

Ответить

Прямой эфир