← Retour au blog

Feature store standardiser les variables

Lucian BLETAN

Un des échecs les plus courants du machine learning en production est la divergence entre l’entraînement et l’inférence. Les données utilisées pour entraîner un modèle ne sont pas calculées de la même manière que celles fournies au modèle pour une prédiction en temps réel. Un feature store est la solution pragmatique à ce problème : c’est une bibliothèque centralisée où la logique de calcul de chaque variable (feature) est définie une seule fois. Il se charge ensuite de la matérialiser pour l’entraînement (batch) et de la servir à faible latence pour l’inférence (online).

solution: le feature store

problème: la double logique

est résolue par

code du notebook

modèle v1 entraîné

code de l'api

modèle v1 en prod

divergence silencieuse

définition unique de la feature

offline store

online store

modèle v2 entraîné

modèle v2 en prod

prérequis

  • Un entrepôt de données (data warehouse) capable de gérer des partitions temporelles.
  • Un orchestrateur (Airflow, Dagster) pour planifier les calculs en batch.
  • Un stockage clé-valeur rapide (Redis, DynamoDB) pour le service en ligne (online serving).

idées clefs

Un feature store est construit sur trois piliers fondamentaux.

3: accès unifié

2: double matérialisation

1: définition unique

registre central

de features

offline store

(gros volumes, historique)

online store

(faible latence, état actuel)

sdk ou api

pour lire les features

pas à pas

étape 1: définir une feature

La feature est définie comme du code, généralement dans un fichier de configuration. C’est le contrat qui décrit la variable, son propriétaire et ses métadonnées.

# features/definitions/nb_commandes_30j.yml
- name: user_nb_commandes_30j
  owner: team-sales
  description: "nombre de commandes passées par un utilisateur sur les 30 derniers jours."
  entity: user_id
  value_type: int64
  freshness:
    offline: 24h
    online: 1h

étape 2: calculer pour l’entraînement (offline)

Un job, généralement en SQL, est orchestré pour calculer la valeur de cette feature sur tout l’historique des données et la stocker dans l’entrepôt de données (offline store). C’est ce que les data scientists utiliseront pour entraîner leurs modèles.

-- job orchestré quotidiennement
INSERT INTO feature_store.user_nb_commandes_30j
SELECT
    user_id,
    CURRENT_DATE AS feature_date,
    COUNT(DISTINCT order_id) AS value
FROM
    raw.orders
WHERE
    order_date >= CURRENT_DATE - INTERVAL '30 day'
GROUP BY 1;

étape 3: servir pour l’inférence (online)

Un autre processus se charge de calculer la même feature à une fréquence plus élevée et de la “pousser” dans un stockage rapide (online store). Une API peut alors être interrogée par les applications pour obtenir la dernière valeur d’une feature pour une entité donnée.

# L'application appelle une API pour obtenir les features d'un utilisateur
GET /features?entity=user_id&id=xyz-789
Host: feature-store-api.internal

# Réponse JSON
{
  "user_nb_commandes_30j": 5,
  "user_panier_moyen_90j": 75.50
}

pièges frequents

  • Symptôme: Les performances du modèle en production sont bien pires que prévu.

    • Cause: La logique de calcul des features dans l’API de production n’est pas exactement la même que celle du notebook de recherche.
    • Correctif: Le feature store impose une définition unique. C’est son rôle principal.
  • Symptôme: Les features servies en ligne ne sont pas assez fraîches, ce qui cause des prédictions erronées.

    • Cause: La fraîcheur de la feature n’est pas définie ni surveillée.
    • Correctif: Chaque feature doit avoir un SLO de fraîcheur explicite (ex: “mise à jour toutes les 5 minutes”). Des alertes doivent se déclencher si ce SLO n’est pas respecté.
  • Symptôme: Risque de fuite de données car des features sensibles sont accessibles trop facilement.

    • Cause: Pas de gestion des droits d’accès au niveau des features.
    • Correctif: Le feature store doit intégrer une gestion des droits (RBAC). Une équipe marketing ne devrait pas pouvoir accéder aux features de risque crédit, par exemple.

faq

  • Est-ce qu’un feature store est juste une base de données ? Non. C’est un système complet qui gère la définition, le calcul, le stockage (offline et online), le service, la documentation et la gouvernance des features. La base de données n’est qu’un des composants.

  • Quand ai-je vraiment besoin d’un feature store ? Le signal est clair : lorsque plusieurs modèles commencent à réutiliser les mêmes variables, ou lorsque vous constatez des écarts de performance entre l’entraînement et la production. Si vous n’avez qu’un seul modèle simple, c’est probablement superflu.