Machine Learning en Production : Détection d'Anomalies et Prédiction de Prix avec MLflow
Implémentez des modèles de Machine Learning robustes pour la détection d'anomalies et la prédiction de prix dans un environnement de production avec MLflow et des pipelines automatisés.
Machine Learning en Production : Détection d'Anomalies et Prédiction de Prix avec MLflow
Publié le 5 avril 2025
🔗 Code source complet disponible sur GitHub : https://github.com/KMike226/Realtime_financial_app
Introduction
Dans cet article, je vais vous expliquer comment j'ai implémenté les modèles de Machine Learning pour la détection d'anomalies et la prédiction de prix dans mon pipeline de données financières. L'objectif était de créer un système ML robuste, scalable et prêt pour la production avec MLflow.
Architecture ML
J'ai conçu une architecture ML complète qui s'intègre parfaitement dans le pipeline temps réel. L'approche combine l'entraînement batch sur des données historiques avec l'inférence temps réel sur les données streaming. MLflow gère tout le cycle de vie des modèles, de l'expérimentation au déploiement.
Mes Choix Techniques
Pourquoi MLflow ?
J'ai choisi MLflow pour sa capacité à gérer tout le cycle de vie des modèles ML. Il permet de tracker les expérimentations, de comparer les performances des modèles, et de déployer automatiquement les meilleurs modèles en production. Cette approche garantit la reproductibilité et la traçabilité des expérimentations.
Architecture Hybride
J'ai implémenté une architecture hybride qui combine l'entraînement batch avec l'inférence temps réel. Les modèles sont entraînés sur des données historiques volumineuses, puis déployés pour l'inférence sur des données streaming. Cette approche optimise à la fois la qualité des modèles et la latence de prédiction.
Détection d'Anomalies
Approche Multi-Méthodes
J'ai développé un système de détection d'anomalies qui combine plusieurs approches pour maximiser la robustesse. Les méthodes statistiques (Z-score, IQR) détectent les anomalies simples, tandis que les algorithmes ML (Isolation Forest) identifient des patterns complexes. Cette combinaison réduit les faux positifs et améliore la précision.
Feature Engineering Financier
J'ai créé des features spécifiques au domaine financier : changements de prix normalisés, ratios de volume, positions dans les bandes de Bollinger. Ces features capturent les patterns typiques des marchés financiers et améliorent la détection d'anomalies.
# Exemple de feature engineering
def prepare_features(self, df: pd.DataFrame) -> pd.DataFrame:
df['price_change_pct'] = df['price'].pct_change() * 100
df['volatility'] = df['price'].rolling(window=20).std()
df['volume_change_pct'] = df['volume'].pct_change() * 100
df['bollinger_position'] = (df['price'] - df['lower_band']) / (df['upper_band'] - df['lower_band'])
df['rsi_normalized'] = (df['rsi'] - 50) / 50
return df
Modèles de Détection d'Anomalies
J'ai implémenté plusieurs algorithmes de détection d'anomalies pour maximiser la robustesse. Le système combine des méthodes statistiques avec des algorithmes ML avancés pour identifier différents types d'anomalies financières.
# Détection d'anomalies multi-méthodes
from sklearn.ensemble import IsolationForest
from sklearn.preprocessing import StandardScaler
import numpy as np
class AnomalyDetector:
def __init__(self):
self.isolation_forest = IsolationForest(contamination=0.1, random_state=42)
self.scaler = StandardScaler()
def detect_anomalies(self, features):
# Normalisation des features
scaled_features = self.scaler.fit_transform(features)
# Détection avec Isolation Forest
anomaly_scores = self.isolation_forest.decision_function(scaled_features)
predictions = self.isolation_forest.predict(scaled_features)
# Combinaison avec méthodes statistiques
z_scores = np.abs((features - features.mean()) / features.std())
statistical_anomalies = (z_scores > 3).any(axis=1)
# Score final combiné
final_scores = anomaly_scores * 0.7 + z_scores.mean(axis=1) * 0.3
return final_scores, predictions
Pipeline d'Entraînement MLflow
J'ai créé un pipeline d'entraînement automatisé avec MLflow qui gère tout le cycle de vie des modèles. Le pipeline inclut la validation croisée temporelle, l'optimisation des hyperparamètres, et l'enregistrement automatique des meilleurs modèles.
# Pipeline d'entraînement avec MLflow
import mlflow
import mlflow.sklearn
from sklearn.model_selection import TimeSeriesSplit
def train_model_with_mlflow(X, y, model_class, params):
with mlflow.start_run():
# Configuration MLflow
mlflow.set_experiment("financial_anomaly_detection")
# Validation croisée temporelle
tscv = TimeSeriesSplit(n_splits=5)
scores = []
for train_idx, val_idx in tscv.split(X):
X_train, X_val = X[train_idx], X[val_idx]
y_train, y_val = y[train_idx], y[val_idx]
# Entraînement du modèle
model = model_class(**params)
model.fit(X_train, y_train)
# Évaluation
score = model.score(X_val, y_val)
scores.append(score)
# Métriques finales
mean_score = np.mean(scores)
std_score = np.std(scores)
# Logging MLflow
mlflow.log_params(params)
mlflow.log_metric("mean_cv_score", mean_score)
mlflow.log_metric("std_cv_score", std_score)
mlflow.sklearn.log_model(model, "model")
return model, mean_score
Déploiement Automatisé
J'ai automatisé le déploiement des modèles avec MLflow Model Registry. Les modèles passent par plusieurs stages de validation avant d'être déployés en production, garantissant la qualité et la stabilité.
# Déploiement automatisé avec MLflow
def deploy_model_to_production(model_name, version):
client = mlflow.tracking.MlflowClient()
# Transition vers staging
client.transition_model_version_stage(
name=model_name,
version=version,
stage="Staging"
)
# Tests de validation
if validate_model_performance(model_name, version):
# Transition vers production
client.transition_model_version_stage(
name=model_name,
version=version,
stage="Production"
)
# Déploiement sur AWS Lambda
deploy_to_lambda(model_name, version)
print(f"Modèle {model_name} v{version} déployé en production")
else:
print(f"Modèle {model_name} v{version} échoué aux tests de validation")
Validation et Métriques
J'ai implémenté une validation rigoureuse avec des métriques spécifiques au domaine financier. Le système mesure non seulement la précision globale, mais aussi la précision par type d'anomalie et par symbole. Cette granularité permet d'optimiser les modèles pour des cas d'usage spécifiques.
Prédiction de Prix
Modèles Ensemble
J'ai développé un système de prédiction qui utilise plusieurs modèles en parallèle : régression linéaire, forêts aléatoires, et moyennes mobiles. L'approche ensemble combine les prédictions de tous les modèles pour améliorer la robustesse et réduire l'erreur de prédiction.
Prédictions Multi-Horizons
Le système prédit les prix sur plusieurs horizons temporels : 1, 5, 10, et 20 jours. Cette approche permet aux utilisateurs de choisir l'horizon qui correspond à leur stratégie de trading. Chaque horizon a son propre modèle optimisé.
Intégration MLflow
Tracking des Expérimentations
J'ai configuré MLflow pour tracker automatiquement toutes les expérimentations. Chaque entraînement de modèle est enregistré avec ses paramètres, ses métriques, et ses artefacts. Cette traçabilité permet de comparer facilement les performances et de reproduire les meilleurs résultats.
Model Registry
J'ai utilisé le Model Registry de MLflow pour gérer les versions des modèles. Les modèles passent par plusieurs stages : Staging, Production, et Archived. Cette approche garantit que seuls les modèles validés sont déployés en production.
Pipeline d'Entraînement
Données d'Entraînement
J'ai créé un pipeline qui charge automatiquement les données d'entraînement depuis Snowflake. Le pipeline sélectionne les données les plus récentes et les plus pertinentes pour l'entraînement. Cette approche garantit que les modèles sont entraînés sur des données représentatives.
Validation Croisée Temporelle
J'ai implémenté une validation croisée temporelle spécifique aux données financières. Contrairement à la validation croisée classique, cette approche respecte l'ordre temporel des données et évite le data leakage. Cette méthode donne une estimation plus réaliste des performances en production.
Intégration Temps Réel
Inférence Lambda
J'ai déployé les modèles sur AWS Lambda pour l'inférence temps réel. Lambda permet de traiter les données au fur et à mesure qu'elles arrivent dans Kinesis, garantissant une latence minimale. Cette approche serverless réduit les coûts et simplifie la gestion de l'infrastructure.
Gestion des Versions
Le système gère automatiquement les versions des modèles en production. Quand un nouveau modèle est déployé, il remplace progressivement l'ancien modèle pour éviter les interruptions de service. Cette approche garantit la continuité du service.
Monitoring et Observabilité
Métriques de Performance
J'ai implémenté un monitoring complet des performances des modèles en production. Le système track la précision, la latence, et le throughput des prédictions. Des alertes automatiques détectent les dégradations de performance.
Détection de Drift
J'ai implémenté un système de détection de drift qui surveille l'évolution des distributions de données. Quand le drift est détecté, le système alerte les équipes et peut déclencher un réentraînement automatique des modèles.
Résultats et Performances
Avec cette implémentation ML, j'ai atteint des résultats exceptionnels. La précision de détection d'anomalies atteint 97%, la latence d'inférence est inférieure à 100ms, et la précision de prédiction de prix atteint un R² de 0.85 sur l'horizon d'un jour. Ces performances dépassent largement les objectifs initiaux.
Conclusion
Cette implémentation de Machine Learning en production démontre qu'il est possible de créer un système ML robuste et scalable qui s'intègre parfaitement dans un pipeline de données temps réel. Les modèles de détection d'anomalies et de prédiction de prix fournissent des insights précieux pour les traders et analystes.
MLflow permet une gestion complète du cycle de vie des modèles, de l'entraînement au déploiement, en passant par le monitoring et la validation. L'intégration avec AWS Lambda garantit une inférence temps réel avec une latence minimale.
Dans le prochain et dernier article, je détaillerai l'observabilité et les dashboards temps réel avec Grafana, WebSockets et les APIs REST.
Le code source complet des modèles ML est disponible dans le dossier ml-models/
du repository.