特徴量ストア比較:Feast vs Hopsworks vs Featureform でMLの特徴量を管理する
オープンソースラボ編集部 ・ 2026年6月14日
特徴量ストア比較:Feast vs Hopsworks vs Featureform でMLの特徴量を管理する
🏪 機械学習の再利用性と一貫性を高める「特徴量ストア」。Feast・Hopsworks・Featureformを比較して最適なMLOpsインフラを構築しましょう。
特徴量ストアとは
機械学習モデルの学習・推論に使う特徴量(features)を一元管理・共有するプラットフォームです。トレーニングとサービング間の特徴量の一貫性(training-serving skew の防止)が主な目的です。
主要ツール比較表
| 項目 | Feast | Hopsworks | Featureform |
|---|---|---|---|
| ライセンス | Apache 2.0 | AGPL v3(CE) | Apache 2.0 |
| 開発言語 | Python | Java/Python | Go/Python |
| オフライン/オンライン | 両対応 | 両対応 | 両対応 |
| 変換ロジック | 限定的 | ◎ Spark/Flink | ◎ |
| データソース | BigQuery/Redshift/S3等 | 多数 | 多数 |
| Kubernetes対応 | ○ | ◎ | ◎ |
| Managed SaaS | × | Hopsworks Cloud | ○ |
| UIダッシュボード | △ | ◎ | ◎ |
各ツールの特徴
Feast
Gojekが開発しOSS化した特徴量ストアの先駆け。シンプルな設計でオフライン(学習)とオンライン(推論)の特徴量の一貫性を保証します。
主な特徴:
- Python SDKで特徴量の定義・管理
- BigQuery/Redshift/S3をオフラインストアとして利用
- Redis/DynamoDBをオンラインストアとして利用
- point-in-time correct な学習データ生成
from feast import FeatureStore, FeatureView, Field, Entity
from feast.types import Float64, Int64
from feast.infra.offline_stores.bigquery_source import BigQuerySource
# 特徴量ソースの定義
driver_stats_source = BigQuerySource(
table="myproject.feast_demo.driver_stats",
timestamp_field="event_timestamp",
)
# エンティティの定義
driver = Entity(name="driver", join_keys=["driver_id"])
# 特徴量ビューの定義
driver_stats_fv = FeatureView(
name="driver_hourly_stats",
entities=[driver],
ttl=timedelta(hours=1),
schema=[
Field(name="conv_rate", dtype=Float64),
Field(name="acc_rate", dtype=Float64),
],
source=driver_stats_source,
)
# 推論時の特徴量取得
store = FeatureStore(repo_path=".")
features = store.get_online_features(
features=["driver_hourly_stats:conv_rate"],
entity_rows=[{"driver_id": 1234}],
).to_dict()
向いているケース: シンプルな特徴量ストア・GCP/AWS環境
Hopsworks
特徴量ストアに加え、モデルレジストリ・MLパイプライン管理を統合した本格的なMLプラットフォーム。
主な特徴:
- SparkとFlinkでのリアルタイム特徴量変換
- HSFS(Hopsworks Feature Store Python API)
- モデルレジストリ統合でモデルと特徴量のバージョン管理を連携
- Great Expectationsによるデータ品質チェック統合
import hopsworks
# Hopsworks接続
project = hopsworks.login(
host="c.app.hopsworks.ai",
project="my_ml_project"
)
fs = project.get_feature_store()
# 特徴量グループの作成
fg = fs.get_or_create_feature_group(
name="customer_features",
version=1,
description="Customer transaction features",
primary_key=["customer_id"],
online_enabled=True,
)
# データを挿入
fg.insert(customer_df)
# 学習データの取得
fv = fs.get_feature_view(name="customer_churn_fv", version=1)
X_train, X_test, y_train, y_test = fv.train_test_split(test_size=0.2)
向いているケース: 本格的なMLOpsプラットフォーム
Featureform
「仮想特徴量ストア」というコンセプトで、既存のデータインフラ(Redis/Postgres/BigQuery等)をそのまま使いながら特徴量レイヤーを追加します。
主な特徴:
- 既存インフラをそのまま活用(データ移動不要)
- Pythonデコレーターで特徴量変換を定義
- Feature lineage(特徴量の系譜)追跡
- 複数チームでの特徴量共有ポータル
import featureform as ff
client = ff.Client(host="localhost:7878")
# Redisをオンラインストアとして登録
redis = ff.register_redis(
name="redis",
host="localhost",
port=6379,
)
# BigQueryをオフラインストアとして登録
bq = ff.register_bigquery(
name="bigquery",
project_id="my-project",
dataset_id="my_dataset",
)
# 特徴量変換の定義
@client.df_transformation(inputs=[("transactions", "default")])
def average_user_transaction(df):
return df.groupby("user_id")["amount"].mean()
向いているケース: 既存インフラ活用・特徴量共有ポータル
選択ガイド
| 状況 | 推奨 |
|---|---|
| シンプルな特徴量ストア・GCP/AWS | Feast |
| 統合MLプラットフォームが必要 | Hopsworks |
| 既存DBを活用・特徴量共有 | Featureform |
内部リンク
外部リソース
FAQ
Q. 特徴量ストアは小規模チームでも必要ですか?
モデルが1〜2本であれば不要な場合が多いです。モデルが増え、特徴量の再利用・共有ニーズが出てきたら導入を検討してください。
Q. training-serving skewとは何ですか?
学習時と推論時に異なる特徴量計算ロジックが使われることで生じる誤差のことです。特徴量ストアはこれを防ぐために同一ロジックを保証します。
Q. Tectonとの違いは何ですか?
TectonはFeastをベースにした商用SaaSです。Feastと比べて運用サポートと追加機能がありますが、有料です。
Q. リアルタイム特徴量(ストリーミング)はどのツールが得意ですか?
HopsworksのFlink統合が最も充実しています。FeastもKafkaソースをサポートしますが、設定はより手動です。