Comments 8
Статья очень интересная. Задача актуальная. Интересно, а как проводили тестирования? чтобы узнать как повлияет изменения цены на спрос. Или программа автоматически регулирует цену в зависимости от оборотов?
Поддерживаю, статья интересная и задача актуальная. Я бы еще поинтересовался - параметры модели, по сути, являются случайными величинами, то есть здесь имеет место задача стохастического программирования. Вероятностный фактор каким-то образом учитываете?
Из графика можно сделать вывод, что Pyomo с солвером ipopt значительно превосходит SciPy с cobyla при N > 20.
По-моему не очень корректное сравнение: ipopt использует 1 и 2 производные (градиент и гессиан), а cobyla - нет. Последний подходит и для случая, когда производные невычислимы. В первом явное определение производных должно сильно ускорить.
Кстати, а эта задача не имеет ли аналитического решения? Или её можно свести к СНАУ?
Да, верно, данные солверы по-разному подходят к решению оптимизационной задачи, именно поэтому они были выбраны для сравнения, чтобы показать разницу в производительности, в будущих статьях мы обратим больше внимания на эти моменты.
По поводу аналитического решения - такой задачи мы себе не ставили, т.к. на практике система уравнений сложнее.
А как вы группируете ассортимент? Ведь товарная номенклатура интернет-магазина включает в себя десятки тысяч наименований товаров, которые можно объединить в классы, подклассы, группы, подгруппы и т.д. Для каждого индивидуального товара коэффициенты эластичности оценить невозможно, значит нужно укрупнять...
Мне это напоминает задачу из моей практики работы инженером ПТО в строительной организации, молодым специалистом после института. У нас был завод железобетонных конструкций (ЖБК), на продукцию которого нужно было разработать прейскурант. Калькуляция на ЖБК составляется на 1 м3, а отпускная цена определяется путем умножения цены в руб./м3 на объем 1 изделия (м3/шт.). Продукция завода - это реально тысячи видов конструкций, которые были разбиты на разделы - например, плиты перекрытий, сваи, фундаментные блоки, перемычки и т.д. Внутри каждой группы - свои подгруппы, например, сваи подразделяются по классу нагрузки (из-за различного армирования цена на 1 м3 получается разной). На каждое изделие калькуляцию не составишь - прейскурант получится гигантский, а чересчур укрупнять тоже нельзя - будут искажения в отпускной цене, особенно для ходовых изделий, которые пользуются спросом на рынке, типа фундаментных блоков и плит перекрытий. Нужно было искать золотую середину. Получалось нечто вроде задачи классификации... Ну, тогда про возможности кластерного анализа в python мы еще знать не знали ))
В вашем случае тоже, вероятно, как-то нужно искать эту золотую середину.
И еще один момент, который мне бросился в глаза. В вашей модели не учтены перекрестные связи между различными группами товаров. У вас не получается так, что модель просто выберет группы товаров с наибольшей торговой наценкой, а малорентабельные группы просто обнулит?
Вообще, эти перекрестные эффекты как-то исследовались? Ведь если же товары-заменители. Если вы поднимете цены на один вид штанов, то граждане начнут массово покупать штаны другого вида, то есть эластичность спроса на один товар зависит от цен на другой.
Cпасибо за интересный пример из вашего опыта,
да, товары имеют классификацию, как правило, это древовидная иерархия категорий и т.д.
В рамках этих групп можно решать задачу ценообразования.
Там, где невозможно определить коэффициенты — нет достаточной статистики или возможности найти похожие товары для восстановления коэффициентов, подобные модели не используются. В таких случаях используются стандартные подходы ценообразования (по наценкам, рынку и т.д.).
По поводу кросс-эффектов и товаров заменителей – как правило данные эффекты можно наблюдать при значительных изменениях цены, в этом случае можно добавлять дополнительные ограничения в систему, штрафные функции и т.д. Собственно, этими и подобными вопросами занимаются в ценообразовании.
Оптимизационные задачи в ритейле