Как MySales строит прогноз

MySales имеет наиболее технологически и математически совершенное, проверенное на сотнях миллионов различных позиций и магазинов, ядро системы (движок), отвечающее за построение прогноза стабильного качества по каждой позиции в каждом магазине.

Прогноз строится на разных уровнях, начиная с наиболее укрупненных уровней, заканчивая самыми детальными:

  • Товарная группа - вся сеть

  • Товарная группа - регион

  • Товарная группа - магазин

  • SKU - вся сеть

  • SKU - регион

  • SKU - магазин

Построение прогноза - автоматический, многоэтапный, итерационный процесс, имеющий иерархию и работающий с огромным массивом данных. При построении прогноза анализируется вся доступная история по указанным выше уровням, вплоть до последних 3-4 лет продаж. Это - огромный объем данных. Только представьте. Если у вас есть, например 100 магазинов и 10 000 SKU, то это уже один миллион комбинаций умноженный на 3-4 года истории продаж. При каждом пересчете всех прогнозов MySales анализирует гигабайты информации для небольших розничных сетей и терабайты информации для сетей у которых сотни магазинов.

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

Можно выделить следующие основные этапы построения прогноза MySales, которые система выполняет для каждой комбинации на каждом уровне:

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

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

  • Формирование пакетов данных для расчета прогноза в мультипроцессорной среде с использованием множества (обычно от 3-х до 9-ти) потоков

  • Первичная очистка данных продаж от ключевых воздействующих факторов, для расчета тренда и сезонности. Этот этап важен, чтобы отделить влияние цены, скидки и промо на продажи и корректно рассчитать сезонные приросты. Учитывая, что в ритейле количество исторических данных по многим SKU редко настолько большое, чтобы исключать периоды, где имело место влияние скидки или цены, что связано с постоянной ротацией ассортимента, MySales вместо исключения, выделяет влияние этих факторов, чтобы не уменьшать и так ограниченную историю продаж, исключая только самые экстремальные периоды. Также на всех этапах, при анализе продаж исключаются периоды, где были существенные потери продаж из-за того, что товар отсутствовал, либо его было недостаточно на остатке для обеспечения продаж. Такой подход дает преимущество в том, что фактически, тренд и сезонность рассчитываются корректно даже если история продаж ограничена и насчитывает всего лишь год. Недостающие периоды при этом могут заполняться с более высоких уровней прогнозирования.

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

  • Расчет тренда общего роста или спада продаж. Выполняется также после очистки продаж от основных воздействующих факторов (цена, скидка, промо), а также после очистки от сезонности. Также система рассчитывает средние продажи и медиану, используя очищенные продажи.

  • Заполнение исходной матрицы исторических значений предикторов (воздействующих факторов). Ряд предикторов являются расчетными значениями, например, соотношение цены на текущий период к средней цене за предыдущие периоды.

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

  • Если зависимости воздействующих факторов на детальных уровнях определить не удается, то ключевые из них (например, влияние цены, сезонность) система берет с более верхних уровней. Например, для уровня SKU-магазин, такие зависимости могут быть взяты с уровня SKU-регион или SKU-вся сеть, с уровня группа-магазин, группа-регион, либо группа-вся сеть.

  • Заполнение целевой матрицы будущих значений предикторов. Здесь используется дифференцированный подход, который по некторым факторам может быть простым средним значением или медианой, по некоторым - прогнозными значениями, а по некоторым - информацией, которая была введена пользователем в системе заказчика и загружена в хранилище данных MySales. Рекомендуется всегда загружать в MySales ассортиментную матрицу, будущие цены, как только они становятся известны, вводить данные о промо-активностях.

  • Расчет коэффициентов корреляции и формирование на основании этих коэффициентов автоматической модели прогнозирования с использованием тех факторов, которые оказывают влияние на продажи.

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

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

  • После того, как наилучшая модель выбрана, формируется прогноз на будущие периоды

  • Также с прогнозом проводится ряд действий, направленных на обеспечение его стабильности и надежности, например, расчет минимальных значений продаж, расчет автокорреляции ошибки модели, для того, чтобы скорректировать прогноз на ближайшие недели и сделать его более точным

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

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

  • Далее система рассчитывает предиктор “Автомульт”, который, как правило (зависит от параметров), корректирует прогноз на следующие 6 недель, на основании соотношения среднего прогноза и средних продаж за последние 3 недели.

  • На этом этапе прогноз уже готов, теперь можно посчитать страховой запас. Стоит отметить, что СЗ рассчитывается как среднеквадратичное отклонение прогноза от продаж на прошлых периодах, однако, чтобы как в примере выше с мороженным, СЗ отличался в летний и зимний период, прогноз разбивается на 3 диапазона: высокий, низкий и средний. Страховой запас считается отдельно по каждому диапазону.

  • После этого система выполняет корректировку краткосрочного прогноза на ближайшие 2 недели (параметр) на основании среднедневных продаж последних 7-14 дней (параметр). При этом система загружает последние 28 дней продаж (параметр) и ищет среди ни те 7-14 дней, когда позиция была на остатке. При расчете среднедневных продаж они рассчитываются отдельно для промо и не промо периодов, исключаются сезонные пики, а также среднедневные продажи корректируются на влияние сезонности, цены, погоды и других факторов. Результат корректировки отражается в предикторе “Дневная корректировка”.

  • После этого, если такая опция включена в параметрах, выполняется контроль распределения промо-прогноза в разрезе магазинов на будущие недели на основании средних продаж группы, и если есть отличия более чем на +-30% (параметр) то прогноз по магазинам выравнивается так, чтобы он был в указанных рамках. Это необходимо, чтобы выровнять распределение для тех магазинов, где мало истории и не удалось определить ценовую эластичность и другие зависимости.

  • Далее выполняется корректировка прогноза по мастер-прогнозу, введенному пользователем

  • Далее, прогноз используется для расчета ценовых рекомендаций, чтобы можно было определить наиболее оптимальную цену для продаж в деньгах или маржи

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

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

Есть также отдельный алгоритм прогнозирования позиций при расширении дистрибуции. Пример: позиция продавалась в 10 из 30 магазинов в регионе, учитывая хорошую динамику и потенциал, категорийный менеджер принял решение листинговать ее во всех 30 магазинах в регионе. В данном случае, система использует динамику продаж на уровне SKU-регион, товарная группа-регион и товарная группа-магазин, чтобы построить прогноз по этой позиции в магазине, где нет истории продаж и эта позиция листингуется впервые.

Набор всех факторов, которые учитывает система задается пользователем и может быть адаптирован индивидуально. Стандартный набор описан в статье https://mysales-labs.atlassian.net/wiki/spaces/SUPPORT/pages/7766266.

 

(c) MySales Labs Ltd
Единственным и исключительным владельцем программного обеспечения MySales, данной документации и других связанных с MySales сопроводительных материалов, является MySales Labs Ltd