Étude de cas : système de recommandation
L'énoncé
« Concevez les recommandations produit de la page d'accueil d'un e-commerce (5 M d'utilisateurs, 500 k produits, budget 30 ms). » Déroulons le canevas.
1-2. Produit & formulation
Décision : quels 10 produits afficher, à chaque chargement. Métrique produit : taux de clic/achat des recommandations. Formulation ML : un ranking — pas une classification. Label d'entraînement : les interactions passées (clic, achat) — gratuit et massif, mais biaisé : on n'observe que ce qui a été montré (feedback loop — un système qui recommande toujours les mêmes best-sellers s'auto-renforce).
3-5. L'architecture standard : deux étages
Scorer 500 k produits par requête en 30 ms est impossible. Le pattern universel (YouTube, Amazon, TikTok) :
[Retrieval] 500 000 → ~500 candidats rapide, approximatif, PRÉCALCULÉ
• embeddings produits/utilisateur (two-tower) + recherche ANN (HNSW)
• + heuristiques : populaires de la catégorie, ré-achat, similaires au panier
[Ranking] 500 → 10 précis, EN LIGNE, features riches
• gradient boosting ou petit réseau (module 5 : le tabulaire !)
• features : utilisateur × produit × contexte (heure, device…)
• lookup feature store (leçon 9.1), inférence ~5 ms
Le cold start : les nouveaux, sans historique
- Nouvel utilisateur : recommandations par popularité + contexte (géo, device), puis bascule progressive vers le personnalisé ;
- Nouveau produit : embeddings de contenu (titre, image, catégorie) au lieu des interactions — d'où l'intérêt des modèles multimodaux ;
- et l'exploration : réserver ~5 % du trafic à des candidats hors des sentiers battus (bandits) pour casser la boucle de renforcement.
6. La boucle de vie
- A/B test obligatoire : la métrique offline (AUC du ranker) ne prédit qu'imparfaitement le CTR réel ;
- embeddings recalculés chaque nuit (batch), ranker réentraîné chaque semaine, monitoring du CTR par segment ;
- attention au drift saisonnier (Noël !) — le monitoring de distribution par catégorie le voit venir.
Pourquoi deux étages (retrieval puis ranking) ?