Комментарии 18
Очень интересная статья с т. зр. применения DS. Рискну подтвердить догадку автора что "формулы оптимальных цен тщательно скрываются бизнесами". Настолько тщательно, что уже на следующий день после установки новой цены - прежняя формула невосстановимо забывается. При этом каждая такая "формула" часто вообще не формализуется, ее невозможно произнести вслух, записать значения фичей, посылов, мотивов. Либо они ложные, притворные, благовидные.
Причина забывчивости такова: решения об установке внутренних цен на важнейшие сырьевые товары (зерно, металлы, лес, цемент итд) и средства производства (землю, станки, машины) и недвижимость - принимают собственники (бизнеса), как правило, единолично. Причем в обстановке сильного информационного шума (шторма, хаоса, потока ангажированной пропаганды, дезы и, конечно, рекламы). Решение рождается в произвольный момент времени суток. Для собственников установка новой цены - та же спонтанная покупка (читай - продажа), изучение природы которой зашло в тупик. Хотя методы ее провоцирования хорошо известны и даже развиваются, рецидивы - растут.
В силу своего положения - собственники не докладывают аналитикам и нигде не фиксируют кто и что им сказал накануне, донес, пообещал или погрозил, как это иногда делает тот же ФАС. Поэтому на кривую эластичности спроса накладывается личностный фактор, который дифференцирован в моменте. На цену "от хозяина" влияют "особы, приближенные к императору", случайные гости, инфоцыгане, родственники, т.е. все лица из огромного круга общения. Круг этот вряд ли подлежит систематизации, как и их "фичастость".
Оптовые цены производителей на сырье, средства производства и недвижимость колеблются в таких же широких пределах, как и розничные (и давят на них снизу, с временным лагом на оборачиваемость). Вот почему оптимальную цену сложно получить средствами ML, т.к. часть важных фич недоступна и неизмерима. Но работа в этом направлении однозначно выявит взаимосвязи, появятся новые метрик, от уровня гормонов принимающих решения по ценам (медицинский DS) до индикаторов потребительского напряжения (фичинжиниринг статпоказателей и расчет новостных фонов на базе категоризации инфо-поводов с NLP).
Задавайте вопросы. Интересно ли поучаствовать в вебинаре по теме статьи?
После вот этого абзаца я читал с подозрением)
Поиск технических и научных статей по темам "Price elasticity prediction" (как обучать/вычислять кривую спроса) и "Price optimization" (как выставлять цену) не привел меня к желаемым результатам. Каких-то готовых рецептов и того, что можно было бы назвать "математическими основами оптимизации цен на базе эластичности", я не нашел (возможно, плохо старался).
Т.к. про то, как считать эластичность написано в любом базовом учебнике по эконометрике (а про то, что это такое - в учебниках по микроэкономике), обычно в теме про линейную регрессию. Еще тема эластичности раскрывается в учебниках по управленческой экономике, даже без регрессий и логарифмов: точечная и дуговая эластичности.
Если нужно чуть глубже, то есть книги про ценообразование на основе эластичности. Например, Pricing Analytics: Models and Advanced Quantitative Techniques for Product Pricing 1st Edition by Walter R. Paczkowski , там полкниги - формулы))
Статей тоже вагон, не знаю, как было их не найти, например, про ecom:
Anindya Ghose. Arun Sundararajan. "Evaluating Pricing Strategy Using e-Commerce Data: Evidence and Estimation Challenges." Statist. Sci. 21 (2) 131 - 142, May 2006
Funk, B. (2011). Exploring Price Elasticity to Optimize Posted Prices in e-Commerce. e-Business and Telecommunications, 71–81. doi:10.1007/978-3-642-20077-9_5
Vatsa, P.; Ma, W.; Zhou, X. An Experimental Pricing Framework for E-Commerce. J. Theor. Appl. Electron. Commer. Res. 2021, 16, 2571-2578. https://doi.org/10.3390/jtaer16070141
Последнюю еще не читал)
В общем, мне показалось, что про эластичность автор изобретает велосипед)
Я на днях считал ее по данным товаров вб - особых сложностей не встретил (а вот подготовка данных да - это другой вопрос)))
Спасибо за ссылки. Я искал не определение эластичности, а методы получения кривых спроса методами ML для сотен миллионов товаров маркетплейса. Этого у ссылках нет. А также я искал примеры типичных аналитических формул для кривых спроса формул и ответы типа . Эту последнюю формулу для степенных кривых спроса мне хотелось бы где-нибудь найти и почитать. Конечно, кривые спроса в жизни часто не степенные, но формула простая и даёт важную интуицию.
Если интересуют кривые спроса для сотен миллионов товаров, то надо хорошенько подумать, нужно ли считать именно эластичность? У эластичности есть "твердые" экономические обоснования, почему она такая, а не другая. И это диктует как ее рассчитывают и используют. Одно из оснований - линейная зависимость спроса и цены (или других переменных) на данном диапазоне цен (обычно небольшом, т.к. спрос-то не линейный). Благодаря этому это простой для понимания и использования коэффициент. Неэластичный спрос - с эластичностью от -1 до 0 (а не как в статье почему-то написано -2).
Если интересуют кривые спроса может попробовать прямо его посчитать, а не обходными путями, через эластичность? Про Demand Curve Estimation на scholar.google.com - About 2,120,000 results. И про ML достаточно) За эту тему несколько нобелевских премий дали, из недавнего в 2015 году))) Так что если что-то получится - шлите им, они, наверное, оценят)))
Я делаю сервис для оптимизации ценообразования на ВБ и использую там ML для: если нельзя посчитать эластичность - ее приблизительной оценки и для ее коррекции с учетом confounders. А еще есть задача установления первоначальной цены.
про сотен миллионов это я загнул, я имел в виду сотен тысяч :)
Если интересуют кривые спроса может попробовать прямо его посчитать, а не обходными путями, через эластичность?
Нельзя просто взять и посчитать кривые спроса. Я с этого начинаю статью. Мне кажется это важный момент, который хотелось бы точно донести до читателей – нужен ML, чтобы считать кривые спроса для сотен тысяч товаров. Никаких экспертных знаний тут не хватит и измерение кривых спроса на практике не возможно.
Если интересуют кривые спроса для сотен миллионов товаров, то надо хорошенько подумать, нужно ли считать именно эластичность?
Эластичность – это часть информации о нормализованной кривой спроса – производная в точке 1 со знаком минус, поэтому я не совсем понимаю дихотомии считать эластичность или кривые спроса. Конечно нужна полная информация, то есть кривые спроса.
По поводу того, что малая эластичность это от -1 до 0. Если производная меньше нуля, то это товары Гиффена и ими можно пренебречь. Точнее, ими лучше пренебречь и не играть на этом. Я вообще в коде клампаю эластичность на 1.1 снизу и считаю, что эластичностей ниже не существует – так проще избежать разных неприятностей в формулах (в частности в формуле оптимальной цены для степенной кривой в знаменателе есть s - 1 )
Я действительно мало времени уделил поиску материалов. Я искал конкретные рецепты. Через день после публикации я нашел интересное видео как раз с рецептами и привел его в начале статьи:
UPD: Есть интересное и, безусловно, достойное внимания свежее видео на Karpov.Courses "Как построить ML ценообразование на маркетплейсе".
Буду читать и капать дальше эту тему.
Мой рецепт, которым я здесь делюсь, такой:
обучение
pyTorch, нейросетки глубиной порядка 10 слоев
сэмпл = один день продаж какой-либо sku
target = log(sales + 1)
loss = SmoothQLoss
train set > 10 млн строк за год или больше
фильтруем подозрительные сэмплы и сэмплы без сильных изменений цены
не добавляем факторы с возможной утечкой
малоразмерные ембединги для категорий и sku
использование
баланс GMV vs прибыль vs ... через метод множителей лагранжа
простые формулы для аналитических вариантов кривых для интуиции и заглушек
Про confounders. Моя картина мира такая: есть эта великая проблема Correlation vs Causation. Была и есть статистика – строгая математическая наука. И там возникла простейшая идея общей скрытой переменной Z, от которой зависят X и Y и разные методы, позволяющие строить глубокие графические байесовские модели. Но в какой-то момент на практике стали побеждать разные нестрогие алхимические методы, были популярны контекстуальные бандиты в применении к задачам автоматизации поиска оптимальных персональных параметров чего-либо (оформления сайта, рекламного объявления и др. для конкретно человека или для конкретного товара). В ряде кампаний использовалась система Vawpal Wabbit и на конференциях докладывали про успехи применения контекстуальных бандитов в сравнении с байесовскими методами. Потом контекстуальные бандиты уступили место более сложным и ещё более алхимическим вещам на базе нейросетей. На конференциях типа Nips, где я бывал не раз, были воркшопы типа такого Causal Inference & Machine Learning: Why now? Там явно озвучивалась проблема, что есть два лагеря - статистики и ML-щики, и что надо строить мост понимания. А мост такой – ML-щики по факту выигрывали на тестах, внедряли в прод, но при этом правильных слов про то, как и почему это работает, не говорили, и статистиков эта алхимия конечно, раздражала. А как тут построить красивую байесовскую модель, если факторов под сотню или тысячу, и есть текстовые факторы и нет никаких шансов на всех этих факторах построить графическую модель? А если брать мало факторов и на них строить, то результат на AB хуже, чем тупой ML, который типа про correlation, а не causation. Long story short, понимания между statisticians и ML-guys всё ещё нет, в прод шипают ML-guys и шутят шутки типа "Представляешь, у Чак Норриса работают байесовские модели в проде". Ну и да, нужна алхимия, часть которой я и попробовал описать в статье, без правильной алхимии действительно можно получить модель, которая перепутала Correlation с Causation. Хорошая новость, что она есть и ей можно научиться.
Эта алхимия раздражает не только статистиков, но и людей)) Еще Платон вроде говорил, что причиной можно назвать то, что мы понимаем, как это работает.
Я честно не видел исследований про то, у кого результатов больше в проде) Но все исследования воздействий лекарств - статистика и causal Inference, так что я думаю у них не все так плохо)
У causal inference недостаток, что нужно понимать, где причина кроется и как изолировать влияния других факторов. А это большая работа. Нельзя покрошить данные в кастрюлю и надеяться, что "алхимия" сварит суп.
ML тоже можно использовать. У майкрософта, например, есть CausalForest, который такой же, как и обычный, но разбивает так чтобы максимизировать различие в эффекте. Есть методы Matrix Completion, которые тоже для Causal Inference используют. Double machine learning еще. Много их.
Есть даже методы для Causal discovery - поиска причинных моделей)
У эластичности есть "твердые" экономические обоснования, почему она такая, а не другая. И это диктует как ее рассчитывают и используют.
...
Я делаю сервис для оптимизации ценообразования на ВБ и использую там ML для: если нельзя посчитать эластичность
Пролейте, пожалуйста, свет:
1) Что за "твёрдые" обоснования?
2) Ваш сервис используется для ценообразования на ВБ? Для какого количества товаров? И как вы оцениваете качество ценообразования?
3) Расскажите, пожалуйста, если не секрет, какие другие варианты выбирать цену кроме как по кривой спроса + cost? Мне известны системы ценообразования, основанные на правилах, которые используются на практике в разных кампаниях. Правила оперируют закупочной ценой и вообще юнит экономикой товара (cost), эластичностью, ценами у конкурентов (ref_prices, min_ref) и ценами товаров аналогов. Речь о чём-то таком?
Надо было еще подольше подождать, чтобы я совсем забыл про что мы тут разговариваем)))
1. Кажется, я имел ввиду, что есть общепринятое определение что это такое, как интерпретировать и не дело это - изобретать велосипед)
2. Для каждого товара, по которому стоит такая задача) Результат - одна цифра для товара. Для другого - другая. И т.д.
3. Можно еще использовать метод HiPPO - Highest Paid Person Opinion))) Про него писали в первом комментарии) Надежный метод, кстати)
Но если серьезнее, то надо сначала задаться вопросом: какую цель преследуем ценообразованием?
Если это "максимизация прибыли" - то надо выяснить каким образом она определяется. А если "определенная оборачиваемость" - то другой это процесс и другая цена.
Поэтому мне задача "определить кривую спроса" кажется теоретической, потому что без ясной цели непонятно как по ней определять нужную цену. (Плюс если знать цель - то определять цену можно и без нее)
Кстати, всё таки выскажусь – определение эластичности в википедии меня очень расстраивает как математика.
Вот эластичность по википедии
и вот эластичность в точке:
Всё это очень смущает. Нет необходимой чёткости, начиная с того, что непонятно, это число или функция, и если функция, то функция каких аргументов. Ещё эти загадочные индексы внизу букв E и Q, какой-то скрытый страх определения эластичности в точке через простую производную (используются неуместные здесь дифференциалы и слова типа infinitesimal change, последнее относится либо к нестандартной математике и интереснейшей концепции surreal numbers Джона Конвея или к историческому определению Ньютона, ранним дням математики, когда ещё не было чёткого определения производной в точке и использовали интуитивное понятие бесконечно малого приращения, которое уже странно использовать в современных статьях). В определенииниже появляется буковка w (wealth), которая никак не участвует в формуле и возникает ощущение, что студент не в тему решил показать, что он знает слово "частная производная" и всё таки допустил ошибку.
– нельзя под знаком дроби писать , там должна быть буква одного из аргументов функции сверху над чертой, но никак не функция (хотя физики себе такое тоже позволяют, но их за это надо ...).
Смущает также качество иллюстраций (как типографическое так и содержательное). Надо что-то с этим делать.
Самое простое и естественное, с моей точки зрения, сделать так:
определить нормализованнуюю кривую спроса
– это важное и удобное понятие само по себе;
и сказать, что эластичность (в текущей точке цены) это производная нормализованной кривой спроса в точке 1 со знаком минус, то есть
И я намеренно в статье назвал это slope, чтобы никого не смущать (но по факту смутил) и не называть это эластичностью (мельком обозначил, что здесь я это буду называть эластичностью) и не быть завязанным на три определения в википедии - elasticity, arc elasticity, point elasticity - они мне не подходили, так как первая определяется через дельты, то есть это не производная в точке, а функция от двух цен, вторая тоже от двух цен и вообще не нужна, детский сад какой-то, а третья по сути ОК (но по формуле не ОК), но не содержит знак минус, который я не хотел с собой таскать всю статью.
С HiPPOs как раз активно общаюсь и обращаю их в веру.
“One accurate measurement is worth a thousand expert opinions”
– Adam Grace Murray Hopper
“Data levels all arguments.”
— Anthony W. Richardson
“The data speaks for itself. That’s the easiest measure of success.”
— Caitlin Smallwood
Но конечно есть проблема
"It Is Difficult to Get a Man to Understand Something When His Salary Depends Upon His Not Understanding It" - Upton Sinclair
HiPPO по моему опыту крайне не надежный метод, часто опровергаемый тестами, его всегда нужно подвергать сомнению, мир меняется очень быстро, все постулаты нужно перепроверять каждый год тестами и аналитикой. Вообще HiPPO не нужен. Задача HiPPs поставить всё на data-driven рельсы и убедиться, что всем рулят правильные гибкие люди способные формулировать гипотезы/идеи улучшений, правильно их приоритизировать и честно проверять.
Если это "максимизация прибыли" - то надо выяснить каким образом она определяется. А если "определенная оборачиваемость" - то другой это процесс и другая цена.
С определением прибыли вроде нет проблем (кроме технических – из правильных таблиц взять правильные свежие данные). Цель я вроде бы тоже обозначил максимально чётко. Максимизировать оборот при ограничении на прибыль, максимизировать прибыль при ограничении на оборот, максимизировать L = оборот + lambda * прибыль – согласно Лагранжу это как раз три эквивалентные задачи с одним и тем же решением
Вы под эластичностью понимаете что-то другое. Я использую определение, принятое в экономике. Эластичность для нормальных товаров - всегда отрицательная. (это из википедии, в любом учебнике так же, начиная с 1890 года)))
![](https://habrastorage.org/getpro/habr/upload_files/ee1/c35/0b2/ee1c350b240d2aa532479f3c3dd2b699.png)
Я бы еще поставил под сомнение саму бизнес необходимость считать "кривые спроса", но боюсь, что и тут у нас будут разные понятия, что это такое)
Сорри, был в отпуске. Я считаю, что знак минус не важен и английская википедия со мной согласна: Since the price elasticity of demand is negative for the vast majority of goods and services (unlike most other elasticities, which take both positive and negative values depending on the good), economists often leave off the word "negative" or the minus sign and refer to the price elasticity of demand as a positive value (i.e., in absolute value terms).[6] Я физик-математик по образованию, а физики не любят почём зря таскать с собой минусы, константа g=9.8 м/c^2 у физиков положительное число, хотя ось Y обычно смотрит вверх. Глубиной ямы физики тоже оперируют как положительным числом и т.д и т.п.
Но вообще, это неправильное направление дискуссии. Это как известный мем про цвет забора вокруг атомной электростанции. Хотелось бы обсудить саму атомную станцию.
Судя по всему моя статья для вас написана о чём-то не связанном с применением реальной жизни, и наоборот, ваш комментарий "я бы поставил под сомнение саму бизнес необходимость считать кривые спроса" меня вводит, скажем так, в ступор. А на что же ещё опираться, если не на кривую спроса?
Когда есть такое непонимание, вполне возможно, что каждого или хотя бы одного дискуссия может обогатить.
Есть такие встречные вопросы.
В чём специфика задачи установления начальной цены? Возможно она есть, если вы главный игрок на рынке и/или этот товар есть только у вас. Но у меня товары, которые есть во многих магазинах и обычно большая часть деманда удовлетворяется оффлайном или кем-то другим. Даже если вы первый и единственный продаёте этот товар - поставьте цену закупа + Y%, а дальше товар попадет в пайплайн ML, получит эластичность, получит оптимальную формулу, поживёт с этой ценой, потом модель обучится по новым данным и так далее.
Очень интересно, инновационно, надеюсь работает. Вот как раз про последнее и хочется узнать - есть ли какие-то А/Б эксперименты, которые бы показали успешность метода? Ну или на худой конец исторические сравнения, что "после" стало лучше?
В этом смысле больше всего хотелось бы поговорить, да, об этом предположении: "обобщать информацию из естественных движений цен и продаж в прошлом." Почему происходят эти "естественные" движения? Это естественные движения по оптимизации оборота и прибыли? Или берете данные до оптимизации? Как работает ценообразование вообще?
Например, вполне естественно предположить (и у вас есть направленность не только на прибыль), что если спрос упал (кризис), то цены стоит опустить. Если в экономике бум (много денег), то цены стоит поднять. Тогда мало продаж и низкие цены и много продаж и высокие цены, т.е. кривая спроса меняет наклон.
Следующее соображение, эластичность - имеет отложенный эффект (как вы правильно сказали), т.е. цены опустили, а продажи выросли только через какое-то время (если ничего не случилось, скажем с доходами за это время). Другими словами, искать оптимум в вечно движущейся системе - задача динамическая, требующая учета кучи разновременных параметров.
Однако, что немного удивило - это то, что вы можете назначать цены, но не делаете экспериментов. Ссылаетесь на "бандитов", но не делаете какой-то простой инструмент типа "уменьши цену, если продажи выросли на больший процент за месяц, какой бы не был per unit cost, ты поступил правильно, уменьши еще". Что-то типа семплирования Томпсона эффективно бы гналось за оптимальной ценой для каждого из сотни тысяч товаров. ОК, возможно нужно было бы посчитать вдолгую, как вы сделали, чтобы была какая-то долгосрочная, более стабильная стратегия. Но для локальной оптимизации разве не выгоднее делать exploration?
Про проверку вынужден отвечать коротко: конечно, мы проверили модели и алгоритмы на практике и нам понравились результаты. Как работает ценообразование вообще в Яндекс Маркете рассказать не могу.
Про естественные движения. Когда ценами управляют люди или алгоритмы, то часто в качестве входных параметров в свои правила/алгоритмы они используют цены – закупочные или цены конкурентов. Входные параметры шевелятся и в результате шевелятся и и итоговые цены.
Чтобы получать правду в динамической системе с отложенными эффектами есть два известных способа (оба активно используются): 1) длинные AB-эксперименты (6 месяцев) 2) изобретение метрики, которая за первые две недели коррелирует с отложенными эффектами.
Данные длинных экспериментов очень в этом смысле ценны, так как как раз позволяют провести исследование и проверить есть ли двухнедельные прокси метрики (собираемые за первые 2 недели эксперимент) корреллирующие с итоговыми долгосрочными эффектами через 6 месяцев
Про бандитов. Бандитов можно заменить на "регулярно добавлять в train set свежие данные и обновлять модель". В чём собственно отличие. Бандиты были придуманы для тестирования независимых концептов, которые не находятся в каком-то непрерывном пространстве параметров. А у нас есть такое пространство - цена, эмбединги и прочее. То есть не надо гадать, что произойдет с повышением цены на 5% - продажи точно упадут. Упадут они на 7% или на 10% вы с помощью бандитов не узнаете, так как
1) классические простые бандиты просто смотрят на дельту и они не умеют часть движений продаж атрибуцировать к контексту;
2) на одном товаре вы не получите разрешающую способность, чтобы стат значимо видеть разницу между 7% и 10%
Обе эти проблемы призваны решить контекстуальные бандиты, которые как бы тоже живут в feature space, а не в мире дискретных независимых конфигураций.
Но тут начинается интересное – развивая контекстуальных бандитов вы приходите к тому, что простая концепция "регулярно добавлять в train set свежие данные и обновлять модель" 1) проще 2) работает лучше
ML для оптимизации цен на основе эластичности по цене