Как оценить эффективность акции "2 товара по цене 1"?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Оценка эффективности акции "2 товара по цене 1"
В розничной торговле такие акции широко распространены, но их эффективность не всегда очевидна. Data Engineer часто получает задачу подготовить данные для расчёта ключевых показателей.
Основные метрики эффективности
1. Прирост объёма продаж (Volume Lift)
Самая основная метрика — сколько дополнительных единиц товара продано благодаря акции?
WITH promo_sales AS (
SELECT
product_id,
SUM(quantity) as promo_quantity,
SUM(amount) as promo_revenue
FROM sales
WHERE promo_id = 'buy2get1'
AND sale_date BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY product_id
),
baseline_sales AS (
SELECT
product_id,
SUM(quantity) as baseline_quantity,
SUM(amount) as baseline_revenue
FROM sales
WHERE promo_id IS NULL
AND sale_date BETWEEN '2023-12-01' AND '2023-12-31'
GROUP BY product_id
)
SELECT
p.product_id,
b.baseline_quantity,
p.promo_quantity,
p.promo_quantity - b.baseline_quantity as quantity_lift,
ROUND(100.0 * (p.promo_quantity - b.baseline_quantity) / b.baseline_quantity, 2) as lift_percent
FROM promo_sales p
JOIN baseline_sales b ON p.product_id = b.product_id
ORDER BY lift_percent DESC;
Интерпретация: Если lift_percent = 50%, значит продажи выросли на 50%. Нужно учитывать сезонность.
2. Увеличение выручки (Revenue Impact)
WITH metrics AS (
SELECT
CASE WHEN promo_id = 'buy2get1' THEN 'promo' ELSE 'baseline' END as period,
SUM(amount) as revenue,
SUM(quantity) as quantity
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY period
)
SELECT
MAX(CASE WHEN period = 'baseline' THEN revenue END) as baseline_revenue,
MAX(CASE WHEN period = 'promo' THEN revenue END) as promo_revenue,
ROUND(100.0 * (MAX(CASE WHEN period = 'promo' THEN revenue END) - MAX(CASE WHEN period = 'baseline' THEN revenue END)) / MAX(CASE WHEN period = 'baseline' THEN revenue END), 2) as revenue_change_percent
FROM metrics;
Важно: выручка может упасть даже если объём вырос.
3. Маржинальность (Margin)
Прибыль — главный показатель, не выручка.
WITH promo_margin AS (
SELECT
SUM(amount) as promo_revenue,
SUM(amount * (1 - cost_percent / 100.0)) as promo_profit
FROM sales
WHERE promo_id = 'buy2get1'
AND sale_date BETWEEN '2024-01-01' AND '2024-01-31'
),
baseline_margin AS (
SELECT
SUM(amount) as baseline_revenue,
SUM(amount * (1 - cost_percent / 100.0)) as baseline_profit
FROM sales
WHERE promo_id IS NULL
AND sale_date BETWEEN '2023-12-01' AND '2023-12-31'
)
SELECT
p.promo_profit - b.baseline_profit as profit_change
FROM promo_margin p, baseline_margin b;
4. Привлечение новых клиентов (New Customer Acquisition)
WITH promo_customers AS (
SELECT DISTINCT customer_id
FROM sales
WHERE promo_id = 'buy2get1'
AND sale_date BETWEEN '2024-01-01' AND '2024-01-31'
),
prior_customers AS (
SELECT DISTINCT customer_id
FROM sales
WHERE sale_date < '2024-01-01'
)
SELECT
COUNT(DISTINCT pc.customer_id) as total_promo_customers,
COUNT(DISTINCT CASE WHEN pr.customer_id IS NULL THEN pc.customer_id END) as new_customers,
ROUND(100.0 * COUNT(DISTINCT CASE WHEN pr.customer_id IS NULL THEN pc.customer_id END) / COUNT(DISTINCT pc.customer_id), 2) as new_customer_percent
FROM promo_customers pc
LEFT JOIN prior_customers pr ON pc.customer_id = pr.customer_id;
5. Среднее значение чека (Average Order Value)
SELECT
CASE WHEN promo_id = 'buy2get1' THEN 'With Promo' ELSE 'Without Promo' END as scenario,
COUNT(DISTINCT order_id) as orders,
ROUND(SUM(amount) / COUNT(DISTINCT order_id), 2) as aov,
ROUND(SUM(quantity) / COUNT(DISTINCT order_id), 2) as avg_items_per_order
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY CASE WHEN promo_id = 'buy2get1' THEN 'With Promo' ELSE 'Without Promo' END;
6. Каннибализация (Cannibalization)
Критична для покупателей, которые всё равно купили бы товар, только без скидки.
WITH current_year AS (
SELECT product_id, SUM(quantity) as qty_2024
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY product_id
),
prior_year AS (
SELECT product_id, SUM(quantity) as qty_2023
FROM sales
WHERE sale_date BETWEEN '2023-01-01' AND '2023-01-31'
GROUP BY product_id
)
SELECT
p.product_id,
ROUND(p.qty_2023 * 1.1, 0) as expected_qty,
c.qty_2024,
c.qty_2024 - ROUND(p.qty_2023 * 1.1, 0) as incremental_sales
FROM prior_year p
JOIN current_year c ON p.product_id = c.product_id;
ROI от скидки
Какой ROI от затрат на скидку?
WITH calculations AS (
SELECT
SUM(amount) as total_revenue,
SUM(quantity * unit_cost) as total_cost,
SUM(discount_amount) as total_discount
FROM sales
WHERE promo_id = 'buy2get1'
AND sale_date BETWEEN '2024-01-01' AND '2024-01-31'
)
SELECT
total_revenue,
total_discount,
total_revenue - total_cost - total_discount as net_profit,
ROUND((total_revenue - total_cost - total_discount) / total_discount, 2) as roi
FROM calculations;
Практический пример
Акция: 2 товара по цене 1 на кетчуп, март 2024
Объём:
- Без акции (февраль): 1,000 шт/день
- С акцией (март): 1,500 шт/день
- Прирост: +50%
Выручка:
- Без акции: 50,000 руб/день
- С акцией: 60,000 руб/день
- Прирост: +20%
Прибыль:
- Без акции: 15,000 руб/день (30% маржа)
- С акцией: 12,000 руб/день (20% маржа)
- Изменение: -3,000 руб/день (убыток!)
Новые клиенты:
- 40% покупателей — новые
- Нужно проверить LTV
Вывод: Акция привлекает объём и новых клиентов, но убыточна краткосрочно.
Ключевые показатели
Что обязательно считать:
- Volume Lift % — объём вырос?
- Revenue Impact % — выручка вырос?
- Margin Change — прибыль изменилась?
- New Customer % — какой % новых клиентов?
- Cannibalization % — каннибализация других товаров?
- ROI — каждый рубль скидки приносит сколько рублей прибыли?
ROI интерпретация:
- ROI > 2.0 = хорошо
- ROI 1.0 - 2.0 = маржинально
- ROI < 1.0 = убыток
Инструменты
Обязательно:
- Контрольная группа (A/B тест) — наиболее точно
- Аналогичный период в прошлом году
- Учёт сезонности и трендов
- Длительный период отслеживания (1-2 месяца минимум)
- Отслеживание повторных покупок
Ошибки аналитиков:
- Считать только краткосрочный эффект
- Не учитывать каннибализацию
- Не проверять качество новых клиентов
- Использовать неправильный контроль
Итоговый чеклист
Eсли на все вопросы ДА — акция успешна:
- Объём продаж выросли?
- Выручка выросла?
- Прибыль выросла?
- Привлечены новые клиенты?
- Каннибализация минимальна?
- ROI от скидки > 1.5?