Comments 27
Спасибо. хорошая статья.
Сложно говорить просто "спасибо" - вроде поставил плюсик и иди дальше. Вот критиковать "легче" и даже не легче, а кажется более нужным, полезным.
Тут критиковать не хочется, не нужно и статья хорошая - и хотелось бы чтобы МЛ читатели обратили на материал внимание - может комментарий хоть немного да поможет.
Лучше наняли бы гадалку или какого ясновидца и платили бы столько же, сколько сами все вы вместе получаете.
А после бы сравнили точность предсказаний.
Вот это и был бы результат.
А когда нет внятного вычисления ошибки второго рода, то мы тут все молодцы-удальцы
Спасибо за статью!
Очень хотелось бы посмотреть на то как ваши модели конкурируют с тривиальными решениями (среднее, медиана, среднее последних N наблюдений)
Иначе это смотрится как "мы сделали сетку в ретейле и молодцы. наверное... но это не точно"
И очень классно было бы еще взглянуть на то, как соотносятся затраты на тяжелые модели с повышением качества прогнозирования.
А бустинг как обучали? На каждом ряде, на каком-то элементе иерархии, или все сразу запихнули?
Ждем статью про нейронки :-)
Бустинги тоже есть - мы их обучаем на подгруппах датасетов, то есть на на всех данных сразу, т.к. положить все данные в одну модель (не нейронку) - это утопия. Поэтому spark.ml почти неприменим в таких случаях.
Про нейронки будет, да.
Тривиальные решения плохо подходят для задачи прогнозирования промо по нескольким причинам: большое плечо прогноза (в среднем 5-10 недель до старта промо) - тут как минимум необходимо учитывать сезонный фактор; отсутствие собственной статистики наблюдений у значительной доли товаров; изменение ключевых факторов, влияющих на спрос относительно истории. Например, во всех наблюдениях в истории скидка на товар не превышала 20%, а в будущем промо будет 50% - спрос в таком случае может измениться в несколько раз.
При этом, мы не отказываемся полностью от их использования. Одна модель из стека (мультипликативная) использует в основе нечто схожее со скользящей средней с рядом преобразований.
По поводу соотношения цена-качество в контексте использования тяжёлых моделей: с одной стороны, никто не отменял принцип Парето. С другой - более сложные модели позволяют не только подтянуть качество прогноза, но и прогнозировать ряд важных для бизнеса активностей, с которыми трудно/невозможно работать используя простые подходы. Помимо этого, нам на руку играет эффект масштаба - Магнит это >30 тысяч торговых точек, поэтому каждый дополнительный процент точности приносит компании существенные деньги.
Во как здорово, кстати именно по этому я не хожу в Магнит никогда, там постоянно ощущение что ничерта ничего нет и полупустые полки
Я всегда догадывался что там както очень жестко прогнозируют продажи и если в день выкупают 10 пачек сахара то логистика обеспечивает поставку ровно 10 пачек в сутки… и о горе тебе если ты пришел в магазин за час до закрытия… сахара там не будет вообще
тоже самое с курицей… всегда пустой холодильник где лежат две пачки с поврежденной упаковкой
в итоге из-за ваших гениальных прогнозов я всегда хожу в соседний магазин конкурентов, где к закрытию всегда есть что купить
Сахар и Курица - это категории товаров повседневного спроса и они практически никогда не бывают с акционными ценниками, то есть не являются товарами "промо", о прогнозировании которых, кстати, идёт речь в статье. Если бы Вы её прочитали, то стало бы понятно, что такой комментарий не уместен, ведь речь в нём идет даже не о прогнозе, а о процессах пополнения. Мы не можем сказать, что это не является проблемой, но с темой статьи корреляции почти нет. Сразу отвечаю на вопрос есть ли недоработки в процессах пополнения - да, они случаются, но они же и решаются в рамках других систем.
Фрустрация и негатив - это нормально, но он не может быть повсеместным.
тем не менее, если сегодня зайду в магнит, я специально для статьи сфоткаю полупустую полку
и такая ситуация в любом магните
причем у других сетевиков такого эффекта практически нет
Думаю, что у Вас уйдет много времени на то, чтобы сделать 25 тысяч фотографий в каждом магазине. Доказуемо ровно и обратное, поверьте)
ну поспорьте со мной, докажите что я не ЦА вашего магазина потому что много думаю
Доказуемо ровно и обратное, поверьте)
окей, но я в итоге не хожу в Магнит
у меня довольно большая выборка, Краснодарский край, штук 10 магазинов, Московская область штук 10 тоже… в Москве штук 20 (я много раз менял съемные квартиры и районы)… везде одно и тоже
конечно на 25 тысяч можно что угодно сказать что это не так, но я свой выбор сделал и ктото тоже… вы будете спорить? ну ок, только я всеравно в магнит зайду после остальных… я частенько даже в гипермаркет на авто езжу чтото купить… обойдя местные магазины у дома… не заходя в магнит… потому что всегда оттуда с пустыми руками выхожу
мне кажется вы просто не ходите по магазинам самостоятельно или ходите в какуюнить экстру
Впервые вижу, чтобы state space модели временных рядов называли "статистическими". А линейная регрессия это не статистическая модель?
Прям сильно в теорию автоматического управления капнули, конечно. Описанная модель названа статистической в том числе и потому, что когда-то выросла из ARIMA, а не из модели описания состояний динамической системы.
Но ведь ARIMA это и есть state space модель в дискретном времени...
Мне просто странно, что вы вводите некую новую терминологию, при наличии уже устоявшейся. Иногда модели класса SARIMAX и ETS называют эконометрическими, т.к. их часто проходят на курсах эконометрики.
Но термин "статистическая модель" гораздо более широкий, чем state space в дискретном времени, и безусловно включает в себя линейную регрессию.
Читать конечно интересно, но дайте данные самим покрутить повертеть.
Спасибо за толковую статью.
Есть вопрос - прогноз погоды используете?
Альфа банк на kaggle выкладывал свои данные транзакций банкоматов близкие к реальным. Если тоже надумаете провести конкурс дайте знать.
Спасибо за отзыв. Прогнозы погоды не используем из-за длинного плеча (6-10 недель), подробнее писали об этом в предыдущей статье: https://habr.com/ru/companies/magnit/articles/664358/
"Стандартная линейная модель имеет вид: y = a0 + b1x1 * b2x2 * b3x3 * … * bnxn,"
Замените '*' на '+'
Хороший обзор, спасибо.
Я понимаю что не возможно обучить одну модель на сотни тысяч товаров и магазинов. По каким критериям вы разделяли модели. Например на каждую точку (магазин) своя модель со всеми товарами, или на каждую категорию товаров своя модель а признак магазин закодирован в данных. Если магазин вы кодируете в данных, то каким образом гео данные, или что-то другое. Как запускается прогноз если открывается новая точка (магазин) и по ней нет истории. Тоже самое про товар как делается прогноз на товар по которому нет истории. Спасибо
Правильный выбор варианта детализации обучения моделей зависит от глубины погружения в специфику бизнеса, с которым Вы работаете. Вариант обучения до магазин-все товары, вероятно, может подойти, если у Вас достаточно однородный ассортимент, большой объём статистики и очень разные (с точки зрения паттернов поведения покупателей) магазины. Это точно не наш случай. Как писали в статье - в каждой модели мы используем свой вариант детализации: товар - магазин, товар - группа магазинов, группа товаров (закрывающих одну потребность) - один или несколько магазинов. Объединение магазинов можно начать с географической близости, при необходимости, дополнительно кластеризовать по важным признакам.
Существует много вариантов прогнозирования новинок, например:
Подбор аналогов через отдельную модель по близости наименования, фасетных свойств или иных характеристик прогнозируемой сущности; экспертные прямые аналоги.
Использование моделей, обученных выше уровня магазин-товар. Здесь в модели отдельные товары и торговые объекты описаны через признаки.
А как вы хостите и автоматизировали выкатку моделей в прод, их там наверняка больше тысячи, получается тысяча бекендов каждая с моделью, или один бекенд на каждую группу моделей, или как это все работает ?
Есть свой процесс CI/CD с примочками, в котором новые модели (в каком-то алгоритме их может быть 10 тысяч, а где-то количество доходит и до миллиона) одного алгоритма проходят путь обучения и прогноза на участке данных или же на всех данных, где уже есть факт продаж, до проверки результатов экспертом. При положительном исходе процесс CI/CD идет дальше с финальной точкой в виде помещения обновленного проекта в целевой директории. Уже после начинается полноценное переобучение и использование модели в ансамбле.
Проекты алгоритмов в основном содержат PySpark код, а оркестрация реализована с помощью надстроек над Airflow. По сути у нас один бэкэнд на все алгоритмы/модели.
Если интересно, то можем и это записать себе в бэклог по статьям.
Модели прогнозирования продаж в «Магните»: Легенда об Ансамбле