В прошлой статье мы уже писали о том, как в Dentsu занимаемся прогнозированием телесмотрения рекламы на ТВ и какие используем для этого алгоритмы. В этой статье мы расскажем, как используется этот прогноз для автоматического размещения рекламы на ТВ, как появилась сама идея Programmatic TV, с какими сложностями мы столкнулись при ее реализации и как это живет и работает сейчас, в непростом со всех точек зрения 2020 году. Мы задумались об автоматизации процессов, с которыми сталкивается рекламная группа агентства при закупке рекламы на ТВ, еще в 2014 году.  Для наших клиентов мы всегда стараемся использовать индивидуальный подход, в том числе и для предоставления отчетности по ТВ размещениям, поэтому менеджерам по закупке рекламы (байерам) приходилось тратить уйму времени на подготовку подробных отчетов. Мы решили, что это отличная возможность для автоматизации, и с этой идеей пришли к крупнейшему продавцу ТВ-рекламы, в тот момент это был Видео Интернешнл.  В России с 2016 года практически вся ТВ-реклама начала продаваться через единого продавца (мегаселлера) – Национальный Рекламный Альянс (НРА), который основали крупнейшие медиахолдинги-владельцы телеканалов. НРА поддержал идею и совместными усилиями появилась первая версия API к их системе размещения рекламы Vimb.  API позволяло получать сетку рекламных блоков (аналог знакомой всем программы передач для ТВ-каналов, но только с временем выхода рекламных блоков в передачах на каналах) и сетку наших рекламных размещений в этих блоках. С помощью API мы смогли полностью автоматизировать процесс размещения клиентского заказа и формирования отчетности по нему.  Но время не стоит на месте, появлялись новые идеи и API стало активно развиваться. Являясь на тот момент эксклюзивным пользователем API, мы всячески содействовали разработке и развитию этого продукта и подтолкнули рынок к развитию Programmatic TV подходов в управлении ТВ рекламой.  Логичным шагом стала программная оптимизация текущего заказа для более эффективного попадания в требуемую целевую аудиторию и целый набор инструментов, позволяющий менеджерам по закупке рекламы автоматизировать часть рутинной деятельности.  Мы разработали инструменты, которые отслеживают освобождающиеся места в востребованных передачах, делают размещение под требуемый объем и заданные настройки, меняют видеоролики в уже сделанных размещениях и многое другое. В 2018 году мы пришли к идее полной автоматизации процесса ТВ-закупки.  Для начала постараемся разобраться, как вообще делается закупка рекламы на ТВ, что из себя представляет рекламная кампания, как контролируется и какие показатели необходимо достигнуть при проведении кампании. Введем несколько определений из области медиа и рекламного рынка: Целевая аудитория — аудитория потенциальных потребителей, интересующая рекламодателя и имеющая определенные характеристики (как правило, речь идет о социально-демографических характеристиках, таких как пол, возраст, доход и т. д., но также могут использоваться психографические и поведенческие характеристики, такие как приверженность брендам или потребление каких-либо продуктов или услуг) Баинговая аудитория — аудитория, определяемая телевизионным каналом как его целевая аудитория. То есть канал определяет свою ЦА и показывает контент, соответствующий этой ЦА TVR рекламного блока — рейтинг рекламного блока, который вычисляется как отношение суммы посмотревших телезрителей из определенной ЦА к сумме телезрителей всей ЦА GRP рекламного блока — баинговый рейтинг блока, равен TVR рассчитанному на баинговую аудиторию канала. Именно по GRP происходит закупка основной части ТВ рекламы в России Affinity рекламного блока (аффинитивность) — отношения рейтинга рекламного блока, рассчитанного для ЦА бренда, к рейтингу блока, рассчитанного для баинговой аудитории канала (TVR ЦА / TVR баинговой аудитории) CPP (cost per point) — стоимость одного рейтинга в баинговой аудитории канала. Может быть больше для трансляций в прайм -тайм (вечерний эфир и выходные дни). Исходя из CPP и набранных баинговых рейтингов высчитывается стоимость рекламной кампании Прайм-тайм — интервал времени с 19:00 до 24:00 в будни и с 8:00 до 24:00 по выходным и праздничным дням Байер — менеджер по закупке ТВ-рекламы Рекламный блок — конкретное место в сетке вещания телеканала (внутри телепрограммы или между ними), отданное под размещение рекламы Рекламный спот — конкретный выход рекламного ролика, размещенного в блоке. В одном блоке может быть размещено несколько спотов Медиаплан –  документ, включающий подробную структурированную информацию о предстоящих рекламных кампаниях со сроками проведения и выделенным бюджетом.  Как уже написано выше, в России закупка ТВ-рекламы осуществляется через единого селлера НРА. Для закупки рекламы существует специальное ПО Vimb, предназначенное для размещения и отслеживания рекламных кампаний, электронного документооборота и выгрузки отчетности.  В Vimb заводится паспорт сделки со всеми параметрами и условиями будущих рекламных кампаний клиента. В сделке менеджеры (баеры) агентств создают медиапланы на требуемые рекламные события. В Vimb медиапланы заводятся на каждый канал отдельно, их длительность не превышает месяц.  Рекламная кампания на ТВ представляет из себя набор медиапланов с их размещениями. Далее в соответствии с условиями сделки и медиапланом баер агентства делает размещение рекламы в блоках каналов. У каждого рекламного блока есть баинговый рейтинг, рассчитанный НРА. В соответствии с этим рейтингом после выхода ролика в эфир будет рассчитан итоговый бюджет кампании и выставлены счета за проведение кампании.   Для Vimb существует API доступа к системе, позволяющее выгружать информацию о рекламных блоках, спотах, медиапланах, а также делать размещение, удаление и замену спотов.   Размещение рекламы делиться на несколько типов: Суперфиксированный тип размещения (Суперфикс) – ручное размещение спотов в выбранные клиентом блоки, с повышенным приоритетом и возможностью выбивать фиксированный тип размещения. Фиксированный тип размещения (Фикс) – ручное размещение спотов в выбранные клиентом блоки, в конкретных программах, в конкретные даты. Данный тип размещения выбивается суперфиксированным типом размещения.  Плавающее размещение (Плавание) – автоматическое размещение спотов в произвольных блоках с учетом заданных условий размещения. Доступен только на орбитальных каналах. НРА самостоятельно размещает заданный объем спотов и контролирует показатели.  Сток – низкоприоритетное автоматическое размещение спотов в произвольных блоках с учетом заданных условий размещения по принципу «остатка инвентаря». Данный тип размещения выбивается остальными типами размещения. Flex – гибкость между каналами, автоматическое размещение спотов в произвольных блоках с учетом заданных условий размещения с возможностью перетекания объемов с канала на канал. При размещении кампании баер должен в соответствии с условиями медиаплана и сделки соблюсти все требуемые показатели по бюджету, доли прайма, баинговым рейтингам и рейтингам на целевую аудиторию.  После постановки роликов в сетку происходит ежедневный мониторинг размещения, могут меняться требования, определяемые при планировании, может корректироваться эфирная сетка каналов (замена одной передачи другой, смещение времени эфира, появление новых эфирных событий, например, обращение президента или специальный выпуск новостей), выбивание спотов более приоритетными типами размещений. Все эти события требуют вмешательства в текущее размещение перерасчета показателей кампании и корректировки размещения.  При ручном управлении без средств автоматизации у баера на этот процесс может уходить порядка 60-80% рабочего времени. С учетом того, что у крупных агентств обычно внушительный портфель клиентов, то на эти процессы тратится большое количество сил времени и средств.  Автоматизировать эти процессы и призван Programmatic TV, который берет на себя львиную долю задач по закупке и контролю рекламных кампаний освобождая время баеров для более интеллектуального труда.  Необходимо разработать систему, которая будет в автоматическом режиме размещать рекламные кампании на ТВ, постоянно 24х7 оптимизировать эффективность размещения и контролировать все медийные и немедийные показатели. В данном случае под эффективностью мы понимаем максимизацию средней аффинитивности рекламной кампании при фиксированном бюджете размещения. Для системы необходимо разработать понятный и удобный пользовательский интерфейс, позволяющий быстро создавать рекламные кампании и вносить соответствующие настройки. Казалось бы, что закупка рекламы на ТВ, если переводить ее на язык математики и численных методов, по сути своей является стандартной задачей о рюкзаке, для которой существуют “типовые” алгоритмы ее решения.  Мы сразу позвали наших математиков и Data-сайентистов и попробовали все решить в лоб, применив метод ветвей и границ. Ведь действительно, если представить, что TVR (Аффинити) – стоимость, GRP – вес, а емкость рюкзака равна нашему суммарному весу, заданному для кампании на одном канале, то выходит типичный рюкзак, точнее несколько – по числу каналов в рекламной кампании. И на тестовом наборе данных мы получили, как нам тогда казалось, быстрое, а что самое главное – математически точное решение баинговой задачи.  Обрадовавшись успеху, с результатом мы пришли в баинг и получили «порцию холодного душа» от них. Кроме суммы весов GRP для рекламной кампании нужно учитывать десятки различных параметров и характеристик, при этом некоторые из них не совсем математические, а больше эмпирические. При определенных условиях, используя наш алгоритм, мы вообще могли получить рекламную кампанию, состоящую из одного дня и роликов, идущих один за другим (просто они могли быть самыми аффинитивными из всего предложенного набора и подходящими по весу). Естественно, такая кампания не устроит ни баинг, ни клиента, хотя с математической точки зрения является верной. Получив новые вводные от баинга, поняли, что выбранный алгоритм нам совсем не подходит, точнее может подойти для решения части задачи. С такими параметрами, как доля прайма (доля рейтингов которые выходят в прайм-тайм телеканалов, обычно с 19 до 23) или списком запрещенных передач как-то можно работать, при этом скорость работы алгоритма, конечно, существенно снижается.  Но как быть с таким параметром, как равномерность распределения рекламных выходов по дням кампании или характеристикой: «желательно не размещаться в одинаковое время в одной и той же передаче несколько дней подряд при наличии других подходящих блоков, но когда ничего другого нет, то можно»? Ищем решение дальше. Умные люди — лучшая энциклопедия (Гёте И.) Если нельзя подобрать существующие алгоритмы для решения задачи, которые удовлетворяли бы качественно и по времени расчета, то можно попробовать научить алгоритм действовать по аналогии с человеком – экспертом из этой области. Получается своеобразный гибрид экспертной системы и системы автоматизации принятия решений.  Нужно собрать много данных, очень много данных от экспертов в этой области – баеров. После этого унифицировать эти данные и начать обучение нашей «интеллектуальной» системы.  Для этой задачи нам отлично подошли техники, применяемые при проведении кастдева (Customer Development). Во-первых, мы получили наиболее критичные проблемы, которые нужно решать в первую очередь, и которые принесут нам максимум результата.  Во-вторых, мы исходим от потребностей пользователя и сразу вносим в продукт необходимый именно ему функционал, который будет решать именно его задачи и помогать именно в тех местах, где «болит» сильнее всего, а не тот функционал, который мы придумали для него сами и возможно ему совсем не нужный.  И самое главное, в ходе многочисленных предметных интервью мы собрали и унифицировали практически все текущие проблемы и проработали пути их решения. В результате мы получили полный список характеристик рекламной кампании, которые необходимо контролировать, и нам удалось формализовать в виде алгоритмов описания действий и практически все закономерности, необходимые для принятия решений при проведении рекламной кампании. Вот некоторые основные контролируемые характеристики и ограничения: Бюджет кампании Соблюдение доли кампании, выходящей в прайм-тайм в заданных пределах для каждого канала Соблюдение распределения весов на ролики Соблюдение объема рейтингов по каждому из каналов кампании Учет приоритетных и запрещенных программ Учет заданных для канала приоритетных временных интервалов Учет заданных ограничений по дням/периодам Соблюдение равномерности по дням заданного периода Соблюдение равномерности в течение дня Соблюдение равномерности в соседних днях Учет среднеканального аффинити, чтобы заранее отсеивать размещения, которые невыгодны для покупки, для них количество потраченных баинговых рейтингов дает маленькое количество целевых рейтингов, по сравнению с аналогичными блоками на этом канале Соблюдение минимального заданного аффинити на прайм и оффпрайм Контроль выходов в одной и/или разных передачах с заданным минимальным интервалом Учет динамики изменения баинговых рейтингов рекламного блока для максимизации фактических рейтингов, т. е. занять размещение в тех блоках, в которых фактический рейтинг будет больше текущего Учет максимального количества выходов в день на канале Учет выходов конкурирующих брендов одного рекламодателя, чтобы не занимать одинаковые рекламные блоки своими конкурирующими между собой товарами или услугами. Учет позиций выходов рекламы в блоке при заданном объеме позиционирования. Позиционирование дает возможность за дополнительную плату выбирать порядок рекламного ролика в занимаемом блоке, в начале блока или в конце. Обычно задается в % от объема всего размещения на канале Понятно, что с таким набором параметров, особенно учитывая количество доступного для размещения рекламы инвентаря в телевизионной сетке, уже не идет речи о каком-то типовом алгоритме, решающем задачу. Ведь нам важно ее не только правильно решить, но еще постараться успеть это сделать пока выбранные рекламные споты доступны, а если они уже заняты, то дооптимизировать кампанию с учетом текущих изменений.  Мы решили перевести все заданные ограничения в набор функций и логических условий, разбить нашу оптимизацию на этапы, а для подбора рекламных блоков на каждом этапе использовать жадный алгоритм. Кроме этого, сам алгоритм должен работать как с новой постановкой кампании, когда идет размещение блоков с нуля, так и с уже расставленной ранее кампанией. Получилась примерно следующая конструкция, которая применяется к каждому из медиапланов рекламной кампании: Этап 1 – Подготовительный На этом этапе загружаем все необходимые данные по текущей сетке блоков и настройки для оптимизации рекламной кампании. Этап 2 – Помечаем на удаления ранее сделанные неудачные размещения Здесь мы проверяем текущую расстановку (если она уже есть) на соответствие заданным условиям. По характеру несоответствия мы помечаем неподходящие споты на обязательные и рекомендуемые к удалению. Этап 3 – Размещение новых спотов или «Базовая оптимизация» На этом этапе мы делаем размещение спотов в соответствии с заданными настройками, выбирая наиболее аффинитивные позиции под заданный объем и соблюдая равномерность размещения Этап 4 – Корректировка базовой оптимизации На этом этапе мы пытаемся более точно скорректировать размещение, полученное на этапе базовой оптимизации, под заданный план, выбирая возможные варианты перестановок или замен. В первую очередь, корректировки касаются бюджета, аффинити, доли прайма и равномерности  Этап 5 – Проверка корректности оптимизации На этом этапе производим оценку качества и корректности оптимизации при помощи логических и оценочных функций. Если новое размещение хуже текущего, проводим попытку дооптимизации или возвращаемся к текущему размещению Алгоритм работает быстро и находит оптимальное решение поставленной задачи как по максимизации показателей кампании, так и по соблюдению заданных настроек и ограничений.  Для удобства работы с системой мы унифицировали все используемые у нас подходы к размещению рекламы на ТВ и пришли к парадигме рекламной кампании в интернете, когда вносим основные настройки, запускаем кампанию и далее только контролируем ее проведение, всю рутину система берет на себя.  Баер заводит в систему рекламную кампанию и ставит ее на «Автопилот».  Автопилот – автоматическое управление рекламной кампанией с целью максимизации показателей и соблюдением заданных настроек и ограничений.  Ввиду специфики российского ТВ рекламная кампания логически делится на несколько частей в соответствии с типами размещения. Автопилот использует разные стратегии для работы с разными типами размещений. Например, суперфикс достаточно оптимизировать пару раз в день, а в оставшееся время следить за освобождением мест в наиболее востребованных передачах, а фиксированное размещение требует постоянного контроля и дооптимизации по причине выбивания суперфиксом.  При этом, когда оптимизируем один тип размещения, необходимо учитывать показатели и расстановку остальных типов, иначе можно не добрать до плана или расставить по три выхода в одинаковых рекламных блоках, что не прибавит кампании эффективности. Дополнительно стоит заметить, что в реальной жизни наличие свободного места для размещения постоянно меняется и часто можно получить ошибку API “В выбранном вами блоке недостаточно свободного места”, поэтому после оптимизации и размещения новых блоков мы проверяем, все ли успешно разместилось, и только после этого избавляемся от блоков, помеченных на удаление. А если что-то не получилось, то мы отправляем медиаплан на дооптимизацию. Если автопилота недостаточно и требуется оперативно внести изменение в размещение, то предусмотрен ручной режим работы: с визуализацией предлагаемых новых размещений и корректировки старых, с визуализацией оптимизируемых медийных и не медийных характеристик кампании. Например, это планируемый после оптимизации аффинити, количество целевых рейтингов или бюджет. Если размещение кампании происходит впервые, то предусмотрена возможность запустить так называемую первоначальную постановку кампании, в этом режиме все кампании оптимизируются в режиме 24х7, набирая объемы под заданный план. Исторически сложилось, что у нас в большинстве случаев используются решения, основанные на продуктовой линейке Microsoft. Платформа Programmatic TV не стала исключением. Programmatic TV представляет из себя набор сервисов, клиентское приложение и базу данных. Для хранения всех необходимых данных была выбрана СУБД MS SQL.  В качестве технологии реализации сервисов была выбрана технология gRPC.  Клиентская часть представляет из себя десктопное WPF приложение.  Аутентификация всех сервисов и клиентской части проходит через SSO.  Логирование реализовано в виде отдельно сервиса, которое позволяет не только сохранять логи в elastic, но и осуществлять сбор определенных метрик, сохраняя их в собственную БД. Основные сервисы и их работа: Сервис доступа к API Vimb – основная цель – единая точка взаимодействия с НРА, контроль всех ограничений на каждый метод, накладываемых НРА, такие как максимальное количество одновременно вызываемых потоков, контроль максимально допустимого получения объема данных за определенное время, максимальное количество вызовов метода за определенное время Сервис синхронизации и загрузки данных Vimb. По заданному расписанию загружает и синхронизирует данные от Vimb через сервис доступа к API Vimb Сервис доступа к данным. Включает предоставление всех необходимых данных для работы клиентской части Сервис расчета медиапоказателей, который рассчитывает фактические и прогнозные показатели рекламных кампаний. Фактические показатели рассчитываются на базе СУБД ClickHouse Набор сервисов по автоматизации ведения рекламных кампаний. Среди основных функций – автономное ведение кампаний, в т. ч. оптимизация и постановка рекламных кампаний, уведомления клиентов о состоянии и показателях рекламной кампании, а также еще ряд функций, которые делают жизнь легче J. Среднее количество кампаний в месяц, находящихся под управлением системы 249   рекламных кампаний Среднее   количество действий со спотами в контролируемых рекламных кампаниях за сутки 24000   добавлений, 19000 удалений, 265000 спотов оставлено как подходящие условиям   кампании Количество   спотов фиксированного типа размещения за год 4732657   спотов, из них поставлено через Programmatic TV 3535984. Примерно 75% общего объема фиксированного размещения по Национальному ТВ, Региональному ТВ и Тематическому ТВ Количество   знаков в годовом бюджете кампаний контролируемых через TV Programmatic 11-значный бюджет под управлением системы Эффективность   Programmatic TV по сравнению с ручной постановкой, выполненной человеком на   идентичных кампаниях с одинаковой целевой аудиторией набором параметров и   бюджетом Рост на 5   - 10% средней аффинитивности рекламной кампании Сокращение   трудозатрат, связанных с размещением и контролем рекламных кампаний при   использовании Ptorgammatic TV Снижение   трудозатрат на 40-50%     Руководитель проектов