Darts: единая Python-библиотека для прогнозирования и поиска аномалий во временных рядах

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

Компания Unit8 решила закрыть эту проблему и открыла исходный код библиотеки Darts — инструмента, который должен упростить прогнозирование и обработку временных рядов на Python.

Проблема разрозненных инструментов

Дата-сайентисты, работающие с временными рядами, обычно вынуждены собирать рабочий процесс из разных библиотек: Pandas — для предобработки данных, statsmodels — для выявления сезонности, Facebook Prophet — для прогнозирования, плюс собственные скрипты для бэктестинга и подбора моделей. Такой разрозненный подход не только отнимает время, но и усложняет внедрение более сложных моделей — например, нейросетей, для которых потребуются уже TensorFlow или PyTorch.

Что предлагает Darts

Darts позиционируется как аналог scikit-learn, но для временных рядов. Библиотека даёт единый и последовательный API, который объединяет манипуляции с данными, обучение моделей, прогнозирование и бэктестинг в одном фреймворке. Благодаря этому пользователи могут переключаться между разными моделями и подходами, не сталкиваясь с проблемами совместимости.

В основе Darts лежит тип данных TimeSeries — он предназначен для представления многомерных и потенциально вероятностных временных рядов. Формат гарантирует, что ряд корректно оформлен и снабжён правильным временным индексом, а также умеет работать с несколькими выборками для вероятностных моделей. Pandas DataFrame легко конвертируется в объект TimeSeries, что упрощает интеграцию с уже существующими рабочими процессами.

Интерфейс Darts повторяет логику scikit-learn: метод fit() используется для обучения моделей, а predict() — для построения прогнозов. Такая согласованность позволяет экспериментировать с разными подходами — от классических методов вроде экспоненциального сглаживания и Auto-ARIMA до продвинутых нейросетевых моделей на базе RNN и трансформеров. Библиотека поддерживает как одномерные, так и многомерные временные ряды и умеет выдавать детерминированные либо вероятностные прогнозы.

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

Модели и инструменты оценки

В библиотеку встроен широкий набор моделей: экспоненциальное сглаживание, (V)ARIMA, Facebook Prophet, а также различные модели глубокого обучения — RNN, TCN и трансформеры. Все они легко взаимозаменяемы благодаря единому интерфейсу fit()/predict(). Кроме того, Darts обеспечивает полноценную поддержку глубокого обучения: модели можно обучать на нескольких временных рядах и ковариатах, а для больших датасетов — задействовать GPU.

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

Darts также поддерживает более продвинутые возможности: вероятностную фильтрацию, grid search для подбора гиперпараметров и автоматический выбор модели. При этом объекты TimeSeries спроектированы неизменяемыми (immutable), что подталкивает к функциональному стилю программирования и снижает риск непреднамеренных побочных эффектов.

Итог

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

Источник: MarkTechPost.