Pull to refresh
72
0
Artem Vorozhtsov @greck

ML Engineer

Send message

Про бандитов. Бандитов можно заменить на "регулярно добавлять в train set свежие данные и обновлять модель". В чём собственно отличие. Бандиты были придуманы для тестирования независимых концептов, которые не находятся в каком-то непрерывном пространстве параметров. А у нас есть такое пространство - цена, эмбединги и прочее. То есть не надо гадать, что произойдет с повышением цены на 5% - продажи точно упадут. Упадут они на 7% или на 10% вы с помощью бандитов не узнаете, так как

1) классические простые бандиты просто смотрят на дельту и они не умеют часть движений продаж атрибуцировать к контексту;

2) на одном товаре вы не получите разрешающую способность, чтобы стат значимо видеть разницу между 7% и 10%

Обе эти проблемы призваны решить контекстуальные бандиты, которые как бы тоже живут в feature space, а не в мире дискретных независимых конфигураций.

Но тут начинается интересное – развивая контекстуальных бандитов вы приходите к тому, что простая концепция "регулярно добавлять в train set свежие данные и обновлять модель" 1) проще 2) работает лучше

Про проверку вынужден отвечать коротко: конечно, мы проверили модели и алгоритмы на практике и нам понравились результаты. Как работает ценообразование вообще в Яндекс Маркете рассказать не могу.

Про естественные движения. Когда ценами управляют люди или алгоритмы, то часто в качестве входных параметров в свои правила/алгоритмы они используют цены – закупочные или цены конкурентов. Входные параметры шевелятся и в результате шевелятся и и итоговые цены.

Чтобы получать правду в динамической системе с отложенными эффектами есть два известных способа (оба активно используются): 1) длинные AB-эксперименты (6 месяцев) 2) изобретение метрики, которая за первые две недели коррелирует с отложенными эффектами.
Данные длинных экспериментов очень в этом смысле ценны, так как как раз позволяют провести исследование и проверить есть ли двухнедельные прокси метрики (собираемые за первые 2 недели эксперимент) корреллирующие с итоговыми долгосрочными эффектами через 6 месяцев

Нет, Tango Tree про другое, судя по тому, что написано в Википедии. Там написано, что Tango Tree – binary search tree, а дальше сложно :). Suffix Tree – это НЕ binary search tree.

Это что за зверь это mlr-оптимизация?

Вот есть статья про это http://acm.mipt.ru/twiki/bin/view/Algorithms/SuffixArray

Вроде бы факторный анализ и A/B-тестирование – это про разное, по крайней мере в википедии в статьях про их связь ничего не сказано. Факторным анализом люди точно занимаются, и в старом смысле (PCA) и в новом (autoencoders, нейросети для вычисления latent variables).

Если же речь про факторный анализ самих метрик – это интересный вопрос, ничего про это не слышал. Действительно, можно рассмотреть сотню имеющихся метрик в системе A/B тестирования, взять тысячу последних экспериментов и подвергнуть эти данные факторному анализу, чтобы выявить зависящие друг от друга метрики и построить множество скрытых независимых метрик. Возможно, даже удастся получить новые более чувствительные метрики.

Про воспроизведение экспериментов тоже не понял вопрос. Воспроизводимость экспериментов – это то, на чём основан сам метод A/B тестирования – когда мы шипаем в прод, мы верим, что воспроизведутся те результаты, которые мы видели в эксперименте. Эксперименты иногда повторяют, и иногда они показывают те же результаты, а иногда другие из-за изменившегося контекста или из-за того, что ошиблись в сетапе эксперимента тогда или сейчас.

Если это "максимизация прибыли" - то надо выяснить каким образом она определяется. А если "определенная оборачиваемость" - то другой это процесс и другая цена.

С определением прибыли вроде нет проблем (кроме технических – из правильных таблиц взять правильные свежие данные). Цель я вроде бы тоже обозначил максимально чётко. Максимизировать оборот при ограничении на прибыль, максимизировать прибыль при ограничении на оборот, максимизировать L = оборот + lambda * прибыль – согласно Лагранжу это как раз три эквивалентные задачи с одним и тем же решением

С 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 рельсы и убедиться, что всем рулят правильные гибкие люди способные формулировать гипотезы/идеи улучшений, правильно их приоритизировать и честно проверять.

Кстати, всё таки выскажусь – определение эластичности в википедии меня очень расстраивает как математика.

Вот эластичность по википедии

E_{\langle p \rangle} = \frac{\Delta Q/Q}{\Delta P/P}

и вот эластичность в точке: E_d = \frac{\mathrm{d}Q_d}{\mathrm{d}P} \times \frac{P}{Q_d}

Всё это очень смущает. Нет необходимой чёткости, начиная с того, что непонятно, это число или функция, и если функция, то функция каких аргументов. Ещё эти загадочные индексы внизу букв E и Q, какой-то скрытый страх определения эластичности в точке через простую производную (используются неуместные здесь дифференциалы и слова типа infinitesimal change, последнее относится либо к нестандартной математике и интереснейшей концепции surreal numbers Джона Конвея или к историческому определению Ньютона, ранним дням математики, когда ещё не было чёткого определения производной в точке и использовали интуитивное понятие бесконечно малого приращения, которое уже странно использовать в современных статьях). В определенииE_{x_\ell,p_k}ниже появляется буковка w (wealth), которая никак не участвует в формуле и возникает ощущение, что студент не в тему решил показать, что он знает слово "частная производная" и всё таки допустил ошибку.

E_{x_\ell,p_k} = \frac{\partial x_\ell(p,w)}{\partial p_k}\cdot\frac{p_k}{x_\ell(p,w)}  = \frac{\partial \log x_\ell(p,w)}{\partial \log p_k}

– нельзя под знаком дроби писать {\partial \log p_k}, там должна быть буква одного из аргументов функции сверху над чертой, но никак не функция (хотя физики себе такое тоже позволяют, но их за это надо ...).

Смущает также качество иллюстраций (как типографическое так и содержательное). Надо что-то с этим делать.

Самое простое и естественное, с моей точки зрения, сделать так:

  • определить нормализованнуюю кривую спросаE(r) – это важное и удобное понятие само по себе;

  • и сказать, что эластичность (в текущей точке цены) это производная нормализованной кривой спроса в точке 1 со знаком минус, то есть

\mathrm{slope} = -E'(1)

И я намеренно в статье назвал это slope, чтобы никого не смущать (но по факту смутил) и не называть это эластичностью (мельком обозначил, что здесь я это буду называть эластичностью) и не быть завязанным на три определения в википедии - elasticity, arc elasticity, point elasticity - они мне не подходили, так как первая определяется через дельты, то есть это не производная в точке, а функция от двух цен, вторая тоже от двух цен и вообще не нужна, детский сад какой-то, а третья по сути ОК (но по формуле не ОК), но не содержит знак минус, который я не хотел с собой таскать всю статью.

 У эластичности есть "твердые" экономические обоснования, почему она такая, а не другая. И это диктует как ее рассчитывают и используют.

...

Я делаю сервис для оптимизации ценообразования на ВБ и использую там ML для: если нельзя посчитать эластичность

Пролейте, пожалуйста, свет:

1) Что за "твёрдые" обоснования?

2) Ваш сервис используется для ценообразования на ВБ? Для какого количества товаров? И как вы оцениваете качество ценообразования?

3) Расскажите, пожалуйста, если не секрет, какие другие варианты выбирать цену кроме как по кривой спроса + cost? Мне известны системы ценообразования, основанные на правилах, которые используются на практике в разных кампаниях. Правила оперируют закупочной ценой и вообще юнит экономикой товара (cost), эластичностью, ценами у конкурентов (ref_prices, min_ref) и ценами товаров аналогов. Речь о чём-то таком?

Про 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. Хорошая новость, что она есть и ей можно научиться.

Сорри, был в отпуске. Я считаю, что знак минус не важен и английская википедия со мной согласна: 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, получит эластичность, получит оптимальную формулу, поживёт с этой ценой, потом модель обучится по новым данным и так далее.

про сотен миллионов это я загнул, я имел в виду сотен тысяч :)

Если интересуют кривые спроса может попробовать прямо его посчитать, а не обходными путями, через эластичность?

Нельзя просто взять и посчитать кривые спроса. Я с этого начинаю статью. Мне кажется это важный момент, который хотелось бы точно донести до читателей – нужен 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 ... через метод множителей лагранжа

    • простые формулы для аналитических вариантов кривых для интуиции и заглушек

Спасибо за ссылки. Я искал не определение эластичности, а методы получения кривых спроса методами ML для сотен миллионов товаров маркетплейса. Этого у ссылках нет. А также я искал примеры типичных аналитических формул для кривых спроса формул и ответы типа \mathrm{price}_{opt} = \mathrm{cost}\cdot {\lambda \cdot s \over (\lambda +1)\cdot (s-1)}. Эту последнюю формулу для степенных кривых спроса мне хотелось бы где-нибудь найти и почитать. Конечно, кривые спроса в жизни часто не степенные, но формула простая и даёт важную интуицию.

Задавайте вопросы. Интересно ли поучаствовать в вебинаре по теме статьи?

Спасибо!

Тема также раскрыта в https://youtu.be/1nx3YXq6gG4
Научно технический-рэп, Папа может в Си

Так, я же написал в своем критерии про 18+. Для <18 мой критерий неприменим, для <18 все гораздо сложнее.

10 критериев — это слишком много.
Для многих достаточно одного: вам 18+ лет и вы ни разу ничего не прогали в 3 часа ночи.
Поясню. Призвание к 18 годам должно уже проявится, и что-то на каком-то языке программирования вы уже должны уметь писать. Без призвания сидеть перед монитором с буквами — это свою угробить жизнь. Чтобы сидеть и прогать в 3 часа ночи нужно 1) любопытство и я бы даже сказал страсть 2) воля к победе и бесстрашие перед множеством проблем, упорство 4) способность разгребать доки и чужой код 5) самостоятельность… короче, 1 критерий вместо 10, и в отличие от перечисленных в статье этот один легко определяется (каждый сам для себя легко на него ответит, самообман невозможен).
Нашел текст в викиучебнике, исходный вариант которого написал Непейвода. Там есть что почитать любителям философии от IT.
Есть такой интересный ученый — Непейвода Николай Николаевич.
Он сформулировал короткий и четкий ответ на этот вопрос: комментировать нужно «призраки» и «подпорки».

Подпорки — (ЕСТЬ В КОДЕ, НЕТ В ТЕОРИИ) это отклонения от основного случая алгоритма; то что присутствует в коде, но отсутствует в словесном описании сути работы функции
* отклонения от теорем, на основе которых строится код
* дурацкие крайние cлучаи
* учет несовершенства работы используемых внешних функций, подсистем

Призраки — (ЕСТЬ В ТЕОРИИ, НЕТ В КОДЕ) это знания, заложенные в алгоритм; то, что есть в теории, на основе которой был построен алгоритм, но отсутствует явно в коде.
* математические теоремы; например в RSA алгоритме заложена формула a^(phi(n)) === 1 mod (n) и нужно в коде в комментариях написать ссылку на эту теорему и случай n=p*q.
* инварианты в циклах
* то, о чем полезно знать при чтении кода, но что никак в этом коде не отобразилось, так как является абстракцией более высокого уровня, нежели код


Он этому учил студентов в Ижевске

Information

Rating
Does not participate
Location
London, England - London, Великобритания
Date of birth
Registered
Activity