概念

このセクションでは、Databricks で特徴量テーブルを使用する上で役立つ概念について説明します。

機能ストア

特徴量ストアは、データ サイエンティストが特徴量を検索して共有できるようにする一元化されたリポジトリであり、特徴量の値の計算に使用されるのと同じコードがモデルのトレーニングと推論に使用されるようにします。 Databricks での特徴量ストアの実装は、ワークスペースで Unity Catalog が有効になっているかどうかによって異なります。 Unity Catalog が有効なワークスペースでは、Delta テーブルが特徴量テーブルとして機能し、Unity Catalog が特徴量ストアとして機能します。テーブルを特徴量テーブルとして登録する別の手順は必要ありません。 Unity Catalog が有効になっていないワークスペースは、[ワークスペース Feature Store] にアクセスできます。

機械学習では、既存のデータを使用してモデルを構築し、将来の結果を予測します。 ほとんどの場合、生データを使用してモデルを構築するには、前処理と変換が必要です。 このプロセスは特徴エンジニアリングと呼ばれ、このプロセスの出力は特徴量 (モデルの構成要素) と呼ばれます。

特徴量の開発は複雑で時間がかかります。 さらに複雑になるのは、機械学習では、特徴量の計算をモデル トレーニングのために行い、モデルを使用して予測を行うときにもう一度行う必要があるということです。 この実装は、同じチームや同じコード環境を使用して行われない場合があり、これが遅延やエラーを招く可能性があります。 また、往々にして組織内の異なる複数のチームで同じ特徴量が必要とされているのに、他のチームが行った作業を認識していない可能性があります。 特徴量ストアは、このような問題に対処することを目的としています。

特徴テーブル

特徴量は、特徴量テーブルとして整理されます。 各テーブルには主キーが必要です。また、差分テーブルと追加のメタデータが背後で使われています。 特徴量テーブルのメタデータは、テーブルの生成元となるデータ ソース、またテーブルを作成した (またはテーブルへの書き込みを行った) ノートブックやジョブを追跡します。

Databricks Runtime 13.3 LTS 以降では、ワークスペースが Unity Catalog に対して有効になっている場合、主キーを持つ Unity Catalog 内の任意の差分テーブルを特徴量テーブルとして使用できます。 「特徴テーブルの操作」を参照してください。 ローカルのワークスペース特徴量ストアに格納されている特徴量テーブルを、"ワークスペース特徴量テーブル" と呼びます。 「ワークスペース特徴量ストア内の特徴量テーブルを操作する」を参照してください。

特徴量テーブル内の特徴量は、通常、一般的な計算関数を使用して計算されて更新されます。

特徴量テーブルは、オンライン ストアに公開してリアルタイムのモデル推論に使用することができます。

FeatureLookup

さまざまなモデルが 1 つの特定の特徴テーブルの特徴を使用できますが、すべてのモデルがすべての特徴を必要とするわけではありません。 特徴を使ってモデルをトレーニングするには、各特徴テーブルに対して FeatureLookup を作成します。 FeatureLookup を使い、テーブルのどの特徴を使うかを指定します。また、create_training_set に渡されるラベル データと特徴テーブルを結合するために使うキーも定義します。

この図は FeatureLookup のしくみを示しています。 この例では、2 つの特徴テーブル (customer_featuresproduct_features) の特徴を使ってモデルをトレーニングします。 各特徴テーブルに対して FeatureLookup を作成します。その際に、テーブルの名前、テーブルから選ぶ特徴 (列)、特徴を結合してトレーニング データセットを作成するときに使う検索キーを指定します。

次に、図にも示されている create_training_set を呼び出します。 この API 呼び出しでは、未加工のトレーニング データ (label_df) を含む DataFrame、使う FeatureLookupslabel (実測値を含む列) を指定します。 トレーニング データには、特徴テーブルの各主キーに対応する列を含める必要があります。 特徴テーブルのデータは、これらのキーに従って入力 DataFrame に結合されます。 この図では、結果が "Training dataset" と示されています。

FeatureLookup ダイアグラム

FeatureFunction

特徴量は、推論時にのみ利用可能な情報に依存する可能性があります。 リアルタイム入力と特徴量を組み合わせて最新の特徴量を計算する FeatureFunction を指定できます。 図に例を示します。 詳細については、「Python ユーザー定義関数を使ってオンデマンドで特徴量を計算する」を参照してください。

FeatureFunction の図

トレーニング セット

トレーニング セットは、一連の特徴量と 1 つの DataFrame とから成ります。DataFrame には、生のトレーニング データやラベルのほか、特徴量の検索に使用する主キーが含まれています。 Feature Store から抽出する特徴量を指定してトレーニング セットを作成し、モデルのトレーニング中に入力として、そのトレーニング セットを指定します。

トレーニング セットを作成して使用する方法の例については、「トレーニング データセットの作成」を参照してください。

Unity Catalog で特徴エンジニアリングを使用してモデルをトレーニングしてログに記録すると、カタログ エクスプローラーでモデルの系列を表示できます。 モデルの作成に使用されたテーブルと関数は自動的に追跡され、表示されます。 「特徴量ガバナンスと系統」を参照してください。

時系列特徴テーブル (ポイントインタイム ルックアップ)

モデルのトレーニングに使われるデータには、多くの場合、時間の依存関係が組み込まれています。 モデルを構築するときは、観察されたターゲット値の時間までの特徴値のみを考慮する必要があります。 ターゲット値のタイムスタンプより後に測定されたデータに基づく特徴量でトレーニングした場合、モデルのパフォーマンスが低下する可能性があります。

時系列特徴テーブルには、トレーニング データセットの各行が行のタイムスタンプの時点で最新の既知の特徴値を表すことを保証するタイムスタンプ列が含まれます。 時系列データ、イベント ベースのデータ、時間集計データなど、時系列の特徴値が時間と共に変化するときは常に、時系列特徴テーブルを使う必要があります。

時系列機能テーブルを作成する場合は、timeseries_columns 引数 (Unity カタログの Feature Engineering の場合) または timestamp_keys 引数 (ワークスペース Feature Store の場合) を使用して、主キーの時間列を時系列列に指定します。 これにより、create_training_set または score_batch を使うときのポイントインタイム検索が可能になります。 システムは、ユーザーが指定した timestamp_lookup_key を使って、タイムスタンプの時点での結合を実行します。

timeseries_columns 引数または timestamp_keys 引数を使用せず、単に時系列列を主キー列として指定した場合、Feature Store は結合時にその時系列列にポイントインタイム ロジックを適用しません。 代わりに、タイムスタンプより前のすべての行と一致させるのではなく、時刻が正確に一致する行のみと一致させます。

オフライン ストア

オフライン特徴量ストアは、特徴量の検出、モデルのトレーニング、バッチ推論に使用されます。 Delta テーブルとして具現化された特徴量テーブルが格納されます。

オンライン ストア

オンライン ストアは、リアルタイムのモデル推論に使用される低遅延のデータベースです。 Azure Databricksがサポートするオンライン ストアの一覧については、「サードパーティのオンライン ストア」を参照してください。

ストリーム

バッチ書き込みに加え、Databricks Feature Store ではストリーム配信がサポートされます。 ストリーミング ソースから特徴量テーブルに特徴量の値を書き込み、特徴量の計算コードで、構造化ストリーミングを利用して、生データ ストリームを特徴量に変換することができます。

オフライン ストアからオンライン ストアに特徴量テーブルをストリーム配信することもできます。

モデルのパッケージ

Unity Catalog またはワークスペース Feature Store で特徴エンジニアリングを使用して機械学習モデルをトレーニングし、クライアントの log_model() メソッドを使用してログに記録すると、モデルでこれらの特徴量への参照が保持されます。 モデルは推論時に、必要に応じて自動的に特徴量の値を取得できます。 呼び出し元で、モデルに使用されている特徴量の主キー (user_id など) を指定するだけで、必要なすべての特徴量の値が取得されます。

バッチ推論では、スコアリングの前に、特徴量の値がオフライン ストアから取得されて新しいデータと結合されます。 リアルタイム推論では、特徴量の値がオンライン ストアから取得されます。

機能メタデータを含むモデルをパッケージ化するには、FeatureEngineeringClient.log_model (Unity カタログの Feature Engineering の場合) または FeatureStoreClient.log_model (ワークスペース Feature Store の場合) を使用します。