Share via


Azure Databricks AutoML Python API を使用して ML モデルをトレーニングする

この記事では、API を使用して Azure Databricks AutoML でモデルをトレーニングする方法について説明します。 詳細については、「AutoML とは」を参照してください。 Python API には、AutoML で実行される分類、回帰、予測を開始する関数が用意されています。 各関数コールによって、一連のモデルがトレーニングされ、各モデルの試用版ノートブックが生成されます。

次の手順では、通常、API を使用して AutoML 実験を設定する方法について説明します。

  1. ノートブックを作成し、Databricks Runtime ML を実行しているクラスターにアタッチします。
  2. 既存のデータ ソースから使用するテーブルを特定するか、データ ファイルを DBFS にアップロードしてテーブルを作成します。
  3. AutoML の実行を開始するには、テーブル名を該当する API の仕様 (分類回帰予測) に渡します。
  4. AutoML の実行が始まると、コンソールに MLflow 実験の URL が表示されます。 この URL を使用して、実行の進行状況を監視します。 MLflow 実験を更新して、完了した試用版を確認します。
  5. AutoML の実行が完了した後、次の操作を実行できます。
    • [出力の概要] のリンクを使用して、MLflow 実験に移動するか、最適な結果の生成に使用されたノートブックに移動します。
    • データ探索ノートブックへのリンクを使用して、AutoML に渡されたデータに関する分析情報を取得します。 また、このノートブックを同じクラスターにアタッチし、ノートブックを再実行して結果を再現したり、追加のデータ分析を行ったりすることもできます。
    • AutoML コールから返された概要オブジェクトを使用して、試用版に関する詳細を確認したり、特定の試用版でトレーニングされたモデルを読み込んだりします。 詳細については、AutoMLSummary オブジェクトに関するセクションを参照してください。
    • 生成されたノートブックを試用版から複製し、同じクラスターにアタッチしてノートブックを再実行して、結果を再現します。 また、必要な編集を行い、再実行して追加のモデルをトレーニングし、同じ実験にログとして記録することもできます。

必要条件

AutoML 実験の「要件」を参照してください。

分類の仕様

次のコード例では、分類モデルをトレーニングするための AutoML 実行を構成します。 AutoML の実行をさらにカスタマイズするための追加パラメーターについては、「分類と回帰のパラメーター」を参照してください。

注意

max_trials パラメーターは Databricks Runtime 10.4 ML では非推奨であり、Databricks Runtime 11.0 ML 以上ではサポートされていません。 AutoML 実行の期間を制御するには、timeout_minutes を使用します。

databricks.automl.classify(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  data_dir: Optional[str] = None,
  exclude_cols: Optional[List[str]] = None,                      # <DBR> 10.3 ML and above
  exclude_frameworks: Optional[List[str]] = None,                   # <DBR> 10.3 ML and above
  experiment_dir: Optional[str] = None,                             # <DBR> 10.4 LTS ML and above
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 11.3 LTS ML and above
  imputers: Optional[Dict[str, Union[str, Dict[str, Any]]]] = None, # <DBR> 10.4 LTS ML and above
  max_trials: Optional[int] = None,                                 # <DBR> 10.5 ML and below
  pos_label: Optional[Union[int, bool, str] = None,                 # <DBR> 11.1 ML and above
  primary_metric: str = "f1",
  time_col: Optional[str] = None,
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

回帰の仕様

次のコード例では、回帰モデルをトレーニングするための AutoML 実行を構成します。 AutoML の実行をさらにカスタマイズするための追加パラメーターについては、「分類と回帰のパラメーター」を参照してください。

注意

max_trials パラメーターは Databricks Runtime 10.4 ML では非推奨であり、Databricks Runtime 11.0 ML 以上ではサポートされていません。 AutoML 実行の期間を制御するには、timeout_minutes を使用します。

databricks.automl.regress(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  data_dir: Optional[str] = None,
  exclude_cols: Optional[List[str]] = None,                      # <DBR> 10.3 ML and above
  exclude_frameworks: Optional[List[str]] = None,                   # <DBR> 10.3 ML and above
  experiment_dir: Optional[str] = None,                             # <DBR> 10.4 LTS ML and above
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 11.3 LTS ML and above
  imputers: Optional[Dict[str, Union[str, Dict[str, Any]]]] = None, # <DBR> 10.4 LTS ML and above
  max_trials: Optional[int] = None,                                 # <DBR> 10.5 ML and below
  primary_metric: str = "r2",
  time_col: Optional[str] = None,
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

予測の仕様

次のコード例では、予測モデルをトレーニングするための AutoML 実行を構成します。 AutoML 実行のパラメーターの詳細については、「予測パラメーター」を参照してください。 Auto-ARIMA を使用するには、時系列の頻度が一定である必要があります (つまり、任意の 2 つのポイント間の間隔は、時系列全体で同じである必要があります)。 頻度は、API 呼び出しで指定された頻度の単位と一致する必要があります。 AutoML では、これらの値に前の値を入力して、不足している時間ステップを処理します。

databricks.automl.forecast(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  time_col: str,
  country_code: str = "US",                                         # <DBR> 12.0 ML and above
  data_dir: Optional[str] = None,
  exclude_frameworks: Optional[List[str]] = None,
  experiment_dir: Optional[str] = None,
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 12.2 LTS ML and above
  frequency: str = "D",
  horizon: int = 1,
  identity_col: Optional[Union[str, List[str]]] = None,
  output_database: Optional[str] = None,                            # <DBR> 10.5 ML and above
  primary_metric: str = "smape",
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

分類と回帰のパラメーター

注意

分類と回帰の問題の場合のみ、次のことができます。

  • トレーニングに含める列を指定します。
  • カスタム補完方法を選択します。
フィールド名 Type 説明
dataset str pandas.DataFrame pyspark.DataFrame pyspark.sql.DataFrame トレーニングの特徴量とターゲットを含む入力テーブル名または DataFrame。

Unity Catalog 以外のテーブルの場合、 テーブル名の形式は ".." または “.” です
target_col str 対象ラベルの列名。
data_dir 形式の str
dbfs:/<folder-name>
(省略可能) トレーニング データセットを格納するために使用される DBFS パス。 このパスは、ドライバー ノードとワーカー ノードの両方から参照できます。

Databricks では、このフィールドを空のままにしておくことをお勧めします。そうすると、AutoML でトレーニング データセットを MLflow アーティファクトとして保存できます。

カスタム パスが指定されている場合、データセットは AutoML 実験のアクセス許可を継承しません。
exclude_cols List[str] (省略可能) AutoML 計算中に無視する列の一覧。

規定値: []
exclude_ frameworks List[str] (省略可能) モデルの開発時に AutoML によって考慮されないアルゴリズム フレームワークの一覧。 使用可能な値: 空のリスト、または 1 つ以上の "sklearn"、"lightgbm"、"xgboost"。

既定値: [] (すべてのフレームワークが考慮されます)
experiment_dir str (省略可能) 生成されたノートブックと実験を保存するための、ワークスペース内のディレクトリへのパス。

既定値: /Users/<username>/databricks_automl/
experiment_name str (省略可能) AutoML によって作成される MLflow 実験の名前。

既定値: 名前が自動的に生成されます。
feature_store_ lookups List[Dict] (省略可能) データ拡張用の Feature Store の特徴を表すディクショナリの一覧。 各ディクショナリの有効なキーは次のとおりです。

* table_name (str): 必須。 特徴テーブルの名前。
* lookup_key (list または str): 必須。 特徴テーブルに加わるときに
dataset パラメーターで渡されたデータと一緒にキーとして使用する列名。 列名の順序は、特徴テーブルの主キーの順序と一致する必要があります。
* timestamp_lookup_key (str): 指定されたテーブルが時系列特徴テーブルの場合は必須。 特徴テーブルでポイントインタイム ルックアップを実行するときに dataset パラメーターで渡されたデータと一緒に使用する列名。

規定値: []
imputers Dict[str, Union[str, Dict[str, Any]]] (省略可能) 各キーが列名であり、各値が補完の方法を説明する文字列または辞書である辞書。 文字列として指定した場合、値は "mean"、"median"、または "most_frequent" のいずれかである必要があります。 既知の値を使用して補完するには、値を次のように辞書として指定します。
[https://login.microsoftonline.com/consumers/]({"strategy": "constant", "fill_value": <desired value>}) 文字列オプションを辞書として指定することもできます。たとえば、{"strategy": "mean"} などです。

列に対して補完の方法が提供されていない場合は、列の型と内容に基づいて AutoML によって既定の方法が選択されます。 既定以外の補完方法を指定した場合、AutoML ではセマンティック型の検出は実行されません。

既定値: {}
max_trials int (省略可能) 実行する試用版の最大数。

このパラメーターは Databricks Runtime 10.5 ML 以下で使用できますが、Databricks Runtime 10.3 ML からは非推奨です。 Databricks Runtime 11.0 ML 以上では、このパラメーターはサポートされていません。

既定値: 20

timeout_minutes = None の場合、AutoML では最大数の試用版が実行されます。
pos_label Union[int, bool, str] (分類のみ) 正のクラス。 これは、精度や再現率などのメトリックを計算する場合に役立ちます。 二項分類の問題に対してのみ指定する必要があります。
primary_metric str モデルのパフォーマンスの評価および順位付けに使用されるメトリック。

回帰でサポートされているメトリック: "r2" (既定値)、"mae"、"rmse"、"mse"

分類でサポートされているメトリック: "f1" (既定値)、"log_loss"、"precision"、"accuracy"、"roc_auc"
time_col str Databricks Runtime 10.1 ML 以降で使用できます。

(省略可能) 時間列の列名。

指定した場合、AutoML では、最も古いポイントをトレーニング データとして、最も新しいポイントをテスト セットとして使用して、データセットのトレーニング、検証、およびテスト セットへの時系列での分割が試みられます。

許容される列の型は、タイムスタンプと整数です。 Databricks Runtime 10.2 ML 以降では、文字列の列もサポートされています。 列の型が文字列の場合、AutoML ではセマンティック検出を使用してタイムスタンプへの変換が試みられます。 変換に失敗すると、AutoML の実行は失敗します。
timeout_minutes int (省略可能) AutoML 試用版が完了するまでの最大待機時間。 タイムアウトを長く設定すると、AutoML により、より多くの試用版が実行され、精度の高いモデルが識別されます。

既定値: 120 分

最小値: 5 分

タイムアウトが短かすぎて、1 つの試用版も完了できない場合は、エラーが報告されます。

予測パラメーター

フィールド名 Type 説明
dataset str

pandas.DataFrame pyspark.DataFrame pyspark.sql.DataFrame
トレーニングの特徴量とターゲットを含む入力テーブル名または DataFrame。

Unity Catalog 以外のテーブルの場合、 テーブル名の形式は ".." または “.” です
target_col str 対象ラベルの列名。
time_col str 予測の時間列の名前。
frequency str 予測対象の時系列の頻度。 これは、イベントが発生すると予想される期間です。 既定の設定は "D" または日単位のデータです。 データの頻度が異なる場合は、必ず設定を変更してください。

指定できる値

"W" (週)

"D"/"days"/"day"

"hours"/"hour"/"hr"/"h"

"m"/"minute"/"min"/"minutes"/"T"

"S"/"seconds"/"sec"/"second"

以下は、Databricks Runtime 12.0 ML 以降でのみ利用できます。

“M” / “month” / “months”

“Q” / “quarter” / “quarters”

“Y” / “year” / “years”

既定値: "D"
horizon int 予測を返す必要がある将来の期間の数。 単位は、時系列頻度です。 既定値: 1
data_dir 形式の str
dbfs:/<folder-name>
(省略可能) トレーニング データセットを格納するために使用される DBFS パス。 このパスは、ドライバー ノードとワーカー ノードの両方から参照できます。

Databricks では、このフィールドを空のままにしておくことをお勧めします。そうすると、AutoML でトレーニング データセットを MLflow アーティファクトとして保存できます。

カスタム パスが指定されている場合、データセットは AutoML 実験のアクセス許可を継承しません。
exclude_ frameworks List[str] (省略可能) モデルの開発時に AutoML によって考慮されないアルゴリズム フレームワークの一覧。 指定できる値: 空のリスト、または 1 つ以上の "prophet"、"arima"。 既定値: [] (すべてのフレームワークが考慮されます)
experiment_dir str (省略可能) 生成されたノートブックと実験を保存するための、ワークスペース内のディレクトリへのパス。

既定値: /Users/<username>/databricks_automl/
experiment_name str (省略可能) AutoML によって作成される MLflow 実験の名前。

既定値: 名前が自動的に生成されます。
feature_store_ lookups List[Dict] (省略可能) データ拡張用の Feature Store の特徴を表すディクショナリの一覧。 各ディクショナリの有効なキーは次のとおりです。

* table_name (str): 必須。 特徴テーブルの名前。
* lookup_key (list または str): 必須。 特徴テーブルに加わるときに
dataset パラメーターで渡されたデータと一緒にキーとして使用する列名。 列名の順序は、特徴テーブルの主キーの順序と一致する必要があります。
* timestamp_lookup_key (str): 指定されたテーブルが時系列特徴テーブルの場合は必須。 特徴テーブルでポイントインタイム ルックアップを実行するときに dataset パラメーターで渡されたデータと一緒に使用する列名。

規定値: []
identity_col Union[str, list] (省略可能) 複数系列予測の時系列を識別する列。 AutoML では、これらの列と予測用の時間列でグループ化されます。
output_database str (省略可能) 指定した場合、AutoML では最適なモデルの予測は、指定したデータベースの新しいテーブルに保存されます。

既定値: 予測は保存されません。
primary_metric str モデルのパフォーマンスの評価および順位付けに使用されるメトリック。 サポートされているメトリック: "smape"(既定値) "mse"、"rmse"、"mae"、または "mdape"。
timeout_minutes int (省略可能) AutoML 試用版が完了するまでの最大待機時間。 タイムアウトを長く設定すると、AutoML により、より多くの試用版が実行され、精度の高いモデルが識別されます。

既定値: 120 分

最小値: 5 分

タイムアウトが短かすぎて、1 つの試用版も完了できない場合は、エラーが報告されます。
country_code str Databricks Runtime 12.0 ML 以降で使用できます。 Prophet 予測モデルでのみサポートされます。

(省略可能) 予測モデルで使用する国の休日を示す 2 文字の国番号。 休日を無視するには、このパラメーターを空の文字列 ("") に設定します。 サポート対象の国

既定値: US (米国の休日)。

返されるもの

AutoMLSummary

各試行のメトリック、パラメーター、その他の詳細を記述する、AutoML 実行の概要オブジェクト。 また、このオブジェクトを使用して、特定の試用版によってトレーニングされたモデルを読み込みます。

プロパティ タイプ 説明
実験 mlflow.entities.Experiment 試用版をログに記録するために使用される MLflow 実験。
trials List[TrialInfo] 実行されたすべての試用版に関する情報を含むリスト。
best_trial TrialInfo プライマリ メトリックに対して最も高い加重スコアを生み出した試用版に関する情報。
metric_distribution str すべての試用版におけるプライマリ メトリックの加重スコアのディストリビューション。
output_table_name str output_database が指定されている場合にのみ、予測にのみ使用されます。 モデルの予測を含む output_database のテーブルの名前。

TrialInfo

個々の試用版の概要オブジェクト。

プロパティ タイプ 説明
notebook_path 省略可能[str] ワークスペース内のこの試用版に対して生成されたノートブックへのパス。 分類と回帰の場合、この値は一番良かった試験にのみ設定され、他のすべての試験の値は None に設定されます。 予測の場合、この値はすべての試験に存在します
notebook_url 省略可能[str] この試用版に対して生成されたノートブックの URL。 分類と回帰の場合、この値は一番良かった試験にのみ設定され、他のすべての試験の値は None に設定されます。 予測の場合、この値はすべての試験に存在します
artifact_uri 省略可能[str] 生成されたノートブックの MLflow 成果物 URI。
mlflow_run_id str この試用版の実行に関連付けられている MLflow 実行 ID。
metrics Dict[str, float] この試用版の MLflow にログとして記録されたメトリック。
params Dict[str, str] この試用版に使用された MLflow でログとして記録されたパラメーター。
model_path str この試用版でトレーニングされたモデルの MLflow 成果物 URL。
model_description str このモデルのトレーニングに使用されたモデルとハイパーパラメーターの簡単な説明。
duration str トレーニング期間 (分単位)。
preprocessors str モデルをトレーニングする前の、プリプロセッサ実行の説明。
evaluation_metric_score float 検証データセットに対して評価されたプライマリ メトリックのスコア。
Method 説明
load_model() この試用版で生成され、MLflow 成果物としてログに記録された、モデルを読み込みます。

ノートブックをインポートする

MLflow 成果物として保存されているノートブックをインポートするには、databricks.automl.import_notebook Python API を使います。

def import_notebook(artifact_uri: str, path: str, overwrite: bool = False) -> ImportNotebookResult:
    """
    Import a trial notebook, saved as an MLflow artifact, into the workspace.

    :param artifact_uri: The URI of the MLflow artifact that contains the trial notebook.
    :param path: The path in the Databricks workspace where the notebook should be imported. This must be an absolute path. The directory will be created if it does not exist.
    :param overwrite: Whether to overwrite the notebook if it already exists. It is `False` by default.

    :return: ImportNotebookResult contains two fields, `path` and `url`, referring to the imported notebook
    """

使用例:

summary = databricks.automl.classify(...)
result = databricks.automl.import_notebook(summary.trials[5].artifact_uri, "/Users/you@yourcompany.com/path/to/directory")
print(result.path)
print(result.url)

モデルを登録してデプロイする

AutoML トレーニング済みモデルは、MLflow モデル レジストリに登録されているモデルと同様に登録してデプロイできます。「MLflow モデルのログ、読み込み、登録、デプロイ」を参照してください。

'pandas.core.indexes.numeric' という名前のモジュールはありません

AutoML とモデル サービングを使用してビルドされたモデルを提供すると、エラー No module named 'pandas.core.indexes.numeric が表示されることがあります。

これは、AutoML とモデル サービングのエンドポイント環境との間の互換性のない pandas バージョンが原因です。 このエラーは、add-pandas-dependency.py スクリプトを実行することで解決できます。 このスクリプトは、ログに記録されたモデルの requirements.txtconda.yaml を編集して、適切な pandas 依存関係バージョン pandas==1.5.3 を含めます。

  1. スクリプトを変更して、モデルがログに記録された MLflow 実行の run_id を含めます。
  2. モデルを MLflow モデル レジストリに再登録します。
  3. MLflow モデルの新しいバージョンをサービングしてみてください。

Notebook の例

これらのノートブックを確認して、AutoML の使用を開始します。

次のノートブックでは、AutoML で分類を処理する方法を示しています。

AutoML 分類のノートブックの例

ノートブックを入手

次のノートブックでは、AutoML で回帰を処理する方法を示しています。

AutoML 回帰のノートブックの例

ノートブックを入手

次のノートブックでは、AutoML を使用して予測を実行する方法を示しています。

AutoML 予測のノートブックの例

ノートブックを入手

次のノートブックでは、AutoML と Feature Store の機能テーブルを使用して、ML モデルをトレーニングする方法を示しています。

Feature Store サンプル ノートブックを使用した AutoML 実験

ノートブックを入手