HyperAI
Back to Headlines

MLarena : Une Boîte à Outils ML Agnostique pour Simplifier vos Pipelines Machine Learning

il y a 2 jours

Présentation de MLarena : Une Boîte à Outils Algorithm-Agnostic pour le Machine Learning Contexte et Objectif MLarena est une boîte à outils de machine learning (ML) en Python, conçue pour être algorithm-agnostic, c’est-à-dire capable de fonctionner avec différents algorithmes et cadres sans nécessiter de modifications importantes. Initialement présentée dans deux articles précédents sur Towards Data Science (TDS), cette framework s'est développée considérablement, devenant un outil complet pour la formation, l'évaluation, et l'optimisation de modèles ML. MLarena est maintenant disponible en tant que bibliothèque open-source sur GitHub. Caractéristiques Principales 1. Une Interface Légère pour la Formation et l'Évaluation Une des principales difficultés dans les pipelines de ML est la quantité de code de base (boilerplate) nécessaire pour construire un pipeline fonctionnel, particulièrement lors de l'alternance entre différents algorithmes ou cadres. MLarena propose une interface légère qui standardise ce processus tout en restant compatible avec des estimateurs au style scikit-learn. Exemple d'utilisation du MLPipeline : ```python from mlarena import MLPipeline, PreProcessor Définir le pipeline mlpipeline_rf = MLPipeline( model=RandomForestClassifier(), # Compatible avec tout algorithme au style scikit-learn preprocessor=PreProcessor() ) Adapter le pipeline mlpipeline_rf.fit(X_train, y_train) Prédire et évaluer results = mlpipeline_rf.evaluate(X_test, y_test) ``` Cette interface intègre des étapes de prétraitement courantes, la formation de modèles et l'évaluation. Elle détecte automatiquement le type de tâche (classification ou régression) et applique des métriques appropriées, tout en générant un rapport diagnostique complet. Rapport d'évaluation pour les modèles de classification : - Paramètres d'évaluation : - Seuil : 0.500 - Beta : 1.000 - Métriques de performance clés : - Précision globale : 0.805 - AUC : 0.876 - Log Loss : 0.464 - Précision : 0.838 - Rappel : 0.703 - F1 Score : 0.765 - MCC : 0.608 - Distribution des prédictions : - Taux positif : 0.378 - Taux de base : 0.450 Rapport d'évaluation pour les modèles de régression : - Métriques d'erreur : - RMSE : 0.460 - MAE : 0.305 - Médiane AE : 0.200 - NRMSE moyen : 22.4% - NRMSE standard : 40.2% - NRMSE intervalle interquartile : 32.0% - MAPE : 17.7% - SMAPE : 15.9% - Qualité du modèle : - R² : 0.839 - R² ajusté : 0.838 - Amélioration par rapport à la ligne de base : - Amélioration par rapport à la moyenne : 59.8% - Amélioration par rapport à la médiane : 60.9% En cas de problèmes sous-jacents, le rapport diagnostique met en garde contre des éléments comme un faible ratio échantillon-caractéristiques, une fuite de données, ou un déséquilibre des classes. 1.1 Diagnostic des Modèles MLarena génère des rapports diagnostiques complets pour les modèles de classification et de régression. Pour les modèles de classification, le rapport inclut des métriques essentielles comme l'AUC, la matrice de confusion et des graphiques de précision-rappel-threshold. Ces visuels sont utiles pour les diagnostics techniques et les discussions autour de la sélection du seuil avec les experts du domaine. Pour les modèles de régression, les métriques et les visuels sont adaptés automatiquement. Le rapport met en garde également contre des problèmes potentiels comme un ratio faible entre les échantillons et les caractéristiques. 1.2 Interprétabilité Intégrée L'interprétabilité est cruciale dans les projets de ML pour plusieurs raisons : - Sélection de modèles : Elle aide à choisir le meilleur modèle en évaluant la pertinence de sa logique. - Dépannage : Analyser la logique du modèle peut aider à identifier et corriger les erreurs. - ** Surveillance : Monitorer la logique du modèle en production fournit des informations précieuses sur sa fiabilité. - Implémentation :** Fournir des explications aux utilisateurs finaux améliore la rétention et l'adoption. Méthodes d'interprétation : python mlpipeline.explain_model(X_test) mlpipeline.explain_case(5) La méthode explain_model offre des explications globales sur les caractéristiques les plus influentes, tandis que explain_case fournit des explications locales pour chaque prédiction spécifique. 1.3 Reproductibilité et Déploiement Sans Effort Supplémentaire La reproductibilité et la production-readiness sont essentielles. MLarena, en tant que modèle personnalisé mlflow.pyfunc, permet de packagager l'ensemble du pipeline, y compris les étapes de prétraitement et le modèle formé, en un artefact portable. Exemple de logging : python results = mlpipeline_rf.evaluate( X_test, y_test, log_model=True # Loguer le pipeline avec MLflow ) Ce processus garantit le suivi des expériences et facilite le déploiement, en éliminant le besoin de codage supplémentaire pour le suivi ou la sérialisation. Optimisation des Modèles avec Efficacité et Stabilité 2.1 Optimisation des Hyperparamètres avec Arrêt Précoce et Contrôle de la Variance L'optimisation des hyperparamètres est souvent coûteuse en ressources. MLarena utilise l'optimisation bayésienne, une stratégie efficace qui s'adapte en fonction des résultats précédents, et ajoute des garde-fous pour éviter les pièges communs comme le surapprentissage ou une couverture incomplete de l'espace de recherche. Exemple d'optimisation : ```python lgb_param_ranges = { 'learning_rate': (0.01, 0.1), 'n_estimators': (100, 1000), 'num_leaves': (20, 100), 'max_depth': (5, 15), 'colsample_bytree': (0.6, 1.0), 'subsample': (0.6, 0.9) } best_pipeline = MLPipeline.tune( X_train, y_train, algorithm=lgb.LGBMClassifier, preprocessor=PreProcessor(), param_ranges=lgb_param_ranges, max_evals=500, early_stopping=50, n_startup_trials=5, n_warmup_steps=0, cv=5, cv_variance_penalty=0.3 ) ``` Contrôle de la Variance : MLarena pénalise la variation des performances entre les plis de la validation croisée, favorisant ainsi la stabilité du modèle en production. Par exemple, pour deux modèles ayant le même AUC moyen de 0.85 mais des variations différentes (0.02 et 0.10), le modèle avec une variation plus faible sera sélectionné. 2.2 Feedback Visuel Pour Raffiner l'Espace de Recherche La conception d'un espace de recherche de hyperparamètres efficace est un autre goulot d'étranglement. MLarena inclut un graphique en coordonnées parallèles qui visualise les relations entre les valeurs des hyperparamètres et les performances du modèle, aidant à raffiner l'espace de recherche itérativement. Exemple d’affichage : python best_pipeline = MLPipeline.tune( X_train, y_train, algorithm=lgb.LGBMClassifier, preprocessor=PreProcessor(), param_ranges=lgb_param_ranges, visualize=True ) 2.3 Choix du Bon Métrique L'objectif de l'optimisation des hyperparamètres n'est pas toujours le même. MLarena supporte une large gamme de métriques pour les tâches de classification et de régression, et gère automatiquement les directions d'optimisation (maximisation ou minimisation). Sélection de métrique : python best_pipeline = MLPipeline.tune( X_train, y_train, algorithm=lgb.LGBMClassifier, preprocessor=PreProcessor(), param_ranges=lgb_param_ranges, tune_metric="f1" ) Gestion des Défis de Prétraitement dans la Pratique 3.1 Encodage des Caractéristiques Catégorielles à Haute Cardinalité Les caractéristiques catégorielles à haute cardinalité posent des défis : l'une-chaude encoding peut créer de nombreuses colonnes creuses. Le target encoding offre une solution compacte, remplissant les catégories par des moyennes lissées de la variable cible. Exemple d’encodage target : ```python preprocessor = PreProcessor( target_encode_cols=['city'], target_encode_smooth='auto' ) Visualiser les effets de l'encodage PreProcessor.plot_target_encoding_comparison( X_train, y_train, target_encode_col='city', smooth_params=['auto', 10, 20] ) ``` 3.2 Identification et Elimination des Caractéristiques Non Utiles Le surcharge de caractéristiques peut réduire la performance et l'interprétabilité. La méthode filter_feature_selection aide à éliminer les caractéristiques inutiles. Exemple de sélection de caractéristiques : python filter_fs = PreProcessor.filter_feature_selection( X_train, y_train, task='classification', missing_threshold=0.2, mi_threshold=0.05 ) Résumé de la sélection de caractéristiques : - Total caractéristiques analysées : 7 - Ratio de manquants élevé (>20.0%) : 0 colonnes - Valeur unique : 1 colonne (occupation) - Mutuelle information faible (<0.05) : 3 colonnes (âge, seniority, occupation) - Recommandations abandon : 3 colonnes 3.3 Prévention des Erreurs en Sanitizant les Noms des Colonnes Les colonnes de dates ne sont pas toujours nettes et bien formatées, ce qui peut causer des erreurs en aval. MLarena nettoie les noms des colonnes par défaut. Exemple de transformation des dates : ```python import mlarena.utils.data_utils as dut df_raw = pd.DataFrame({ "date": ["25Aug2024", "15OCT2024", "01Dec2024"] }) df_transformed = dut.transform_date_cols(df_raw, 'date', "%d%b%Y") ``` Sanitisation des noms de colonnes : python preprocessor = PreProcessor(sanitize_feature_names=True) Résolution des Défis quotidiens dans la Pratique du ML 4.1 Analyse de Seuil pour les Problèmes de Classification Les modèles de classification binaires fournissent des probabilités, mais les décisions réelles nécessitent un seuil pour distinguer les positifs des négatifs. La méthode threshold_analysis permet d'identifier le seuil optimal. Exemple d'analyse de seuil : ```python results = MLPipeline.threshold_analysis( y_train, y_pred_proba, beta=0.8, method="bootstrap", bootstrap_iterations=100 ) best_pipeline.evaluate( X_test, y_test, beta=0.8, threshold=results['optimal_threshold'] ) ``` 4.2 Communication Claire via la Visualisation Des visualisations solides sont essentielles pour engager les parties prenantes et valider les résultats. MLarena inclut des fonctions de tracé conçues pour l'interprétabilité et la clarté. Comparaison des distributions entre groupes : ```python import mlarena.utils.plot_utils as put fig, ax, results = put.plot_box_scatter( data=df, x="item", y="value", title="Boxplot avec Superposition de Points (Démonstration)", point_size=2, stat_test="anova", show_stat_test=True ) ``` Visualisation de la distribution temporelle : python fig, ax = put.plot_distribution_over_time( data=df, x='timestamp', y='heart_rate', freq='h', point_hue=None, title='Distribution de la Fréquence Cardiaque Au Fil Du Temps' ) 4.3 Utilitaires pour la Manipulation des Données Nettoyer et dépanner les données réelles est une tâche chronophage. MLarena comprend des utilitaires pour simplifier ce processus. Nettoyage des formats de dates inconsistants : python df_transformed = dut.transform_date_cols(df, 'date', "%d%b%Y") Vérification des clés primaires : ```python df = pd.DataFrame({ 'id': [1, 2, 3, 4, 5], 'category': ['A', 'B', 'A', 'B', 'C'], 'date': ['2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02', '2024-01-03'], 'code': ['X1', None, 'X3', 'X4', 'X5'], 'value': [100, 200, 300, 400, 500] }) Vérification pour une colonne avec des valeurs manquantes print(dut.is_primary_key(df, ['code', 'date'])) ``` Conclusion MLarena est un projet open-source destiné à simplifier et améliorer les pipelines de machine learning, en offrant des outils robustes pour la formation, l'évaluation, l'optimisation et la préparation des données. Cette initiative a permis de bridgegap entre l'automatisation et l'expertise technique, en offrant des fonctionnalités flexibles et adaptées aux besoins réels des praticiens de la data science. Évaluation de l'Industrie MLarena est vu comme une solution prometteuse par les professionnels de l'industrie, répondant aux besoins croissants de flexibilité et d'efficacité dans le développement de modèles ML. Les entreprises se tournent vers des outils plus intégrés et automatisés pour gagner en rapidité d'itération tout en conservant la transparence et l'interprétabilité. Profil de l'Entreprise MLarena est maintenu par un auteur passionné de data science et ML, qui continue à collaborer avec la communauté pour améliorer et élargir les fonctionnalités de la bibliothèque. Suivez les développements futurs sur Medium, LinkedIn, GitHub, et Twitter.

Related Links