Chapitre 2 : Ingénierie des caractéristiques à grande échelle
Magasins de caractéristiques
Les magasins de caractéristiques centralisent le calcul et la diffusion des caractéristiques, assurant la cohérence entre l'entraînement et l'inférence.
Exemple de Feast
from feast import FeatureStore, Entity, Feature, ValueType, FeatureView
from feast.infra.offline_stores.file_source import FileSource
# Définir l'entité
customer = Entity(
name="customer_id",
value_type=ValueType.STRING,
description="Identifiant du client"
)
# Définir la vue des caractéristiques
customer_features = FeatureView(
name="customer_features",
entities=["customer_id"],
ttl=timedelta(days=1),
features=[
Feature(name="total_purchases", dtype=ValueType.FLOAT),
Feature(name="days_since_last_login", dtype=ValueType.INT64),
Feature(name="account_age_days", dtype=ValueType.INT64),
],
online=True,
source=FileSource(path="data/customer_features.parquet")
)
# Obtenir les caractéristiques pour l'entraînement
store = FeatureStore(repo_path=".")
training_df = store.get_historical_features(
entity_df=entity_df,
features=["customer_features:total_purchases", "customer_features:days_since_last_login"]
).to_df()
# Obtenir les caractéristiques pour l'inférence (en ligne)
online_features = store.get_online_features(
features=["customer_features:total_purchases"],
entity_rows=[{"customer_id": "CUS-12345"}]
).to_dict()
Caractéristiques en ligne vs hors ligne
| Type | Objectif | Latence | Stockage |
|---|---|---|---|
| Hors ligne | Entraînement | Minutes | Entrepôt de données |
| En ligne | Inférence | Millisecondes | Redis, DynamoDB |
Points clés
Résumé
- Les magasins de caractéristiques assurent la cohérence entre l'entraînement et la diffusion
- Séparer les magasins en ligne/hors ligne pour différents besoins de latence
- Versionner les caractéristiques comme le code et les données