Feature Store(特徴量ストア)は、MLモデルの入力データである特徴量(Feature)を 集中管理・共有・再利用するためのリポジトリです。Databricksでは「Feature Engineering in Unity Catalog」として 提供されており、Unity Catalogのガバナンス機能と統合された特徴量管理基盤を構築できます。 ML Associate試験では全体の10〜15%を占め、Feature Table作成・FeatureLookup・Point-in-Time Joinが頻出です。
MLプロジェクトでは、データから特徴量を作成する工程が開発時間の大半を占めます。Feature Storeがない環境では以下の問題が頻繁に発生し、モデルの品質と開発効率を低下させます。
| 課題 | Feature Storeなし | Feature Storeあり |
|---|---|---|
| 特徴量の重複作成 | 異なるチームが同じ特徴量を個別に計算 | 一度作成した特徴量を組織全体で共有・再利用 |
| Training-Serving Skew | トレーニング時と推論時で異なるロジックが使われる | 同一のFeature Tableから自動取得し一貫性を保証 |
| データリーケージ | 時系列JOINで未来データが混入するリスク | Point-in-Time Joinで自動的に防止 |
| 特徴量の発見性 | どの特徴量が利用可能か把握困難 | Unity Catalogで検索・メタデータ管理 |
| ガバナンス | アクセス制御・監査ログが分散 | Unity CatalogのACL・リネージ追跡が適用 |
Feature Table(特徴量テーブル)は、主キー(Primary Key)を持つDelta Tableです。Unity Catalogで管理され、通常のテーブルと同様にアクセス制御・リネージ追跡が適用されます。
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
# Feature Table の作成(DataFrameから初期データを投入)
fe.create_table(
name="catalog.schema.customer_features",
primary_keys=["customer_id"],
timestamp_keys=["timestamp"], # Point-in-Time Lookup 用
df=customer_features_df,
description="顧客行動特徴量(チャーン予測用)"
)
# 特徴量を DataFrame として読み出し
features_df = fe.read_table(name="catalog.schema.customer_features")primary_keys は各行を一意に識別する必須パラメータです。timestamp_keys はPoint-in-Time Lookupに使用するオプションパラメータで、 時系列特徴量を扱う場合に指定します。
既存のFeature Tableに新しい特徴量データを追加・更新するには fe.write_table() を使用します。mode パラメータで書き込みモードを制御します。
# 既存の Feature Table に特徴量を追加・更新
fe.write_table(
name="catalog.schema.customer_features",
df=new_features_df,
mode="merge" # 主キーが一致する行は更新、新規行は挿入
)
# 全データを上書きする場合
fe.write_table(
name="catalog.schema.customer_features",
df=full_features_df,
mode="overwrite"
)Feature Lookupは、Feature Tableからトレーニングデータセットを構築する仕組みです。ラベルを含むDataFrameと、Feature Tableの主キーを指定するだけで自動的にJOINが実行されます。
from databricks.feature_engineering import FeatureLookup
# 複数の Feature Table からルックアップを定義
feature_lookups = [
FeatureLookup(
table_name="catalog.schema.customer_features",
feature_names=["total_purchases", "avg_session_time", "days_since_last_visit"],
lookup_key="customer_id"
),
FeatureLookup(
table_name="catalog.schema.product_features",
feature_names=["category", "price_tier"],
lookup_key="product_id"
)
]
# トレーニングデータセットの構築
training_set = fe.create_training_set(
df=label_df, # ラベルと主キーを含む DataFrame
feature_lookups=feature_lookups,
label="churn",
exclude_columns=["customer_id"] # モデル入力から除外する列
)
training_df = training_set.load_df()
print(training_df.columns)
# ['total_purchases', 'avg_session_time', 'days_since_last_visit',
# 'category', 'price_tier', 'churn']この仕組みにより、トレーニング時と推論時で同じFeature Tableを参照することが保証され、Training-Serving Skew(トレーニング時とサービング時の特徴量の不一致)を防止できます。
Point-in-Time Joinは、時系列データの特徴量を扱う際に「データリーケージ」を防ぐための仕組みです。各トレーニングサンプルのラベル時点で実際に利用可能だった特徴量のみを結合し、未来の情報が学習に混入することを防ぎます。
# Point-in-Time Lookup の設定
feature_lookups = [
FeatureLookup(
table_name="catalog.schema.customer_features",
feature_names=["total_purchases", "avg_session_time"],
lookup_key="customer_id",
timestamp_lookup_key="event_timestamp" # ラベル側のタイムスタンプ列
)
]
# ラベル DataFrame(各行に timestamp 列が必要)
# customer_id | event_timestamp | churn
# C001 | 2026-03-15 10:00:00 | 1
training_set = fe.create_training_set(
df=label_df,
feature_lookups=feature_lookups,
label="churn"
)上記の例で、ラベルの日時が2026-03-15 10:00の行に対しては、Feature Tableの中で 2026-03-15 10:00以前の最新の特徴量のみが結合されます。 03-15 10:01以降に計算された特徴量は使われません。 ML Associate試験では、Point-in-Time Joinが何を防ぐか(データリーケージ)を問う問題が頻出です。
fe.log_model() でモデルを記録すると、Feature Tableへの参照情報(リネージ)が 自動的にMLflowに記録されます。推論時にはモデルが自動的にFeature Tableから特徴量を取得し、 呼び出し側は主キーのみを渡せばよくなります。
import mlflow
# Feature Store を使ったモデルのトレーニングとログ
with mlflow.start_run():
model = train_model(training_df)
fe.log_model(
model=model,
artifact_path="model",
flavor=mlflow.sklearn,
training_set=training_set,
registered_model_name="catalog.schema.churn_model"
)
# 推論時: 主キーのみの DataFrame を渡すと Feature Table から特徴量を自動取得
predictions = fe.score_batch(
model_uri="models:/catalog.schema.churn_model/1",
df=inference_df # customer_id 列のみで OK
)fe.log_model() と mlflow.sklearn.log_model() の違いは試験頻出ポイントです。fe.log_model() でのみFeature Storeとの連携情報がモデルに記録され、 推論時の自動特徴量取得が有効になります。
リアルタイム推論(Model Serving)では、低レイテンシで特徴量を取得する必要があります。DatabricksのOnline Feature Servingは、Feature Tableのデータをリアルタイム推論エンドポイントから直接利用可能にする機能です。
| 比較項目 | オフラインストア(Delta Table) | オンラインストア |
|---|---|---|
| 用途 | バッチトレーニング・分析 | リアルタイム推論 |
| レイテンシ | 秒〜分単位 | ミリ秒単位 |
| アクセスパターン | 大量行のスキャン | 主キーによるポイントルックアップ |
| データ同期 | — | オフラインストアから自動同期 |
from databricks.feature_engineering.online_store_spec import (
AmazonDynamoDBSpec
)
# オンラインストアの設定(DynamoDB の例)
online_store_spec = AmazonDynamoDBSpec(
region="ap-northeast-1",
table_name="customer_features_online"
)
# Feature Table をオンラインストアに公開
fe.publish_table(
name="catalog.schema.customer_features",
online_store=online_store_spec,
mode="merge"
)| 比較項目 | Workspace Feature Store(旧) | Feature Engineering in UC(現行) |
|---|---|---|
| スコープ | ワークスペース内限定 | Unity Catalogのメタストア全体 |
| クロスWS共有 | レプリケーションが必要 | ネイティブに共有可能 |
| アクセス制御 | ワークスペースACL | Unity Catalog ACL(GRANT/REVOKE) |
| リネージ | 限定的 | Unity Catalog Lineageで自動追跡 |
| クライアントAPI | FeatureStoreClient | FeatureEngineeringClient |
| Databricks推奨 | 非推奨(移行推奨) | 推奨 |
試験では「FeatureStoreClient」と「FeatureEngineeringClient」のどちらを使うべきかを問う問題が出ます。 新規プロジェクトでは常にUnity Catalog版の FeatureEngineeringClient を選択します。
Feature Store / ML Associate
問題 1
あるデータサイエンティストが、顧客の過去30日間の購買金額合計(daily_total_spend)を特徴量として利用するチャーン予測モデルを構築しています。この特徴量は日次バッチで更新され、ラベルデータには各顧客のチャーンイベント日時が含まれます。トレーニングデータセットの作成方法として最も適切なものはどれですか?
正解: B
日次更新の時系列特徴量とチャーンイベント日時が含まれるラベルデータを結合する場合、Point-in-Time Joinが必須です。timestamp_keysを設定したFeature Tableに対して、FeatureLookupのtimestamp_lookup_keyにラベル側のイベント日時列を指定することで、各ラベル行のイベント時点で実際に利用可能だった特徴量のみが結合されます。timestamp_keysなしの通常JOIN(A)では未来のdaily_total_spendが使われてデータリーケージが発生します。SparkのJOIN(C)ではFeature Storeのリネージ管理・推論時の自動取得が失われます。ラベルのマージ(D)はFeature Tableの設計として不適切です。
Feature StoreとFeature Engineeringの違いは何ですか?
Feature Engineering(特徴量エンジニアリング)はMLモデルの入力データ(特徴量)を作成するプロセス全体を指します。Feature Storeは、作成した特徴量を集中管理・共有・再利用するためのリポジトリです。DatabricksではFeature Engineering in Unity Catalogとして提供されており、特徴量の作成(Engineering)と管理(Store)の両方をカバーする統合的な機能です。
旧Workspace Feature StoreとUnity Catalog Feature Engineeringの違いは?
旧Workspace Feature Storeはワークスペース内にスコープが限定され、クロスワークスペースでの特徴量共有にはレプリケーションが必要でした。Unity Catalog Feature Engineeringでは、Feature TableがUnity Catalogのテーブルとして管理され、カタログ・スキーマ単位のアクセス制御・リネージ追跡・クロスワークスペース共有がネイティブに可能です。Databricksは新規プロジェクトではUC版への移行を推奨しています。
Feature StoreはDatabricks試験のどの範囲で出題されますか?
ML Associate試験では全体の10〜15%がFeature Store関連で、Feature Tableの作成・FeatureLookup・Point-in-Time Joinの基本概念が問われます。ML Professional試験ではオンライン/オフラインのFeature Serving設計、リアルタイム特徴量パイプライン、Training-Serving Skewの防止戦略など、より高度な設計パターンが出題されます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...