Pull to refresh

Comments 27

Спасибо. хорошая статья.

Сложно говорить просто "спасибо" - вроде поставил плюсик и иди дальше. Вот критиковать "легче" и даже не легче, а кажется более нужным, полезным.

Тут критиковать не хочется, не нужно и статья хорошая - и хотелось бы чтобы МЛ читатели обратили на материал внимание - может комментарий хоть немного да поможет.

Расскажите про что бы Вам хотелось почитать в будущих статьях - мы бы учли это, почему нет?

Лучше наняли бы гадалку или какого ясновидца и платили бы столько же, сколько сами все вы вместе получаете.

А после бы сравнили точность предсказаний.

Вот это и был бы результат.

А когда нет внятного вычисления ошибки второго рода, то мы тут все молодцы-удальцы

От гадалок пришлось отказаться в силу ряда причин:

  1. Нестабильный результат - метрики качества проседают при входе фазы Луны в ретроградный Меркурий.

  2. Гадалки не выдерживают высокой нагрузки и часто ломаются, если в плане на расчёт >10 млн. строк

  3. Высокая амортизация хрустальных шаров.

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

"Стандартная линейная модель имеет вид: y = a0 + b1x1 * b2x2 * b3x3 * … * bnxn,"

Замените '*' на '+'

Поправил, благодарю за внимательность

Хороший обзор, спасибо.
Я понимаю что не возможно обучить одну модель на сотни тысяч товаров и магазинов. По каким критериям вы разделяли модели. Например на каждую точку (магазин) своя модель со всеми товарами, или на каждую категорию товаров своя модель а признак магазин закодирован в данных. Если магазин вы кодируете в данных, то каким образом гео данные, или что-то другое. Как запускается прогноз если открывается новая точка (магазин) и по ней нет истории. Тоже самое про товар как делается прогноз на товар по которому нет истории. Спасибо

  1.  Правильный выбор варианта детализации обучения моделей зависит от глубины погружения в специфику бизнеса, с которым Вы работаете. Вариант обучения до магазин-все товары, вероятно, может подойти, если у Вас достаточно однородный ассортимент, большой объём статистики и очень разные (с точки зрения паттернов поведения покупателей) магазины. Это точно не наш случай.  Как писали в статье - в каждой модели мы используем свой вариант детализации: товар - магазин, товар - группа магазинов, группа товаров (закрывающих одну потребность) - один или несколько магазинов. Объединение магазинов можно начать с географической близости, при необходимости, дополнительно кластеризовать по важным признакам.

  2. Существует много вариантов прогнозирования новинок, например:

    • Подбор аналогов через отдельную модель по близости наименования, фасетных свойств или иных характеристик прогнозируемой сущности; экспертные прямые аналоги.

    • Использование моделей, обученных выше уровня магазин-товар. Здесь в модели отдельные товары и торговые объекты описаны через признаки.

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

Есть свой процесс CI/CD с примочками, в котором новые модели (в каком-то алгоритме их может быть 10 тысяч, а где-то количество доходит и до миллиона) одного алгоритма проходят путь обучения и прогноза на участке данных или же на всех данных, где уже есть факт продаж, до проверки результатов экспертом. При положительном исходе процесс CI/CD идет дальше с финальной точкой в виде помещения обновленного проекта в целевой директории. Уже после начинается полноценное переобучение и использование модели в ансамбле.

Проекты алгоритмов в основном содержат PySpark код, а оркестрация реализована с помощью надстроек над Airflow. По сути у нас один бэкэнд на все алгоритмы/модели.

Если интересно, то можем и это записать себе в бэклог по статьям.

Sign up to leave a comment.