![](https://habrastorage.org/getpro/habr/upload_files/883/d16/3a5/883d163a587510dfc6dd9e435b521a68.png)
Меня зовут Артем, я разработчик библиотеки ETNA. Мои коллеги уже познакомили вас с ETNA и рассказали, как загружать данные и строить прогнозы. А я расскажу, что такое регрессоры, какие они бывают, чем могут помочь при прогнозировании временных рядов и как с ними работать в нашей библиотеке.
Что такое регрессоры
Часто мы владеем дополнительной информацией, помогающей в предсказаниях. Календарь праздников поможет предсказать рост продаж шампанского перед Новым годом и снижение количества звонков в колл-центр на майских праздниках. Знание о том, что в определенное время проходила акция на клубничный йогурт, поможет понять, почему изменился спрос, и правильно спрогнозировать его, когда акция закончится.
Данные, известные на некоторый промежуток времени в будущем, называются регрессорами. Это дополнительные временные ряды, значения которых известны не только в прошлом. Такие данные можно использовать для извлечения большей информации из процесса и улучшить прогноз.
![](https://habrastorage.org/getpro/habr/upload_files/81a/d22/4ba/81ad224ba0a5f9f676bfecc62532e421.png)
Условия задачи и загрузка данных
Рассмотрим работу регрессоров на примере. Задача: спрогнозировать продажи товаров в магазине. Есть данные о ежедневных продажах продуктов за три года (product.csv) и расписание тысячи повторяющихся акций магазина (promo.csv). Значение 1 — в этот день акция проводится, 0 — не проводится. Построим прогноз на 28 дней вперед, оценим качество прогноза метрикой SMAPE.
Расписание акций — это регрессоры, которые помогут точнее спрогнозировать продажи. Для наглядности будем рассматривать только шесть товаров.
![Графики продаж товаров Графики продаж товаров](https://habrastorage.org/getpro/habr/upload_files/8ab/894/64f/8ab89464f0b2f885ff2da220711d8cf1.png)
![Расписание акций. 0 — акция в этот день не проводилась, 1 — проводилась Расписание акций. 0 — акция в этот день не проводилась, 1 — проводилась](https://habrastorage.org/getpro/habr/upload_files/731/bc2/60f/731bc260f829201f1c3e5fc8351a28a7.png)
Сравним обычный прогноз и прогноз с регрессорами, чтобы убедиться в пользе дополнительных данных.
В качестве модели возьмем CatBoostModelPerSegment. PerSegment говорит нам о том, что для каждого временного ряда продаж продуктов обучается своя модель, а CatBoost — что в качестве модели будет градиентный бустинг CatBoost.
Для этой модели необходимо сгенерировать фичи. Зададим список трансформаций, генерирующих фичи дня, таких как номер дня в неделе, в месяце, номер недели в месяце и в году, номер месяца в году, и 11 лагов — с 29-го по 49-й включительно.
Запустим backtest для подсчета метрик. Подробнее про лаги, Pipeline, backtest, а также почему не можем выбрать лаги меньше, рассказал в предыдущей статье Андрей.
Визуализируем получившиеся результаты:
![По графикам прогноза без регрессоров видно, что модель плохо предсказывает небольшие изменения продаж По графикам прогноза без регрессоров видно, что модель плохо предсказывает небольшие изменения продаж](https://habrastorage.org/getpro/habr/upload_files/e0a/f33/1dc/e0af331dcbc508ce05355b0f0f031f62.png)
Прогноз с регрессорами
Мы знаем расписание акций на товары как в прошлом, так и в будущем. Почему бы не попробовать использовать эту информацию для прогноза?
Неизвестно, влияет ли конкретная акция на какой-либо товар, а если влияет, то как именно. Поэтому для простоты мы будем использовать всю 1000 акций без отбора. Приведем данные об акциях к нужному формату, чтобы использовать их в ETNA.
При создании TSDataset указываем дополнительные данные в df_exog, в known_future передаем список дополнительных рядов, известных на будущее — регрессоров. В нашем случае все дополнительные данные — регрессоры, поэтому можно указать all.
Мы получили TSDataset, который содержит информацию об исходных рядах продаж, а также о дополнительных данных. Модели, которые умеют работать с дополнительными данными, автоматически будут использовать всю доступную информацию из TSDataset.
Для прогноза с регрессорами не нужно дополнительных действий — все сделано на этапе создания TSDataset. Повторяем те же этапы, которые делали без регрессоров.
Отрисуем прогнозы:
Благодаря регрессорам мы получили более точные прогнозы как по метрике, так и визуально.
![Модель смогла выделить нужную информацию из наших регрессоров и использовать ее для более точного прогноза Модель смогла выделить нужную информацию из наших регрессоров и использовать ее для более точного прогноза](https://habrastorage.org/getpro/habr/upload_files/483/6ca/a7b/4836caa7ba98eb1154ef7b2bcd4e1e10.png)
Сравним метрики:
Важность признаков можно увидеть с помощью функции plot_feature_relevance. На вход подается метод подсчета важности. В нашем случае метод подсчета ModelRelevanceTable означает, что подсчет важности осуществляется моделью. В качестве модели возьмем CatBoostRegressor. Важность каждого признака, полученная из модели CatBoostRegressor, нормирована так, что сумма важностей всех признаков будет 100.
![Из важности признаков можно получить некоторые инсайты. На товар 0 сильно влияют 438-я и 255-я акции, а на товар 7 — признаки номера месяца и номера недели в году. Вероятно, продажи этого товара имеют сильную годовую сезонность Из важности признаков можно получить некоторые инсайты. На товар 0 сильно влияют 438-я и 255-я акции, а на товар 7 — признаки номера месяца и номера недели в году. Вероятно, продажи этого товара имеют сильную годовую сезонность](https://habrastorage.org/getpro/habr/upload_files/cc3/56b/535/cc356b535a107ba43c7276175a2d7ba3.png)
Краткое резюме
В этом туториале мы:
разобрали, что такое регрессоры;
посмотрели, как с ними работать в библиотеке ETNA;
сравнили прогнозы с регрессорами и без.
В следующих статьях наша команда расскажет про другие полезные возможности библиотеки ETNA. Если вы хотите предложить новую фичу, задать вопрос или предложить тему для статьи, ждем в нашем GitHub — там все контакты.
Оффтоп для тех, кому нужен код загрузки данных
Данные о продажах и акциях мы взяли в корпоративном каталоге данных — data.world. Они искусственные и в них нет дат, поэтому мы сами выставили даты для рядов. В конце статьи — код для получения файлов promo.csv и products.csv.
dzis_science
Добрый день, интересная статья. Последний раз когда я видел данную библиотеку на конференции PyCon, она была, по сути оберткой над всеми остальными библиотеками прогнозирования временных рядов (kats, prophet, statsmodels,...). Вижу была добавлена дополнительная модель на основе градиентного бустинга и методы визуализации. Хотелось бы узнать поподробнее о дальнейших шагах развития библиотеки, так как библиотека сейчас подает большие надежды стать "черным ящиком" решения задач временных рядов.