Задача Maximize GMV with margin > X%. Если margin > X% относится к суммарному результату total_margin_in_rub / total_gmv > X%, то правильный Score = лагранжиан = gmv + lambda * profit, то есть тому, чему равен Score = gmv * (1 - lambda * max(0, target_margin - margin)) если заменить max(0, target_margin - margin) на (-margin). Вообще надо понимать, что задачи (1) Maximize A with B >= B0, (2) Maximize B with A >= A0, (3) Maximize A with B/A >= C0 (4) Maximize B/A with A >= A0 и другие подобные эквивалентны (если A строго положительно и равенство достигается) и поэтому лагранжиан для них можно взять один и тот же, например, от задачи (1). Поясню: про эквивалентность задачи (1) и (2) все понятно - это привет от лагранжа. Про пару (3) и (4) - тоже самое. А про эквивалентность (2) и (4) легко понять, потому что среди точек, на которых достигается равенство A = A0 не так важно, что максимизировать, B или B/A = B/A0. Лагранжиан и есть score. Если же хочется margin > X% для всех sku (что странно, это не бизнес задача), то score всё равно другой - просто жестко фильтруются ячейки таблицы, где это не так. То есть Score = gmv * (1 - lambda * max(0, target_margin - margin)) может появиться, когда равенство недостижимо или я что-то не понимаю.
Ну и выбор ячейки метод градиента софтмакса - это, конечно, из серии почему бы не применить привычный инструмент для забивания гвоздя. Тут же нужно просто выбирать какое-то лямбда и в каждой строчке выбирать ячейку с максимальным значением L = gmv + lambda * profit И пристрелять нужное значение лямбда, чтобы в итоге попасть в ограничение на маржу. Конечно, при желании, вообще все алгоритмические задачи можно решать через pyTorch градиентом специальной лосс-функции (и сортировку, и максимум на массиве, и дейкстру, и какое-нибудь минимальное остовное дерево ), и это интересные упражнения, но тут нужно без фанатизма. :) Возможно, к софтмаксу с градиентом нужно переходить, когда в цели много несколько сложных KPI и лагранжиан не локализуется до отдельной ячейки. Ну и к ячейкам не надо переходить, если у вас есть кривая спроса в виде нейросетки или кусочно-линейно в каких-либо осях - тут можно находить оптимальную цену, на которой достигается максимум L, не из предзаданной сетки значений.
@@ArtemSunFun спасибо большое за обратную связь, ваше решение выглядит более валидным чем Моё. Насчёт привычного инструмента - если честно, открывал PyTorch второй раз в жизни, решил, почему бы и не применить здесь. Кстати, проблема максимизации GMV при фиксированной марже вынесена как задача 4 уровня в ML Симуляторе, для неё написана проверяющая система (и даже доступна в демо-версии курса). Предлагаю попробовать применить свой алгоритм решения для её решения, будет интересно, если побьёте бенчмарк. karpov.courses/simulator-ml
Богдан, кажется, спутал товары Гиффена с товарами Веблена. Когда покупатели "клюют" на высокую цену - это ситуация Веблена, ситуация с товарами роскоши, а не Гиффена. Гиффен - это история про простые товары, когда при подорожании, например, хлеба спрос на хлеб продолжает расти из-за невозможности найти альтернативу так как товар и так уже самый простой, инфериорный.
Обещанные ссылки от Богдана
MIRO-ДОСКА:
• miro.com/app/board/uXjVODg5odE=/?share_link_id=85994871668
МЕТРИКИ
• www.baeldung.com/cs/mape-vs-wape-vs-wmape
• www.sciencedirect.com/science/article/pii/S0169207016000121
• ua-cam.com/video/M5NOU9eq-Pw/v-deo.html
А/Б-ТЕСТЫ
• www.seerinteractive.com/blog/what-is-a-causal-impact-analysis-and-why-should-you-care/
• en.wikipedia.org/wiki/Propensity_score_matching
• ua-cam.com/video/0r1x38rjZsg/v-deo.html
• habr.com/ru/company/ods/blog/416101/
• habr.com/ru/company/citymobil/blog/560426/
MLSD ИНТЕРВЬЮ C ВАЛЕРОЙ: ДИНАМИЧЕСКОЕ ЦЕНООБРАЗОВАНИЕ
• ua-cam.com/video/WKYPQtqE-m0/v-deo.html
Контакты Богдана:
• t.me/uberkinder
• instagram.com/uberkinder_
• linkedin.com/in/uberkinder
Задача Maximize GMV with margin > X%.
Если margin > X% относится к суммарному результату total_margin_in_rub / total_gmv > X%, то правильный Score = лагранжиан = gmv + lambda * profit, то есть тому, чему равен Score = gmv * (1 - lambda * max(0, target_margin - margin)) если заменить max(0, target_margin - margin) на (-margin).
Вообще надо понимать, что задачи
(1) Maximize A with B >= B0,
(2) Maximize B with A >= A0,
(3) Maximize A with B/A >= C0
(4) Maximize B/A with A >= A0
и другие подобные эквивалентны (если A строго положительно и равенство достигается)
и поэтому лагранжиан для них можно взять один и тот же, например, от задачи (1). Поясню: про эквивалентность задачи (1) и (2) все понятно - это привет от лагранжа. Про пару (3) и (4) - тоже самое.
А про эквивалентность (2) и (4) легко понять, потому что среди точек, на которых достигается равенство A = A0 не так важно, что максимизировать, B или B/A = B/A0.
Лагранжиан и есть score.
Если же хочется margin > X% для всех sku (что странно, это не бизнес задача), то score всё равно другой - просто жестко фильтруются ячейки таблицы, где это не так.
То есть Score = gmv * (1 - lambda * max(0, target_margin - margin)) может появиться, когда равенство недостижимо или я что-то не понимаю.
Ну и выбор ячейки метод градиента софтмакса - это, конечно, из серии почему бы не применить привычный инструмент для забивания гвоздя. Тут же нужно просто выбирать какое-то лямбда и в каждой строчке выбирать ячейку с максимальным значением L = gmv + lambda * profit
И пристрелять нужное значение лямбда, чтобы в итоге попасть в ограничение на маржу.
Конечно, при желании, вообще все алгоритмические задачи можно решать через pyTorch градиентом специальной лосс-функции (и сортировку, и максимум на массиве, и дейкстру, и какое-нибудь минимальное остовное дерево ), и это интересные упражнения, но тут нужно без фанатизма. :)
Возможно, к софтмаксу с градиентом нужно переходить, когда в цели много несколько сложных KPI и лагранжиан не локализуется до отдельной ячейки. Ну и к ячейкам не надо переходить, если у вас есть кривая спроса в виде нейросетки или кусочно-линейно в каких-либо осях - тут можно находить оптимальную цену, на которой достигается максимум L, не из предзаданной сетки значений.
@@ArtemSunFun спасибо большое за обратную связь, ваше решение выглядит более валидным чем Моё. Насчёт привычного инструмента - если честно, открывал PyTorch второй раз в жизни, решил, почему бы и не применить здесь.
Кстати, проблема максимизации GMV при фиксированной марже вынесена как задача 4 уровня в ML Симуляторе, для неё написана проверяющая система (и даже доступна в демо-версии курса). Предлагаю попробовать применить свой алгоритм решения для её решения, будет интересно, если побьёте бенчмарк.
karpov.courses/simulator-ml
Хорошая работа. Спасибо.
Ребят видео недоступно стало: “This video is unavailable on this device”
Скоро починим!
Богдан, кажется, спутал товары Гиффена с товарами Веблена. Когда покупатели "клюют" на высокую цену - это ситуация Веблена, ситуация с товарами роскоши, а не Гиффена. Гиффен - это история про простые товары, когда при подорожании, например, хлеба спрос на хлеб продолжает расти из-за невозможности найти альтернативу так как товар и так уже самый простой, инфериорный.
конспект будет доступен?
Добавили в закреп! Почему-то комментарий лектора из-за большого количества ссылок не был виден
Всё видео: Аааааааааааааааааааааа. )