ストーリー
田
田中VPoE
特徴量ストアの2層構造を理解した。最後の仕上げは「Feature Serving」—推論サービスに特徴量を提供する仕組みだ
あなた
APIで特徴量を取得するだけではないんですか?
あ
田
田中VPoE
シンプルなケースはそうだが、実運用では「特徴量の結合」「リクエスト時特徴量の計算」「キャッシュ」「フォールバック」など考慮すべきことが多い。ここを適切に設計しないと推論レイテンシが跳ね上がる
Feature Servingのアーキテクチャ
クライアント → API Gateway → 推論サービス
│
┌───────────┼───────────┐
│ │ │
オンライン リクエスト時 キャッシュ
ストア 特徴量計算 レイヤー
サービングパターン
| パターン | 説明 | レイテンシ |
|---|
| Embedded | 推論サービス内で特徴量取得 | 低(10-50ms) |
| Sidecar | サイドカーコンテナで特徴量取得 | 中(20-100ms) |
| External | 外部Feature Serviceに問い合わせ | 高(50-200ms) |
推論サービスの実装例
from feast import FeatureStore
from fastapi import FastAPI
import numpy as np
app = FastAPI()
store = FeatureStore(repo_path="./feature_repo")
model = load_model("churn_predictor_v2")
@app.post("/predict")
async def predict(customer_id: str):
# 1. オンラインストアから特徴量取得
features = store.get_online_features(
features=[
"customer_features:total_purchases",
"customer_features:avg_order_value",
"customer_features:days_since_last_order",
],
entity_rows=[{"customer_id": customer_id}],
).to_dict()
# 2. 特徴量ベクトルを構築
feature_vector = np.array([[
features["total_purchases"][0],
features["avg_order_value"][0],
features["days_since_last_order"][0],
]])
# 3. 推論実行
prediction = model.predict_proba(feature_vector)[0][1]
return {
"customer_id": customer_id,
"churn_probability": float(prediction),
"risk_level": "HIGH" if prediction > 0.7 else "MEDIUM" if prediction > 0.3 else "LOW"
}
キャッシュ戦略
| 戦略 | TTL | 用途 |
|---|
| L1キャッシュ | 秒〜分 | インメモリ(アプリ内) |
| L2キャッシュ | 分〜時間 | Redis/Memcached |
| なし | - | 常に最新値が必要な場合 |
フォールバック設計
特徴量取得に失敗した場合の対策:
| 戦略 | 説明 |
|---|
| デフォルト値 | 事前定義した中央値・最頻値を使用 |
| キャッシュ値 | 前回取得した値を再利用 |
| 簡易モデル | 特徴量が少なくても動く軽量モデルに切り替え |
| グレースフルデグラデーション | 推薦なし、など機能を制限 |
async def get_features_with_fallback(customer_id: str):
try:
features = store.get_online_features(...)
return features
except TimeoutError:
# キャッシュから取得
cached = redis_client.get(f"features:{customer_id}")
if cached:
return json.loads(cached)
# デフォルト値を返す
return DEFAULT_FEATURES
モニタリング
| メトリクス | 閾値例 | アクション |
|---|
| 取得レイテンシ | P99 < 50ms | スケールアウト |
| キャッシュヒット率 | > 80% | TTL調整 |
| Null値率 | < 1% | パイプライン調査 |
| 特徴量ドリフト | 分布変動 > 2σ | アラート発報 |
まとめ
- Feature ServingはEmbedded/Sidecar/Externalの3パターン
- キャッシュ戦略でレイテンシとコストを最適化する
- フォールバック設計で障害時の可用性を確保する
- モニタリングで品質とパフォーマンスを継続的に監視する
チェックリスト
次のステップへ
特徴量ストアの全体像を理解したら、演習でFeastを使った特徴量ストアの構築に挑戦しましょう。
推定読了時間: 30分