Scalabilité de l'ingénierie des features avec Feast et Ray pour des modèles de propension client
Dans le cadre d’un projet visant à développer des modèles de propension à l’achat pour prédire les achats futurs des clients, j’ai rencontré des défis classiques liés à l’ingénierie des caractéristiques (features), résumés en deux grandes catégories : une gestion insuffisante des features et une latence élevée dans leur traitement. Cet article explique clairement l’utilisation combinée de Feast, un feature store open-source, et de Ray, un cadre de calcul distribué, pour scaler efficacement les pipelines d’ingénierie des features dans des environnements de machine learning (ML) en production. Le scénario d’exemple vise à construire un modèle de propension à l’achat sur 30 jours, en utilisant le jeu de données UCI Online Retail (décembre 2010 – décembre 2011), qui contient des transactions d’un détaillant britannique. Les caractéristiques sont limitées à des métriques RFM (Recency, Frequency, Monetary Value) et des indicateurs comportementaux, calculées sur une fenêtre de 90 jours avant chaque date de découpage (cutoff), tandis que les étiquettes de prédiction (achat ou non, sur 30 jours suivants) sont générées après chaque cutoff. Ces découpages, espacés de 30 jours, produisent neuf snapshots temporels. Feast agit comme un entrepôt centralisé de caractéristiques, servant de source unique de vérité pour l’entraînement et le déploiement. Il gère les métadonnées, les versions et l’accessibilité des features, avec une architecture qui sépare la transformation des données (hors de Feast) de la gestion des features. Il supporte à la fois les features en ligne (réel temps) et hors ligne (batch), avec une focalisation ici sur les secondes, adaptées au cas d’usage. Les features hors ligne sont appelées « historiques » dans Feast. Ray, quant à lui, est un framework distribué open-source conçu pour scaler les applications ML, de la machine unique au cluster. Son composant Ray Core permet d’exécuter en parallèle des fonctions Python comme des tâches distribuées, optimisant l’utilisation des ressources. Dans ce pipeline, Ray est utilisé pour paralléliser le traitement des 90 jours de fenêtres de calcul, chaque fenêtre étant traitée indépendamment. La mise en œuvre commence par l’installation des dépendances Python (feast[ray], ray, scikit-learn, xgboost, etc.) et le lancement d’un conteneur PostgreSQL via Docker pour héberger le registre de features. Les données sont nettoyées et préparées, puis une fonction compute_features_for_cutoff est définie avec le décorateur @ray.remote pour être exécutée en tant que tâche distribuée. Ray exécute ces tâches en parallèle sur les cœurs disponibles, réduisant considérablement le temps de traitement. Ensuite, le registre Feast est configuré via des objets Python représentant les entités (ex : customer_id), les sources de données (avec champ timestamp_field essentiel pour la correction temporelle), et les feature views (RFM et comportementales). Le fichier feature_store.yaml définit les infrastructures : PostgreSQL pour le registre, Ray pour le stockage hors ligne. La commande feast apply synchronise les définitions avec le registre. Pour l’entraînement, une entity spine (liste de customer_id et event_timestamp) est créée, puis les features sont récupérées via un jointure point-in-time correcte entre la spine et les tables de features dans Feast. Ce processus est identique pour l’inférence, où les dates de découpage diffèrent, mais la cohérence du feature store garantit une uniformité des caractéristiques. En somme, l’association de Feast et Ray permet de surmonter les limitations classiques de gestion et de performance de l’ingénierie des features. Feast assure la centralisation, la traçabilité et la réutilisabilité, tandis que Ray apporte la scalabilité via le calcul distribué. Cette combinaison est essentielle pour déployer des pipelines ML robustes, reproductibles et performants à grande échelle. Évaluation : Des experts du secteur soulignent que l’adoption de tels outils est devenue une norme dans les écosystèmes ML matures. Des entreprises comme Airbnb, Uber ou Netflix utilisent des architectures similaires pour gérer des milliards de features. Feast, avec son intégration native à Ray, offre une solution flexible, évolutive et adaptée aux environnements cloud. Son adoption réduit les silos de données, améliore la collaboration entre équipes data et ML, et accélère le cycle de développement des modèles.
