Azure Databricks AutoML データの準備と処理

この記事では、Azure Databricks AutoML で機械学習トレーニングのためにデータを準備する方法と、構成可能なデータ設定について説明します。 これらのオプションは、実験の設定中に AutoML UI で調整できます。 AutoML API を使用したこれらの設定の構成については、AutoML Python API リファレンスを参照してください。

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

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

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

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

列の選択

注意

この機能を利用できるのは、分類と回帰の問題の場合のみです

Databricks Runtime 10.3 ML 以降では、AutoML でトレーニングに使用する列を指定できます。 UI で列を除外するには、[含める] 列をオフにします。 API で、exclude_cols パラメーターを使用します。 詳細については、「Azure Databricks AutoML Python API リファレンス」を参照してください。

予測ターゲットとして選択された列、またはデータを分割する時間列 として選択した列を削除することはできません。

既定では、すべての列が含まれます。

欠損値の補完

Databricks Runtime 10.4 LTS ML 以降では、null 値で補完する方法を指定できます。 UI で、テーブル スキーマの [次で補完] 列のドロップダウンからメソッドを選択します。 API で、imputers パラメーターを使用します。 詳細については、「Azure Databricks AutoML Python API リファレンス」を参照してください。

AutoML では既定で、列の型と内容に基づいて補完方法が選択されます。

注意

既定以外の補完方法を指定した場合、AutoML ではセマンティック型の検出は実行されません。

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

AutoML では、データがトレーニング、検証、テストの 3 つに分割されます。 ML の問題の種類によって、データを分割するオプションは異なります。

回帰および分類用のデータを分割する

回帰および分類タスク用のトレーニング、検証、テストのセットにデータを分割するには、次の方法を使用します。

(既定) ランダム分割: データ分割の戦略が指定されていない場合、データセットは、60% のトレーニング分割、20% の検証分割、20% のテスト分割へと、ランダムに分割されます。 分類の場合、層別ランダム分割を行い、確実に各クラスが、トレーニング、検証、テストのセット内で、適切に表現されるようにします。

時系列分割: Databricks Runtime 10.4 LTS ML 以上では、時間列を選択して、時系列のトレーニング、検証、テストの分割を作成できます。 時系列分割では、最も古いデータ ポイントがトレーニングに、その次に古いものが検証に、最も新しいポイントがテストに使用されます。 時間列は、タイムスタンプ、整数、または文字列で指定できます。

手動分割: Databricks Runtime 15.3 ML 以上では、API を使用して手動分割を設定できます。 分割列を指定し、trainvalidatetest の値を使用して、トレーニング、検証、テストのデータセットに使用する行を識別します。 分割列に traintestvalidate 以外の値を含む行はすべて無視され、対応するアラートが発生します。

予測用のデータを分割する

予測タスクの場合、AutoML では時系列クロス検証が使用されます。 このメソッドは、トレーニング データセットを時系列で段階的に拡張し、後続の時点に対して検証を実行します。 クロス検証では、さまざまな時間セグメントに対するモデルのパフォーマンスの、信頼性の高い評価が提供されます。 これにより、その予測モデルが未知の将来のデータに対して厳密にテストされ、予測の関連性と精度が維持されることを保証します。

クロス検証分割の数は、時系列の数、共変量の存在、時系列の長さなど、入力テーブルの特性によって異なります。

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

注意

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

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 では値の平均が使用されます。

代わりに、合計を使用するには、試行によって生成されたソース コード ノートブックを編集します。 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" })

セマンティック型の検出

注意

  • セマンティック型の検出は、予測の問題には適用されません。
  • 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 を使用します。

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"],
  }
]

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

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

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

ノートブックを入手