ArcGIS でのサード パーティーの時系列予測モデルの使用
GeoAI ツールボックスの 時系列 AI ツールセット には、時系列データの分析と処理に使用できるツールが含まれています。 このツールセットには、時空間キューブの位置における将来の値をトレーニングおよび予測するためのツールがあります。 これらのツールでは、FCN (Fully Connected Network)、LSTM (Long Short-Term Memory)、InceptionTime、ResNet、ResCNN などのさまざまなディープ ラーニング ベースを使用した時系列予測モデルのトレーニングと応用がサポートされています。
事前構築されたこれらのモデルは堅牢で効果的ですが、最適なパフォーマンスを得るには、大規模なドメイン固有の時系列データセットの広範なトレーニングが必要です。 しかし、時系列の基礎モデルを含む新しいモデルを統合するための、カスタマイズされたワークフローが必要になる場合もあります。これは、予測を行う既製ソリューションを提供することを目的としています。 このような基礎モデルは、広範で多様な時系列データセットで事前トレーニング済みで、追加のトレーニングを行わずに、特定の入力データに基づいて将来の出来事を予測するために直接適用できます。 異なる時系列データセットを一般化する機能により、高い汎用性が実現します。
Python 開発者は、ArcGIS をこれらの外部のサード パーティー モデルと統合するカスタム時系列関数を作成し、それを Esri ディープ ラーニング パッケージ (.dlpk ファイル) としてパッケージ化して、時系列モデルを使用した予測 ツールで使用できます。
カスタム Python 時系列関数
Python で時系列関数を作成し、サード パーティーの時系列モデルを時系列予測パイプラインに統合できます。
時系列関数のメソッドを次の表に示します。以下のサブセクションでは、さらに詳しく説明します。
|
方法 |
説明 |
|---|---|
|
|
|
|
|
時系列モデルを読み込み、初期構成を設定します。 このメソッドは、Python 時系列関数の開始時に使用します。 |
|
|
時系列関数が受け入れるパラメーターを定義します。 これには、モデルの読み込みや接続に必要な構成設定や、時系列処理に必要なパラメーターなどがあります。 |
|
|
ツールが入力処理を実行し、出力を生成する方法を説明します。 これには、関数に必要な前処理や後処理の手順の詳細が含まれます。 |
|
|
入力データを目的の出力に変換する関数。 定義されたパラメーターと処理ロジックを使用して、最終結果を生成します。 |
関数のメソッド
以下では、時系列関数のメソッドについて説明します。
init
__init__ メソッドはカスタム時系列関数のコンストラクターで、名前、説明、その他の重要な属性などのインスタンス変数を初期化します。 このメソッドは、時系列関数の動作と特性を定義するプロパティを設定します。
コンストラクターは、処理と解析に必要なすべての属性を持つカスタム時系列クラスのインスタンスを作成します。 このメソッドは、時系列クラスのインスタンスが作成されると、必要な設定とデフォルト値で初期化されるよう確保します。 たとえば、時系列関数に特定の設定が必要な場合 (モデル加重や構成ファイルを含むフォルダー パスなど)、このメソッドで指定できます。
class MyTimesFM:
def __init__(self, **kwargs):
"""
It sets up the initial state of an object by defining its attributes,
such as name, description, and other properties.
"""
self.name = "TimeSeriesForecast"
self.description = '''The `MyTimesFM` class is designed to perform time series forecasting tasks.'''
# Additional initialization code here
initialize
initialize メソッドは、カスタム Python 時系列関数の開始時に呼び出され、kwargs['model'] 引数がこのメソッドに渡されます。 kwargs['model'] 引数は、Esri モデル定義ファイル (.emd) へのパスです。 このメソッドは、モデルの加重を読み込んで時系列モデルを設定し、後続の操作でそのモデルを参照できるようにするために使用されます。
def initialize(self, **kwargs):
"""
Initialize model parameters, such as loading pretrained model weights.
"""
json_file = kwargs['model']
with open(json_file, 'r') as f:
self.json_info = json.load(f)
# Access the model path in the model definition file
model_path = json_info['ModelFile']
# Load your model and keep an instance for the modelt
self.model = load_your_model(model_path)
# Additional initialization code here
getParameterInfo
getParameterInfo メソッドは、initialize メソッドの後に 時系列モデルを使用した予測 ツールによって呼び出され、このモデルで必要なパラメーターを定義します。 このメソッドは、カスタム時系列関数に必要な入力パラメーターのリストを返します。 各パラメーターの記述には、以下に示すように、パラメーターの名前、データ タイプ、表示名、説明、およびパラメーターが必須かどうかを示すブール型パラメーターを含むディクショナリーが使用されます。
def getParameterInfo(self):
return [
{
"name": "batch_size",
"dataType": "long",
"required": False,
"displayName": "batch_size",
"description": "The number of sequences processed in one forward pass through the model.",
"value": "16"
},
{
"name": "sequence_length",
"dataType": "long",
"required": True,
"displayName": "sequence_length",
"description": "Use the sequence length number of time steps to forecast the next user-defined time steps.",
"value": "32"
},
# Additional code here
]
このメソッドは、ディクショナリーのリストを返します。それぞれがパラメーターを記述しています。 ディクショナリーの主な属性は次のとおりです。
name- パラメーターの文字列の識別子dataType- パラメーターが受け入れるデータのタイプ (long、string、Boolean、list など)value- パラメーターのデフォルト値required- パラメーターが必須かどうかを示すブール値displayName- パラメーターのわかりやすい名前domain- 許容値のセット (該当する場合)description- パラメーターの詳細な説明
パラメーターのリストは、時系列モデルを使用した予測 ツールでカスタム モデルのモデル引数を通じてユーザーに表示されます。 ユーザーは、ツールのユーザー インターフェイスを使用してこれらの値を対話的に設定したり、プログラムでキーワード引数として getConfiguration メソッドに渡したりできます。
getConfiguration
getConfiguration メソッドは、時系列関数のパラメーターを設定および管理します。 ツールや指定したプログラムを通じてユーザーが更新したパラメーターを含むキーワード引数を受け入れます。 このメソッドは、更新されたパラメーターに基づいて、関数がデータを処理および出力する方法も制御します。 このメソッドは、getParameterInfo メソッドの後、predict メソッドの前に呼び出されます。 関数の戻り値は、モデルが一度に処理できるシーケンスの数を示す batch_size の値を含むディクショナリーです。 このメソッドの戻り値は、モデルが一度にまとめて処理できるよう、入力データを分割する方法をツールに通知します。
def getConfiguration(self, **kwargs):
"""
This method configures the supported time series function parameters and
controls further processing based on them.
"""
# Set the sequence_length and batch_size from the provided arguments
self.sequence_length = int(kwargs.get("sequence_length"))
# Set the batch size, limiting it to a maximum of 4
if kwargs.get("batch_size", 0) > 4:
kwargs["batch_size"] = 4
self.batch_size = kwargs.get("batch_size")
# Set the number_of_timesteps_to_forecast from the toolset
self.number_of_timesteps_to_forecast = kwargs.get("number_of_timesteps_to_forecast")
# Return the updated parameter values
return kwargs
上記の例では、カスタム時系列関数は次の手順で構成されます。
指定された引数から
sequence_lengthパラメーターを設定します。batch_sizeパラメーターを最大 4 に設定します (より大きな値が指定された場合)。ツールセットから
number_of_timesteps_to_forecastパラメーターを設定します。更新されたパラメーター値を返します。
predict
predict メソッドは、時系列モデルを使用して予測を生成し、推論を実行します。 このメソッドは、入力データを含む 2D NumPy 配列を受け入れ、結果を 2D NumPy 配列として返します。 典型的なワークフローは次のとおりです。
モデルの要件に合わせて、入力データを前処理します。
時系列モデルを入力データに適用し、予測を生成します。
def predict(self, input_sequences): """ Forecast time series data based on the input data. """ # Preprocessing input code here # Input_sequences is a 2d Numpy Array of shape (batch_size, total number of time steps). # Adjust the input sequence length as per the model requirements. input_sequences = input_sequences[:, -self.sequence_length:] # Make Forecasts forecasts = self.model.predict(input_sequences, self.number_of_timesteps_to_forecast) # Additional code here # Return the forecasted values in the shape of (batch_size, number_of_timesteps_to_forecast) return forecasts
## Esri .emd ファイル {#EF9}
カスタム Python 時系列関数を作成したら、関数への参照を `InferenceFunction` パラメーターの横に指定して、`.emd` ファイルに関数への参照を含めます。 これにより、`.emd` ファイルが関数に正しくリンクされ、時系列予測で使用できるようになります。
```json
{
"InferenceFunction": "MyTimesFM.py",
"ModelType": "TimeSeriesForecasting"
}
.emd ファイルには、次のキーが含まれている必要があります:
InferenceFunction- カスタム時系列関数が含まれるファイルの名前。ModelType- モデルのタイプを指定し、TimeSeriesForecastingに設定します
カスタム .dlpk ファイル
最終的なサードパーティーのカスタム時系列モデルを完成させるには、.dlpk モデル ファイルを作成します。 .dlpk ファイルにより、このモデルを 時系列 AI ツールセット の 時系列モデルを使用した予測 ツールで使用できるようになります。
ファイルを次のように整理します。
フォルダーを作成し、カスタム時系列関数ファイル (たとえば、
MyTimesFM.py) および Esri.emdファイル (たとえば、TimesFM.emd) を含めます。 フォルダーの名前は、.emdファイルの名前と一致する必要があります。TimesFM/ ├── MyTimesFM.py └── TimesFM.emd必要に応じて、時系列関数のその他のファイルやフォルダーを含めます。
フォルダーを ZIP アーカイブに圧縮します。
.zipファイルの名前と一致するように.emdファイルの名前を変更します。ただし、拡張子は.dlpkにします。 これで、.dlpkファイルを 時系列モデルを使用した予測 ツールで使用できるようになります。