Pull to refresh
21
0
Дмитрий @Dreamastiy

Пользователь

Send message

Делали очень похожий сервис. Одна из возникающих сложностей - что дерево бинарное (т.е. ветка всегда бьется на две, на скриншотах у вас это тоже заметно). Это совсем не похоже на классическую товарную иерархию, где каждая ветка делится на большое множество подветок. В итоге вы предоставили КатМанам бинарное дерево? Как тогда они с ним работают?

Ура, сегодня почтовые олени доставили подарок от Дедушки.
Буду восстанавливать навыки работы с Arduino
Ну а на Kinder сразу началась охота
image

Мой внучок уже с подарком. Дело сделано, теперь вперед в 2021 год!
А мне пришел подарок от Święty Mikołaj.
Похоже, что я хорошо себя вел в прошлом году :)
Волшебные перо (на чернилах, не на инее) и тетрадь, вкусные сладости, символ 2020 года и плед, связанный лично Снегурочкой.

Что же было внутри?
image
image
Возможно речь идет о SOLVER, но у него очень серьезные ограничения на количество оптимизируемых параметров в дефолтной версии.
Не совсем.
К сожалению каждый отдельный товар больше 6 недель не продается. А основная сложность была спрогнозировать именно первые недели, поэтому рассчитать лаг за 4 недели на уровне магазин-товар не получится. Мы смотрели лаги средних продаж категории.

Можно попробовать использовать производные продаж (кроме среднего значения) на уровне категории. Это хорошая гипотеза на дальнейшее развитие. Основная задача здесь была максимально быстро показать применимый результат с минимальными усилиями, так называемый Quick-Win.
Честно, по косточкам SMAPE не разбирали, но сразу видно два момента:
— ее тяжело дифференцировать и как следствие оптимизировать, т.к. прогноз есть и в числителе и в знаменателе
— выглядит так, что для нее важными остаются товары с наибольшим APE:
влияние на ошибку


Хорошо, если есть понимание что нужно немного перепрогнозить то насколько?

Для точного ответа на этот вопрос надо понимать все косты на всем сквозном процессе предприятия — ФОТ, закупка, логистика, хранение, списания и сотни других факторов, влияющих на себестоимость конкретного товара в конкретном магазине. Отсюда можно сделать свою функцию потерь и ее оптимизировать. Или Reinforcement Learning в помощь:). WAPE, MAPE, SMAPE — это некоторые приближения, которые выбираются под задачу. Определить баланс между BIAS и WAPE можно, например, экспериментально (если вам дадут это сделать КМ'ы).

Тогда это просто дескриптивная статистика которая не помогает мне решить проблему недопрогноза.

Дескриптивная статистика не так плохо, если у вас есть фабрика моделей и вы выбираете наилучшую с точки зрения бизнеса.

а если корректировать вручную то это уже не совсем аналитическое решение

Смотря что считать аналитическим решением. Конечно голубая мечта многих, что весь процесс будет работать без участия людей. Но конкретно в ритейле до этого пока далеко. Поэтому часто аналитика рассматривается как инструмент поддержки принятия решений, а не инструмент принятия решений
Можно оценить из предположения, что исполнение происходит строго согласно прогнозу. Да это сильное ограничение, но позволяет оценить порядок влияния на историческом отрезке. Упрощенно это выглядит следующим образом — фактически товар находится в магазине в дефиците, старый прогноз этот дефицит не покрывает, а новый покрывает. Разница в покрытии считается изменением продаж за счет нового прогноза

Если вы подразумеваете, что на запасы и продажи влияют также процессы исполнения/пополнения, то да, их вклад можно оценить только после того как прогноз пройдет всю цепочку от аналитика до выставления товара на полку.
На самом деле дополнительно к WAPE смотрится метрика BIAS (тот же WAPE, только без знака модуля), как раз для того, чтобы следить за недо/перепрогнозами. Обычно (не всегда) рекомендуется немного перепрогнозить (иногда в ущерб WAPE), чтобы избежать проблем с упущенными продажами.
Интересно, на основание чего принималось решение об эффективности новой системы прогнозирования для бизнеса. Как WAPE переводили в деньги?

В деньги переводится не само изменение WAPE, а изменение запасов и продаж на магазинах.
Если немного упростить, то бизнес-кейс рассчитывался двумя путями:
— на основании «benchmark» с предыдущих проектов
— на основании out-of-stock и упущенных продаж. Несмотря на то, что при построении модели использовалось предположение, что дефицита нет (т.к. нам не успели выдать остатки), при расчете бизнес-кейса мы рассчитали «вторичный» дефицит из данных продаж и оценили упущенные продажи
Цифры оказались одного порядка

На каком уровне оценивалась ошибка, для всей сети?

WAPE оценивался понедельно двумя способами:
— ошибка прогноза товаров на всю сеть (цифры из статьи)
— ошибка прогноза товаров на каждом магазине — здесь улучшение еще лучше

Отслеживали ли, что происходило в конкретных магазинах?

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

В итоге решение было реализовано в продакшене?

Смотря что иметь ввиду под продакшн:
— в текущем процессе используется простой прогноз продаж, мы предложили заменить его на чуть более сложный, это практически не изменяет работу аналитиков
— если рассматривать целевую картину, то TO-BE процесс предложен, но еще не реализован, так что про этот конкретный кейс сможем рассказать чуть позже
— Если под продакшн имеется ввиду scheduling ETL и запуска моделей, то на SAS это делается довольно просто, но это тема отдельной статьи
Согласен на 100%. Правда на SAS это немного проще, чем на опен-сорсе, меньше 90% получится :)
Про вывод в прод хочется написать, но это сложно — с одной стороны нужно учесть все соглашения по неразглашениям, с другой не превратить рассказ в книгу размером с войну и мир
Если вы про вот этот эффект, то в статье использовалась нелинейная модель
Пример с Кока-Колой похож на пример с йогуртами Данон из статьи — для них бренд важная характеристика. Конечно такое поведение есть и в других категориях, но не везде. Данные показывают, что статистически значимая связь в рамках бренда есть не всегда. Если в вашем эксперименте поставить две банки сгущенки одинаково оформленные, одна под брендом "Глубокое", другая "Волоконовское" какую вы выберете?
Пример с маслом не слишком наглядный, прокомментируйте, пожалуйста…

По маслу — идем слева направо. Сначала товары объединились в рамках бренда(Экомилк/Тысяча озер), это группы в которых товары наиболее заменяемы и их метрика W наиболее велика. Далее товары объединились в большую группу — малой и большой массой (180г/450г) и далее в группу Масло.
Что касается опыта… какие позиции и сколько лет?

Приезжайте к нам в гости — познакомимся :)
Как насчет полки, где в одном сегменте не менее 3 брендов?(упаковка, цена плюс-минус рядом)

Зависит от категории и ритейлера, бывают различные варианты. Пример со сгущенкой из статьи как похож на этот случай — явного разделения на бренды в рамках одного типа упаковки и ценового сегмента не видно. Но, например, в пиве оно есть.

Как насчет класса покупателей, где определяющим фактором является цена?

В статье приведен пример, рассчитанный на всем множестве клиентов, т.е. это среднее поведение покупателей. Если вы выделяете какой-то класс клиентов, то для него можно провести отдельный анализ. Но сразу возникает нетривиальный вопрос — как использовать различные параметры для одних и тех же товаров в бизнесе.
И поскольку промо занимает не менее 55% продаж в торговом обороте, то согласитесь, позицию которую вы не могли себе позволить вчера, а сегодня в акцию вы захотите купить(изменение ценового сегмента)

Согласен — вопрос интересный. Тут нужно аккуратно понять цель для которой проводится анализ. В некоторых случаях можно ограничится покупками только по регулярной цене. В некоторых, конечно, нужно использовать все данные, включая промо.
Постараюсь ответить на вопросы:
— Про привязанность к бренду речь идет о конкретном примере — сгущенке. Немного подправил формулировку, чтобы читалось не так категорично. Конечно в других ветках дерева привязанность к бренду может присутствовать:
Пример с маслом
image

— Про опыт — неужели создается такое впечатление? :) Вся текущая команда сформирована из людей, которые долгое время работали в различных ритейлерах на разных по вертикали позициях и в разных департаментах.
Массовые скидки — это отдельная головная боль для ритейлеров. На текущий момент доля покупок по массовым промо в России огромна. Вот здесь кратко описана ситуация: Промоакции достигли почти 2/3 продаж ритейла. Каждая компания решает эту задачу как может. Возможно Ашан нашел свой путь :)
Если по другому рассмотреть взаимосвязи товаров, то получатся типовые покупательские корзины — среднестатистические списки покупок. Они используются немного в других задачах и могут показать более комплексную картину похода в магазин (продукты для вечеринки, закупка на целую неделю, «студенческий» обед и т.д.).

А подход из статьи помогает определить на какие параметры товаров в среднем ориентируется покупатель и какие потребности эти товары закрывают.

Добрый день.


Правильно ли я понимаю, что под сезонностью мы понимаем значения сезонной составляющей (например из STL decomposition)

Не совсем, скорее сезонная компонента + тренд.
Т.е. если максимально упростить алгоритм, то последовательность действий следующая:


  • Прогнозируем ряд методами временных рядов (без учета прочих факторов)
  • Вычитаем результат, получаем остатки 1
  • Прогнозируем остатки 1 с помощью регрессии и внешних факторов
  • Вычитаем из остатков 1 прогнозы регрессии, получаем остатки 2
  • Остатки 2 прогнозируем методами временных рядов и собираем результат обратно

Вычитаются именно абсолютные значения? Или есть какие-то переходы в относительные значения?

Есть переходы в относительные значения. Необходимо масштабировать эффекты на нужный уровень иерархии. Говоря простым языком — если сезонность и тренд мультипликативны, то достаточно их значений. Если аддитивны, то их необходимо нормировать на продажи конкретного ряда.

Чтобы не словить мультиколлинеарность, можно начать с добавления в формулу спроса только самых сильных кросс-эффектов, например только промо на наиболее схожие товары, можно использовать регуляризацию. В обоих случаях параметры модели используются таким же образом, как и при отсутствии мультиколлинеарности.

Если я правильно понял, то вопрос из области производства/CPG, не совсем из ритейла. В производстве/CPG обычно добавляется еще уровень клиента, т.е. итоговая иерархия состоит из товарной/географической/клиентской.


агрегация данных и каскадирование параметров регрессии в глубину идет по уровням этой иерархии

  • да, агрегация и каскадирование делается по новой иерархии, построенной именно для задачи моделирования спроса.

как вырабатывать эту струтуру если есть принятая в компании иерархия

основная идея заключается в определении характеристик товаров, географии/складов, клиентов и выстраивании их в нужном порядке


  • по опыту самый быстрый способ все таки опросить категориалов. Если после усреднения мнений все еще остается несколько основных вариантов, то можно попробовать все, и выбрать наилучший это обычно занимает не так много времени
  • аналитический способ 1 — анализ собственных продаж. Надо сделать кластеризацию продаж. Например:
    • По схожести временных рядов
    • По коэффициентам вот такой регрессии dep ~ indep + time_index + seasonal_dummy

С помощью классификации кластеров определить значимые признаки. Рассмотреть несколько вариантов упорядочивания признаков. "Правильный" порядок будет давать наилучшую точность прогноза на нижнем уровне


  • аналитический способ 2 — анализ чековых данных клиентов. Часто самая большая сложность построить именно товарную иерархию. Для решения этой задачи можно использовать анализ транзакционного графа. Для этого надо — получить чековые данные ритейлера. Построить на них граф продаж (пример есть в статье), из графа получить иерархию сообществ. Удивительным образом иерархия сообществ легко трактуется по признакам товаров.

допустим в истории есть резкий провал на каком то верхнем уровне иерархии

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

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity