ホーム » sktime » sktime 0.7 : チュートリアル (1) sktime で予測する

sktime 0.7 : チュートリアル (1) sktime で予測する

sktime 0.7 : チュートリアル (1) sktime で予測する (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/30/2021 (v0.7.0)

* 本ページは、sktime の以下のノートブックを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス 無料 Web セミナー開催中 人工知能 & ビジネス Web セミナー

◆ クラスキャットは人工知能・テレワークに関する各種サービスを提供しております :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com  ;  WebSite: https://www.classcat.com/  ;  Facebook

 

sktime 0.7 : チュートリアル (1) sktime で予測する

セットアップ手順 : このノートブックは sktime でサポートされる予測学習タスクのチュートリアルを与えます。binder では、これはそのまま実行できるはずです。

このノートブックを意図したとおりに実行するには、基本的な依存性 requirements とともに sktime が貴方の python 環境にインストールされていることを確実にしてください。

sktime のローカル開発版でこのノートブックを実行するには、以下をアンコメントして実行するか、sktime main ブランチのローカル・クローンを “pip install -e” します。

# from os import sys
# sys.path.append("..")

 
◆ 予測では、時系列の時間的前方予測を行なうために過去のデータが使用されます。これは scikit-learn と類似のライブラリによりサポートされる表形式予測タスクと顕著に異なります。

sktime は様々な古典的そして ML-スタイルの予測アルゴリズムに一般的な、scikit-learn ライクなインターフェイスを時間調整スキームを含む、パイプラインと合成的な機械学習モデルを構築するためのツール、あるいは scikit-learn リグレッサーの walk-forward アプリケーションのようなリダクションとともに提供します。

  • セクション 1 は sktime によりサポートされる一般的な予測ワークフローの概要を提供します。

  • セクション 2 は sktime で利用可能な予測器のファミリーを説明します。

  • セクション 3 はパイプライン構築、リダクション、調整、アンサンブルと autoML を含む、高度な合成パターンを説明します。

  • セクション 4 は sktime インターフェイスに準拠するカスタム推定器をどのように書くかのイントロダクションを与えます。

その他のリファレンス :

  • 予測が教師あり予測とどのように異なるかの更なる詳細、そして予測を教師あり予測として誤診する落とし穴については、このノートブック を見てください。

  • 科学的なリファレンスについては、sktime による予測の論文 を見てください、ここでは sktime の予測モジュールを詳しく説明して M4 study を複製して拡張するためにそれを利用します。

 

基本的な予測ワークフロー

パッケージのインポート

import numpy as np
import pandas as pd

このセクションは基本的な予測ワークフロー、そしてそのための主要なインターフェイス・ポイントを説明します、

以下の 3 つのワークフローをカバーします (訳注: 原文ママ) :

  • 基本的な配備ワークフロー : 適合と予測のバッチ処理

  • 基本的な評価ワークフロー : 正解観測に対する予測のバッチの評価

  • 上位配備ワークフロー : 適合と更新/予測のローリング

  • 上位評価ワークフロー : ローリング予測分割を使用して、一般的なバックテスト・スキームを含む分割毎と集計誤差を計算します。

 

1.1 データ・コンテナ形式

総てのワークフローは入力データ形式に共通の仮定を持ちます。

sktime は時系列を表すために pands を利用します :

  • 単変量時系列とシークエンスのための pd.Series
  • 多変量時系列とシークエンスのための pd.Series

Series.index and DataFrame.index は時系列やシークエンスのインデックスを表すために使用されます。sktime は pandas の integer, period と timestamp インデックスをサポートします。

NOTE : 現時点 (v0.6x) では、多変量時系列の予測は安定的な機能ではありません、これは優先的なロードマップ項目です。多変量外因的な時系列は安定的な機能の一部です。

Example : このチュートリアルの実行例として、テキストブックのデータセット、Box-Jenkins 航空会社データセットを使用します、これは 1949 – 1960 の国際航空会社の旅客の月間合計数から成ります。値は千単位です。”Makridakis, Wheelwright and Hyndman (1998) Forecasting: 手法とアプリケーション”, 課題セクション 2 と 3 を見てください。

from sktime.datasets import load_airline
from sktime.utils.plotting import plot_series
y = load_airline()

# plotting for visualization
plot_series(y)
y.index

一般に、ユーザは予測のためのデータセットをロードするために read_csv のような pandas と pandas 互換パッケージの組込みロード機能や、データが他のインメモリ形式 e.g., numpy.array で利用可能な場合には Series or DataFrame コンストラクタを使用することが想定されています。

sktime 予測器は pandas 隣接 (= pandas-adjacent) 形式の入力を受け取るかもしれませんが、pandas 形式で出力を生成し、そして (pandas 形式で) 入力を強制しようとします。

Note : 貴方の好みの形式に正しく変換あるいは強制されない場合、その機能を sktime に親切に寄与することを考えてください。

 

1.2 基本的な配備ワークフロー – 適合と予測のバッチ処理

最も単純なユースケース・ワークフローは適合と予測のバッチ処理です、つまり、予測モデルを過去のデータの 1 つのバッチに適合させてから、未来の時間ポイントで予測を要求します。

このワークフローのステップは以下のようなものです :

  1. データの準備
  2. 予測がリクエストされる時間ポイントの仕様。これは numpy.array or ForecastingHorizon オブジェクトを使用します。
  3. 予測器の仕様とインスタンス化。これは scikit-learn ライクなシンタクスに従います ; 予測器オブジェクトはお馴染みの scikit-learn BaseEstimator インターフェイスに従います。
  4. 予測器の fit メソッドを使用して、予測器をデータに適合させます。
  5. 予測器の predict メソッドを使用して、予測を行ないます。

下では最初に基本的な配備ワークフローの vanilla 変種を段階的に概説します。

最後に、パターンからの一般的な deviations を伴う、1 セル・ワークフローが提供されます (セクション 1.2.1 とそれ以降)。

 

ステップ 1 – データの準備

セクション 1.1 で説明されたように、データは pd.Series or pd.DataFrame 形式にあることが仮定されています。

from sktime.datasets import load_airline
from sktime.utils.plotting import plot_series
# in the example, we use the airline data set.
y = load_airline()
plot_series(y)

 

ステップ 2 – 予測期間を指定する

次に予測期間を指定してそれを予測アルゴリズムに渡す必要があります。

2 つの主要な方法があります :

  • 整数の numpy.array を使用する。これは時系列の整数インデックスか periodic インデックスのいずれかを想定しています ; 整数は (そのために) 前もって予測したい時間ポイントか期間の数を示します。E.g., 1 は次の期間を予測すること、2 は 2 番目の次の期間を予測することを意味します、等々。

  • ForecastingHorizon を使用する。これは引数としてサポートされるインデックス型を使用して、予測範囲を定義するために使用できます。periodic インデックスは想定されていません。

予測範囲は絶対的、つまり未来の特定の時間ポイントを参照するか、相対的、つまり現在までの時間差を参照することができます。デフォルトとして、現在は予測器に渡される任意の y で見られる最新の時間ポイントです。

numpy.array ベースの予測範囲は常に相対的です ; ForecastingHorizon オブジェクトは相対的と絶対的にの両者であることが可能です。特に絶対的予測範囲は ForecastingHorizon を使用してのみ指定できます。

 

numpy 予測範囲を使用する

fh = np.arange(1, 37)
fh

これは次の 3 年間の monthly 予測を求めます、何故ならば元の系列期間は 1 ヶ月だからです。別の例では、先の 2 番目と 5 番目の月だけを予測するために、次のように書けます :

import numpy as np
fh = np.array([2, 5])  # 2nd and 5th step ahead

 

ForecastingHorizon ベースの予測範囲を使用する

ForecastingHorizon オブジェクトは入力として絶対的インデックスを取りますが、is_relative フラグに応じて入力を絶対的または相対的と見なします。

pandas から時間差タイプが渡される場合、ForecastingHorizon は自動的に相対的範囲を想定します ; pandas から値タイプが渡される場合、それは絶対的範囲を想定します。

この例で絶対的な ForecastingHorizon を定義するためには :

from sktime.forecasting.base import ForecastingHorizon
fh = ForecastingHorizon(
    pd.PeriodIndex(pd.date_range("1961-01", periods=36, freq="M")), is_relative=False
)
fh

ForecastingHorizon は to_relative と to_absolute メソッドを通して相対的から絶対的に (そしてその反対に) 変換できます。
これらの変換の両者は互換なカットオフが渡されることを要求します :

cutoff = pd.Period("1960-12", freq="M")
fh.to_relative(cutoff)
fh.to_absolute(cutoff)

 

ステップ 3 – 予測アルゴリズムを指定する

予測を行なうためには、予測アルゴリズムが指定される必要があります。これは scikit-learn のようなインターフェイスを使用して成されます。最も重要なことは、総ての sktime 予測器が同じインターフェイスに従いますので、どの予測器が選択されても、これまでのそして残りのステップが同じであることです。

この例については、最後の観測値を予測する naive 予測メソッドを選択します。パイプラインとリダクション構築シンタクスを使用して、より複雑な仕様が可能です。これはセクション 2 で後でカバーされます。

from sktime.forecasting.naive import NaiveForecaster
forecaster = NaiveForecaster(strategy="last")

 

ステップ 4 – 予測器を観測データに適合させる

今は予測器は観測値に適合される必要があります :

forecaster.fit(y)

 

ステップ 5 – 予測を要求する

最後に、指定された予測範囲のための予測を要求します。予測器に適合させた後これは成される必要があります :

y_pred = forecaster.predict(fh)
# plotting predictions and past data
plot_series(y, y_pred, labels=["y", "y_pred"])

 

基本的な配備ワークフロー (in a nutshell)

便利のために、基本的な配備ワークフローを一つのセルで表します。これは同じデータを使用しますが、異なる予測器です : 同じ月に観測された最新の値を予測します。

from sktime.datasets import load_airline
from sktime.forecasting.base import ForecastingHorizon
from sktime.forecasting.naive import NaiveForecaster
# step 1: data specification
y = load_airline()

# step 2: specifying forecasting horizon
fh = np.arange(1, 37)

# step 3: specifying the forecasting algorithm
forecaster = NaiveForecaster(strategy="last", sp=12)

# step 4: fitting the forecaster
forecaster.fit(y)

# step 5: querying predictions
y_pred = forecaster.predict(fh)
# optional: plotting predictions and past data
plot_series(y, y_pred, labels=["y", "y_pred"])

 
翻訳中

 

以上



ClassCat® Chatbot

人工知能開発支援
クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com