Условие
Между периодами p_1 и p_2 проводилась маркетинговая кампания по продуктам УЖЦК (СМБ-банк). Есть таблицы:
pl(client_id, segment, period, product, pl)— ЧОД клиента по продукту по периодам.campaign(client_id, product, response, manager_id)— отклик в кампании, идентификатор менеджера.
Задачи:
- Посчитать сумму ЧОД, привлечённую каждым менеджером в ходе кампании.
- Оценить эффективность маркетинговой кампании в целом.
Решение
Задача 1 — ЧОД на менеджера
«Привлечённый ЧОД» = ЧОД в p_2 по тем парам (клиент, продукт), которые были в кампании и откликнулись положительно.
SELECT
c.manager_id,
SUM(p.pl) AS pl_attracted
FROM campaign c
JOIN pl p
ON p.client_id = c.client_id
AND p.product = c.product
AND p.period = 'p_2'
WHERE c.response = 'positive' -- или 1, в зависимости от формата
GROUP BY c.manager_id
ORDER BY pl_attracted DESC;Если хотим считать прирост ЧОД (а не абсолют), нужно вычесть p_1:
WITH paired AS (
SELECT
c.manager_id, c.client_id, c.product,
p1.pl AS pl_p1,
p2.pl AS pl_p2
FROM campaign c
LEFT JOIN pl p1 ON p1.client_id=c.client_id AND p1.product=c.product AND p1.period='p_1'
LEFT JOIN pl p2 ON p2.client_id=c.client_id AND p2.product=c.product AND p2.period='p_2'
WHERE c.response = 'positive'
)
SELECT
manager_id,
SUM(COALESCE(pl_p2,0) - COALESCE(pl_p1,0)) AS pl_uplift
FROM paired
GROUP BY manager_id
ORDER BY pl_uplift DESC;Задача 2 — эффективность кампании
Подход «без контрольной группы»
Если контрольной группы нет — оцениваем только кампанию в её аудитории:
- Response rate =
% клиентов с positive response. - Активация в
p_2= % положительных откликов, которые реально показали ЧОД > 0 вp_2. - ARPPU кампании =
SUM(pl в p_2) / count(positive response). - CPA = расходы на кампанию / привлечённые клиенты (если данные есть).
SELECT
COUNT(*) AS targeted,
SUM(CASE WHEN response='positive' THEN 1 ELSE 0 END) AS positive_resp,
ROUND(100.0 * SUM(CASE WHEN response='positive' THEN 1 ELSE 0 END)
/ COUNT(*), 2) AS response_rate_pct
FROM campaign;Подход «инкрементальный» (правильный)
Без holdout-группы (контроль) оценить эффект нельзя честно. Возможные суррогаты:
-
Difference-in-Differences (DiD). Сравниваем изменение ЧОД (
p_2 - p_1) у попавших в кампанию vs не попавших.Effect ≈ (treated_p2 - treated_p1) - (control_p2 - control_p1)Условие: «контрольные» клиенты сопоставимы по сегменту/продукту/уровню ЧОД до кампании. Идеально — propensity score matching.
-
Synthetic control / matching. Подобрать на каждого targeted клиента двойника-нетаргетированного с похожими доходами в
p_1. -
Сравнение по сегменту. Если кампания шла только по одному сегменту — сравнить динамику с другими.
Метрики для отчёта
| Метрика | Что показывает |
|---|---|
| Response rate | Сильно ли «зашёл» оффер целевой аудитории |
| Activation rate | Сколько откликов превратилось в реальные деньги |
| ARPPU кампании | Средний доход на привлечённого |
| Incremental ЧОД (DiD) | Чистый эффект кампании |
| ROI = (Incremental ЧОД − cost)/cost | Финальная мера успеха |
Подводные камни
- «Привлечённый ЧОД» без сравнения с
p_1переоценивает эффект — клиент мог приносить столько же и без кампании. - Атрибуция к менеджеру. Если у клиента несколько менеджеров за период, чей это ЧОД? Обычно — последний / по бизнес-правилу.
- Self-selection bias. Кампанию таргетили на «горячих» клиентов — они и так бы принесли деньги. Без контроля любая оценка завышена.
- Канибализация. Пользователи могли мигрировать с одного продукта на другой → ЧОД продукта вырос, но банк в сумме не выиграл.
- Длительный лаг. ЧОД от кредита проявляется месяцами — оценивать только
p_2сразу после рассылки = недооценить. - Сегмент менеджеров. Менеджеры премиум-клиентов априори покажут больший ЧОД — это не их «эффективность», а сегмент. Нормировать по сегменту/портфелю.
Эталонный ответ
(1) JOIN campaign с pl по периоду p_2 и положительному response, агрегировать по manager_id. Лучше — uplift-версию (p_2 - p_1).
(2) Без контроля честно оценить нельзя; используем DiD/matching для инкрементальной оценки. Для отчёта — пакет метрик: response rate / activation / ARPPU / incremental ЧОД / ROI.