Как мы создавали передовую модель прогнозирования спроса

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

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

Существует множество подходов для моделирования временных рядов, но ни один из них нас не устраивал

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

Существуют различные алгоритмы для моделирования временных рядов: модель ARIMA, применяемая для моделирования без учета сезонности; векторная авторегрессия (vector autoregression, VAR); модель Хольта-Уинтерса (Holt-Winters model) для моделирования с учетом сезонности; пороговая авторегрессия (threshold autoregression, TAR) и другие. Алгоритмы не способны обеспечить требуемый уровень точности прогноза, если применяются к необработанным данным, которые могут быть неполными, противоречивыми или содержать ошибки. Поскольку качественные решения могут основываться лишь на качественных данных, крайне важно выполнять предобработку входных данных перед дальнейшим анализом.

Почему мы решили применить комбинацию различных моделей?

Очевидно, что один конкретный подход прогнозирования не может одинаково эффективно работать во всех случаях. Каждый метод имеет свое специфическое применение. Выбор метода зависит от многих факторов, таких как длительность интервала, в течение которого были собраны исторические данные; длительность интервала, для которого необходимо выполнить прогноз; размер бюджета; необходимый уровень точности и другие. Таким образом, перед нами возник вопрос: какой метод (или методы) использовать, чтобы добиться желаемого результата? Поскольку каждый метод имеет свои сильные и слабые стороны, мы решили объединить несколько методов и использовать их совместно. Благодаря такому подходу мы смогли создать эффективную модель временного ряда, способную обеспечить надежные прогнозы. Далее мы рассмотрим, как это было реализовано.

Процесс моделирования. Углубимся в детали

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

Моделирование было выполнено с помощью Python 2.7. В нашем распоряжении были исторические данные за период с 2010 по 2015 год, на основе которых мы создали нашу модель для прогнозирования будущего спроса.

Рис. 1. Спрос в интервале с 2010 по 2015 год.

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

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

где yt – спрос; Tt – тренд; St – сезонность; Rt – остатки; t – временной интервал, на котором определены эти компоненты.

Первым важным шагом при моделировании компонентов временного ряда является сглаживание, которое, впрочем, еще не дает нам готовую для использования модель. Вначале мы создали модель тренда. Такие методы, как скользящее среднее (moving average), экспоненциальное сглаживание (exponential smoothing), адаптивное управление Чоу (Chow adaptive control), линейное и сезонное экспоненциальное сглаживание Уинтерса (Winters linear and seasonal exponential smoothing) не смогли обеспечить необходимую нам точность. Наилучшие результаты удалось получить с помощью фильтра Ходрика-Прескотта (Hodrick-Prescott filter).

Рис. 2. Тренд.

Затем мы приступили к анализу сезонности. Здесь мы применили мощный инструмент для разложения временных рядов – метод локально взвешенного сглаживания (locally weighted scatterplot smoothing, LOESS). Этот метод позволяет работать с любым типом сезонности.

Рис. 3. Сезонность.

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

Применив elastic net регрессию и преобразование Фурье, мы создали модель тренда с учетом полученных результатов. Аппроксимацию тренда можно рассчитать по следующей формуле:

где  Pn(t) – степенной многочлен, а Ak – множество индексов, включающее первые k индексов с наибольшими амплитудами.

Затем мы рассчитали коэффициенты Фурье с помощью дискретного преобразования Фурье.

Рис. 4. Пример кода на Python, реализующего дискретное преобразование Фурье.

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

Рис. 5. Влияние членов ряда Фурье

Далее мы спрогнозировали тренд с помощью аддитивной модели.

Рис. 6. Прогноз тренда.

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

Рис. 7. Остатки.

Вы могли обратить внимание на наличие отрицательных значений. Данный факт говорит о том, что в эти периоды происходит что-то необычное. В поисках объяснений такого странного поведения мы решили совместить эти аномалии с обычным календарем. В результате мы обнаружили, что отрицательные значения сильно коррелируют с такими праздниками, как Ид аль-Фитр и др. Собрав необходимые данные, мы воспользовались стратегиями машинного обучения для прогнозирования временных рядов (Machine Learning Strategies for Time Series Prediction).

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

Рис. 8. Прогноз остатков.

В итоге мы получили финальную прогнозную модель, которая обеспечила значение средней абсолютной ошибки, выраженной в процентах (mean absolute percentage error, MAPE), равное 6% для одного данного города, и 10% – для страны в целом.

Рис. 9. Спрогнозированный спрос в сравнении с фактическим спросом.

Прогнозирование в 24 раза быстрее? Да, это возможно!

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

Благодаря малой ошибке прогноза, составившей всего лишь 6%, наша модель помогла компании добиться большего соответствия между спросом и предложением. Теперь наш клиент имеет возможность более точно планировать объемы производства, что позволяет минимизировать возможные риски.

Что дальше?

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

Источник

Перевод Станислава Петренко

Добавить комментарий

Ваш e-mail не будет опубликован.

закрыть

Поделиться

Отправить на почту
закрыть

Вход

закрыть

Регистрация

+ =