SKI と CLI で時系列予測モデルをトレーニングするために、AutoML を設定する
適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)
Azure Machine Learning の自動機械学習 (AutoML) では、標準の機械学習モデルと既知の時系列モデルを使用して予測を作成します。 このアプローチは、入力データ内のユーザー指定の特徴量と自動的に設計された特徴量を使用して、ターゲット変数に関する履歴情報を組み込んでいます。 モデル検索アルゴリズムは、最適な予測精度のモデルを特定するのに役立ちます。 詳細については、予測手法とモデルのスイープと選択に関する記事を参照してください。
この記事では、Azure Machine Learning Python SDK](/python/api/overview/azure/ai-ml-readme) を使用して、機械学習を使用した時系列予測のために、AutoML を設定する方法について説明します。 このプロセスには、トレーニングのためにデータを準備することと、予測ジョブ (クラス参照) で時系列パラメーターを構成することが含まれます。 その後、コンポーネントとパイプラインを使用して、モデルのトレーニング、推論、評価を行います。
ロー コードのエクスペリエンスについては、自動機械学習を使用した需要の予測に関するチュートリアルを参照してください。 このリソースでは、Azure Machine Learning スタジオで AutoML を使用した時系列予測の例を示します。
前提条件
- Azure Machine Learning ワークスペース。 ワークスペースを作成するには、「ワークスペースを作成する」を参照してください。
- AutoML トレーニング ジョブを起動できること。 詳細については、「Azure Machine Learning CLI と Python SDK を使用して表形式データの AutoML トレーニングを設定する」を参照してください。
トレーニング データと検証データを準備する
AutoML 予測の入力データには、有効な時系列が表形式で含まれている必要があります。 各変数には、それに対応する独自の列がデータ テーブルに入っている必要があります。 AutoML には、少なくとも 2 つの列 (時間軸を表す "時間" 列と、予測する数量である "ターゲット" 列) が必要です。 他の列は予測器として機能します。 詳細については、「AutoML でのデータの使用方法」を参照してください。
重要
将来の値を予測するためにモデルをトレーニングする際には、トレーニングで使用されるすべての特徴量を、意図した期間の予測を実行するときにも使用できることを確認してください。
現在の株価用の特徴量を考えてみましょう。これにより、トレーニングの精度を大幅に高めることができます。 予測が長期間にわたると、将来の時系列ポイントに応じた将来の株価を正確に予測できないことがあります。 このアプローチをとると、モデルの精度が低下する場合があります。
AutoML 予測ジョブでは、トレーニング データが MLTable
オブジェクトとして表される必要があります。 MLTable
オブジェクトは、データ ソースと、データを読み込む手順を指定します。 詳細とユース ケースについては、「[テーブルの操作(how-to-mltable.md)」を参照してください。
次の例では、トレーニング データがローカル ディレクトリの CSV ファイル ./train_data/timeseries_train.csv に含まれているとします。
次の例に示すように、mltable Python SDK を使用して MLTable
オブジェクトを作成できます。
import mltable
paths = [
{'file': './train_data/timeseries_train.csv'}
]
train_table = mltable.from_delimited_files(paths)
train_table.save('./train_data')
このコードは、ファイル形式と読み込み手順を含む新しいファイル ./train_data/MLTable を作成します。
トレーニング ジョブを開始するには、次に示すように、Python SDK を使用して入力データ オブジェクトを定義します。
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml import Input
# Training MLTable defined locally, with local data to be uploaded
my_training_data_input = Input(
type=AssetTypes.MLTABLE, path="./train_data"
)
検証データも同様の方法で指定します。 MLTable
オブジェクトを作成し、検証データ入力を指定します。 または、検証データを指定しない場合、AutoML によってトレーニング データからクロス検証分割が自動的に作成され、モデルの選択に使用されます。 詳細については、次のリソースを参照してください。
コンピューティングを作成して実験を行う
AutoML では、フル マネージド コンピューティング リソースである Azure Machine Learning コンピューティングを使用してトレーニング ジョブを実行します。 次の例では、cpu-compute
という名前のコンピューティング クラスターが作成されます。
from azure.ai.ml.entities import AmlCompute
# specify aml compute name.
cpu_compute_target = "cpu-cluster"
try:
ml_client.compute.get(cpu_compute_target)
except Exception:
print("Creating a new cpu compute target...")
compute = AmlCompute(
name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
)
ml_client.compute.begin_create_or_update(compute).result()
実験を構成する
次の例は、実験を構成する方法を示します。
AutoML ファクトリ関数を使用して、Python SDK で予測ジョブを構成します。 次の例は、プライマリ メトリックを設定して予測ジョブを作成し、トレーニング実行で制限を設定する方法を示しています。
from azure.ai.ml import automl
# Set forecasting variables
# As needed, modify the variable values to run the snippet successfully
forecasting_job = automl.forecasting(
compute="cpu-compute",
experiment_name="sdk-v2-automl-forecasting-job",
training_data=my_training_data_input,
target_column_name=target_column_name,
primary_metric="normalized_root_mean_squared_error",
n_cross_validations="auto",
)
# Set optional limits
forecasting_job.set_limits(
timeout_minutes=120,
trial_timeout_minutes=30,
max_concurrent_trials=4,
)
予測ジョブの設定
予測タスクには、予測固有の多くの設定があります。 これらの設定の最も基本的なものは、トレーニング データの時間列の名前と予測期間です。
ForecastingJob メソッドを使用して、次の設定を構成します。
# Forecasting specific configuration
forecasting_job.set_forecast_settings(
time_column_name=time_column_name,
forecast_horizon=24
)
時間列の名前は必須の設定です。 通常は、予測シナリオに応じて予測期間を設定する必要があります。 データに複数の時系列が含まれている場合は、時系列 ID 列の名前を指定できます。 これらの列がグループ化されるときに、個々の系列が定義されます。 たとえば、異なる店舗やブランドからの時間ごとの売上で構成されるデータがあるとします。 次の例では、データに "store" と "brand" という名前の列が含まれている場合に時系列 ID 列を設定する方法を示しています。
# Forecasting specific configuration
# Add time series IDs for store and brand
forecasting_job.set_forecast_settings(
..., # Other settings
time_series_id_column_names=['store', 'brand']
)
何も指定しない場合は、AutoML がデータ内の時系列 ID 列を自動的に検出しようとします。
その他の設定はオプションであり、次のセクションで確認します。
予測ジョブのオプション設定
ディープ ラーニングの有効化やターゲットのローリング ウィンドウ集計の指定など、予測タスクに対してオプションの構成を使用できます。 全パラメーターの一覧については、リファレンス ドキュメントを参照してください。
モデルの検索設定
AutoML で最適なモデルを検索するモデル空間を制御するために、allowed_training_algorithms
と blocked_training_algorithms
という 2 つのオプション設定があります。 探索空間を特定のモデル クラスのセットに制限するには、次の例に示すように、allowed_training_algorithms
パラメーターを使用します。
# Only search ExponentialSmoothing and ElasticNet models
forecasting_job.set_training(
allowed_training_algorithms=["ExponentialSmoothing", "ElasticNet"]
)
このシナリオでは、予測ジョブで指数平滑法および Elastic Net モデル クラス "のみ" が検索されます。 検索空間から特定のモデル クラスを削除するには、次の例に示すように、blocked_training_algorithms
を使用します。
# Search over all model classes except Prophet
forecasting_job.set_training(
blocked_training_algorithms=["Prophet"]
)
この場合、ジョブは Prophet を "除く" すべてのモデル クラスを検索します。 allowed_training_algorithms
と blocked_training_algorithms
で受け入れられる予測モデル名の一覧については、トレーニング プロパティを参照してください。 トレーニング実行に適用できるのは、allowed_training_algorithms
または blocked_training_algorithms
のいずれか一方のみで、両方を同時に適用することはできません。
ディープ ニューラル ネットワークの学習を有効にする
AutoML には、TCNForecaster
という名前のカスタムのディープ ニューラル ネットワーク (DNN) モデルが付属しています。 このモデルは、時系列モデリングに一般的なイメージング タスク メソッドを適用するテンポラル畳み込みネットワーク (TCN) です。 1 次元 "因果" 畳み込みによってネットワークのバックボーンが形成され、モデルがトレーニング履歴の長期間にわたって複雑なパターンを学習できます。 詳細については、「TCNForecaster の概要」を参照してください。
TCNForecaster では、多くの場合、トレーニング履歴内に数千以上にもなる観測値があるときは標準の時系列モデルより高い精度を実現します。 ただし、それと同時に、容量が大きいため、TCNForecaster モデルのトレーニングとスイープに時間がかかります。
AutoML で TCNForecaster を有効にするには、次のようにトレーニング構成で enable_dnn_training
フラグを設定します。
# Include TCNForecaster models in the model search
forecasting_job.set_training(
enable_dnn_training=True
)
既定では、TCNForecaster トレーニングは、モデル試行ごとに、1 つのコンピューティング ノードと 1 つの GPU (使用可能な場合) に制限されます。 より大規模なデータ シナリオでは、複数のコア/GPU とノードに対して各 TCNForecaster 試行を分散させることをお勧めします。 詳細情報とコード サンプルについては、「予測のための分散トレーニング」を参照してください。
Azure Machine Learning スタジオで作成された AutoML 実験用の DNN を有効にするには、スタジオ UI 入門にあるタスクの種類の設定に関するページを参照してください。
Note
- SDK を使用して作成された実験に対して DNN を有効にすると、最適なモデル説明が無効になります。
- 自動機械学習での予測のための DNN サポートは、Azure Databricks で開始された実行には対応していません。
- DNN トレーニングが有効になっている場合、コンピューティングの種類には GPU を使用することをお勧めします。
ラグとローリング ウィンドウの機能
ターゲットの最近の値は、多くの場合、予測モデルで影響力の大きい特徴です。 したがって、AutoML では、タイム ラグとローリング ウィンドウの集計機能を作成して、モデルの精度を向上させることができる可能性があります。
気象データと過去の需要が利用可能になっている、エネルギー需要予測のシナリオについて考えてみます。 この表は、ウィンドウ集計が直近 3 時間に適用されたときに発生する特徴エンジニアリングを示しています。 "最小値"、"最大値"、"合計値" の列は、定義された設定に基づいて、3 時間のスライディング ウィンドウで生成されます。 たとえば、2017 年 9 月 8 日の午前 4:00 に有効な観測値では、最大値、最小値、合計値は、2017 年 9 月 8 日午前 1:00 から午前 3:00 までの "需要値" を使用して計算されます。 この 3 時間のウィンドウは、残りの行のデータを設定するためにシフトされます。 詳細情報と例については、「AutoML の時系列予測におけるラグ特徴量」を参照してください。
ローリング ウィンドウ サイズと作成するラグ オーダーを設定すると、ターゲットのラグとローリング ウィンドウの集計機能を有効にできます。 上記の例では、ウィンドウ サイズは 3 に設定しています。 feature_lags
設定を使用して、機能のラグを有効にすることもできます。 次の例では、これらの設定をすべて auto
に設定して、AutoML にデータの相関構造を分析して設定を自動的に決定するように指示しています。
forecasting_job.set_forecast_settings(
..., # Other settings
target_lags='auto',
target_rolling_window_size='auto',
feature_lags='auto'
)
短い系列の処理
AutoML では、モデル開発のトレーニングと検証のフェーズを実施するのに十分なデータ ポイントがない場合、時系列は "短い系列" と見なされます。 詳細については、「データの長さの要件」を参照してください。
AutoML には、短い系列に対して実行できるアクションがいくつか存在します。 これらのアクションは、short_series_handling_config
設定を使用して構成できます。 既定値は auto
です。 次の表で、設定について説明します。
設定 | 説明 | メモ |
---|---|---|
auto |
短い系列処理の既定値。 | - すべての系列が短い場合は、データを埋め込みます。 - すべてが短い系列ではない場合は、短い系列を破棄します。 |
pad |
short_series_handling_config = pad 設定が使用される場合、AutoML によって、検出されたそれぞれの短い系列に対してランダムの値が追加されます。 AutoML によってターゲット列にホワイト ノイズが埋め込まれます。 |
次の種類の列を、指定の埋め込みとともに使用できます。 - オブジェクト列には NaN を埋め込む- 数値列には 0 (ゼロ) を埋め込む - ブール/論理列には False を埋め込む |
drop |
short_series_handling_config = drop 設定が使用される場合、AutoML では短い系列が破棄され、トレーニングや予測に使用されません。 |
これらの系列の予測では、NaN が返されます。 |
None |
系列は埋め込まれることも破棄されることもありません。 |
次の例では、短い系列の処理で、すべての短い系列を最小長にするために埋め込みを行うよう設定しています。
forecasting_job.set_forecast_settings(
..., # Other settings
short_series_handling_config='pad'
)
注意事項
埋め込みは、トレーニングの失敗を回避するために人為的なデータを追加することになるため、結果のモデルの精度に影響する可能性があります。 短い系列が多い場合、説明可能性の結果に影響が生じることもあります。
頻度とターゲット データの集計
頻度とデータ集計のオプションを使用して、不規則なデータによる障害が発生しないようにします。 毎時や毎日など、一定の頻度に従っていない場合、そのデータは不規則です。 販売時点データは、不規則なデータの良い例です。 これらのシナリオの場合、AutoML では目的の頻度にデータを集計し、その集計から予測モデルを構築できます。
不規則なデータを処理するには、frequency
と target_aggregate_function
の設定値を設定する必要があります。 頻度の設定には、Pandas DateOffset 文字列を入力として使用できます。 次の表は、集計関数でサポートされている値を示します。
関数 | 説明 |
---|---|
sum |
ターゲット値の合計 |
mean |
ターゲット値の中間または "平均" |
min |
ターゲットの最小値 |
max |
ターゲットの最大値 |
AutoML では、次の列に集計を適用します。
列 | 集計方法 |
---|---|
数値予測因子 | AutoML で、sum 、mean 、min 、max の各関数が使用されます。 これにより、新しい列が作成され、各列の値に適用された集計関数の名前を識別するサフィックスがその列の名前に追加されます。 |
カテゴリ別予測因子 | AutoML で、forecast_mode パラメーターの値を使用してデータが集計されます。 これがウィンドウ内で最も目立つカテゴリです。 詳細については、多数モデル パイプラインと HTS パイプラインに関するセクションで、パラメーターの説明を参照してください。 |
データ予測因子 | AutoML で、最小ターゲット値 (min )、最大ターゲット値 (max )、forecast_mode パラメーター設定を使用して、データが集計されます。 |
ターゲット | AutoML で、指定の操作に従って値が集計されます。 通常、ほとんどのシナリオでは sum 関数が適しています。 |
次の例では、頻度を毎時に設定し、集計関数を合計に設定します。
# Aggregate the data to hourly frequency
forecasting_job.set_forecast_settings(
..., # Other settings
frequency='H',
target_aggregate_function='sum'
)
カスタムのクロス検証設定
予測ジョブのクロス検証を制御するカスタマイズ可能な設定は 2 つあります。 n_cross_validations パラメーターでフォールドの数をカスタマイズし、cv_step_size パラメーターを構成してフォールド間の時間オフセットを定義します。 詳細については、「モデルの選択」を参照してください。
既定では、データの特性に基づいて、AutoML が両方を自動的に設定します。 上級ユーザーは手動で設定できます。 たとえば、毎日の売上データがあり、隣接するフォールド間のオフセットが 7 日間である 5 つのフォールドで構成されるように、検証を設定するとします。 次のコード サンプルに、これらの値の設定方法を示します。
from azure.ai.ml import automl
# Create a job with five CV folds
forecasting_job = automl.forecasting(
..., # Other training parameters
n_cross_validations=5,
)
# Set the step size between folds to seven days
forecasting_job.set_forecast_settings(
..., # Other settings
cv_step_size=7
)
カスタムの特徴量化
既定では、モデルの精度を向上するため、AutoML で、トレーニング データをエンジニアリングされた特徴で拡張します。 詳細については、「自動化された特徴エンジニアリング」を参照してください。 前処理手順の一部は、予測ジョブの特徴量化構成を使用してカスタマイズできます。
次の表は、予測でサポートされているカスタマイズを示します。
カスタマイズ | 説明 | Options |
---|---|---|
列の目的の更新 | 指定した列の自動検出された特徴の種類をオーバーライドします。 | categorical 、dateTime 、numeric |
トランスフォーマー パラメーターの更新 | 指定した imputer のパラメーターを更新します。 | {"strategy": "constant", "fill_value": <value>} 、{"strategy": "median"} 、{"strategy": "ffill"} |
たとえば、データに価格、on sale
フラグ、商品の種類などが含まれる小売需要シナリオがあるとします。 次の例は、これらの特徴のカスタマイズされた種類と imputer を設定する方法を示しています。
from azure.ai.ml.automl import ColumnTransformer
# Customize imputation methods for price and is_on_sale features
# Median value imputation for price, constant value of zero for is_on_sale
transformer_params = {
"imputer": [
ColumnTransformer(fields=["price"], parameters={"strategy": "median"}),
ColumnTransformer(fields=["is_on_sale"], parameters={"strategy": "constant", "fill_value": 0}),
],
}
# Set the featurization
# Ensure product_type feature is interpreted as categorical
forecasting_job.set_featurization(
mode="custom",
transformer_params=transformer_params,
column_name_and_types={"product_type": "Categorical"},
)
Azure Machine Learning スタジオを実験に使用している場合は、スタジオでの特徴量化の設定の構成に関する記事を参照してください。
予測ジョブを送信する
すべての設定を構成したら、予測ジョブを実行する準備は完了です。 次の例は、このプロセスを示しています。
# Submit the AutoML job
returned_job = ml_client.jobs.create_or_update(
forecasting_job
)
print(f"Created job: {returned_job}")
# Get a URL for the job in the studio UI
returned_job.services["Studio"].endpoint
ジョブが送信されると、AutoML がコンピューティング リソースをプロビジョニングし、特徴量化やその他の準備手順を入力データに適用してから、予測モデルのスイープを開始します。 詳細については、AutoML の予測手法と AutoML での予測のためのモデルのスイープと選択に関する記事を参照してください。
コンポーネントとパイプラインを使用したトレーニング、推論、評価のオーケストレーション
機械学習ワークフローでは、トレーニング以上のものが必要な場合があります。 推論 (新しいデータに対するモデル予測の取得) と、既知のターゲット値を使用したテスト セットに対するモデル精度の評価は、トレーニング ジョブと共に Azure Machine Learning でオーケストレーションできるその他の一般的なタスクです。 推論と評価のタスクをサポートするために、Azure Machine Learning では、Azure Machine Learning パイプラインの 1 ステップを実行する自己完結型のコードであるコンポーネントを提供しています。
次の例では、クライアント レジストリからコンポーネント コードを取得します。
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
# Get credential to access AzureML registry
try:
credential = DefaultAzureCredential()
# Check if token can be obtained successfully
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential fails
credential = InteractiveBrowserCredential()
# Create client to access assets in AzureML preview registry
ml_client_registry = MLClient(
credential=credential,
registry_name="azureml-preview"
)
# Create client to access assets in AzureML registry
ml_client_metrics_registry = MLClient(
credential=credential,
registry_name="azureml"
)
# Get inference component from registry
inference_component = ml_client_registry.components.get(
name="automl_forecasting_inference",
label="latest"
)
# Get component to compute evaluation metrics from registry
compute_metrics_component = ml_client_metrics_registry.components.get(
name="compute_metrics",
label="latest"
)
次に、トレーニング、推論、メトリック評価をオーケストレーションするパイプラインを作成するファクトリ関数を定義します。 詳細については、「実験を構成する」を参照してください。
from azure.ai.ml import automl
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.dsl import pipeline
@pipeline(description="AutoML Forecasting Pipeline")
def forecasting_train_and_evaluate_factory(
train_data_input,
test_data_input,
target_column_name,
time_column_name,
forecast_horizon,
primary_metric='normalized_root_mean_squared_error',
cv_folds='auto'
):
# Configure training node of pipeline
training_node = automl.forecasting(
training_data=train_data_input,
target_column_name=target_column_name,
primary_metric=primary_metric,
n_cross_validations=cv_folds,
outputs={"best_model": Output(type=AssetTypes.MLFLOW_MODEL)},
)
training_node.set_forecasting_settings(
time_column_name=time_column_name,
forecast_horizon=max_horizon,
frequency=frequency,
# Other settings
...
)
training_node.set_training(
# Training parameters
...
)
training_node.set_limits(
# Limit settings
...
)
# Configure inference node to make rolling forecasts on test set
inference_node = inference_component(
test_data=test_data_input,
model_path=training_node.outputs.best_model,
target_column_name=target_column_name,
forecast_mode='rolling',
step=1
)
# Configure metrics calculation node
compute_metrics_node = compute_metrics_component(
task="tabular-forecasting",
ground_truth=inference_node.outputs.inference_output_file,
prediction=inference_node.outputs.inference_output_file,
evaluation_config=inference_node.outputs.evaluation_config_output_file
)
# Return dictionary with evaluation metrics and raw test set forecasts
return {
"metrics_result": compute_metrics_node.outputs.evaluation_result,
"rolling_fcst_result": inference_node.outputs.inference_output_file
}
ローカル フォルダー (./train_data と ./test_data) に含まれているトレーニング データ入力とテスト データ入力を定義します。
my_train_data_input = Input(
type=AssetTypes.MLTABLE,
path="./train_data"
)
my_test_data_input = Input(
type=AssetTypes.URI_FOLDER,
path='./test_data',
)
最後に、パイプラインを構築し、既定のコンピューティングを設定し、ジョブを送信します。
pipeline_job = forecasting_train_and_evaluate_factory(
my_train_data_input,
my_test_data_input,
target_column_name,
time_column_name,
forecast_horizon
)
# Set pipeline level compute
pipeline_job.settings.default_compute = compute_name
# Submit pipeline job
returned_pipeline_job = ml_client.jobs.create_or_update(
pipeline_job,
experiment_name=experiment_name
)
returned_pipeline_job
実行要求が送信されると、パイプラインで AutoML トレーニング、ローリング評価推論、メトリック計算が順番に実行されます。 スタジオ UI で実行を監視および検査できます。 実行が完了すると、ローリング予測と評価メトリックをローカルの作業ディレクトリにダウンロードできます。
# Download metrics JSON
ml_client.jobs.download(returned_pipeline_job.name, download_path=".", output_name='metrics_result')
# Download rolling forecasts
ml_client.jobs.download(returned_pipeline_job.name, download_path=".", output_name='rolling_fcst_result')
次の場所で出力を確認できます。
- メトリック: ./named-outputs/metrics_results/evaluationResult/metrics.json
- 予測: ./named-outputs/rolling_fcst_result/inference_output_file (JSON 行形式)
ローリング評価の詳細については、「予測モデルの推論と評価」を参照してください。
大規模な予測: 多数モデル
AutoML の多数モデル コンポーネントを使用すると、数百万モデルを並行してトレーニングおよび管理できます。 多数モデルの概念については、「多数モデル」を参照してください。
多数モデルのトレーニング構成
多数モデル トレーニング コンポーネントは、AutoML トレーニング設定の YAML 形式の構成ファイルを受け入れます。 コンポーネントは、起動する各 AutoML インスタンスにこれらの設定を適用します。 この YAML ファイルの仕様は、予測コマンド ジョブと同じ仕様にパラメーター partition_column_names
と allow_multi_partitions
を加えたものです。
パラメーター | 説明 |
---|---|
partition_column_names |
データ内の列名であり、グループ化の際にデータ パーティションを定義するもの。 多数モデル トレーニング コンポーネントは、各パーティションに対し独立したトレーニング ジョブを起動します。 |
allow_multi_partitions |
各パーティションに複数の一意の時系列が含まれている場合に、パーティションごとに 1 つのモデルをトレーニングできるようにするフラグ (省略可能)。 既定値は false です。 |
次の例は、YAML のサンプル構成です。
$schema: https://azuremlsdk2.blob.core.windows.net/preview/0.0.1/autoMLJob.schema.json
type: automl
description: A time-series forecasting job config
compute: azureml:<cluster-name>
task: forecasting
primary_metric: normalized_root_mean_squared_error
target_column_name: sales
n_cross_validations: 3
forecasting:
time_column_name: date
time_series_id_column_names: ["state", "store"]
forecast_horizon: 28
training:
blocked_training_algorithms: ["ExtremeRandomTrees"]
limits:
timeout_minutes: 15
max_trials: 10
max_concurrent_trials: 4
max_cores_per_trial: -1
trial_timeout_minutes: 15
enable_early_termination: true
partition_column_names: ["state", "store"]
allow_multi_partitions: false
この後の例では、構成がパス ./automl_settings_mm.yml に格納されていると想定しています。
多数モデル パイプライン
次に、多数モデルのトレーニング、推論、メトリック評価のオーケストレーション用のパイプラインを作成するファクトリ関数を定義します。 次の表では、このファクトリ関数のパラメーターについて説明します。
パラメーター | 説明 |
---|---|
max_nodes |
トレーニング ジョブで使用するコンピューティング ノードの数。 |
max_concurrency_per_node |
各ノードで実行する AutoML プロセスの数。 そのため、多数モデル ジョブの合計コンカレンシーは max_nodes * max_concurrency_per_node になります。 |
parallel_step_timeout_in_seconds |
多数モデル コンポーネントのタイムアウト (秒単位)。 |
retrain_failed_models |
失敗したモデルの再トレーニングを有効にするフラグ。 この値は、以前に多数モデルを実行したときに、一部のデータ パーティションで AutoML ジョブが失敗した場合に便利です。 このフラグを有効にすると、多数モデルで以前に失敗したパーティションのトレーニング ジョブのみが起動されます。 |
forecast_mode |
モデル評価の推論モード。 有効な値は、recursive (既定値) および rolling です。 詳細については、「予測モデルの推論と評価」と「ManyModelsInferenceParameters クラス」リファレンスを参照してください。 |
step |
ローリング予測のステップ サイズ (既定値は 1)。 詳細については、「予測モデルの推論と評価」と「ManyModelsInferenceParameters クラス」リファレンスを参照してください。 |
次の例は、多数モデルのトレーニングおよびモデル評価パイプラインを構築するためのファクトリ メソッドを示しています。
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
# Get credential to access AzureML registry
try:
credential = DefaultAzureCredential()
# Check if token can be obtained successfully
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential fails
credential = InteractiveBrowserCredential()
# Get many models training component
mm_train_component = ml_client_registry.components.get(
name='automl_many_models_training',
version='latest'
)
# Get many models inference component
mm_inference_component = ml_client_registry.components.get(
name='automl_many_models_inference',
version='latest'
)
# Get component to compute evaluation metrics
compute_metrics_component = ml_client_metrics_registry.components.get(
name="compute_metrics",
label="latest"
)
@pipeline(description="AutoML Many Models Forecasting Pipeline")
def many_models_train_evaluate_factory(
train_data_input,
test_data_input,
automl_config_input,
compute_name,
max_concurrency_per_node=4,
parallel_step_timeout_in_seconds=3700,
max_nodes=4,
retrain_failed_model=False,
forecast_mode="rolling",
forecast_step=1
):
mm_train_node = mm_train_component(
raw_data=train_data_input,
automl_config=automl_config_input,
max_nodes=max_nodes,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
retrain_failed_model=retrain_failed_model,
compute_name=compute_name
)
mm_inference_node = mm_inference_component(
raw_data=test_data_input,
max_nodes=max_nodes,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
optional_train_metadata=mm_train_node.outputs.run_output,
forecast_mode=forecast_mode,
step=forecast_step,
compute_name=compute_name
)
compute_metrics_node = compute_metrics_component(
task="tabular-forecasting",
prediction=mm_inference_node.outputs.evaluation_data,
ground_truth=mm_inference_node.outputs.evaluation_data,
evaluation_config=mm_inference_node.outputs.evaluation_configs
)
# Return metrics results from rolling evaluation
return {
"metrics_result": compute_metrics_node.outputs.evaluation_result
}
ファクトリ関数を使用してパイプラインを構築します。 トレーニング データとテスト データは、それぞれローカル フォルダー ./data/trainと ./data/test にあります。 最後に、次の例に示すように、既定のコンピューティングを設定してジョブを送信します。
pipeline_job = many_models_train_evaluate_factory(
train_data_input=Input(
type="uri_folder",
path="./data/train"
),
test_data_input=Input(
type="uri_folder",
path="./data/test"
),
automl_config=Input(
type="uri_file",
path="./automl_settings_mm.yml"
),
compute_name="<cluster name>"
)
pipeline_job.settings.default_compute = "<cluster name>"
returned_pipeline_job = ml_client.jobs.create_or_update(
pipeline_job,
experiment_name=experiment_name,
)
ml_client.jobs.stream(returned_pipeline_job.name)
ジョブが完了すると、単一のトレーニングの実行パイプラインと同じ手順を使用して、評価メトリックをローカルにダウンロードできます。
より詳細な例については、多数モデルを使用した需要予測ノートブックに関するページを参照してください。
多数モデルの実行に関するトレーニングの考慮事項
多数モデルのトレーニング コンポーネントと推論コンポーネントは、各パーティションが単独のファイル内に配置されるように、partition_column_names
設定に従ってデータを条件付きでパーティション分割します。 このプロセスは、データが非常に大きい場合には非常に遅くなったり、失敗したりする可能性があります。 多数モデルのトレーニングや推論を実行する前に、データを手動でパーティション分割することをお勧めします。
Note
サブスクリプション内で実行される多くのモデルの既定の並列処理制限は、320 に設定されています。 ワークロードで上限の引き上げが必要な場合は、Microsoft サポートにお問い合わせください。
大規模な予測: 階層型時系列
AutoML の階層型時系列 (HTS) コンポーネントを使用すると、階層構造を持つデータに対して多数のモデルをトレーニングできます。 詳細については、「階層型時系列予測」を参照してください。
HTS トレーニング構成
HTS トレーニング コンポーネントは、AutoML トレーニング設定の YAML 形式の構成ファイルを受け入れます。 コンポーネントは、起動する各 AutoML インスタンスにこれらの設定を適用します。 この YAML ファイルの仕様は、予測コマンド ジョブと同じ仕様に階層情報に関する追加のパラメーターを加えたものです。
パラメーター | 説明 |
---|---|
hierarchy_column_names |
データの階層構造を定義するデータ内の列名のリスト。 この一覧の列の順序で、階層レベルが決まります。 集約度は、リスト インデックスと共に減少します。 つまり、一覧の最後の列は、階層のリーフ (最も非集約) レベルを定義します。 |
hierarchy_training_level |
予測モデルのトレーニングに使用する階層レベル。 |
次の例は、YAML のサンプル構成です。
$schema: https://azuremlsdk2.blob.core.windows.net/preview/0.0.1/autoMLJob.schema.json
type: automl
description: A time-series forecasting job config
compute: azureml:cluster-name
task: forecasting
primary_metric: normalized_root_mean_squared_error
log_verbosity: info
target_column_name: sales
n_cross_validations: 3
forecasting:
time_column_name: "date"
time_series_id_column_names: ["state", "store", "SKU"]
forecast_horizon: 28
training:
blocked_training_algorithms: ["ExtremeRandomTrees"]
limits:
timeout_minutes: 15
max_trials: 10
max_concurrent_trials: 4
max_cores_per_trial: -1
trial_timeout_minutes: 15
enable_early_termination: true
hierarchy_column_names: ["state", "store", "SKU"]
hierarchy_training_level: "store"
この後の例では、構成がパス ./automl_settings_hts.yml に格納されていると想定しています。
HTS パイプライン
次に、HTS トレーニング、推論、メトリック評価のオーケストレーション用のパイプラインを作成するファクトリ関数を定義します。 次の表では、このファクトリ関数のパラメーターについて説明します。
パラメーター | 説明 |
---|---|
forecast_level |
予測を取得する階層のレベル |
allocation_method |
予測が非集約であるときに使用する割り当て方法。 有効値は proportions_of_historical_average または average_historical_proportions です。 |
max_nodes |
トレーニング ジョブで使用するコンピューティング ノードの数。 |
max_concurrency_per_node |
各ノードで実行する AutoML プロセスの数。 したがって、HTS ジョブの合計コンカレンシーは max_nodes * max_concurrency_per_node になります。 |
parallel_step_timeout_in_seconds |
多数モデル コンポーネントのタイムアウト (秒単位)。 |
forecast_mode |
モデル評価の推論モード。 有効値は recursive または rolling です。 詳細については、「予測モデルの推論と評価」と「HTSInferenceParameters クラス」リファレンスを参照してください。 |
step |
ローリング予測のステップ サイズ (既定値は 1)。 詳細については、「予測モデルの推論と評価」と「HTSInferenceParameters クラス」リファレンスを参照してください。 |
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
# Get credential to access AzureML registry
try:
credential = DefaultAzureCredential()
# Check if token can be obtained successfully
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential fails
credential = InteractiveBrowserCredential()
# Get HTS training component
hts_train_component = ml_client_registry.components.get(
name='automl_hts_training',
version='latest'
)
# Get HTS inference component
hts_inference_component = ml_client_registry.components.get(
name='automl_hts_inference',
version='latest'
)
# Get component to compute evaluation metrics
compute_metrics_component = ml_client_metrics_registry.components.get(
name="compute_metrics",
label="latest"
)
@pipeline(description="AutoML HTS Forecasting Pipeline")
def hts_train_evaluate_factory(
train_data_input,
test_data_input,
automl_config_input,
max_concurrency_per_node=4,
parallel_step_timeout_in_seconds=3700,
max_nodes=4,
forecast_mode="rolling",
forecast_step=1,
forecast_level="SKU",
allocation_method='proportions_of_historical_average'
):
hts_train = hts_train_component(
raw_data=train_data_input,
automl_config=automl_config_input,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
max_nodes=max_nodes
)
hts_inference = hts_inference_component(
raw_data=test_data_input,
max_nodes=max_nodes,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
optional_train_metadata=hts_train.outputs.run_output,
forecast_level=forecast_level,
allocation_method=allocation_method,
forecast_mode=forecast_mode,
step=forecast_step
)
compute_metrics_node = compute_metrics_component(
task="tabular-forecasting",
prediction=hts_inference.outputs.evaluation_data,
ground_truth=hts_inference.outputs.evaluation_data,
evaluation_config=hts_inference.outputs.evaluation_configs
)
# Return metrics results from rolling evaluation
return {
"metrics_result": compute_metrics_node.outputs.evaluation_result
}
ファクトリ関数を使用してパイプラインを構築します。 トレーニング データとテスト データは、それぞれローカル フォルダー ./data/trainと ./data/test にあります。 最後に、次の例に示すように、既定のコンピューティングを設定してジョブを送信します。
pipeline_job = hts_train_evaluate_factory(
train_data_input=Input(
type="uri_folder",
path="./data/train"
),
test_data_input=Input(
type="uri_folder",
path="./data/test"
),
automl_config=Input(
type="uri_file",
path="./automl_settings_hts.yml"
)
)
pipeline_job.settings.default_compute = "cluster-name"
returned_pipeline_job = ml_client.jobs.create_or_update(
pipeline_job,
experiment_name=experiment_name,
)
ml_client.jobs.stream(returned_pipeline_job.name)
ジョブが完了すると、単一のトレーニングの実行パイプラインと同じ手順を使用して、評価メトリックをローカルにダウンロードできます。
より詳細な例については、階層型時系列モデルでの需要予測ノートブックを参照してください。
HTS の実行に関するトレーニングの考慮事項
HTS モデルのトレーニング コンポーネントと推論コンポーネントは、各パーティションが単独のファイル内に配置されるように、hierarchy_column_names
設定に従ってデータを条件付きでパーティション分割します。 このプロセスは、データが非常に大きい場合には非常に遅くなったり、失敗したりする可能性があります。 HTS のトレーニングや推論を実行する前に、データを手動でパーティション分割することをお勧めします。
Note
サブスクリプション内で実行される HTS の既定の並列処理の上限は、320 に設定されています。 ワークロードで上限の引き上げが必要な場合は、Microsoft サポートにお問い合わせください。
大規模な予測: 分散 DNN トレーニング
この記事ですでに説明したように、ディープ ニューラル ネットワーク (DNN) の学習を有効にすることができます。 DNN 予測タスクに対して分散トレーニングがどのように動作するかを学習するには、「分散型ディープ ニューラル ネットワーク トレーニング (プレビュー)」を参照してください。
大規模なデータを必要とするシナリオの場合、AutoML で限られた数のモデルで分散トレーニングを実行できます。 詳細情報とコード サンプルについては、AutoML での大規模な分散トレーニングに関する記事を参照してください。
ノートブックの例を調べる
高度な予測の構成を示す詳しいコード サンプルについては、AutoML 予測サンプル ノートブック GitHub リポジトリを参照してください。 以下にノートブックの例を一部紹介します。
- 需要予測パイプラインの作成 (HTS と多数モデル)
- GitHub データセットでの TCNForecaster (DNN) モデルのトレーニング
- 休日の検出と特性付けによる予測 (自転車シェア データセット)
- ラグおよびローリング ウィンドウ集計の手動構成