Какую выберешь метрику описывающую завершение сделки между продавцом и покупателем?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Метрики Завершения Сделки на Маркетплейсе
Выбор метрики для описания завершения сделки между продавцом и покупателем — это ключевой вопрос для маркетплейсов (Авито, Яндекс.Маркет, Aliexpress). Расскажу о том, как я это анализирую и какие метрики использую.
Понимание "Завершения Сделки"
Сначала нужно уточнить, что означает "завершение сделки". На разных маркетплейсах это разное:
E-commerce маркетплейс (Яндекс.Маркет, Amazon):
- Завершение = Заказ доставлен и оплачен
C2C маркетплейс (Авито, Авто.ру):
- Завершение = Сделка совершена (товар куплен/продан)
Service маркетплейс (Яндекс.Услуги, Uber):
- Завершение = Услуга выполнена и оплачена
В моём ответе я фокусирусь на e-commerce маркетплейсе, так как это наиболее распространённый случай.
Основная Метрика: Order Completion Rate
Это самая важная метрика для описания завершения сделки.
SELECT
DATE_TRUNC('day', order_date)::date as date,
COUNT(*) as total_orders,
COUNT(CASE WHEN order_status = 'delivered' AND payment_status = 'paid' THEN 1 END) as completed_orders,
COUNT(CASE WHEN order_status = 'delivered' AND payment_status = 'paid' THEN 1 END) * 100.0 / COUNT(*) as completion_rate
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY DATE_TRUNC('day', order_date)
ORDER BY date;
Что измеряет:
- Процент заказов, которые успешно доставлены и оплачены
Хороший уровень:
- E-commerce: 85-95% (теряются на доставке, возвратах, отменах)
- Marketplace: 80-90% (больше переменных в логистике)
Почему только Completion Rate недостаточно?
Если смотреть только на эту метрику, пропустим важные детали:
Пример: Completion Rate = 87%, кажется, хорошо. Но где заказы теряются?
-- Детальный breakdown
SELECT
order_status,
payment_status,
COUNT(*) as count,
COUNT(*) * 100.0 / (SELECT COUNT(*) FROM orders) as percentage
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY order_status, payment_status
ORDER BY count DESC;
Результат (пример):
order_status | payment_status | count | percentage
---------------------------------------------------
delivered | paid | 8700 | 87% ← Успешные сделки
delivered | pending | 500 | 5% ← Доставлены, но не оплачены
cancelled | cancelled | 400 | 4% ← Отменены
returned | refunded | 300 | 3% ← Возвраты
lost | paid | 100 | 1% ← Потеряны в доставке
Это открывает глаза! Нужны производные метрики.
Система Метрик Для Полной Картины
1. Conversion Rate (от просмотра к заказу)
SELECT
COUNT(DISTINCT CASE WHEN order_created = 1 THEN user_id END) * 100.0 / COUNT(DISTINCT user_id) as orders_conversion
FROM user_product_views;
Это отвечает на вопрос: сколько % пользователей сделали хотя бы одну попытку покупки?
2. Payment Success Rate (от создания заказа к платежу)
SELECT
COUNT(CASE WHEN payment_status = 'paid' THEN 1 END) * 100.0 / COUNT(*) as payment_success_rate
FROM orders;
Это показывает, скольким заказам удаётся пройти платёж. Типичные потери:
- Declined cards (3-5%)
- Timeout (2-3%)
- User abandoned (5-10%)
3. Delivery Success Rate (доставка без проблем)
SELECT
COUNT(CASE WHEN delivery_status = 'delivered_without_issues' THEN 1 END) * 100.0 / COUNT(CASE WHEN delivery_status IS NOT NULL THEN 1 END) as delivery_success_rate,
COUNT(CASE WHEN delivery_status = 'lost' THEN 1 END) * 100.0 / COUNT(*) as lost_rate,
COUNT(CASE WHEN delivery_status = 'damaged' THEN 1 END) * 100.0 / COUNT(*) as damaged_rate
FROM order_deliveries
WHERE delivery_date >= CURRENT_DATE - INTERVAL '30 days';
4. Return Rate (возвраты после доставки)
SELECT
COUNT(CASE WHEN return_initiated = 1 THEN 1 END) * 100.0 / COUNT(CASE WHEN delivery_status = 'delivered' THEN 1 END) as return_rate,
AVG(DATEDIFF(day, delivery_date, return_date)) as avg_days_to_return
FROM order_returns;
Высокий return rate — признак проблем с качеством товара или соответствием описанию.
5. Order Fulfillment Time
SELECT
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY DATEDIFF(day, order_date, delivery_date)) as median_days_to_deliver,
PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY DATEDIFF(day, order_date, delivery_date)) as p90_days_to_deliver,
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY DATEDIFF(day, order_date, delivery_date)) as p95_days_to_deliver
FROM orders
WHERE order_status = 'delivered';
Средняя доставка может быть 5 дней, но 5% клиентов ждут 20 дней. Это различие важно для UX.
Моя Рекомендация: Используй Funnel Metrics
Для полного понимания завершения сделки, я рекомендую смотреть весь funnel:
WITH funnel AS (
SELECT
'Total Products Viewed' as step,
COUNT(DISTINCT user_id) as count
FROM product_views
UNION ALL
SELECT
'Orders Created' as step,
COUNT(DISTINCT user_id) as count
FROM orders
UNION ALL
SELECT
'Payments Attempted' as step,
COUNT(DISTINCT order_id) as count
FROM payment_events
WHERE event = 'payment_started'
UNION ALL
SELECT
'Payments Successful' as step,
COUNT(DISTINCT order_id) as count
FROM payment_events
WHERE event = 'payment_completed'
UNION ALL
SELECT
'Orders Shipped' as step,
COUNT(DISTINCT order_id) as count
FROM orders
WHERE shipment_date IS NOT NULL
UNION ALL
SELECT
'Orders Delivered' as step,
COUNT(DISTINCT order_id) as count
FROM orders
WHERE delivery_date IS NOT NULL
UNION ALL
SELECT
'Completed (No Returns)' as step,
COUNT(DISTINCT order_id) as count
FROM orders
WHERE order_status = 'delivered'
AND return_initiated = 0
AND DATEDIFF(day, delivery_date, CURRENT_DATE) > 14
)
SELECT
ROW_NUMBER() OVER (ORDER BY
CASE step
WHEN 'Total Products Viewed' THEN 1
WHEN 'Orders Created' THEN 2
WHEN 'Payments Attempted' THEN 3
WHEN 'Payments Successful' THEN 4
WHEN 'Orders Shipped' THEN 5
WHEN 'Orders Delivered' THEN 6
WHEN 'Completed (No Returns)' THEN 7
END) as step_number,
step,
count,
LAG(count) OVER (ORDER BY step_number) as prev_step_count,
count * 100.0 / LAG(count) OVER (ORDER BY step_number) as step_conversion_pct
FROM funnel;
Пример output:
step_number | step | count | prev_count | conversion
------------------------------------------------------------------------
1 | Total Products Viewed | 100000 | NULL | NULL
2 | Orders Created | 8000 | 100000 | 8.0%
3 | Payments Attempted | 7500 | 8000 | 93.8%
4 | Payments Successful | 7200 | 7500 | 96.0%
5 | Orders Shipped | 7000 | 7200 | 97.2%
6 | Orders Delivered | 6800 | 7000 | 97.1%
7 | Completed (No Returns) | 6500 | 6800 | 95.6%
Этот funnel показывает, где именно теряются сделки:
- 92% падение от просмотра к заказу (самое большое)
- 4% падение на платежах
- 2.9% потеря при доставке
- 4.4% возвраты
Дополнительные Метрики Для Маркетплейса
Seller Fulfillment Rate
Для маркетплейса важно, насколько хорошо продавцы выполняют заказы:
SELECT
seller_id,
COUNT(*) as total_orders,
COUNT(CASE WHEN delivered_on_time = 1 THEN 1 END) * 100.0 / COUNT(*) as on_time_rate,
AVG(CASE WHEN order_status = 'delivered' AND return_initiated = 0 THEN 1 ELSE 0 END) * 100 as successful_delivery_rate,
AVG(seller_rating) as avg_rating
FROM seller_orders
GROUP BY seller_id
ORDER BY total_orders DESC;
Net Revenue (После возвратов и комиссий)
SELECT
DATE_TRUNC('month', order_date)::date as month,
SUM(order_value) as gmv,
SUM(order_value) * marketplace_commission_pct as marketplace_revenue,
SUM(COALESCE(refund_amount, 0)) as refunds,
SUM(order_value) * marketplace_commission_pct - SUM(COALESCE(refund_amount * marketplace_commission_pct, 0)) as net_revenue
FROM orders
GROUP BY month;
Мой Финальный Выбор: "Successful Transaction Rate"
Если нужна ОДНА метрика для завершения сделки между продавцом и покупателем, я выбираю:
Successful Transaction Rate = Доставленные и оплаченные заказы без возвратов / Все заказы * 100%
SELECT
COUNT(CASE WHEN
order_status = 'delivered'
AND payment_status = 'paid'
AND return_initiated = 0
AND DATEDIFF(day, delivery_date, CURRENT_DATE) > 14 -- Return window expired
THEN 1 END) * 100.0 / COUNT(*) as successful_transaction_rate
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '30 days';
Почему эта метрика лучше:
- Включает весь жизненный цикл: заказ → оплата → доставка → отсутствие возвратов
- Показывает реальное завершение сделки (не абстрактное)
- Учитывает возвраты (которые в реальности отменяют сделку)
- Просто и интерпретируется: "87% сделок завершаются успешно"
Мониторинг Метрики
# Dashboard для мониторинга
metrics = {
'Successful Transaction Rate': 87.2,
'Payment Success Rate': 96.0,
'Delivery Success Rate': 97.1,
'Return Rate': 4.4,
'Median Days to Deliver': 5,
'Seller Rating (Avg)': 4.6,
}
# Alerts
if metrics['Successful Transaction Rate'] < 85:
send_alert("Warning: STR below 85%")
if metrics['Return Rate'] > 5:
send_alert("Warning: Return rate above 5%")
Эта система метрик позволяет быстро диагностировать проблемы и понимать, на какие области фокусировать внимание при оптимизации маркетплейса.