Продолжая ежегодную серию статей про эффективное применение математической оптимизации в бизнесе, хотелось бы рассказать про сферу ритейла и FMCG, а именно про задачи, основанные на моделировании прогнозирования спроса и ценовой эластичности. Среди задач я постараюсь раскрыть подробности применения математического моделирования и оптимизации для динамического регулярного ценообразования, оптимизации промо и ассортимента. В чём заключаются главные задачи этих решений? Оптимизационный движок динамического регулярного ценообразования необходим для формирования рекомендаций по оптимальным ценам на товары для максимизации экономических показателей. Оптимизация промо используется для получения наиболее эффективных рекомендаций по скидкам на товары или на иные механики промо. Оптимизация ассортимента нужна для поиска лучших ассортиментных матриц с учётом влияния наличия одних товаров на наличие других.
Основной целью статьи будет системная, местами субъективная формализация подходов к вышеуказанным задачам, основанная на личном опыте разработки решений в международных вендорах и совокупном опыте компании Axenix. За рамками статьи останутся не менее важные задачи управления цепочками поставок, управления запасами, размещения товаров на полках, так как каждая из задач заслуживает отдельной объёмной статьи.
Обобщение ритейла и FMCG в рамках рассматриваемых задач будет достаточно грубым допущением, так как две эти сферы бизнеса находятся на различных позициях поставки товара конечному потребителю. Очевидны отличия в бизнес-процессах, подходах к планированию и прогнозированию спроса. Для FMCG важно рассматривать как первичные продажи (продажи товаров от производителя к сетям/дистрибьюторам), так и третичные продажи (продажи магазинов покупателям), что создаёт дополнительные сложности при прогнозировании спроса, в то время как у ритейла всё проще — ведётся анализ собственных продаж клиентам. Из-за этого возникает разница в сложности решений для ценообразования, планирования промо и ассортимента, так как у производителя возникает проблема отслеживания переноса изменений конечному потребителю. Ритейлер же, в свою очередь, видит полную картину спроса конечного потребителя. В дальнейшем в качестве основных примеров будет рассматриваться именно индустрия ритейла с дополнительными краткими пояснениями про индустрию FMCG.

Прогнозирование спроса
Основой для решений динамического регулярного ценообразования, оптимизации промо и ассортимента является моделирование прогнозирования спроса. Эта модель необходима для того, чтобы определять зависимость будущего спроса на все товары от будущих цен, возможных промо-акций и их параметров, наличия/отсутствия конкурирующих товаров в ассортиментной матрице, учёта действий конкурентов.
Для прогнозирования спроса важно иметь достаточную глубину качественных исторических данных по продажам, изменению стоимости, промо и их параметрам, истории остатков на балансе, ассортиментным матрицам. В качестве дополнительных параметров также могут использоваться себестоимость товаров, стоимость конкурентов, погодные условия, макроэкономические параметры. Предварительно подготавливается витрина данных с применением очистки от выбросов и OOS (out-of-stock, отсутствие товаров). Также на каждый товар-магазин дополнительно формируются агрегаты с плавающими окнами и факторы, формирующие кросс-эффекты (влияние стоимости конкурирующих за спрос товаров, каннибализация). Приведу в качестве примера перечень источников данных для прогнозирования спроса в FMCG-секторе:

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

Линейная и экспоненциальная регрессия
Прогнозирование спроса через линейную и экспоненциальную регрессию осуществляется через декомпозицию функции прогноза на функцию эластичности спроса от цены и коэффициенты влияния сезонности, тренда, кросс-эффектов и т. д. Этот класс алгоритмов отлично подходит для решения задач оптимизации NLP, так как предоставляет аналитическое представление гладкой, часто выпуклой функции. Он позволяет интерпретировать результаты через коэффициенты и обладает высокой предсказуемостью, но, очевидно, из-за большого количества допущений и вычислительной простоты обладает меньшей точностью прогнозирования.
ARIMA|SARIMA
Классические авторегрессионные подходы с плавающим средним закрепились в сознании многих как важный инструмент для работы с временными рядами. Из ключевых плюсов в рассматриваемом контексте: методы хорошо работают с трендами в прогнозах, обеспечивают графическую интерпретируемость, но имеют меньшую предсказуемость. Возможен учёт сезонности, итоговую функцию можно представить в аналитическом виде через формулу с полученными коэффициентами. Это позволяет использовать прогнозную функцию в явном, часто линейном виде, в оптимизационных задачах с использованием классических методов LP, MILP. Что касается точности авторегрессионных методов, то она значительно уступает современным методам ML (леса, бустинги, нейросети). Также построение прогноза временного ряда занимает значительно больше времени, чем обучение моделей и прогнозирование с использованием современных методов. Серьёзные проблемы возникают, когда требуется строить прогнозы для большого количества связок.
Бустинги и леса
В прогнозировании больших объёмов комбинаций золотым стандартом для достижения высокой точности являются бустинговые методы (XGBoost, CatBoost, LightGBM). Использование этих алгоритмов позволяет строить прогнозы с применением параллельных вычислений и ежедневно обновлять модели на новых данных. С помощью бустингов можно прогнозировать итоговый спрос, базовый (без учёта промо) и промо-аплифт (прирост продаж от промо). Благодаря функциональности метода есть возможность выразить монотонную зависимость от влияющий факторов через опцию monotone constraints. Это позволяет определять монотонную зависимость, к примеру, от стоимости товара, задав правило по типу «Если возрастает цена, то продажи не убывают». Несмотря на преимущества, бустинги имеют свои минусы, прежде всего — слабую интерпретируемость. Для каждого отдельного ключа сложно объяснить, почему получился тот или иной результат, даже при наличии feature importance, shapley values и lime, т.к. методы определяют важность/вклад в результат. Кроме того, построение их построение добавляет вычислительную нагрузку. Ещё одна проблема — сложность продолжения трендов, что может быть критично при прогнозировании временных рядов. Также бустинги не слишком хорошо применимы в оптимизации, так как представляют итоговую функцию в виде кусочно-постоянной. Коммерческие солверы (например, Gurobi) в последних версиях умеют работать с таким представлением, но вычислительная сложность остаётся высокой. В классических подходах бустинги рассматриваются как black-box-функция. Для поиска оптимального решения применяются алгоритмы вычислительной оптимизации (генетические алгоритмы, симуляция отжига и т. д.), которые не гарантируют ни оптимальности, ни интерпретируемости. Альтернативный подход — рассчитать прогнозы при разных значениях (например, при разных ценах с шагом 10 рублей), но такой способ менее точен, особенно при наличии кросс-эффектов и каннибализации, так как экспоненциально увеличивается число расчётов. В качестве примера пайплайна подготовки данных к применению XGBoost приведу некоторые особенности использования для ритейла:

Леса в общем случае обеспечивают меньшую точность, не имеют опции monotone constraints, но при этом могут быть предпочтительнее бустингов при небольшом объёме данных или при наличии большого шума.
Нейросетевые подходы
Использование рекуррентных нейросетей (RNN, LSTM и др.) для прогнозирования временных рядов потенциально обеспечивает наилучшую точность среди всех методов благодаря способности улавливать скрытые зависимости и формировать более сложную структуру результата. Нейросеть можно выразить в аналитическом виде через веса, что теоретически позволяет использовать её в задачах NLP и MINLP. Также удобно моделировать кросс-эффекты (например, каннибализацию) через многовыходные архитектуры. Принцип работы по примеру monotone constraints задаётся через настройку архитектуры сетей, либо через работу с весами. Однако основным ограничением промышленного применения нейросетей в прогнозировании спроса остаётся высокая вычислительная сложность. Для большого количества связок обучение требует значительных ресурсов графических процессоров, особенно если нужно регулярно переобучать модели. Поэтому этот подход редко используется в задачах, где необходимо строить большое количество прогнозов. Также данный класс алгоритмов сложен в интерпретируемости ввиду преобразований для получения результата. Обычно для этого используется также SHAP/LIME/Feature Importance/Permutation Importance.
Бонус: Prophet от запрещенной организации
Использование Prophet удобно без дополнительной настройки. Благодаря встроенной авторегрессии можно получить неплохой результат «из коробки». Также построение прогноза требует меньше вычислительных ресурсов по сравнению с бустингами и лесами. Prophet хорошо работает с трендами и сезонностью, позволяет учитывать праздники и обладает гибкостью настройки. Интерпретируемость обеспечивается визуализацией компонент, но при стабильной структуре модели это становится менее критично. Prophet допускает использование дополнительных регрессоров, однако это увеличивает вычислительную нагрузку без существенного прироста качества. Из минусов: ограниченные возможности настройки, обусловленные методологией, и ограниченная точность. В оптимизационных задачах Prophet можно применять только в виде black-box, поскольку аналитическое представление модели недоступно.
Заключение по прогнозным алгоритмам
Для прогнозирования большого количества товарных ключей, где важна точность, оптимально использовать бустинги. Для небольшого числа ключей наилучшие результаты дают рекуррентные нейросети. Если приоритетом является интерпретация и предсказуемость, предпочтительнее экспоненциальная регрессия или авторегрессионные методы. В задачах оптимизации при больших объёмах практично использовать простые регрессионные модели (например, экспоненциальную). В задачах меньшего масштаба наилучшие результаты достигаются с помощью нейросетей.
Далее перейдём к рассмотрению оптимизационных решений.

Динамическое ценообразование
Предприятиям из индустрии ритейла и FMCG необходимы платформы динамического ценообразования ассортимента для формирования наилучшего набора цен на каждый продукт: в магазинах — для ритейла, и для продаж сетям/дистрибьюторам — в FMCG. Чтобы определить, какой набор цен следует установить для линейки определённых товаров, сначала строится модель прогнозирования спроса, описывающая функцию эластичности (зависимость спроса от цены).
Входными данными для такой модели являются история продаж товаров линейки (и товаров, оказывающих влияние), история цен, себестоимость, цены конкурентов и другие параметры, влияющие на спрос. Для каждого магазина и продукта строится своя кривая эластичности спроса, зависящая от цены товара, цен товаров с кросс-эффектами и прочих параметров. Кривая эластичности — это функция, определяющая объём продаж в зависимости от этих параметров.
Важно построить качественную модель, корректно учитывающую кросс-эффекты и каннибализацию. Например, снижение цены на Coca-Cola 2 литра «отбирает» часть продаж у Coca-Cola 1 литр.
Оптимизационное решение должно находить лучшие цены в рамках заданных ограничений и бизнес-правил. Эти правила строятся на основе драйверов: себестоимость, текущая цена, цены конкурентов, продажи. Например:
Новая цена не должна отличаться от текущей более чем на 5% или на 10 рублей.
Разница в цене относительно конкурента не должна выходить за заданный интервал.
Также в задаче указываются ограничения по KPI: например, маржинальность по группе товаров не должна превышать 5%, продажи не должны превышать 1000 штук (ограничения по складу, логистике, поставкам). Целевой функцией может быть прибыль, выручка или объём продаж — в зависимости от стратегии.
Класс задачи зависит от формы функции эластичности. При выпуклой регрессионной функции или выпуклой нейросети используется convex optimization. Если функция гладкая, но невыпуклая (что чаще), применимы методы внутренних точек с мультистартом. Современные солверы (Gurobi, CPLEX) позволяют эффективно искать решение с максимизацией целевой метрики.
Если требуется дискретизация (например, изменение цен только на 3 товара), задача становится MINLP и требует соответствующих методов.

Оптимизация промо-акций
Крупные розничные сети и FMCG-компании планируют промо-кампании для конкретных товаров или товарных линеек с целью максимизации экономических показателей. За счёт снижения цены на определённые позиции можно значительно увеличить продажи в штуках и тем самым получить дополнительную абсолютную прибыль. Также в качестве цели подбора лучших промо может выступать увеличение трафика, увеличение средней корзины, повышение лояльности и улучшение ценового восприятия. При этом крайне важно учитывать ограничения по складам, распределительным центрам, логистике, поставщикам и другим операционным параметрам. Это сложная, многопараметрическая задача.
Для оценки изменения спроса во время акций, как и в задачах динамического ценообразования, строится кривая эластичности спроса. В данном случае дополнительно учитывается история проведения промо-кампаний, поскольку это не просто снижение цены, а комплексный набор маркетинговых активностей, стимулирующих спрос. Кривая может зависеть от цены (как в динамическом ценообразовании), от размера скидки или просто от бинарного признака наличия акции (0/1 — есть или нет). Выбор подхода зависит от внутренней методологии компании и доступных данных.
Для выбора оптимального списка акций функция эластичности используется в качестве прогнозной модели в задаче оптимизации, в которую входят упомянутые ранее ограничения: на удовлетворение спроса, параметры промо (размер скидки, длительность), количество активностей в одном магазине и т. д. Как и в случае с ценообразованием, в задачу могут быть включены бизнес-правила, основанные на драйверах.
В отличие от задач динамического ценообразования, задачи промо-планирования почти всегда относятся к классу MINLP, поскольку:
Промо имеет чёткое начало и конец.
Нужно рекомендовать не только размер скидки, но и длительность промо.
Некоторые виды промо не являются непрерывными величинами (например, «купи N — получи 1 бесплатно»).
Такого рода механики требуют дискретной логики, что делает задачу существенно более сложной, но в то же время приближает её к реальным условиям бизнеса.

Оптимизация ассортимента
Крупные предприятия ритейла и FMCG-компании используют алгоритмы машинного обучения и математической оптимизации для планирования ассортимента. В ритейле основная задача — формирование оптимальных ассортиментных матриц для каждого магазина с учётом сегмента, географии, логистики, объёма витрин и при этом — максимизация прибыли. Для FMCG — построение прибыльной товарной линейки с учётом потребностей сетей, дистрибьюторов и конечного покупателя, а также кросс-эффектов между товарами.
На основе исторических данных строятся модели прогнозирования спроса с учётом перекрёстных эффектов и каннибализации внутри товарных групп. Это важно, так как при отсутствии одних товаров спрос перераспределяется на другие. Такой подход особенно актуален для конкурирующих товаров, и оценка этих эффектов — ключевая составляющая задачи. Исторические данные помогают понять, какие товары имеют низкую оборачиваемость и избыточны, а какие — незаменимы. При недостатке данных могут проводиться A/B-тесты с временным выводом или вводом позиций. При этом важно понимать: прогнозные модели содержат допущения, и задача — не столько точное моделирование, сколько корректная оценка направлений влияния.
После построения модели можно сформулировать задачу комбинаторной оптимизации, в которой перебираются различные составы ассортиментных матриц. Для каждой комбинации рассчитывается ожидаемый спрос с учётом кросс-эффектов и проверяются бизнес-ограничения (витринные площади, складские лимиты, логистика). Цель — максимизировать экономические показатели.
Такие задачи, как правило, относятся к классу MINLP, поскольку переменные выбора (есть товар или нет) — бинарные. Полученные решения необходимо верифицировать через A/B-тестирование в реальных магазинах.
Также, на основе уже работающих магазинов, можно создавать референсы для новых точек. С помощью кластеризации по характеристикам и метрикам эффективности можно подобрать ассортиментную матрицу, максимально близкую к лучшим аналогам.