Собесов

Слайд по % показов на ТОП-1/ТОП-3 для брендовой и небрендовой рекламы

Кейсы и метрикиПрезентация результатовСредняяJunior

Условие

Дан датасет выгрузки из рекламного кабинета (dataset_task3):

  • месяц,
  • название рекламной кампании,
  • номер кампании,
  • количество показов рекламного объявления,
  • средняя позиция показа.

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

На слайде:

  • % показов на позициях ТОП-1 и ТОП-3 для:
    • брендовых кампаний (название содержит «brand»);
    • не брендовых;
    • всех в целом.

Позиции — целые числа от 1 до 8. Ожидаемый результат: PPTX или PDF (1 слайд) + ноутбук с расчётами.

Решение

Шаг 1. Понимание данных

Каждая строка — это кампания за месяц. У неё есть impressions и средняя позиция за этот месяц. Средняя позиция — взвешенная по показам или нет — обычно НЕ указано; уточнить.

Чтобы посчитать «% показов на ТОП-1», нужно различать сколько показов было именно на позиции 1, 2, 3 и т.д. Если в датасете только средняя позиция — это уже агрегат, и точное распределение по позициям не восстановить.

Два сценария:

Сценарий A. Если в датасете есть отдельная колонка impressions_at_position_k или top1_impressions / top3_impressions — задача сводится к прямой агрегации (Сценарий A ниже).

Сценарий B. Если только средняя позиция и общие показы — приходится аппроксимировать: например, считать, что кампания показывалась только на одной позиции (округление средней). Это спорно, но иногда приемлемо.

Скорее всего, в dataset_task3 есть колонка с разбивкой — типичный вариант таблицы рекламы. Решаем по ней.

Шаг 2. Формула

Для группы кампаний:

% top1 = sum(impressions where position == 1) / sum(impressions all positions) * 100
% top3 = sum(impressions where position in (1,2,3)) / sum(impressions all positions) * 100

Шаг 3. SQL-агрегация (если данные в БД)

WITH labelled AS (
  SELECT
    CASE WHEN LOWER(campaign_name) LIKE '%brand%' THEN 'brand' ELSE 'non_brand' END AS group_,
    position,
    impressions
  FROM dataset_task3
)
SELECT
  group_,
  ROUND(100.0 * SUM(CASE WHEN position = 1 THEN impressions ELSE 0 END) / SUM(impressions), 1) AS pct_top1,
  ROUND(100.0 * SUM(CASE WHEN position <= 3 THEN impressions ELSE 0 END) / SUM(impressions), 1) AS pct_top3
FROM labelled
GROUP BY ROLLUP(group_)
ORDER BY group_;

ROLLUP даёт строку «всего» (group_ = NULL) — это то, что нужно для категории «общий».

Шаг 4. Pandas-вариант

import pandas as pd
df = pd.read_excel("dataset_task3.xlsx")
 
df["group"] = df["campaign_name"].str.lower().str.contains("brand").map({True: "brand", False: "non_brand"})
 
def top_share(g):
    total = g["impressions"].sum()
    top1 = g.loc[g["position"] == 1, "impressions"].sum()
    top3 = g.loc[g["position"] <= 3, "impressions"].sum()
    return pd.Series({"pct_top1": top1 / total * 100, "pct_top3": top3 / total * 100})
 
by_group = df.groupby("group").apply(top_share).round(1)
overall = pd.DataFrame({"pct_top1": [df.loc[df["position"] == 1, "impressions"].sum() / df["impressions"].sum() * 100],
                        "pct_top3": [df.loc[df["position"] <= 3, "impressions"].sum() / df["impressions"].sum() * 100]},
                       index=["overall"]).round(1)
result = pd.concat([by_group, overall])
print(result)

Шаг 5. Слайд

Минималистичный, в корпоративном стиле:

  • Заголовок: «Доля показов на ТОП-1 и ТОП-3 — растущая видимость рекламы»
  • Три столбчатые группы (брендовые / небрендовые / общие):
    • две полоски «ТОП-1» и «ТОП-3» в %.
  • Подзаголовок: «Период: <месяцы>; источник: внутренний кабинет, выгрузка от <дата>».
  • Главный вывод (1–2 строки): «Брендовые кампании достигли 92% показов на ТОП-3 (рост на 14 п.п. за период). У небрендовых — 67%, рост за счёт оптимизации ставок.»

Не перегружать слайд: только три ключевых числа на каждую группу. Если есть данные по месяцам — добавить тренд (одна линия по каждой группе) — это сильнее покажет «результат маркетологов».

Подводные камни

  1. Что такое «средняя позиция». Если в датасете средневзвешенная по показам — это другая метрика, чем «доля на ТОП-1». Не путайте.
  2. Регистр в brand. Условие говорит «по наличию brand в названии» — приведите к нижнему регистру.
  3. Позиции > 8. Условие гарантирует 1..8, но проверьте. Аномалии — отдельный график.
  4. Пустые показы (0). Делить на ноль нельзя; кампании без показов выкидывайте из расчётов.
  5. % округление. Для слайда — одна цифра после запятой. Для отчёта — целые проценты.
  6. Слайд для руководства, не для аналитика. Не показывать SQL/код/raw-таблицы. Картина «что произошло, на сколько изменилось, что мы из этого делаем».

Эталонный ответ

Один слайд + ноутбук:

  • В ноутбуке: чтение данных, агрегация по группам, формула.
  • На слайде: 6 чисел (3 группы × 2 метрики), подпись, главный вывод.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти