Компании заинтересованы в эффективном использовании своих ресурсов, в том числе и на рекламу. Поэтому на передний план встает не масштаб рекламной кампании, а ее динамические показатели. И здесь возникают вопросы:

  • Как оценить, сколько человек увидело рекламу?

  • Сколько из них увидело ее в первый раз, а сколько повторно?

  • Как понять, промелькнула ли реклама незаметно для аудитории или намозолила и вызывала раздражение? В какой момент это произошло?

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

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

Меня зовут Нина Фещенко, я аналитик больших данных в команде Геоаналитики «Билайн Big Data & AI». Наша команда ежедневно оценивает потенциал локаций и туристические потоки, строит матрицы корреспонденций, моделирует транспортные потоки и анализирует маркетинговые метрики в наружной рекламе на стационарных и подвижных носителях. 

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

Постановка задачи

Компания размещает рекламу продукта на наружных носителях: всего 255 различных конструкций в центре Москвы. Срок рекламной кампании — 5 месяцев, с августа по декабрь 2025 г. Задача — оценить, была ли эффективна прошедшая кампания. Это важно для оптимизации затрат в текущий момент и принятия управленческих решений в будущем. 

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

Какие бывают виды рекламных носителей в наружной рекламе

Наружные рекламные носители делятся на классы:

  • Билборд — большой рекламный щит на оживленных улицах и трассах. Его задача — быстро и ярко донести информацию о товаре или бренде.

  • Медиафасад — светодиодный экран, установленный на фасадах зданий. В данном варианте целый фасад здания превращается в экран, на котором транслируется не просто реклама, а цифровое искусство, обеспечивая максимальное зрительское воздействие.

  • Остановка — рекламная конструкция на остановках общественного транспорта. Такая реклама ориентирована на пассажиров в ожидании.

  • Сити‑формат — стандартизированный формат рекламной конструкции, устанавливается на пешеходных улицах, вблизи метро, торговых центров.

По форматам:

  • Статика — неподвижная реклама, картинка или текст. 

  • Динамика — реклама с анимацией или движущимися элементами (скроллинг, мигание, переходы). 

  • Диджитал — реклама на экранах, где контент может меняться в реальном времени.

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

Какие метрики считаем, чтобы оценить рекламную кампанию

  • Охват (Reach) — это количество представителей целевой аудитории, которые хотя бы один раз контактировали с рекламным сообщением за определенный промежуток времени. Иначе говоря, сколько уникальных людей видели рекламу. 

  • OTS (Opportunity To See) — это общее количество контактов аудитории с рекламным сообщением за временной промежуток. Считаются все контакты одного и того же человека. 

  • Частота (Frequency), рассчитывается как отношение OTS к Охвату. Это среднее количество контактов аудитории с рекламой. 

Например, человек увидел рекламу дважды: утром, когда ехал из дома на работу, и вечером, когда возвращался домой. Тогда в охват он попадет один раз, в OTS — два раза, а частота также будет равна двум. 

Чем выше частота, тем больше было в среднем повторных контактов. Хорошо это или плохо зависит от целей кампании. Бывают имиджевые кампании, направленные на быстрое узнавание бренда, и для них актуальнее широкий охват. А бывают кампании, направленные на стимулирование продаж — тогда высокая частота рассматривается как плюс. 

OTS, охват и частоту мы анализируем как суммарно, так и в динамике: по дням, месяцам или неделям, в зависимости от задачи.

Как будем решать задачу

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

Минусы:

  • наличие зон недоступности (например, в сельской местности);

  • возможные ошибки данных. 

Плюсы:

  • повсеместность (сигнал есть в зданиях, на улице, в метро, на трассах);

  • независимость от устройства (работает для любого телефона с SIM‑картой);

  • высокое пространственно‑временное разрешение данных. 

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

Рассмотрим решение задачи поэтапно.

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

Следующий этап — расчеты. Здесь мой основной стек — это Spark и Apache Sedona, фреймворк для масштабной обработки геопространственных данных. Sedona расширяет возможности Spark, позволяя обрабатывать геообъекты (точки, полигоны, линии) с использованием пространственных функций. 

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

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

На рисунке изображены рекламные конструкции (точки) и для каждой построен буфер (окружность) в зависимости от ее класса и формата
На рисунке изображены рекламные конструкции (точки) и для каждой построен буфер (окружность) в зависимости от ее класса и формата

Данные о перемещениях абонентов хранятся в готовой витрине данных, гранулярность событий в таблице менее одной минуты. Для работы с такими объемами применение основных правил по обработке больших данных — абсолютная необходимость. Я говорю о таких вещах, как оптимизация параметров Spark‑сессии и самого запроса, применение разных типов джойнов, циклы, партиционирование и бакетирование.

Еще одно правило: сначала проверяем работоспособность кода на небольшом сэмпле и только потом запускаем расчет на всем объеме. 

По итогу получаем агрегированные данные для каждой конструкции: количество уникальных абонентов, которые просмотрели рекламу в единицу времени (Охват), количество всех просмотров с учетом повторов (OTS). 

Сохраняем итоговые значения и переходим к следующему этапу.

Визуализируем результаты

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

Flexgis отлично умеет визуализировать данные, в том числе в 3D. С его помощью можно наглядно отобразить любые геообъекты: точки, полигоны, линии. С точки зрения визуализации готовые отчеты выглядят не только удобно и информативно, но также эффектно и высокотехнологично. 

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

  • сделать геоаналитический отчет максимально информативным, удобным и гибким;

  • соблюсти баланс и не перегрузить деталями;

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

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

Один слой — это итоговая плоская таблица с данными в разрезе конструкций по месяцам. Просто к полученным итоговым данным добавляем столбец с частотой (как отношение OTS, поле OTS к охвату, поле Reach).

sdf_metrics = (
    sdf
    .withColumn('time_key', F.col('time_key').cast('string'))
    .withColumn('frequency', F.round(F.col('ots') / F.col('reach'),2))
)

На этом слое мы строим динамику OTS и охвата, считаем суммарные значения OTS и охвата и среднюю частоту. 

Второй слой формируется как сводная таблица: группируем данные по конструкциям (id, класс, формат, координаты), месяцы кампании превращаем в столбцы, а OTS, охват и частота — это значения.

sdf_pivot = (
    sdf
    .withColumn('frequency', F.round(F.col('ots') / F.col('reach'), 2))
    .groupBy('class', 'format_type', 'constr_id', 'lat', 'lon')
    .pivot('month_num')
    .agg(F.sum('ots').alias('ots'), F.sum('reach').alias('reach'), F.avg('frequency').alias('freauency'))
)

Добавляем расчетные поля с суммарными значениями OTS и jхвата по каждой конструкции.

from functools import reduce
from operations import add

def get_total(sdf, netric_name):

    summarize_cols = [col_name for col-name in sdf.columns if metric_name in col_name]
    sum_exprs = [F.col(col_name) for col_name in summarize_cols]
    total_sum = reduce(add, sum_exprs)

    sdf_total = sdf.withColumn(metric_name, total_sum)
    return sdf_total
for metric in ['ots', 'reach']:
    sdf_pivot = get_total(sdf_pivot, metric)

Наносим все это на карту, и вот какой отчет получается в итоге.

Конструкции на карте различаются по цвету – это указание на класс и виду значка – это различие по формату. Размер значка указывает на величину охвата – от 10 тыс. до 150 тыс. для конкретной конструкции
Конструкции на карте различаются по цвету — это указание на класс и виду значка — это различие по формату. Размер значка указывает на величину охвата — от 10 тыс. до 150 тыс. для конкретной конструкции

Слева на панели расположены фильтры, с помощью которых можно оценить итоговые метрики по конкретным выбранным показателям. 

На дашбордах на панели справа построены следующие визуализации:

Общее количество конструкций по классам (слева). Суммарные показатели OTS и охвата, средняя частота (справа)
Общее количество конструкций по классам (слева). Суммарные показатели OTS и охвата, средняя частота (справа)
Общее количество конструкций по классам (слева). Суммарные показатели OTS и охвата, средняя частота (справа)
Охват в разрезе классов (слева). Я использую одну цветовую палитру для классов, чтобы не открывать каждый раз легенду. Динамика OTS и охвата по месяцам (справа)

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

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

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

Явыбираю эти метрики как ключевые, потому что в совокупности они дают полную картину для оценки. OTS показывает общее количество просмотров: здесь оно практически не изменяется по месяцам — чуть ниже в августе, что логично, поскольку это период отпусков и разъездов. 

График охвата — это убывающая функция. Как правило, большая часть контактов происходит в первые 1–2 месяца, а в следующие месяцы новых контактов все меньше, в основном повторы. На линейном графике (на правой панели дашбордов) это хорошо видно: в первый месяц охват составляет более 50% от OTS, а в последний — примерно 33%. 

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

Также для оценки OTS и охвата в подобных задачах применяются гексагоны. В частности, для этого примера я построила сетку из гексагонов с использованием библиотеки h3 размера (resolution) 7.

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

Заключение

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

Комментарии (0)