Auto-ML — Recommandation adaptative de modèle

PythonScikit-learnRiverPandasFastAPIPlotly/Dash· 4 min de lecture

Un service d'Auto-ML toujours actif qui réévalue en continu plusieurs modèles candidats sur un flux de données en temps réel et bascule vers celui qui performe le mieux à l'instant T — sans intervention humaine, même quand la distribution des données sous-jacentes évolue avec le temps.

Le problème et les contraintes

Les modèles statiques se dégradent silencieusement à mesure que les données dérivent : un modèle entraîné une fois sur des données historiques devient progressivement moins précis à mesure que les schémas réels évoluent (dérive conceptuelle) ou varient selon la saison. Réentraîner ou remplacer les modèles selon un calendrier fixe est à la fois lent et aveugle au moment exact où un changement survient. L'objectif était un service capable de détecter la dérive par lui-même et de se réoptimiser sans qu'on ait besoin de surveiller un tableau de bord.

Approche

  • Toutes les quelques minutes, le service réévalue un pool de modèles candidats (Hoeffding Tree, k-NN, SGD, Random Forest, entre autres) sur la fenêtre la plus récente du flux en direct.
  • Deux détecteurs de dérive — ADWIN et Page-Hinkley (via la bibliothèque river) — surveillent le taux d'erreur et signalent un changement statistiquement significatif, ce qui déclenche une réévaluation en dehors du calendrier normal.
  • Le modèle le plus performant à chaque vérification devient le modèle actif ; le changement est journalisé pour que l'historique soit auditable, pas silencieux.
  • Un tableau de bord en temps réel (FastAPI + Plotly/Dash) affiche les métriques qui comptent pour faire confiance au système : précision/F1 glissants, historique des changements de modèle, latence d'inférence, et utilisation CPU/RAM.
errorerrorflagflaglive streamactive modelpredicts + scoresADWINadaptive windowslower on abruptPage-Hinkleyfast on suddennoisy on gradualre-evaluationfixed candidate poolswap + logged

Description complète :

  1. live stream → active model — predicts + scores
  2. active model — predicts + scores → ADWIN — adaptive window — slower on abrupt (error)
  3. active model — predicts + scores → Page-Hinkley — fast on sudden — noisy on gradual (error)
  4. ADWIN — adaptive window — slower on abrupt → re-evaluation — fixed candidate pool — swap + logged (flag)
  5. Page-Hinkley — fast on sudden — noisy on gradual → re-evaluation — fixed candidate pool — swap + logged (flag)
La boucle que le service exécute sans que personne ne la surveille. Les deux détecteurs sont dessinés séparément parce que faire tourner les deux, plutôt que d'en choisir un, est justement le compromis ci-dessous. La seule flèche que cette vue de gauche à droite ne peut pas tracer est le remplacement qui revient sur le modèle actif — c'est elle qui ferme la boucle.

Détection de dérive, en direct

Les deux détecteurs ci-dessus comparent une fenêtre glissante de performance récente à ce qui précédait, et signalent un changement une fois l'écart assez large pour ne plus relever du bruit. Voici cette même idée à l'œuvre, en direct, sur des données synthétiques générées dans votre navigateur :

Simulation interactive — données synthétiques générées en direct dans votre navigateur, pas des métriques de production réelles.

Compromis faits

Decision

ADWIN + Page-Hinkley plutôt qu'un détecteur unique : ADWIN adapte automatiquement la taille de sa fenêtre mais réagit plus lentement à un changement brutal ; Page-Hinkley détecte les changements soudains plus rapidement mais est plus bruyant sur une dérive progressive. Utiliser les deux couvre davantage de cas d'échec que l'un ou l'autre seul, au prix de plus de réévaluations en faux positif à calibrer.

Decision

Un pool de candidats fixe plutôt qu'une recherche de modèles illimitée : un espace de recherche Auto-ML sans restriction ralentirait le cycle de réévaluation au point de ne plus être « temps réel ». Un pool restreint de modèles rapides et bien compris, adaptés à l'apprentissage en ligne, a permis de garder la réévaluation assez légère pour tourner toutes les quelques minutes.

Résultats

Le service a maintenu une précision/F1 glissante stable à travers des scénarios simulés de dérive et de saisonnalité, avec des changements de modèle visiblement corrélés aux signaux des détecteurs dans la vue historique du tableau de bord plutôt que de survenir selon un calendrier arbitraire.

Ce que je referais différemment

Formaliser l'intervalle de réévaluation comme un paramètre ajustable et sensible à la sévérité de la dérive plutôt qu'une période fixe — réagir plus vite à une dérive sévère et de façon moins agressive au bruit mineur réduirait le renouvellement inutile de modèles.