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

Рассмотрим задачи подробнее.



1) Прогнозирование спроса.


Цель: снизить складские издержки и оптимизировать график работы персонала.

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

2) Прогнозирование нагрузки на службу доставки


Цель: не допустить коллапса логистики при пиковых нагрузках.

Как решается: прогнозируя количество заказов, вывести на линию оптимальное количество машин и курьеров.

3) Прогнозирование нагрузки на контактный центр


Цель: при минимуме затрат на фонд оплаты труда обеспечить требуемую доступность контактного центра.

Как решается: прогнозирование количество звонков во времени, составим оптимальное расписание для операторов.

4) Прогнозирование трафика


Цель: спрогнозировать количество серверов и пропускного канала для устойчивой работы. Чтобы ваш сервис не упал в день премьеры популярного сериала или футбольного матча ;)

5) Прогнозирование оптимального времени инкассации банкоматов


Цель: минимизация объема наличности, хранимой в сети АТМ

6) Решения задачи холодного старта в рекомендательных системах


Цель: рекомендовать релевантные товары новым пользователям.

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

Решение: популярность товаров зависит от времени, когда сделана рекомендация. Использование прогнозирование временного ряда помогает выявить релевантные товары в каждый конкретный момент времени.

Лайфхаки построения рекомендательных систем мы рассмотрели в предыдущей статье.

7) Поиск аномалий


Цель: выявить проблемы в работе оборудования и нестандартные ситуации в бизнесе
Решение: если измеряемое значение выбивается из доверительного интервала прогноза, аномалия выявлена. Если это АЭС, пора наращивать квадрат расстояния ;)

Алгоритмы для решения задачи


1) Скользящее среднее


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



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



Так, можно задать коэффициент W, чтобы максимальный вес приходился на 2 последних дня и входные.

Учет циклических факторов

На качество рекомендаций могут влияют циклические факторы, такие как совпадение с днем недели, датой, предшествование праздникам и т. д.


Рис. 1. Пример декомпозиции временного ряда на тренд, сезонный компонент и шум

Экспоненциальное сглаживание – решение учета циклических факторов.

Рассмотрим 3 базовых подхода

1. Простое сглаживание (модель Брауна)


Представляет собой вычисление взвешенного среднего на последних 2-х элементах ряда.

2. Двойное сглаживание (модель Хольта)


Принимает в расчет изменение тренда и колебания значений остатков вокруг этого тренда.



Вычисляем предсказание изменения остатков ® и тренда (d). Итоговое значение y — сумма этих двух величин.

3. Тройное сглаживание (модель Хольта — Винтерса)


Тройное сглаживание дополнительно учитывает сезонные колебания.



Формулы для тройного сглаживания.

Алгоритм ARIMA и SARIMA


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

SARIMA – расширение для рядов с сезонной составляющей. SARIMAX – расширение, включающее внешнюю регрессионную составляющую.

ARIMA-модели позволяют моделировать интегрированные или разностно-стационарные временные ряды.

Подход ARIMA к временным рядам заключается в том, что в первую очередь оценивается стационарность ряда.

Далее ряд преобразуется взятием разности соответствующего порядка и уже для преобразованной модели строится некоторая ARMA-модель.

ARMA — линейная модель множественной регрессии.

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

XGBoost – куда же без него


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

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

В следующей статье мы рассмотрим основные подходы к поиску аномалий.

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

Комментарии (3)


  1. roryorangepants
    25.11.2019 13:56
    -1

    Статья — это как грубо урезанная обработка поста от ODS.


    1. kirillkosolapov Автор
      25.11.2019 14:17

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


  1. opaopa
    25.11.2019 20:58
    +1

    Интересно, как соотносится «тройное сглаживание» и преобразование Фурье/Гёрцеля?