К содержимому

ИИ-аналитика · ULTRA

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

· 14 мин чтения · Редакция ultrathink

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

Начните с решения, а не с модели

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

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

  1. 01Горизонт: на сколько вперёд нужен прогноз и как часто он обновляется. Заказ, который везут неделю, требует прогноза минимум на неделю вперёд, а не на завтра.
  2. 02Гранулярность: товар, категория, филиал, регион; день, неделя, месяц. Чем мельче уровень, тем больше шума и тем ниже точность каждого отдельного ряда.
  3. 03Цена ошибки: что обходится дороже — недостаток или излишек. Для скоропортящегося товара дорог излишек, для ключевого товара, без которого уходит клиент, — недостаток.
  4. 04Ограничения: минимальная партия, кратность упаковки, срок годности, вместимость склада, график поставок.

Пример: как решение меняет задачу

Представим условную сеть магазинов, которая хочет «прогнозировать продажи». Для закупщика свежей выпечки нужен дневной прогноз по каждому магазину, и главная опасность — списания. Для финансового отдела нужен месячный прогноз выручки по сети, и отдельные товары ему не важны. Для логистики нужен недельный прогноз объёма по складам. Это три разных прогноза, и попытка сделать «один универсальный» обычно даёт результат, который не устраивает никого.

Подготовка данных: продажи — это не спрос

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

Дефицит и отсутствие товара

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

Акции, цены и разовые события

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

Календарь

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

Новые и редкие товары

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

Базовые прогнозы и когда их хватает

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

Наивные методы

  • Наивный прогноз: завтра будет как сегодня. Хорошо работает для медленно меняющихся рядов и служит минимальной планкой.
  • Сезонный наивный: в этот понедельник будет как в прошлый понедельник, в этом месяце — как в том же месяце год назад. Естественная планка для рядов с выраженной сезонностью.
  • Скользящее среднее: среднее за последние несколько периодов. Сглаживает шум, но запаздывает при изменениях тренда.

Экспоненциальное сглаживание и классические модели

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

Когда простой модели достаточно

  • Рядов немного, и каждый можно при необходимости посмотреть глазами.
  • История достаточно длинная и стабильная, сезонность понятная.
  • Внешние факторы влияют слабо или их невозможно надёжно знать заранее.
  • Решение не требует большой точности: например, грубое планирование бюджета.
  • В команде нет ресурсов поддерживать сложный конвейер данных и модель.

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

Когда нужно машинное обучение

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

Признаки, которые обычно работают

  • Лаги: продажи этого же ряда за прошлые периоды, сдвинутые не меньше чем на горизонт прогноза.
  • Скользящие статистики: среднее, медиана, разброс за прошлые окна — тоже со сдвигом на горизонт.
  • Календарь: день недели, неделя месяца, праздник, предпраздничный день, школьные каникулы.
  • Цена и акции: собственная цена, скидка, тип акции, если они известны заранее.
  • Характеристики объекта: категория товара, формат магазина, регион.
  • Внешние факторы, известные заранее: запланированные события, график работы.

Рамка выбора

Если рядов мало и внешних факторов нет — начните со статистических моделей. Если рядов много, но факторов нет — попробуйте одну общую ML-модель на лагах и календаре, она часто лучше справляется с короткими рядами за счёт соседей. Если есть значимые факторы, известные заранее, — ML-модель почти всегда стоит попробовать, потому что статистические методы плохо учитывают такие признаки. Во всех случаях итоговый выбор делает проверка на истории, а не мода.

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

Иерархия: на каком уровне прогнозировать

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

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

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

Почему большая языковая модель не подходит для расчёта

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

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

Где языковая модель действительно полезна

  • Написать код подготовки данных, модели и проверки — который затем читается и запускается человеком.
  • Объяснить результат: почему прогноз на следующую неделю выше, какие признаки повлияли.
  • Сформулировать комментарий к отклонению факта от прогноза для руководства.
  • Извлечь из текстов — писем поставщиков, планов маркетинга, объявлений — информацию о будущих акциях и событиях, которая станет признаком.
  • Проверить код и логику на типовые ошибки, включая утечку будущего.

Утечка будущего в данные

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

Типичные источники утечки

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

Пример утечки, которую легко не заметить

Допустим, аналитик строит дневной прогноз на семь дней вперёд и добавляет признак «среднее продаж за последние семь дней». На проверке модель показывает прекрасный результат. Но в реальной работе, делая прогноз на седьмой день вперёд, последних шести дней ещё нет — они в будущем. Модель обучилась на информации, которой у неё никогда не будет, и в работе её ошибка окажется заметно выше. Лечение — сдвигать все такие признаки минимум на горизонт или строить отдельные признаки для каждого шага горизонта.

Как поймать утечку

  1. 01Для каждого признака задайте вопрос: знал бы я это значение в тот момент, когда делаю прогноз?
  2. 02Запишите для каждого признака дату, на которую он известен, и сравните её с датой прогноза.
  3. 03Насторожитесь, если модель на проверке подозрительно хороша, особенно намного лучше базового прогноза.
  4. 04Посмотрите важность признаков: если сверху оказался признак, который «слишком много знает», проверьте его первым.
  5. 05Запустите модель в теневом режиме на реальных новых данных и сравните ошибку с ошибкой на проверке.

Как проверить прогноз

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

Бэктест скользящим окном

  1. 01Выберите несколько дат отсечения в истории, охватывающих разные сезоны.
  2. 02Для каждой даты обучите модель только на данных до неё.
  3. 03Постройте прогноз на рабочий горизонт и сравните с фактом.
  4. 04Повторите для базового прогноза на тех же окнах.
  5. 05Сравните ошибки не только в среднем, но и по окнам: стабильность важна не меньше среднего.

Выбор метрики ошибки

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

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

Прогноз — это диапазон, а не одно число

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

После запуска

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

Типичные ошибки и как их поймать

  • Нет базового прогноза. Признак: сложную модель не с чем сравнить. Лечение: построить сезонный наивный прогноз и оценивать всё относительно него.
  • Продажи приняты за спрос. Признак: серии нулей у ходового товара. Лечение: учесть остатки и исключить или восстановить дни дефицита.
  • Случайное разбиение данных. Признак: на проверке всё прекрасно, в работе — плохо. Лечение: разбиение только по времени.
  • Лаги короче горизонта. Признак: качество резко падает с ростом горизонта в работе, но не на проверке. Лечение: сдвиг признаков на горизонт.
  • Процентная ошибка на редких товарах. Признак: средняя ошибка определяется несколькими рядами с маленькими продажами. Лечение: взвешенная метрика или абсолютная ошибка.
  • Игнорирование смещения. Признак: модель стабильно ниже факта. Лечение: отслеживать смещение отдельно от средней ошибки.
  • Неотмеченные акции. Признак: модель «предсказывает» всплески там, где их больше не будет. Лечение: признак акции и календарь событий.
  • Нет мониторинга. Признак: о деградации узнают из жалоб склада. Лечение: регулярная сверка прогноза с фактом и оповещение при росте ошибки.

Термины

  • Горизонт — на сколько периодов вперёд строится прогноз.
  • Базовый прогноз — простой метод, с которым сравнивают все остальные модели.
  • Бэктест — проверка модели на истории с имитацией реального использования по времени.
  • MAE, средняя абсолютная ошибка — среднее модуля разницы между прогнозом и фактом, в единицах ряда.
  • MAPE — средняя процентная ошибка по наблюдениям; неустойчива при нулевых и малых значениях.
  • WAPE — сумма абсолютных ошибок, делённая на сумму факта; устойчивее для рядов разного масштаба.
  • Смещение — систематическое завышение или занижение прогноза.
  • Утечка — использование при обучении информации, недоступной в момент прогноза.
  • Прерывистый спрос — ряд, в котором большинство периодов без продаж.
  • Интервал прогноза — диапазон, в который факт должен попадать с заданной вероятностью.

Чек-лист прогноза спроса

  1. 01Записаны решение, горизонт, гранулярность и цена ошибки в обе стороны.
  2. 02Собран календарь праздников, событий и акций на историю и горизонт.
  3. 03Дни дефицита отмечены и исключены или восстановлены.
  4. 04Разовые события помечены признаком или исключены.
  5. 05Построен базовый прогноз, с которым сравниваются все модели.
  6. 06Выбор между статистикой и ML сделан по проверке, а не по моде.
  7. 07Каждый признак проверен на доступность в момент прогноза.
  8. 08Все лаги и скользящие признаки сдвинуты минимум на горизонт.
  9. 09Проверка — скользящим окном по времени, без случайного разбиения.
  10. 10Метрика ошибки выбрана под решение, смещение отслеживается отдельно.
  11. 11Прогноз выдаётся с интервалом, интервалы проверены на истории.
  12. 12Прогнозы разных уровней согласованы между собой.
  13. 13После запуска прогноз регулярно сверяется с фактом, ручные правки сохраняются отдельно.

Итог

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

Частые вопросы

Начните с простого базового прогноза с учётом сезонности. Переходите к машинному обучению, только если оно стабильно лучше базового уровня на проверке по времени.

Для самого расчёта — не стоит: результат не воспроизводим и не проверяем. Языковая модель полезна для написания кода, объяснения результатов и подготовки признаков из текстов.

Это использование при обучении информации, которой не будет в момент реального прогноза. Из-за неё модель хорошо выглядит на проверке и плохо работает в жизни.

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

Ту, что соответствует решению. Для рядов разного масштаба обычно удобнее WAPE, чем MAPE, а смещение нужно отслеживать отдельно от средней ошибки.

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

Читайте также

Все статьи
ИИ-аналитика · MAX

Анализ отзывов, звонков и переписок с ИИ: как превратить текст в таблицу и проверить точность

Анализ отзывов с помощью ИИ: как превратить отзывы, звонки и переписки в таблицу, замерить точность классификации и работать с узбекским и смешанным языком.

15 мин чтения
Заявка

Начнём с разговора.

Оставьте контакт — свяжемся, разберём вашу задачу и честно скажем, какой уровень вам подходит. Если не подходит ни один — так и скажем.

Или напишите напрямую

Отвечаем в рабочее время в течение 30 минут.

Что интересует

Без предоплаты и без обязательств. Отказаться можно на любом шаге.

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