Что такое Feature Store?

«Что такое Feature Store?» — вопрос из категории Моделирование данных и DWH, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Feature Store — это централизованное хранилище для управления, версионирования, контроля доступа и сервировки признаков (фич), используемых в машинном обучении. Он решает ключевые проблемы промышленного ML: обеспечивает согласованность фич между этапами обучения модели и её эксплуатации (serving), предотвращает дублирование кода и данных, а также ускоряет разработку за счет повторного использования признаков.

Основные функции и преимущества:

  • Согласованность (Consistency): Исключает train/serve skew, предоставляя один и тот же набор фич для обучения и инференса через единый API.
  • Управление и версионирование: Хранит не только сами фичи, но и их метаданные (источник, описание, владелец), а также версии, что критично для воспроизводимости экспериментов.
  • Производительность: Оптимизирован для низколатентного доступа к фичам в реальном времени (online store) и для пакетной обработки больших объемов данных для обучения (offline store).
  • Интеграция: Работает с экосистемой данных (Spark, Flink, Kafka) и ML-фреймворками (TensorFlow, PyTorch, scikit-learn).

Пример работы с Feast (популярный open-source Feature Store):

# 1. Определение сущности и фичи в feature_store.yaml
from feast import Entity, Feature, FeatureView, ValueType
from feast.infra.offline_stores.contrib.postgres_offline_store.postgres_source import PostgreSQLSource

# Источник данных
user_source = PostgreSQLSource(
    table="user_profiles",
    event_timestamp_column="created_at",
)

# Сущность
user = Entity(name="user_id", value_type=ValueType.INT64)

# Feature View - логическая группировка фич
user_profile_view = FeatureView(
    name="user_profile_features",
    entities=[user],
    ttl=timedelta(days=365),
    source=user_source,
    online=True,
    features=[
        Feature(name="age", dtype=ValueType.INT32),
        Feature(name="avg_transaction_value_30d", dtype=ValueType.FLOAT),
    ]
)

# 2. Получение фич для обучения (оффлайн-режим)
from feast import FeatureStore
store = FeatureStore(repo_path=".")

# Исторические фичи для датасета
entity_df = pd.DataFrame({"user_id": [1001, 1002, 1003], "event_timestamp": pd.to_datetime(["2023-12-01", "2023-12-01", "2023-12-01"])})
training_df = store.get_historical_features(
    entity_df=entity_df,
    features=["user_profile_features:age", "user_profile_features:avg_transaction_value_30d"]
).to_df()

# 3. Получение фич для инференса в реальном времени (онлайн-режим)
feature_vector = store.get_online_features(
    features=["user_profile_features:age", "user_profile_features:avg_transaction_value_30d"],
    entity_rows=[{"user_id": 1001}]
).to_dict()

Популярные решения: Feast, Hopsworks, Tecton (коммерческий), Vertex AI Feature Store (от Google Cloud).