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

Как определить чистую прибыль от рекламной кампании?

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

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

Далее эта выборка делится на две группы примерно одинакового размера. Выбор человека в какую группу также случайный.

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

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

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

Компания получает доход от покупки продукта лицом, получившим продвижение.

Вторая группа - это та, на которую компания не направляет продвижение. Мы называем эту группу контрольной группой.

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

Компания получила доход от покупки продукта человеком, который не получил продвижения.

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

Коэффициент увеличения отклика (IRR) определяет количество изменений в отклике или скорости покупок людей после получения продвижения.

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

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

Целью компании будет максимизировать оба этих параметра IIR и NIR.

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

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

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

Как компания может максимизировать IIR и NIR?

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

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

Как компания может решить, кому отправлять продвижение?

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

Учтите, что в остальную часть попадут те люди, которым рассылать продвижение не стоит. Это включает:

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

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

Давайте рассмотрим пример

Чтобы подробнее объяснить эту технику, я бы взял пример набора данных, предоставленного Starbucks.

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

Раньше он предоставлял этот набор данных кандидатам на работу в Data Scientist. Он содержит 120 000 строк с семью числовыми переменными с именами от V1 до V7 о каждом человеке, на которого они могут ориентироваться в своем эксперименте. В нем есть две дополнительные переменные, указывающие, получило ли лицо продвижение по службе и купила ли она продукт.

В случае Starbucks доход от каждой покупки составляет 10 долларов от обоих типов клиентов, которые получили и не получили рекламную акцию. Стоимость отправки продвижения одному человеку составила 0,15 $. Поэтому в этом сценарии формула для NIR переводится примерно так:

Чтобы оценить эффективность нашей модели прогнозирования, важно разделить доступный набор данных из результатов эксперимента на обучающий и тестовый набор данных. Набор тестовых данных нельзя использовать ни в какой форме для обучения модели. Его следует использовать только в конце обучения для оценки модели по некоторым заранее определенным параметрам, в нашем случае IIR и NIR. В случае, если мы хотим оценить нашу модель прогнозирования на этапе обучения, мы можем разделить наш обучающий набор данных на следующие два разделения: наборы данных для обучения и проверки. Модель может быть обучена с некоторыми гиперпараметрами в наборе обучающих данных и оценена на наборе данных проверки, чтобы выбрать оптимальные значения для гиперпараметров.

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

Первый подход

Поскольку компания заинтересована в отправке рекламной акции только тем людям, которые будут покупать продукт только после получения рекламной акции, мы можем определить новую двоичную переменную с именем Response, которая будет установлена ​​в True только в том случае, если у человека есть обе переменные, а именно Promotion, что означает получила ли она повышение по службе и Purchase, указывающее, купила ли она продукт, равны True. Для людей с остальными комбинациями значений переменных Promotion и Purchase значение, присвоенное Response, будет False. После обогащения набора данных этой новой целевой переменной можно использовать модель машинного обучения, такую ​​как Повышение регулярного градиента (XGBoost), для обучения набора данных, обрабатывая переменные от V1 до V7 как входные переменные и Response как выходные переменные.

Проверка и устранение дисбаланса в наборе данных

После определения этой новой переменной Response я решил проверить какой-либо дисбаланс в присвоенных ей значениях. Как это обычно бывает с маркетинговыми кампаниями, когда лишь небольшой процент людей, получающих продвижение по службе, решает действовать в соответствии с ним. В этом наборе данных соотношение между количеством людей, которым присвоены True и False значения целевой переменной Response, составляет примерно 1: 116. Это указывает на огромный дисбаланс в наборе данных.

Если мы решим проигнорировать этот дисбаланс и приступить к обучению модели машинного обучения на этом наборе данных, она может достичь точности 0,99 из 1, просто передав результат Response переменной в False во всех случаях, которые она получает в тесте. Вывод о том, что модель действительно хорошо работает с точки зрения точности, может ввести в заблуждение. Конкретно такая модель вообще не сможет определить людей, которым компания должна направлять продвижение.

Есть несколько способов справиться с несбалансированным набором данных

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

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

Для этого набора данных я решил обучить Регулярную модель повышения градиента (XGBoost) на этом наборе данных, чтобы предсказать переменную Response для человека с атрибутами, указанными как V1 to V7 в качестве входных переменных.

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

Оценка F1, которую модель получила при проверке, составила около 0,028311, что считается довольно низким. Однако мы должны помнить, что истинная метрика оценки, которая имеет значение для нас в нашей проблеме, - это IIR и NIR.

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

На тестовом наборе данных эта модель достигла IIR = 0,0206 и NIR = 259,25.

Starbucks упомянула в описании набора данных, что их команда достигла IIR = 0,0188 и NIR = 189,45.

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

Подход 2

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

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

В нашем примере набора данных Starbucks мы будем использовать переменные V1 to V7 и Promotion в качестве входных переменных и Purchase в качестве целевой выходной переменной.

Вот как при таком подходе должно приниматься решение о продвижении по службе. Сначала мы рассчитываем вероятность того, что человек совершит покупку после получения рекламной акции и не получив ее, установив для входной переменной Promotion значение True или False соответственно и вычислив разницу между двумя вероятностями. Если разница окажется больше некоторого порогового значения, в этом случае мы можем отправить человеку продвижение. Значение порога может быть определено с использованием метода оптимизации гиперпараметров при использовании формулы NIR для расчета возвращаемого значения целевой функции, которая должна быть минимизирована, то есть оценка может быть -NIR.

В наборе данных соотношение Purchase значений переменных между значениями True и False составляет примерно 1:80. Это указывает на высокий дисбаланс в наборе данных. Я использовал технику SMOTE, чтобы передискретизировать класс меньшинства, чтобы привести оба класса к равному соотношению в наборе обучающих данных.

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

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

Я использовал эту модель, чтобы дать рекомендации по набору тестовых данных, и рассчитал, что IIR = 0,018826 и NIR = 98,30. Сравнивая это с тем, что, по заявлению Starbucks, его команда достигла значений IIR = 0,0188 и NIR = 189,45, мы можем сказать, что эта модель демонстрирует приличную производительность, но не такую ​​высокую, как подход 1 или модель, которую, по утверждениям, достигла Starbucks. Однако при ином сценарии проблемы это можно считать достойным вариантом для рассмотрения.

Подход 3, который можно попробовать

В литературе, посвященной продвинутому маркетингу, предлагается подход, основанный на двух моделях. При таком подходе мы обучаем две отдельные Purchase модели прогнозирования: одну для людей, получивших повышение, а другую - для тех, кто этого не сделал. Затем мы вычисляем разницу в вероятности для каждого человека, совершающего покупку с или без получения рекламной акции. Если разница достаточно велика, мы можем направить продвижение этому человеку. Однако некоторые предостережения в отношении этого подхода заключаются в том, что он обучает две отдельные модели, каждая из которых может иметь свою собственную шкалу вероятностей, сгенерированную на выходе, и ошибка в правильном прогнозировании возрастающей вероятности удваивается, поскольку мы используем две модели прогнозирования. Я оставил этот подход заинтересованному читателю (или себе) для того, чтобы когда-нибудь в будущем попытаться использовать этот набор данных.

Надеюсь, вы нашли этот пост поучительным.

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