вступление

Если вы являетесь предпринимателем, использующим онлайн-рекламу для продажи своего продукта, или если вы работаете в отделе маркетинга и ваш босс преследует вас, чтобы увеличить показатель кликабельности вашего объявления («CTR»), этот пост ДЛЯ ВАС.

Мы все знаем, что найти подходящее объявление никогда не бывает легко. Пока вы изо всех сил пытаетесь поднять свой CTR на 1%, почему другие фирмы делают так, чтобы достижение обалденного CTR выглядело так просто? Ответ в МАШИННОМ ОБУЧЕНИИ.

Тематическое исследование

Допустим, нам поставили задачу запустить новую кампанию, и мы получили от креативного отдела 5 разных рекламных дизайнов. Мы достигаем дилеммы, потому что все они выглядят впечатляюще! Итак, мы решили протестировать их всех.

Как и в любой маркетинговой кампании, мы начинаем с традиционного A/B-теста, чтобы определить, какая реклама лучше. Начинаем запускать все 5 объявлений по 2000 раз на объявление на 5000 человек. В конце теста мы выбираем объявление с самым высоким CTR. Однако все это очень неэффективно. Запуск остальных 4 объявлений увеличил наши маркетинговые расходы. Кроме того, проведение A/B-тестирования на оптимальном количестве людей (теоретически) нецелесообразно из-за затрат, связанных с остановкой теста на полпути только для анализа результата перед принятием решения о следующем шаге.

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

Давайте начнем!

Люди по-разному реагируют на рекламу. Если мы будем давать 1 балл каждый раз, когда на объявление кликают, и 0 баллов каждый раз, когда клика нет, мы получим CTR для каждого объявления. Этот CTR рассчитывается путем деления общего количества людей, которые нажали на объявление, на общее количество людей, просмотревших это объявление. Из приведенного выше примера, если 300 из 5000 человек нажали на объявление, CTR составляет 6% (300/5000). Ваши зрители реагируют на рекламу по-разному, следовательно, у каждой рекламы будет разная кривая распределения, некоторые объявления будут смещены влево или вправо, некоторые будут иметь более высокий пик (более высокий эксцесс), и все они будут иметь разное среднее значение и стандартное отклонение. Когда мы проводим A/B-тестирование, результаты CTR, которые вы получите, будут основываться на кривой распределения.

Предположим, что CTR для каждого объявления таков:

Это то, чего мы не знали бы заранее, отсюда и причина для A/B-тестирования. Из этих графиков вы можете сказать, что после того, как вы закончите с A/B-тестом, будет выбран AD 5, потому что он имеет самое высокое среднее значение и смещен вправо. Проблема, которую мы пытаемся решить сегодня, заключается в том, есть ли более быстрый способ достичь этого результата Ad 5 без необходимости проводить тест на стольких людях, прежде чем прийти к выводу.

Традиционный подход к A/B-тестированию

Так проводится традиционный A/B-тест.

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

На этапе 2 вы запускаете лучшую рекламу для всех своих зрителей.

Это не лучший способ сделать это. Во-первых, вы бы потратили впустую много денег, если бы не показывали лучшую рекламу многим зрителям на этапе A/B-тестирования. Кроме того, вам потребуются ресурсы, чтобы остановить фазу 1, прежде чем вы сможете перейти к фазе 2.

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

Что такое обучение с подкреплением?

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

Представьте, что у вас есть робот, и вы учите его ходить. Что делается в прошлом, так это то, что разработчик дает роботу конкретную инструкцию. Пример: «Сначала переместите левую ногу вперед. Затем переместите правую ногу вперед. Затем переместите левую ногу вперед…» Если подумать, мы не так учим нашего ребенка ходить. Мы не говорим нашему малышу, чтобы он двигал ножкой вперед по одной, чтобы ходить.

Что мы делаем, так это кладем ребенка и отходим на небольшое расстояние от него, поощряя его идти к вам. Он будет падать несколько раз, но каждый раз, когда он падает, он узнает, что это неправильный способ ходьбы, и медленно приспосабливается к нему, пока не научится ходить. При падении он почувствует боль (-1 балл). Когда он подойдет к вам, вы обнимете его, и он почувствует себя любимым (+1 балл). Это основная концепция того, как работает обучение с подкреплением. Присуждая баллы для «подкрепления» определенного поведения, мы обучаем машину достигать желаемого результата, давая ей возможность делать это любым возможным способом, а затем используя систему оценки, чтобы сказать ей, что хорошо, а что нет. .

Чтобы использовать обучение с подкреплением, разработчик сообщает роботу все, что он может сделать. Пример: «Вы можете двигать обеими ногами вперед, назад, в стороны, и цель состоит в том, чтобы идти к цели за один час. Каждый раз, когда вы достигаете своей цели, вы будете получать очки в зависимости от того, как быстро вы достигнете цели». Далее происходит то, что робот будет пытаться двигаться вперед, назад и в стороны. При первых нескольких попытках он не будет знать, что делает, и может просто бесцельно ходить. Через некоторое время он начинает «случайно» достигать цели, пройдя несколько раз туда-сюда. Это когда он начинает получать очки. В конце концов, он поймет, что способ получить наибольшее количество очков (достичь цели за кратчайшее время) — это просто идти прямо.

Таким образом, обучение с подкреплением — это попытка позволить роботу учиться так же, как учится человек.

Верхняя доверительная граница

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

В начале (количество проверенных зрителей = 0)

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

1-й тест (количество проверенных зрителей = 1)

Поскольку уровень достоверности для каждого типа объявлений одинаков, модель будет случайным образом выбирать одно объявление для показа пользователю. После того, как пользователь увидит объявление, он либо нажмет на него, либо проигнорирует. Это повлияет на CTR этого объявления и, таким образом, сдвинет кривую распространения этого объявления. Если предположить, что пользователю было показано объявление 2, и он решил проигнорировать его, кривая распределения объявления 2 сместится вниз, а доверительный интервал станет меньше. Причина, по которой кривая распределения смещается вниз, заключается в том, что ожидаемое среднее значение уменьшается. Причина, по которой доверительный интервал уменьшается, заключается в том, что теперь больше записей сосредоточено ближе к среднему значению, следовательно, стандартное отклонение уменьшается, что приводит к сокращению доверительного интервала.

2-й тест (количество проверенных зрителей = 2)

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

Третий тест (количество проверенных зрителей = 3)

Что происходит сейчас, так это то, что модель выберет объявление 1, 3 или 5 для отображения следующим, поскольку оно имеет самый высокий верхний уровень достоверности. Хотя кривая распределения объявления 4 движется вверх, уровень достоверности снижается, следовательно, верхний уровень достоверности ниже, чем у трех других непроверенных объявлений.

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

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

5000-й тест (количество проверенных зрителей = 5000)

К настоящему времени кривая распределения более или менее сформирована, и наблюдаемое среднее очень близко к ожидаемому среднему. Для этого раунда модель выбирает самый высокий верхний уровень достоверности. Поскольку большинство зрителей, увидевших объявление 5, нажмут на него (из-за высокого среднего ожидаемого CTR), кривая распределения объявления 5 будет все ближе и ближе приближаться к среднему значению, а уровень достоверности будет продолжать снижаться. Поскольку верхний уровень достоверности для объявления 5 будет самым высоким в большинстве раундов после этого, модель будет выбирать объявление 5 во многих других случаях по сравнению с другими объявлениями. Будет несколько случаев, когда уровень достоверности Объявления 5 станет настолько низким, что самый высокий Верхний уровень достоверности будет получен от Объявления 4, но когда тестируется Объявление 4, его уровень достоверности также снижается. Это продолжается до тех пор, пока у вас не закончится маркетинговый бюджет.

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

Создание модели с верхней доверительной границей с использованием Python

Я буду использовать Python для этого примера, но вы можете построить его на R, Mathlab и т. д.

Определение проблемы

  • У нас есть d количество объявлений. Это объявления, которые будут отображаться для зрителей.
  • Каждый раз, когда пользователь видит объявление, оно будет помечено как один раунд.
  • В каждом раунде n мы будем выбирать одно объявление для показа этому пользователю.
  • В каждом раунде n, ad x будет давать награду: да (1) или нет (0). ri (n) ∈ {0,1}: ri (n) = 1, если пользователь нажимает на объявление x, и 0, если нет.
  • Наша цель — максимизировать общую награду, которую мы получаем за общее количество раундов.

Решение

Написание скрипта Python

'''Step 1'''
#Importing the libraries
 
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import math
 
'''Step 2'''
#Importing the dataset 
'''
(If you plan to operationalize this, your dataset can be pulled straight 
from your database once every few minutes or once after every new viewer sees the ad. 
So that we can constantly update the model. 
For this example, I’ll be using a csv file with test results generated from a pre-defined distribution curve. 
Of course my model will not know this pre-defined distribution curve to simulate a real life scenario)
'''
 
dataset = pd.read_csv('Marketing_ads.csv') 
 
'''Step 3'''
#Implementing the Upper Confidence Bound Model
 
N = 10000           #Total number of Test
d = 5                    # Number of ads
Selected_Ad = [0]
no_of_selections = [0] * d
Sum_rewards = [0]*d
Total_rewards = 0
for n in range(0,N):
    ad = 0
    max_upper_bound = 0
    for i in range(0,d):
        if (no_of_selections[i]>0):
            average_reward = Sum_rewards[i]/no_of_selections[i]
            delta_i = math.sqrt(3/2 * math.log(n+1)/no_of_selections[i])
            upper_bound = average_reward + delta_i
        else:
            upper_bound =1e400
        if upper_bound > max_upper_bound:
            max_upper_bound = upper_bound
            ad = i
    Selected_Ad.append(ad)
    no_of_selections[ad] = no_of_selections[ad] + 1
    reward = dataset.values[n,ad]
    Sum_rewards[ad] = Sum_rewards[ad] + reward
Total_rewards = Total_rewards + reward
 
 
'''Step 4'''
#Seeing the results
 
plt.hist(Selected_Ad, bins=5)
plt.title('Histogram of ads selected')
plt.xlabel('Ads')
plt.ylabel('Number of times Ad was selected')
plt.show()

Сравнение результатов A/B-тестирования с методом верхней доверительной границы

Когда мы применяем традиционный подход к A/B-тестированию, вы можете видеть, что 5 разных объявлений показываются примерно одинаковое количество раз, тогда как модель Верхнего достоверного предела показывает объявление 5 наибольшее количество раз. Это связано с тем, что он учится на прошлом вводе данных пользователем и вносит поправки самостоятельно, в то время как традиционная модель A/B-тестирования этого не делает. Таким образом, объявление 5 показывается гораздо чаще, чем остальные, потому что оно имеет наибольшую вероятность кликов, учитывая его распределение. Это объясняет, почему CTR верхней доверительной границы выше, чем при традиционном A/B-тестировании.

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

Спасибо за прочтение

Надеюсь, вам понравилась эта статья. Повышение CTR — это лишь один из многих способов использования моделей машинного обучения. Если вам интересно просмотреть две мои модели (UCB и традиционное A/B-тестирование) на python и R, а также набор данных, который я использовал для создания тестового набора, не стесняйтесь оставлять свой адрес электронной почты в комментариях. раздел, и я отправлю его вам.

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

P.S. Перейдите по этой ссылке, чтобы увидеть, как обучение с подкреплением использовалось для создания бота Dota 2, способного победить лучших профессиональных игроков (https://www.youtube.com/watch?v=92tn67YDXg0).

Да, я большой фанат Доты!

Машинное обучение постепенно становится популярным и становится основным во всех отраслях промышленности. Ценность этих моделей будет только возрастать по мере того, как мы будем собирать все больше и больше данных. Внедрение Интернета вещей приведет к экспоненциальному увеличению собираемых данных, и тот, кто владеет этими данными и умеет их использовать, станет королем. Как говорится, «Данные — это новая нефть».

Первоначально опубликовано на https://www.linkedin.com.