Ответ
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).