
Python-библиотека для удобного прогнозирования и обнаружения аномалий на временных рядах.

Darts — это библиотека Python для удобного прогнозирования и обнаружения аномалий
во временных рядах. Она содержит множество моделей: от классических, таких как ARIMA, до
глубоких нейронных сетей. Все модели прогнозирования можно использовать одинаково,
с помощью функций fit() и predict(), аналогично scikit-learn.
Библиотека также упрощает бэктестинг моделей,
объединение предсказаний нескольких моделей и учёт внешних данных.
Darts поддерживает как одномерные, так и многомерные временные ряды и модели.
Модели на основе машинного обучения можно обучать на потенциально больших наборах данных, содержащих множество временных
рядов, а некоторые модели предлагают богатую поддержку вероятностного прогнозирования.
Darts также предлагает обширные возможности обнаружения аномалий. Например, тривиально применить модели PyOD к временным рядам для получения оценок аномальности или обернуть любую из моделей прогнозирования или фильтрации Darts, чтобы получить полноценные модели обнаружения аномалий.
Мы рекомендуем сначала настроить чистое окружение Python для вашего проекта с Python 3.11+, используя ваш любимый инструмент (conda, venv, virtualenv с или без virtualenvwrapper).
После настройки окружения вы можете установить darts с помощью pip:
pip install darts
Для получения более подробной информации обратитесь к нашим инструкциям по установке.
Создайте объект TimeSeries из Pandas DataFrame и разделите его на обучающую и валидационную серии:```python
import pandas as pd
from darts import TimeSeries
df = pd.read_csv("AirPassengers.csv", delimiter=",")
series = TimeSeries.from_dataframe(df, "Month", "#Passengers")
train, val = series[:-36], series[-36:]
Подгоните модель экспоненциального сглаживания и сделайте (вероятностный) прогноз на продолжительность валидационного ряда:```python
from darts.models import ExponentialSmoothing
model = ExponentialSmoothing()
model.fit(train)
prediction = model.predict(len(val), num_samples=1000)
Постройте график медианы, 5-го и 95-го процентилей:```python import matplotlib.pyplot as plt
series.plot() prediction.plot(label="forecast", low_quantile=0.05, high_quantile=0.95) plt.legend()
<div style="text-align:center;">
<img src="https://raw.githubusercontent.com/unit8co/darts/master/static/images/example.png" alt="darts forecast example" />
</div>
### Обнаружение аномалий
Загрузите многомерный ряд, обрежьте его, оставьте 2 компонента, разделите на обучающую и валидационную выборки:```python
from darts.datasets import ETTh2Dataset
series = ETTh2Dataset().load()[:10000][["MUFL", "LULL"]]
train, val = series.split_before(0.6)
Создайте скорер аномалий на основе k-means, обучите его на обучающем наборе и примените его к валидационному набору для получения оценок аномальности:```python from darts.ad import KMeansScorer
scorer = KMeansScorer(k=2, window=5) scorer.fit(train) anom_score = scorer.score(val)
Создайте бинарный детектор аномалий и обучите его на train-оценках,
затем примените его к validation-оценкам для получения бинарной классификации аномалий:```python
from darts.ad import QuantileDetector
detector = QuantileDetector(high_quantile=0.99)
detector.fit(scorer.score(train))
binary_anom = detector.detect(anom_score)
График (сдвиг и масштабирование некоторых рядов, чтобы всё отображалось на одном рисунке):```python import matplotlib.pyplot as plt
series.plot() (anom_score / 2. - 100).plot(label="computed anomaly score", c="orangered", lw=3) (binary_anom * 45 - 150).plot(label="detected binary anomaly", lw=4)
<div style="text-align:center;">
<img src="https://raw.githubusercontent.com/unit8co/darts/master/static/images/example_ad.png" alt="darts anomaly detection example" />
</div>
## Возможности
* **Модели прогнозирования:** Большая коллекция моделей прогнозирования как для задач регрессии, так и для задач классификации; от статистических моделей (таких как
ARIMA) до моделей глубокого обучения (таких как N-BEATS). См. [модели прогнозирования](#forecasting-models) ниже.
* **Обнаружение аномалий** Модуль `darts.ad` содержит коллекцию скореров аномалий,
детекторов и агрегаторов, которые можно комбинировать для обнаружения аномалий во временных рядах.
Легко обернуть любую из моделей прогнозирования или фильтрации Darts, чтобы построить
полноценную модель обнаружения аномалий, сравнивающую прогнозы с фактическими значениями.
`PyODScorer` делает тривиальным использование детекторов PyOD на временных рядах.