第5回 時系列分析~ライブラリ編~
はじめに
前回の記事では、時系列予測を"ディープラーニング"で実施する方法について説明し、Pythonでの実装例について紹介しました。
今回は、Pythonで使用することができる時系列ライブラリについて紹介します。
statsmodels
公式ドキュメント:https://www.statsmodels.org/stable/index.html
GitHub:https://github.com/statsmodels/statsmodels
統計モデリングのためのライブラリです。statsmodelsには時系列予測のためのモデルとして大きく以下の3つのモデル群が提供されています。
statsmodels.tsa:ARモデル、ARIMAモデル等のような時系列予測のための基本的なモデル
statsmodels.tsa.statespace:状態空間モデル
statsmodels.tsa.vector_ar:VARモデルのような複数時系列を同時に予測できるモデル
コード例
以下はARモデルを実装した例です。データを準備さえすれば非常に簡単にモデルを構築することができます。
from statsmodels.tsa.ar_model import AutoReg
mod = AutoReg(data, lags=3, old_names=False)
res = mod.fit()
Prophet
公式ドキュメント:https://facebook.github.io/prophet/docs/quick_start.html
GitHub:https://github.com/facebook/prophet
Meta社(旧Facebook社)製の時系列予測ライブラリです。Prophetは時系列分析の知見のない人でも使えるようにするというコンセプトのもと開発されたモデルです。非定常なデータに対して時系列予測をすることができます。
コード例
statsmodels同様にデータを準備さえすれば非常に簡単にモデルを構築することができます。
from prophet import Prophet
m = Prophet()
m.fit(data)
NeuralProphet
公式ドキュメント:https://neuralprophet.com/html/index.html
GitHub:https://github.com/ourownstory/neural_prophet
NeuralProphetは前述したProphetとAR-Netと呼ばれる自己回帰型のニューラルネットワークモデルを組み合わせた時系列予測モデルです。NeuralProphetはコンポーネント指向で開発されているため機能拡張性が高く、Prophetと同様に時系列分析の知見のない人でも使えるようにするというコンセプトのもと開発されたモデルです。Prophetに加えて自己回帰成分が追加されたことで、より幅広い表現をできるようになっています。
コード例
NeuralProphetでは以下のコード例のように引数にラグ数などを指定することにより簡単に自己回帰成分を追加することができます。なお、引数を省略すると自己回帰成分なしのモデルとなります。
from neuralprophet import NeuralProphet
m = NeuralProphet(
n_lags=12,
changepoints_range=0.95,
n_changepoints=30,
weekly_seasonality=False,
learning_rate=0.1,
)
metrics = m.fit(data, freq='D')
tslearn
公式ドキュメント:https://tslearn.readthedocs.io/en/stable/
GitHub:https://github.com/tslearn-team/tslearn/
時系列分析のための機械学習ツールを提供するPythonライブラリで、scikit-learnをベースに作られています。scikit-learn同様に時系列予測に特化した形で、回帰、分類、クラスタリングのモデルが用意されています。また、時系列データを任意の時間間隔にリサンプリングするクラスも用意されています。
コード例
以下は時系列予測用のSVRの例ですが、scikit-learnと同じ文法で記載できることが分かります。
from tslearn.svm import TimeSeriesSVR
clf = TimeSeriesSVR(C=1.0, kernel="gak")
clf.fit(X, y)
sktime、sktime-dl
公式ドキュメント:https://www.sktime.org/en/stable/index.html
GitHub:https://github.com/alan-turing-institute/sktime
GitHub(sktime-dl):https://github.com/sktime/sktime-dl
sktimeはtslearnと同様にscikit-learnの時系列版のライブラリです。時系列予測に特化した形で、回帰、分類、クラスタリングのモデルが用意されています。tslearnと異なる点として、ARIMAモデルやProphetなども含まれていることが挙げられます。また、別ライブラリですがsktime-dlというディープラーニングに特化した時系列ライブラリもあります。
コード例
from sktime.forecasting.arima import ARIMA
forecaster = ARIMA(
order=(1, 1, 0), seasonal_order=(0, 1, 0, 12), suppress_warnings=True
)
forecaster.fit(data)
Darts
公式ドキュメント:https://unit8co.github.io/darts/
GitHub:https://github.com/unit8co/darts
Dartsは時系列予測における様々なモデルを統一的に扱うことができるライブラリです。機械学習分野におけるscikit-learnのようなライブラリと考えていただければだいたい合っていると思います。
Dartsで対応している時系列予測モデルの一部は以下の通りです。
ARIMAモデル
Prophet
カルマンフィルター(状態空間モデル)
RNN、LSTM、GRU
Transformer
ディープラーニング系のモデルはデータに対して前処理が必要であったり、モデルの初期化に必要なパラメータがいくつか存在しますが、その他のモデルであれば、以下の例のExponentialSmoothingを他のモデルに変えるだけで動かすことができます。
コード例
from darts.models import ExponentialSmoothing
model = ExponentialSmoothing()
model.fit(data)
PyTorch Forecasting
公式ドキュメント:https://pytorch-forecasting.readthedocs.io/en/stable/
GitHub:https://github.com/jdb78/pytorch-forecasting
PyTorch Forecastingは、Dartsと同様に時系列予測における様々なモデルを統一的に扱うことができるライブラリです。ただしPyTorch Forecastingで扱えるモデルは、ニューラルネットワークを使用したモデルとなっているため、ARIMAやProphetといったようなモデルは実装されていません。
PyTorch Forecastingは今まで紹介したライブラリと異なり、数行のコードで実行することはできません。公式のサンプルではPyTorch Lightningと一緒にコードが紹介されており、Dataset、Dataloader、Trainer、モデルの作成と一般的にPyTorchでモデルを作成するのと同じ手順を踏む必要があります。PyTorch Forecastingでは時系列データ特有のDatasetの作成とモデルの作成を簡単に実装できるようになっています。本記事ではコード例を紹介しませんが、興味のある方は是非公式ドキュメントを参考にしてみてください。
まとめ
本記事ではPythonで使用することができる時系列ライブラリについて紹介しました。tslearnやDartsなど、複数のアルゴリズムを統一的なコードで書くことができるため、時系列予測をしたいときにはそれらのライブラリで色々なアルゴリズムを試してみるのはいかがでしょうか。
この記事が気に入ったらサポートをしてみませんか?