Бесплатная доставка: какой средний чек компенсирует отмену платы

Магазин получает с покупателя двести рублей за доставку и собирается отменить плату, чтобы увеличить средний чек. Предложение выглядит небольшим: стоимость товара в корзине гораздо выше двухсот рублей. Но в кассу от увеличения корзины приходит не только прибыль — большую часть дополнительных продаж придётся заплатить поставщикам. Поэтому двести рублей платы нельзя заменить двумястами рублями дополнительной корзины.

Что остаётся с одного заказа

Возьмём условную экономику: товарная корзина 2500 рублей, валовая маржа 35%, комплектация 100 рублей, перевозчик 250 рублей, покупатель платит за доставку 200 рублей. Вклад заказа равен 2500 × 35% − 100 − 250 + 200 = 725 рублей. Вся арифметика ведётся в сопоставимых суммах по одной системе учёта налогов; постоянные расходы пока не меняются.

После отмены платы формула теряет последние двести рублей. Чтобы сохранить прежний вклад при прежнем количестве заказов, дополнительная валовая маржа должна покрыть эту потерю. При маржинальности 35% нужно увеличить корзину примерно на 571,43 рубля. Новый необходимый средний чек составляет 3071,43 рубля, если состав товаров сохраняет ту же маржинальность.

Вычислить порог и проверить сценарий

Python ниже считает оба результата: требуемый средний чек при неизменном числе заказов и необходимый рост заказов, если новая корзина составит только 2800 рублей. Это два разных способа компенсировать потерю платы. Их нельзя независимо сложить как готовые проценты: вклад периода равен произведению числа заказов и вклада одного заказа.

from decimal import Decimal, ROUND_CEILING
old_basket = Decimal('2500')
gross_margin_rate = Decimal('0.35')
fulfillment = Decimal('100')
carrier = Decimal('250')
old_delivery_fee = Decimal('200')
old_contribution = old_basket*gross_margin_rate-fulfillment-carrier+old_delivery_fee
required_basket = (old_contribution+fulfillment+carrier)/gross_margin_rate
required_kopecks = (required_basket*100).to_integral_value(rounding=ROUND_CEILING)
safe_basket = required_kopecks/100
new_basket = Decimal('2800')
new_contribution = new_basket*gross_margin_rate-fulfillment-carrier
needed_order_ratio = old_contribution/new_contribution
print({'old_contribution':str(old_contribution),
       'required_basket':str(safe_basket),
       'new_contribution_at_2800':str(new_contribution),
       'required_order_growth_pct':round(float((needed_order_ratio-1)*100),2)})
assert old_contribution == 725
assert safe_basket == Decimal('3071.43')
assert new_contribution == 630
assert safe_basket*gross_margin_rate-fulfillment-carrier >= old_contribution
assert (safe_basket-Decimal('0.01'))*gross_margin_rate-fulfillment-carrier < old_contribution

При корзине 2800 рублей остаётся 630 рублей с заказа. Для сохранения прежнего вклада понадобится примерно на 15,08% больше заказов. Если число покупок не изменится, разница составит минус 95 рублей на каждом заказе. Такой расчёт позволяет продуктовой команде до запуска записать проверяемое условие окупаемости, вместо общего ожидания «люди станут покупать больше».

Порог бесплатной доставки — ещё не прогноз среднего чека

Надпись «бесплатно от 3000 рублей» не означает, что все покупатели начнут собирать корзину ровно на три тысячи. Часть клиентов уже покупала выше порога, часть не доберёт товары, часть уйдёт. Одни объединят два небольших заказа в один, другие добавят дешёвый товар с низкой маржой. Для решения нужен прогноз по распределению корзин, а не только один средний показатель.

Особенно внимательно оцените заказы, которым бесплатная доставка достанется без изменения поведения. Они сразу теряют прежнюю плату. Дополнительные заказы и добор корзин должны компенсировать эту потерю на всём потоке. Если анализировать только покупателей, которые воспользовались предложением, можно принять уже дорогие покупки за результат новой программы.

Какие расходы нужно пересчитать

Добавленные товары увеличивают массу и объём отправления. Перевозчик может перевести посылку в следующий тарифный диапазон, а склад потратит больше времени на комплектацию. Тогда постоянные 250 и 100 рублей из примера уже не подходят. Для категорий с крупногабаритными товарами разумнее отдельно считать стоимость обеспечения разных типов корзин.

Маржинальность также меняется вместе с составом покупки. Если клиенты добирают дешёвые расходники с маржой 10%, расчёт по общим 35% переоценит эффект. В отчёте полезно разделить исходную корзину и добавленные позиции, показать их вклад и фактическую стоимость доставки. Возвраты анализируют после сопоставимого срока наблюдения, чтобы дополнительный товар не остался фиктивным источником маржи.

Для проверки программы назначьте заранее метрику вклада на допущенного покупателя или другой согласованный уровень анализа. Тогда в результате будут учтены и изменения частоты заказов, и конверсия, и экономика покупки. Рядом покажите число заказов, чек, стоимость логистики и долю бесплатных отправлений. Эти величины объяснят, почему итог изменился, и помогут выбрать следующий порог или исключить дорогие направления.

Следующий шаг

Для оценки такой программы нужно соединить данные заказов, товаров и логистики, проверить детализацию и выбрать показатель решения. В платной «Практической аналитике данных» вы пройдёте кейсы продаж и клиентов, научитесь повторять расчёты на новом периоде и оформлять рекомендации. Это продолжение для перехода от условной экономики заказа к рабочему дашборду и аналитической записке. Откройте программу курса.

Продолжить на практике

  • Практическая аналитика данных ↗

    Превратите знания SQL или Python в аналитическую работу: проверяйте данные, считайте бизнес-метрики, стройте дашборды и объясняйте выводы на трёх прикладных кейсах.