Skip to content

フィーチャーストア

TL;DR

フィーチャーストアは、オフライン学習とオンラインサービングで再利用される特徴量を管理します。単なる保存場所ではなく、一貫性を守るシステムです。重要なのは、時点整合性、鮮度、スキーマとバージョン、発見可能性、所有者、学習・サービング間のパリティです。


解決する問題

フィーチャーストアがないと、各モデルチームが独自の特徴量パイプラインを作ります。

同じ「直近7日の購入回数」がチームごとに違う意味になり、再利用性と信頼性が落ちます。


アーキテクチャ

保存エンジンは違ってもかまいません。意味論は一致させる必要があります。


特徴量ビュー設計

特徴量ビューは所有とマテリアライズの単位です。

次元設計の問い
エンティティ何をスコアするかuser_id, item_id, merchant_id
時間窓どの履歴を要約するか10分、7日、全期間
鮮度どれだけ古くてよいか不正は秒単位、チャーンは日単位
ソースどの事実が正か決済イベント、ログインストリーム
既定値ミスやNULL時どうするか0、unknown、fail closed

risk_score のような曖昧な名前より、user_failed_login_count_10m のように意味と時間窓が分かる名前にします。


オフラインとオンライン

ストア最適化対象主なリスク
オフラインストア履歴JOIN、スキャン、バックフィル時点整合性のバグ
オンラインストア低レイテンシ参照古い特徴量、ホットキー
メタデータストア発見、所有者、リネージ所有者不明の特徴量

マテリアライズパターン

パターン使う条件障害モード
バッチ数時間の古さを許容ジョブ遅延で値が古い
ストリーミング秒/分単位の鮮度が必要重複、順序乱れ、再処理バグ
リクエスト時計算現在リクエストに依存レイテンシと依存先fanout
ハイブリッド履歴集約 + 現在文脈パリティが難しい
バックフィルバグ修正や新特徴量高コスト、版の混乱

ストリーミングでも冪等性が必要です。同じイベントを再処理しても二重計上してはいけません。


時点整合性

学習では、予測時点で利用可能だった特徴量だけを使う必要があります。

10:05の予測では、10:10に反映された値は利用できません。これを学習に使うと未来情報のリークになります。

必要な時刻:

  • イベント時刻: 事実が起きた時刻。
  • 取り込み時刻: システムが受け取った時刻。
  • 利用可能時刻: サービングで使えるようになった時刻。
  • エンティティキー: user、account、item、device、sessionなど。

時点JOINルール

ルール理由
完了時刻ではなく利用可能時刻でJOINする未来情報リークを防ぐ
最新値だけでなく履歴を保存する学習スナップショットと再生に必要
遅延イベントの扱いを定義するバックテストと本番を一致させる
バックフィルをバージョン化する当時の本番値と修正後履歴を区別する
オンライン特徴量をログに残すパリティ確認と事故調査に使う

特徴量契約

特徴量契約には次を含めます。

  • 名前と説明。
  • エンティティキー。
  • 値の型と範囲。
  • 所有者。
  • 鮮度SLO。
  • オフラインソースとオンラインソース。
  • バックフィル動作。
  • NULL/default動作。
  • 廃止計画。
yaml
name: user_failed_login_count_10m
entity: user_id
type: int64
freshness_slo: 120s
default: 0
owner: identity-risk
offline_source: warehouse.login_events
online_source: redis:user-risk
availability_timestamp: materialized_at

スキーマ進化

変更互換性ロールアウト
任意特徴量を追加互換になりやすいオフラインをバックフィルしてオンライン公開
必須特徴量を追加破壊的モデル利用前に特徴量をデプロイ
名前変更破壊的旧名と新名を一時的に二重書き
型変更破壊的新しい特徴量名にする
意味変更型が同じでも破壊的新バージョンと所有者承認
default変更危険missingが多いスライスを評価

特徴量の意味が変わるなら、型が同じでも新しい名前にする方が安全です。


障害モード

学習・サービング間のズレ

オフラインSQLとオンライン変換が少しずつ違っていく問題です。

対策: 1つの特徴量定義から両方を生成するか、オンラインリクエストをオフラインパイプラインで再計算して比較します。

古いオンライン特徴量

オンラインストアは動いているが更新が止まっている状態です。

対策: 特徴量グループごとの最新更新時刻を監視し、鮮度予算を超えたらフォールバックします。

ホットエンティティ

人気ユーザー、人気商品、大規模加盟店などがオンラインストアのホットキーになります。

対策: ローカルキャッシュ、時間窓でのキー分割、集約特徴量の事前計算を使います。


Build vs Buy

状況単純パイプラインフィーチャーストア
単一オフラインモデル適している通常不要
多数モデルが特徴量を共有不向き適している
オンライン低レイテンシ参照場合による適している
リネージが必要な規制領域不向き適している
プラットフォーム所有者がいない適している管理サービス以外は危険

所有者のないフィーチャーストアは、ただの追加データベースになります。


運用メトリクス

メトリクス目的
特徴量鮮度ラグ反映停止を検出
オンライン参照レイテンシ予測p99に影響
参照ミス率キー設計やバックフィル漏れを検出
NULL/default率ソース回帰を検出
オフライン/オンライン差分ズレを検出
特徴量利用数削除と所有者管理に使う

重要なポイント

  1. フィーチャーストアは一貫性システムである。
  2. 時点整合性は未来情報リークを防ぐ。
  3. 特徴量鮮度はSLOとして監視する。
  4. 保存先は違っても意味論は一致させる。
  5. 特徴量の所有者と廃止計画は信頼性の一部。

参考文献

  1. Feast Documentation
  2. Data Validation for Machine Learning
  3. Hidden Technical Debt in Machine Learning Systems
  4. Uber Michelangelo: Machine Learning Platform

MITライセンスの下で公開。Babushkaiコミュニティが構築。