Azure Databricks AutoML のしくみ

このアーティクルでは、Azure Databricks AutoML のしくみと、欠損値補完や 大規模なデータ サンプリングなどの概念の実装について詳しく説明します。

Databricks AutoML では、次の処理が実行されます。

  1. モデルトレーニング用にデータセットを準備します。 たとえば、AutoML は、モデル トレーニングの前に、分類の問題に対して不均衡なデータ検出を実行します。
  2. 複数のモデルを繰り返しトレーニングし、調整します。各モデルはオープン ソース コンポーネントから構築され、簡単に編集して機械学習パイプラインに統合できます。
    • AutoML は、クラスターのワーカー ノード全体にハイパーパラメーター チューニングの試用版を自動的に分散します。
    • Databricks Runtime 9.1 LTS ML 以降を使用します。この場合、AutoML では、データセットが大き過ぎて、1 つのワーカー ノードのメモリに収まりきらない場合にデータセットが自動的にサンプルされます。 大規模なデータセットのサンプリングを参照してください。
  3. scikit-learnxgboostLightGBMProphet、および ARIMA パッケージのアルゴリズムに基づいてモデルを評価します。
  4. 結果を表示し、各試用版の実行のソースコードが含まれた Python ノートブックを提供するため、ユーザーはコードを検討、再現、変更できます。 また、AutoML は、データセットの概要統計を計算し、ノートブックにその情報を保存するため、ユーザーは後で確認できます。

AutoML アルゴリズム

Databricks AutoML は、次の表のアルゴリズムに基づいてモデルをトレーニングおよび評価します。

注意

分類モデルと回帰モデルの場合、デシジョン ツリー、ランダム フォレスト、ロジスティック回帰、確率的勾配降下アルゴリズムを使用した線形回帰は、scikit-learn に基づいています。

分類モデル 回帰モデル 予測モデル
デシジョン ツリー デシジョン ツリー Prophet
ランダム フォレスト ランダム フォレスト Auto-ARIMA (Databricks Runtime 10.3 ML 以降で使用可能。)
ロジスティック回帰 確率的勾配降下法による線形回帰
XGBoost XGBoost
LightGBM LightGBM

サポートされているデータ機能の型

上記に記載されていない特徴量の型はサポートされていません。 たとえば、イメージはサポートされていません。

次の特徴量の型がサポートされています。

  • Numeric (ByteTypeShortTypeIntegerTypeLongTypeFloatType および DoubleType)
  • Boolean
  • String (カテゴリまたは英語テキスト)
  • Timestamps (TimestampTypeDateType)
  • ArrayType[Numeric] (Databricks Runtime 10.4 LTS ML 以降)
  • DecimalType (Databricks Runtime 11.3 LTS ML 以降)

データを、トレーニング/検証/テスト セットに分割する

データをトレーニング、検証、およびテスト セットに分割するために使用できる主な方法は 2 つあります。

(既定) ランダム分割: データ分割戦略が指定されていない場合、データセットはトレーニング、検証、およびテスト セットに分割されます。 比率はトレーニング分割が 60%、検証分割が 20%、テスト分割が 20% となります。 この分割は、バックグラウンドでランダムに行われます。 分類タスクの場合、ランダムな層化分割を使用して、確実に各クラスがトレーニング、検証、およびテスト セットで適切に表現されるようにします。

時系列分割: Databricks Runtime 10.4 LTS ML 以上では、分類と回帰問題のトレーニング、検証、テスト データの分割に使用する時間列を指定できます。 この列を指定すると、データセットは時間ごとにトレーニング セット、検証セット、テスト セットに分割されます。 最も古いポイントはトレーニングに使用され、次に古いポイントは検証に使用され、最新のポイントはテスト セットとして使用されます。 時間列は、タイムスタンプ、整数、または文字列で指定できます。

大規模なデータセットのサンプリング

注意

サンプリングは、予測の問題には適用されません。

AutoML では、クラスターのワーカー ノード全体にハイパーパラメーター チューニングの試用版が分散されますが、各モデルは 1 つのワーカー ノードでトレーニングされます。

データセットの読み込みとトレーニングに必要なメモリが AutoML によって自動的に推定され、必要に応じてデータセットがサンプルされます。

Databricks Runtime 9.1 LTS ML から Databricks Runtime 10.4 LTS ML まででは、サンプリングの割合はクラスターのノードの種類や各ノードのメモリ量に応じて変化しません。

Databricks Runtime 11.x ML の場合:

  • コアあたりのメモリが多いワーカー ノードでは、サンプリングの割合が増えます。 [メモリ最適化済み] というインスタンスの種類を選択することで、サンプル サイズを増やすことができます。
  • クラスターの Spark 構成で大きな値 spark.task.cpus を選択することで、サンプル サイズをさらに大きくすることもできます。 既定の設定は 1 です。最大値は、ワーカー ノードの CPU の数です。 この値を増やすと、サンプル サイズは大きくなりますが、並列で実行される試行は少なくなります。 たとえば、4 コアと合計 RAM が 64 GB のマシンで、既定の spark.task.cpus=1 ではワーカーごとに 4 回の試行が実行され、各試行は 16 GB RAM に制限されます。 spark.task.cpus=4 に設定すると、各ワーカーで実行される試行は 1 回のみになりますが、その試行では 64 GB RAM を使用できます。

Databricks Runtime 12.2 LTS ML 以降では、トレーニング タスクあたりの CPU コアの割り当てを増やすことで、より大きなデータセットで AutoML のトレーニングが行えます。 サンプルのサイズを増やすには、合計メモリがより大きいインスタンス サイズを選択します。

Databricks Runtime 11.3 LTS ML 以降では、AutoML でデータセットがサンプリングされた場合、そのサンプリングの割合が UI の [概要] タブに表示されます。

分類の問題の場合、AutoML では PySpark sampleByメソッドを使用した階層サンプリングが行われ、ターゲット ラベルのディストリビューションが保持されます。

回帰の問題の場合、AutoML では PySpark sampleメソッドが使用されます。

分類の問題に対する不均衡なデータセットのサポート

Databricks Runtime 11.3 LTS ML 以降では、データセットが不均衡であることが AutoML によって検出されると、主要なクラスをダウンサンプリングしてクラスの重みを追加することで、トレーニング データセットの不均衡の緩和が試行されます。 AutoML ではトレーニング データセットのみが均衡化され、テストおよび検証のデータセットは均衡化されません。 こうすることで、モデルのパフォーマンスが、真の入力クラス分布を示す、エンリッチされていないデータセットに対して常に評価されます。

不均衡なトレーニング データセットを均衡化させるために、AutoML では、特定のクラスがダウンサンプリングされる度合いに反比例するクラスの重みを使用します。 たとえば、100 個のサンプルを含むトレーニング データセットにクラス A に属する 95 個のサンプルとクラス B に属する 5 個のサンプルがある場合、AutoML ではクラス A を 70 個のサンプルにダウンサンプリングする (これはクラス A を 70/95 (つまり 0.736) の比率でダウンサンプリングしている) 一方で、クラス B のサンプル数を 5 個に保つことで、この不均衡を緩和します。 最終的なモデルが正しく調整され、モデル出力の確率分布が入力のものと同じになるようにするために、AutoML ではクラス A のクラスの重みを 1/0.736 (つまり 1.358) の比率でスケールアップする一方で、クラス B の重みを 1 に保ちます。 次に、AutoML ではモデル トレーニングでこれらのクラスの重みをパラメーターとして使用して、モデルのトレーニング時に各クラスのサンプルが適切に重み付けされるようにします。

セマンティック型の検出

注意

  • セマンティック型の検出は、予測の問題には適用されません。
  • AutoML では、カスタムの補完メソッドが指定されている列に対してはセマンティック型 の検出は実行されません。

Databricks Runtime 9.1 LTS ML 以降では、AutoML により、Spark またはテーブル スキーマの pandas データ型とは異なるセマンティック型が列にあるかどうかの検出が試みられます。 AutoML では、これらの列は検出されたセマンティック型として扱われます。 これらの検出はベスト エフォートであり、場合によってはセマンティック型の存在が見逃される可能性があります。 また、列のセマンティック型を手動で設定したり、注釈を使用して、セマンティック型の検出を列に適用しないように AutoML に指示したりすることもできます。

具体的には、AutoML により次の調整が行われます。

  • 日付データまたはタイムスタンプ データを表す文字列の列と整数の列は、タイムスタンプ型として扱われます。
  • 数値データを表す文字列の列は、数値型として扱われます。

Databricks Runtime 10.1 ML 以降では、AutoML により次の調整も行われます。

  • カテゴリ別の ID を含む数値の列は、カテゴリ特徴量として扱われます。
  • 英語のテキストを含む文字列の列は、テキスト特徴量として扱われます。

セマンティック型の注釈

Databricks Runtime 10.1 ML 以降では、列にセマンティック型の注釈を配置して、割り当てられたセマンティック型を手動で制御できます。 列のセマンティック型 <column-name><semantic-type> として手動で注釈を付けるには、次の構文を使用します。

metadata_dict = df.schema["<column-name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic-type>"
df = df.withMetadata("<column-name>", metadata_dict)

<semantic-type> として、以下のいずれかを指定できます。

  • categorical: 列にカテゴリ値が含まれます (たとえば、ID として扱う必要がある数値)。
  • numeric: 列に数値が含まれます (たとえば、数値に解析できる文字列値)。
  • datetime: 列に、タイムスタンプ値 (タイムスタンプに変換できる文字列、数値、または日付の値) が含まれます。
  • text: 文字列に英語のテキストが含まれます。

列でセマンティック型の検出を無効にするには、特殊なキーワード注釈 native を使用します。

モデルの説明を容易にするための Shapley 値 (SHAP)

注意

MLR 11.1 以下では、データセットに datetime 列が含まれている場合、SHAP のプロットは生成されません。

AutoML 回帰と分類の実行によって生成されるノートブックには、Shapley 値を計算するコードが含まれます。 Shapley 値はゲーム理論に基づいており、モデルの予測に対する各特徴の重要性を推定します。

AutoML ノートブックでは、SHAP パッケージ を使用して Shapley 値を計算します。 これらの計算はメモリを大量に消費するため、既定では計算は実行されません。

Shapley 値を計算して表示するには、次のようにします。

  1. AutoML で生成された試用版ノートブックの [機能の重要度] セクションに移動します。
  2. shap_enabled = True を設定します。
  3. ノートブックを再実行します。

時系列集計

予測の問題では、時系列にタイムスタンプの値が複数ある場合、AutoML では値の平均が使用されます。

代わりに、合計を使用するには、ソース コード ノートブックを編集します。 Aggregate data by … セルで、以下に示すように .agg(y=(target_col, "avg")).agg(y=(target_col, "sum")) に変更します。

group_cols = [time_col] + id_cols
df_aggregation = df_loaded \
  .groupby(group_cols) \
  .agg(y=(target_col, "sum")) \
  .reset_index() \
  .rename(columns={ time_col : "ds" })

Feature Store の統合

Databricks Runtime 11.3 LTS ML 以降では、Feature Store の既存の特徴テーブルを使用して、分類および回帰の問題の元の入力データセットを拡張できます。

Databricks Runtime 12.2 LTS ML 以降では、Feature Store の既存の特徴テーブルを使用して、分類、回帰、予測の問題の元の入力データセットを拡張できます。

特徴テーブルを作成するには、「特徴量ストアとは」を参照してください。

既存の機能テーブルを使用するには、AutoML UI を使用して特徴テーブルを選択するか、AutoML 実行仕様feature_store_lookups パラメーターを設定します。

feature_store_lookups = [
  {
     "table_name": "example.trip_pickup_features",
     "lookup_key": ["pickup_zip", "rounded_pickup_datetime"],
  },
  {
      "table_name": "example.trip_dropoff_features",
     "lookup_key": ["dropoff_zip", "rounded_dropoff_datetime"],
  }
]

試験ノートブックの生成

実験を予測する場合、AutoML で生成されたノートブックは、実験のすべての試験のためにワークスペースに自動的にインポートされます。

分類と回帰の実験の場合、データ探索のために AutoML で生成されたノートブックと一番良かった試験はワークスペースに自動的にインポートされます。 他の実験試験用に生成されたノートブックは、ワークスペースに自動インポートされるのではなく、DBFS 上の MLflow 成果物として保存されます。 一番良かった試験以外のすべての試験については、TrialInfo Python API の notebook_pathnotebook_url は設定されません。 このようなノートブックを使う必要がある場合、AutoML 実験 UI または databricks.automl.import_notebookPython API を使い、ワークスペースに手動でインポートできます。

AutoML によって生成されたデータ探索ノートブックか一番良かった試験のノートブックのみを使う場合、AutoML 実験 UI の [ソース] 列に、一番良かった実験で生成されたノートブックのリンクが含まれます。

AutoML 実験 UI で生成されたその他のノートブックを使う場合、ワークスペースに自動的にはインポートされません。 各 MLflow 実行をクリックするとノートブックが見つかります。 IPython ノートブックは、実行ページの Artifacts セクションに保存されます。 ワークスペース管理者が成果物のダウンロードを有効にしている場合、このノートブックをダウンロードしてワークスペースにインポートできます。

ノートブックの例: Feature Store での AutoML の実験

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

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

ノートブックを入手