
Darts は、時系列に対するユーザーフレンドリーな予測と異常検知のための Python ライブラリです。ARIMA のような古典的なものから深層ニューラルネットワークまで、さまざまなモデルを含んでいます。予測モデルはすべて、scikit-learn と同様に fit() と predict() 関数を使って同じ方法で使用できます。
このライブラリはまた、モデルのバックテスト、複数のモデルの予測の組み合わせ、外部データの考慮を簡単にします。
Darts は単変量および多変量の時系列とモデルの両方をサポートしています。
ML ベースのモデルは、複数の時系列を含む潜在的に大規模なデータセットでトレーニングでき、一部のモデルは確率的予測を豊富にサポートしています。
Darts はまた、広範な異常検知機能も提供しています。 たとえば、PyOD モデルを時系列に適用して異常スコアを取得したり、Darts の予測モデルやフィルタリングモデルをラップして本格的な異常検知モデルを得ることは簡単です。
まず、お気に入りのツール(conda、venv、virtualenv と virtualenvwrapper の有無を問わず)を使用して、Python 3.11+ でプロジェクト用のクリーンな Python 環境をセットアップすることをお勧めします。
環境がセットアップされたら、pip を使用して darts をインストールできます:
pip install darts
詳細については、インストール手順を参照してください。
Pandas DataFrame から TimeSeries オブジェクトを作成し、それをトレーニング/検証シリーズに分割します:```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 の検出器を時系列に適用するのは容易です。
* **多変量サポート:** `TimeSeries` は多変量、つまり単一のスカラー値ではなく
複数の時間変化する次元/列を持つことができます。多くのモデルが多変量系列を入力として受け取り、出力できます。
* **複数系列の学習(グローバルモデル):** すべての機械学習ベースのモデル(すべてのニューラルネットワークを含む)は、
複数の(多変量の場合もある)系列で学習することをサポートしています。大規模なデータセットにもスケールできます。
* **確率論的サポート:** `TimeSeries` オブジェクトは(オプションで)確率過程の
時系列を表現できます。これは例えば信頼区間を得るために使用でき、多くのモデルがさまざまな
確率論的予測(パラメトリック分布や分位点の推定など)をサポートしています。
一部の異常検知スコアラーも、これらの予測分布を活用できます。
* **Conformal Prediction サポート:** 当社の conformal prediction モデルは、
任意の事前学習済みグローバル予測モデルに対して、キャリブレーションされた分位点区間を伴う確率論的予測を生成できます。
* **過去および未来の共変量サポート:** Darts の多くのモデルは、予測を生成するための入力として、
過去に観測された共変量および/または未来に判明している共変量(外部データ)の時系列をサポートしています。
* **静的共変量サポート:** 時間依存データに加えて、`TimeSeries` は各次元の
静的データも保持でき、一部のモデルでこれを活用できます。
* **階層的リコンシリエーション:** Darts はリコンシリエーションを実行する
トランスフォーマーを提供しています。
これにより、基盤となる階層構造を尊重する形で予測値を整合させることができます。
* **回帰モデル:** 任意の scikit-learn 互換モデルをプラグインして、
目的系列と共変量のラグ値の関数として予測を得ることが可能です。
* **サンプル重みを用いた学習:** すべてのグローバルモデルはサンプル重みを用いた学習をサポートしています。これらは
各観測値、予測タイムステップ、目的列に適用できます。
* **予測開始のシフト:** すべてのグローバルモデルは、シフトされた出力ウィンドウでの学習と予測をサポートしています。
これは例えば前日市場(Day-Ahead Market)の予測や、共変量(または目的系列)が
遅延して報告される場合に有用です。
* **説明可能性:** Darts は SHAP 値を用いて一部の予測モデルを*説明*する機能を持っています。
* **データ処理:** 時系列データに対する一般的な変換(スケーリング、欠損値の補完、差分、boxcox など)を
簡単に適用(および元に戻す)するためのツール。
* **メトリクス:** 時系列の適合度を評価するための多様なメトリクス。
R2 スコアから Mean Absolute Scaled Error まで。
* **バックテスト:** 移動時間ウィンドウを用いて過去の予測をシミュレートするためのユーティリティ。
* **PyTorch Lightning サポート:** すべての深層学習モデルは PyTorch Lightning を用いて実装されており、
カスタムコールバック、GPU/TPU トレーニング、カスタムトレーナーなどをサポートしています。
* **MLflow 統合:** Darts の予測モデル実験の自動トラッキング、比較、永続化のための MLflow との統合。
例については [MLflow クイックスタートノートブック](https://unit8co.github.io/darts/examples/29-MLflow-examples.html)を参照。
* **フィルタリングモデル:** Darts は `KalmanFilter`、`GaussianProcessFilter`、
`MovingAverageFilter` の 3 つのフィルタリングモデルを提供しており、時系列をフィルタリングでき、
場合によっては基盤となる状態/値の確率論的推論を得ることができます。