Условие
Vinted — секонд-хенд маркетплейс. Предложение > спрос — не все товары продаются. Чтобы помочь продавцам, есть фича Push Up (€2 за активацию): на 3 дня поднимается видимость объявления — больше показов на главной/категориях.
Дано: датасет (category_2, category_3, number_of_listings, avg_listing_price_eur, revenue_from_push_ups).
Вопросы:
Section I (1ч):
- (A) Количественно оцените, как работает текущий Push Up для платформы. Есть ли room for improvement?
- (B) В категории
GIRLS_CLOTHING/FOR_BABIESцена Push Up > половины средней цены товара. Почему продавцы всё ещё покупают?
Section II (2.5ч):
- (A) Pros/cons фиксированной цены для всей платформы.
- (B) Альтернатива.
- (C) Численная оценка expected revenue новой стратегии vs текущая. Risks.
Section III (0.5ч): следующие шаги (тестирование).
Решение
Section I.A — текущая performance
Метрики:
- Adoption rate =
revenue_from_push_ups / (€2 × number_of_listings)— доля listings, у которых купили push-up. - Revenue per listing =
revenue_from_push_ups / number_of_listings. - Revenue per category vs share of listings.
Расчёт по категориям и сводный график:
df['pushup_per_listing'] = df['revenue_from_push_ups'] / df['number_of_listings']
df['adoption_rate'] = df['pushup_per_listing'] / 2.0Room for improvement:
- В категориях с высокой
avg_listing_priceadoption низкий — потому что Push-up относительно дешёвый, а отдача высокая, но возможно продавцы не знают. - В категориях с низкой
avg_listing_priceadoption тоже низкий — потому что фича стоит большую долю от listing price. - Имеется U-образная или мономотонная зависимость adoption от listing price → есть структурная неэффективность фиксированной цены.
Section I.B — почему покупают, когда фича > 50% цены товара
Гипотезы:
- Объёмная стратегия: продавцы детских вещей — мамы, у которых много дешёвых товаров; «застрявшие» мешают месту в шкафу — психологический интерес важнее монетарной выгоды.
- Storage / convenience: цена товара не отражает «cost of inactivity» (место, объявление в каталоге).
- Просто кросс-продают: если товар не продаётся 30 дней, лучше потерять €2, чем не продать.
- Bundle психология: продают пакет («10 ползунков» как 10 listings × €5).
- Невнимательность к цене Push-up vs ценность видимости.
Section II.A — pros/cons фиксированной цены
Pros:
- Простота для пользователя — все знают цену.
- Простота кассы / системы.
- Низкая когнитивная нагрузка.
Cons:
- Не extracts WTP (willingness-to-pay): дешёвые категории платят слишком много, дорогие — слишком мало.
- Теряется revenue: для дорогих категорий могли бы взять €5–10.
- Adverse selection: дешёвые категории получают меньше Push-up, и платформа теряет supply quality.
Section II.B — альтернатива
Динамическая цена как % от avg_listing_price (например, 5–10%) с floor €0.5 и cap €5. Альтернативно: функция от ожидаемого views — если push-up даёт +X views, цена пропорциональна X × value_per_view. Или аукцион / sell-through-based: цена выше для категорий с низким sell-through (где push нужен больше).
Pros:
- Лучше ловит WTP по сегментам.
- Выравнивает adoption rate.
- Поощряет дорогие категории.
Cons:
- Сложнее в коммуникации.
- Сложнее в системе (нужны обновления цен).
- Может быть perceived as «несправедливо».
Section II.C — Expected revenue от новой стратегии
Подход:
- Для каждой категории берём текущий adoption и avg_listing_price.
- Аппроксимируем кривую спроса на push-up: при price_p adoption =
f(price/avg_listing_price). Можно через лог-регрессиюlogit(adoption) ~ relative_priceна текущих данных. - Для новой стратегии (например,
price = 7% × avg_listing_price):- Новый relative_price = 7% (фиксирован).
- Новый adoption =
f(0.07). - Revenue per listing =
new_price × new_adoption.
- Aggregate по категориям.
import numpy as np
from sklearn.linear_model import LogisticRegression
df['rel_price'] = 2.0 / df['avg_listing_price_eur']
df['adopted'] = df['adoption_rate'] # дробь, не бинарка
# Преобразуем в долю и используем GLM Bernoulli с весами
# … fit logistic on rel_price (на категориальных средних)Численный результат: например, если в среднем платформа +15% revenue → at scale ~€millions.
Risks:
- Coordination: продавцы могут перейти на категории с низкой ценой Push-up.
- Adverse: дорогие категории могут уйти на competitor если Push дорогой.
- Кривая спроса может быть оценена неточно — нужен пилот.
Section III — следующие шаги
- A/B на категориях: 50% категорий новый pricing, 50% старый. Sticky на listing/seller.
- Pre-period: убедиться в эквивалентности категорий по revenue trends.
- Длительность ≥ 6 недель (cycle: listing posted → push purchased → 3 days → sale).
- Метрики: revenue from push, total seller revenue, adoption, sell-through, listings churn (sellers leaving).
- Гард-метрики: complaint rate, NPS sellers, listings per seller (не уходят ли).
- Sensitivity test: попробовать 5% / 7% / 10% — small experiments first.
- Rollout: победитель выкатываем 100%, мониторим 90 дней на retention sellers.
Подводные камни
revenue_from_push_ups— единственный источник истины об adoption. Но это «реализованный спрос» при текущей цене €2. Чтобы оценить кривую — нужны исторические эксперименты с разными ценами или анализ similar features.- Selection: продавцы покупают push, когда товар не продается — purchase decision эндогенен. Кривая спроса измерена на «отчаявшихся».
- Cross-elasticity: если в одной категории дорого, продавцы переключатся в другую.
- Длительность action 3 дня — может быть кванти-эффект (после 3 дней стало бы больше views?).
- **Невозможно ввести pricing < 1¢ или > some psychological threshold (€10) без изменения user-perception.
Эталонный ответ
(I) Push-up adoption неравномерен по категориям; фиксированная цена €2 не extracts WTP. (II) Альтернатива — динамическая цена как % от listing price с floor/cap. Численно — оцениваем по logit/exp-кривой adoption vs relative_price; ожидаемый рост revenue 10–30%. (III) A/B на категориях, sticky split, 6+ недель, гарды по seller retention и complaints.