TGViewer
Заскуль питона (Аналитика данных) Заскуль питона (Аналитика данных) @zasql_python · 8.93K subscribers
Post #327 4.25K
Каннибализация продуктов: когда новый продукт убивает старый, а бизнес теряет деньги

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


🤔 Что случилось?

Пользователи просто переключились со старого продукта на новый, но новых клиентов не пришло. Это и есть каннибализация — когда новый продукт съедает аудиторию старого, а не привлекает новую.

🤔 Почему это проблема?

1. Думаем, что новый продукт взлетает, но на самом деле он просто перетягивает пользователей 🍪

2. Если пользователи переходят на более дешевый тариф или менее маржинальный продукт, бизнес теряет прибыль 🥗

3. Если новый продукт не оправдал ожидания, пользователь может уйти вообще из обоих продуктов 🌟

Пример:
У вас был премиум-тариф, который приносил высокий доход, а вы запустили дешевый вариант (дискаунтер). Клиенты ушли в новый продукт, выручка просела.

Как найти каннибализацию? 🍪🍪

Смотрим, как изменилось поведение пользователей после запуска нового продукта.

👩‍💻 SQL-запрос ниже


WITH old_product AS (
SELECT
user_id,
COUNT(order_id) AS old_orders,
SUM(revenue) AS old_revenue
FROM orders
WHERE product_id = 'old_product'
AND order_date < '2024-01-01'
GROUP BY user_id
),

new_product AS (
SELECT
user_id,
COUNT(order_id) AS new_orders,
SUM(revenue) AS new_revenue
FROM orders
WHERE product_id = 'new_product'
AND order_date >= '2024-01-01'
GROUP BY user_id
)

SELECT
o.user_id,
o.old_orders,
n.new_orders,
o.old_revenue,
n.new_revenue,
CASE
WHEN o.old_orders > 0 AND n.new_orders > 0 AND n.new_revenue < o.old_revenue
THEN 'Перешли, но платят меньше'
WHEN o.old_orders > 0 AND n.new_orders > 0 AND n.new_revenue >= o.old_revenue
THEN 'Перешли, но выручка сохранилась'
WHEN o.old_orders > 0 AND n.new_orders = 0
THEN 'Остались на старом'
WHEN o.old_orders = 0 AND n.new_orders > 0
THEN 'Новый клиент'
ELSE 'Нет активности'
END AS user_behavior
FROM old_product o
LEFT JOIN new_product n ON o.user_id = n.user_id;


Что значит результат?

1. Перешли, но платят меньше → Упали чеки, возможно, продукт слишком дешевый или не дает ценности. Нужно тестировать upsell, дополнительные возможности для продажи товаров / услуг, рост GMV, маржинальности 😵

2. Остались на старом → Им новый продукт не нужен? Разбираемся, что именно их удерживает. Возможно, просто пользователи привыкли к другому продукту, а пересаживаться не видят смысла 🪑

3. Мало новых клиентов → Новый продукт не привлекает новую аудиторию. Возможно, нужно менять маркетинг, коммуникацию с пользователями. Доносить понятные смыслы 🖼

📈 Далее из этого можно составить различные чарты и другие инструменты, которые позволяют отслеживать перетоки между бизнес-юнитами, продуктами.

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

😊 Наберется 100 реакций, сделаю еще пост с практическим применением SQL на реальных задачах

UPD: для оценки каннибализации честнее всего запустить 🆎
  • 👍 29
  • 🐳 7
  • 🤔 2
More from @zasql_python
  1. Sep 20, 2026Хэй, чемпион! тут курс вышел бесплатный по статистике, который будет дополняться, записыва…
  2. Sep 15, 2026Починилось 😏 zasqlpython.ru
  3. Sep 15, 2026Сайт пока не работает, ждём 30 минут… @zasql_python
  4. Sep 13, 2026😏 Кто сейчас в поисках работы на ПЕРВУЮ работу по специальности аналитиком, что прикладыв…
  5. Sep 11, 2026😌 Пятница а это значит, пора немного поговорить об обновлениях 👀 Что нового на сайте: 😠…
  6. Sep 9, 2026🍌🍌🍌 Hi, unfortunately, we’re not ready to give you more money, but we are ready to give…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →