Databricks

Feature Storeとは?Databricksの特徴量管理

2026-03-21
更新: 2026-03-27
NicheeLab編集部
目次
  1. Feature Storeが解決する課題
  2. Feature Tableの作成
  3. 特徴量の書き込み(write_table)
  4. Feature Lookup(特徴量ルックアップ)
  5. Point-in-Time Join
  6. モデルとFeature Storeの統合
  7. Online Feature Serving
  8. 旧Workspace版 vs Unity Catalog版 比較
  9. ML Associate試験の出題ポイント
  10. サンプル問題
  11. よくある質問

Feature Store(特徴量ストア)は、MLモデルの入力データである特徴量(Feature)を 集中管理・共有・再利用するためのリポジトリです。Databricksでは「Feature Engineering in Unity Catalog」として 提供されており、Unity Catalogのガバナンス機能と統合された特徴量管理基盤を構築できます。 ML Associate試験では全体の10〜15%を占め、Feature Table作成・FeatureLookup・Point-in-Time Joinが頻出です。

Feature Storeが解決する課題

MLプロジェクトでは、データから特徴量を作成する工程が開発時間の大半を占めます。Feature Storeがない環境では以下の問題が頻繁に発生し、モデルの品質と開発効率を低下させます。

課題Feature StoreなしFeature Storeあり
特徴量の重複作成異なるチームが同じ特徴量を個別に計算一度作成した特徴量を組織全体で共有・再利用
Training-Serving Skewトレーニング時と推論時で異なるロジックが使われる同一のFeature Tableから自動取得し一貫性を保証
データリーケージ時系列JOINで未来データが混入するリスクPoint-in-Time Joinで自動的に防止
特徴量の発見性どの特徴量が利用可能か把握困難Unity Catalogで検索・メタデータ管理
ガバナンスアクセス制御・監査ログが分散Unity CatalogのACL・リネージ追跡が適用

Feature Tableの作成

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に使用するオプションパラメータで、 時系列特徴量を扱う場合に指定します。

特徴量の書き込み(write_table)

既存の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"
)
  • merge: 主キーが一致する行は更新(UPSERT)、一致しない行は新規挿入
  • overwrite: テーブル全体を置き換え(日次バッチ更新で使用)

Feature Lookup(特徴量ルックアップ)

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 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が何を防ぐか(データリーケージ)を問う問題が頻出です。

モデルとFeature Storeの統合

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との連携情報がモデルに記録され、 推論時の自動特徴量取得が有効になります。

Online Feature Serving

リアルタイム推論(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版 vs Unity Catalog版 比較

比較項目Workspace Feature Store(formerly )Feature Engineering in UC(現行)
スコープワークスペース内限定Unity Catalogのメタストア全体
クロスWS共有レプリケーションが必要ネイティブに共有可能
アクセス制御ワークスペースACLUnity Catalog ACL(GRANT/REVOKE)
リネージ限定的Unity Catalog Lineageで自動追跡
クライアントAPIFeatureStoreClientFeatureEngineeringClient
Databricks推奨非推奨(移行推奨)推奨

試験では「FeatureStoreClient」と「FeatureEngineeringClient」のどちらを使うべきかを問う問題が出ます。 新規プロジェクトでは常にUnity Catalog版の FeatureEngineeringClient を選択します。

ML Associate試験の出題ポイント

  • fe.create_table(): primary_keys・timestamp_keysの役割と設定方法
  • FeatureLookup: lookup_keyの指定方法、複数テーブルからのルックアップ構成
  • Point-in-Time Join: データリーケージの定義と、timestamp_lookup_keyによる防止メカニズム
  • fe.log_model() vs mlflow.log_model(): Feature Store連携の有無の違い
  • write_tableのモード: mergeとoverwriteの使い分け
  • Training-Serving Skew: Feature Storeがどのようにこの問題を解決するか

サンプル問題

Feature Store / ML Associate

問題 1

あるデータサイエンティストが、顧客の過去30日間の購買金額合計(daily_total_spend)を特徴量として利用するチャーン予測モデルを構築しています。この特徴量は日次バッチで更新され、ラベルデータには各顧客のチャーンイベント日時が含まれます。トレーニングデータセットの作成方法として最も適切なものはどれですか?

  1. Feature Table作成時にtimestamp_keysを設定せず、FeatureLookupのlookup_keyのみで結合する
  2. Feature Table作成時にtimestamp_keysを設定し、FeatureLookupでtimestamp_lookup_keyを指定してPoint-in-Time Joinを実行する
  3. FeatureLookupを使わず、SparkのJOIN句で直接Feature TableとラベルDataFrameを結合する
  4. fe.write_table()でラベルDataFrameをFeature Tableにマージし、単一テーブルとしてトレーニングに使用する

正解: 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の防止戦略など、より高度な設計パターンが出題されます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。2026年5月版...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (109件)
© 2026 NicheeLab All rights reserved.