118 подписчиков

“Мы вычистили аномалии и получили отличный результат: удалось поднять точность прогноза в среднем на 10%”

Вторая часть беседы с Дмитрием Степановым, руководителем группы R&D WFM-решения Goodt Time.

Вторая часть беседы с Дмитрием Степановым, руководителем группы R&D WFM-решения Goodt Time. Узнаем, какие математические модели используются внутри системы, и как разработчики борются с аномалиями во временных рядах, чтобы улучшить качество прогнозов.

Дмитрий Степанов, руководитель группы R&D WFM-решения Goodt Time
Дмитрий Степанов, руководитель группы R&D WFM-решения Goodt Time

Есть мнение, что краткосрочное планирование и прогнозирование сейчас более востребовано у бизнеса, чем долгосрочное. Это так?

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

Это нужно любой очень крупной сети независимо от сегмента: ритейл, производство, что-то еще. Возьмем для примера “Почту России”. Допустим сейчас там 50000 операторов, и мы говорим, что в следующем году нам надо будет 52000 или, скажем, 45000. Всего по стране 44000 отделений и система строит прогноз численности на каждое отделение в отдельности: рассчитывает персонал с точностью до одного человека в каждом.

Сразу становится понятно, где есть какие-то “болевые точки”. Например, в одном ОПС необходимо сократить людей и перевести их в соседние отделения, а в другом, наоборот, видна нехватка операторов. То есть это гибкое управление численностью персонала с детализацией до отделения и как раз долгосрочное планирование и прогнозирование.

Какие в Goodt Time есть прогнозные модели и за что они отвечают?

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

В каких случаях нужны самописные модели? Тип данных во временных рядах может быть разным. Трафик на сайт это одна природа данных, звонки в колл-центр другая, а бизнесовые ряды с точки зрения количества людей или операций в магазине третья. И вот имея экспертное мнение о природе данных в таких бизнесовых рядах, мы написали свою модель, похожую на ARIMA, но с несколькими дополнительными “фичами”. Например, автоматически учитываются государственные праздники и тенденции, которые возникают до или после таких праздников.

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

Как происходит выбор моделей под ту или иную задачу?

Все зависит от ситуации. Чтобы обучить нейронку, нам надо исторических данных года на три, чтобы построить ARIMA и хотя бы отловить какой-то годовой паттерн — минимум 13 месяцев. А для базовых моделей нам достаточно пары недель, чтобы уже было можно хоть что-то начать прогнозировать. Какую-то часть моделей мы выбираем вручную, а где-то мы сейчас идем по пути автоматического подбора моделей.

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

В каких случаях необходимо переобучать модели?

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

С какими проблемами приходится сталкиваться при прогнозировании?

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

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

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

Чтобы не допустить сильного влияния таких проблемных моментов на результат работы WFM-системы, в последнее время мы проводили эксперименты с тем, как улучшить качество прогнозов, работая с историческими данными. То есть убирать какие-то аномалии — искать их, вычеркивать, обрабатывать и так далее.

Что представляют из себя такие аномалии?

Основные аномалии — это вот выбросы, пропуски, неправильные формы паттерна по неделям, неправильные годовые сезонности. Например, когда мы знаем, что у нас каждый май рост или спад в потоке клиентов, а по факту случилось наоборот. Или, например, когда началась пандемия, клиентопоток продуктовых магазинов несколько недель выглядел противоестественно. Люди побежали за сахаром и гречкой, был ажиотажный спрос. Это выброс.

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

Какие методы для борьбы с аномалиями вы используете?

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

Какие результаты это дает на реальных проектах?

Можно привести в пример одного нашего крупного заказчика с десятками тысяч отделений на территории РФ. Там примерно в половине временных рядов данные были довольно “грязными”. Мы их обработали, вычистили аномалии, подобрали соответствующие модели и получили отличный результат. На “проблемной” половине нам удалось поднять точность прогноза в среднем на 10%.

***

Спасибо за внимание!

Читайте первую часть интервью по ссылке.

Другие полезные ссылки:

https://goodt.me/ - официальный сайт компании Goodt

https://goodt.me/wfm/ - подробнее про Goodt WFM

https://t.me/goodt_official - читайте нас в Телеграм!