最近色々な自動機械学習 AutoML(Automated Machine Learning)が登場しています。
AutoML(自動機械学習)は、機械学習パイプライン(データセット→特徴量エンジニアリング→学習→評価など)の一部を自動化することで、データサイエンティストや機械学習エンジニアなどの業務を高速化することに役立っています。
さらに、この自動化技術により、データサイエンティストなどの専門家でないビジネスパーソンでも、それなりの精度の機械学習モデルを手にすることができます。
TPOT、MLBox、Auto-Sklearnなどの様々なAutoML(自動機械学習)Pythonライブラリーがあり、分類や回帰の機械学習モデルを自動化することができます。NLP問題を自動化するPyhtonライブラリーは、AutoViMLです。
このように、多くのAutoML(自動機械学習)ツールは、テーブルデータに対するものです。時系列データに対するAutoML(自動機械学習)ツールは非常に少ないです。
そこで登場したのが、Pythonの時系列AutoML(自動機械学習)ライブラリーであるAutoTSです。
今回は、「AutoTSのインストール方法や簡単な使い方」を紹介します。
Contents
時系列AutoML(自動機械学習)AutoTSとは?
AutoTSは、時系列予測モデルの構築を自動化したAutoML(自動機械学習)です。
例えば、ARIMA、FB Prophet、VARなどの時系列解析モデルをPythonコード1行で学習し、その中から最適なものを選択して予測を行うことができます。
では、実際どのようにして最適な予測モデルを探索するのか? と疑問に思われた方もいることでしょう。
AutoTSは、TPOTと同様に遺伝的アルゴリズムを用い、最適な時系列予測モデルを探索します。このとき、ハイパーパラメータチューニングやクロスバリデーションを個々のモデルに実施します。
さらに、欠測値や外れ値に対する処置も実施したりするなど、AutoML(自動機械学習)を円滑に実施するための工夫が多数なされています。
では、具体的にどのように時系列AutoML(自動機械学習)を実行し予測モデルを構築していくのか、見ていきます。
AutoTSで構築できるモデル(2021年12月1日現在)
以下、AutoTSで構築できるモデル(2021年12月1日現在)です。
- ZeroesNaive
- LastValueNaive
- AverageValueNaive
- SeasonalNaive
- GLS
- GLM
- ETS – Exponential Smoothing
- UnobservedComponents
- ARIMA
- VARMAX
- DynamicFactor
- VECM
- VAR
- Theta
- ARDL
- FBProphet
- GluonTS
- RollingRegression
- WindowRegression
- DatepartRegression
- MultivariateRegression
- UnivariateRegression
- UnivariateMotif/MultivariateMotif
- SectionalMotif
- NVAR
- Greykite
- MotifSimulation
- TensorflowSTS
- TFPRegression
- ComponentAnalysis
日々増えているので、気になる方はAutoTSのサイトをチェックしてみてください。
AutoTS Tutorial Models
https://winedarksea.github.io/AutoTS/build/html/source/tutorial.html#id9
インストール
C++のコンパイラーが必要になりますので、例えばWindowsの方は、以下からダウンロードしインストールしておいてください。
Microsoft C++ Build Tools
https://visualstudio.microsoft.com/visual-cpp-build-tools/
では、AutoTSをインストールします。
コマンドプロンプト上で、pipでインストールするときのコードは以下です。
pip install autots
次のような色々な時系列解析や機械学習のパッケージを必要とするため、必要なパッケージをインストールしておく必要があります。
- psutil
- holidays
- prophet
- gluonts (requires mxnet)
- mxnet (mxnet-mkl, mxnet-cu91, mxnet-cu101mkl, etc.)
- tensorflow >= 2.0.0
- lightgbm
- xgboost
- tensorflow-probability
- fredapi
- greykite
以下で、必要なパッケージがインストールされます。
pip install autots[additional]
実行例
サンプルデータの読み込み
AutoTSにあるサンプルデータで実行してみます。米国の経済指標です。
以下、コードです。
# サンプルデータの読み込み from autots.datasets import load_monthly df_wide = load_monthly(long=False) df_wide
以下、実行結果です。
簡単にデータセットについて説明します。
AutoTSが扱える時系列のデータセットには2種類あります。
- Long formatのデータセット
- Wide formatのデータセット
どちらにもあるのが「日付の列」です。
時系列の変数が複数ある場合(要は、多変量の時系列データの場合)、どのように表現するのかで、Long formatとWide formatの2種類あります。
今読み込んだのはWide formatです。
1列目が日付の変数です。2列目以降の9変数(CSUSHPISAからUSEPUINDXM)が、時系列の変数になります。9変量時系列データです。
Long formatの場合を見てみます。
以下、コードです。
load_monthly(long=True)
以下、実行結果です。
1列目が日付の変数(date_col)です。2列目が値の変数(value_col)です。3列目がWide formatの変数名(CSUSHPISAからUSEPUINDXM)の変数(id_col)です。
要は、Wide formatの時系列の9変数(CSUSHPISAからUSEPUINDXM)を縦につなげたようなデータセットになっています。
今回は、Wide formatのデータセットの状態でモデル構築を進めます。
モデル構築前に、どのようなデータセットなのかを、グラフ化し確認します。
以下、コードです。
# グラフ化 df_wide.plot(figsize=(15,8), fontsize=14)
以下、実行結果です。
AutoML設定
では、このデータセットを使い時系列予測モデルを構築してみたいと思います。
先ず、AutoMLの設定をします。
以下、コードです。
# AutoML設定 from autots import AutoTS model = AutoTS( forecast_length=12, frequency='infer', ensemble='simple', max_generations=5, num_validations=5, n_jobs='auto', )
簡単に設定を説明します。
forecast_lengthは、予測する期間の長さです。
frequencyは、データセットが日単位なのか月単位なのかを指定するときに利用します。’infer’を指定した場合、データセットから推論し設定されます。
ensembleに、実施するアンサンブル方法(’auto’, ‘simple’, ‘distance’, ‘horizontal’, ‘horizontal-min’, ‘horizontal-max’, “mosaic”, “subsample”)を指定します。’simple’が名前の通り、一番シンプルなアンサンブルです。ちなみに、複数指定できます。
max_generationsは、遺伝的アルゴリズムの最大世代数です。最大世代数を大きくすればするほど、精度は高くなる可能性は高くなりますが、時間が掛かります。
num_validations は、クロスバリデーションの数です。
n_jobs は、並列処理のコア数です。‘auto’を指定することもできます。
学習(AutoML実行)
では、AutoMLを実行し、最適な時系列予測モデルを探索していきます。
以下、コードです。
# 学習 model = model.fit(df_wide)
時間はかなりかかりますので、覚悟しておいてください。
学習結果(最適モデル)
学習が終了したら、最適モデルを見てみましょう。
以下、コードです。
# 最適モデルの表示 model
以下、実行結果です。
多変量の時系列データということもあり、多変量の時系列モデルであるVARモデル(ベクトル自己回帰モデル、Vector Autoregression Model)です。
検証した他のモデルも気になるところです。見てみます。
以下、コードです。
# 構築したモデル(Score順) validation = model.results("validation") validation.sort_values('Score')
以下、実行結果です。
予測実行
最後に、予測結果を出力します。
以下、コードです。
# 予測 prediction = model.predict() prediction.forecast
以下、実行結果です。
次回
今回は、「AutoTSのインストール方法や簡単な使い方」を紹介しました。
次回は、他の時系列のデータセットを使い時系列モデル構築を実施していきます。