Table of Contents
Leur structure transparente les rend indispensables pour des scénarios où l'interprétation est essentielle, comme la notation de crédit, le diagnostic médical et la prédiction de la curne des clients. Cependant, comme les organisations collectent des ensembles de données toujours plus larges, les implémentations traditionnelles de l'arbre de décision – conçues pour le traitement en mémoire, un nœud unique – deviennent rapidement impraticables. La formation d'un arbre sur les téraoctets de données peut épuiser la mémoire, causer des E/S sur disque prohibitif et nécessiter des heures ou des jours de calcul. C'est là que les technologies de grande diffusion, notamment Apache Spark, changent le jeu. En combinant les ensembles de données résilients (RDD) et le traitement en mémoire avec sa bibliothèque MLlib, les équipes de données peuvent échafauder les arbres de décision en ensembles de données massifs sans sacrifier l'interprétation qui les rend si précieux.
Qu'est-ce qu'un arbre de décision?
Un arbre de décision est un modèle d'apprentissage supervisé qui divise l'espace de la caractéristique en régions et attribue une prédiction à chaque région. Le modèle est construit de façon récursive : à chaque nœud interne, une règle de décision teste une caractéristique et divise les données en deux ou plusieurs branches en fonction du résultat. Le processus se poursuit jusqu'à ce qu'un critère d'arrêt soit rempli (p. ex. profondeur maximale, échantillons minimums par feuille ou seuil d'impureté).
La qualité d'une fraction est mesurée par un critère qui quantifie l'impureté ou l'hétérogénéité des nœuds d'enfants qui en résultent.
- Gini impurity (CART): mesure la probabilité de mal classifier un élément choisi au hasard lorsqu'il est étiqueté selon la distribution des classes dans le noeud.
- Entropy (ID3, C4.5) : mesure la quantité d'incertitude ou d'information dans le noeud. Le gain d'information est la réduction de l'entropie après une scission; la caractéristique qui produit le gain d'information le plus élevé est sélectionnée.
- Réduction de la variation[ (arbres de régression): utilise la variance pondérée de la cible au sein de chaque enfant; la fraction qui minimise la variance totale est choisie.
Les arbres de décision gèrent automatiquement les relations non linéaires et les interactions de caractéristiques, nécessitent un traitement minimal des données (pas de mise à l'échelle) et peuvent être visualisés comme un ensemble de règles si-alors.Ces propriétés en font un modèle de base idéal et un élément de construction pour des méthodes d'ensemble plus puissantes comme les forêts aléatoires et les arbres en dégradé.
Le défi de la scalabilité dans les données massives
Lorsque les ensembles de données atteignent des millions de lignes et des milliers de fonctionnalités, les algorithmes classiques des arbres de décision sont confrontés à des goulets d'étranglement fondamentaux:
- Contraintes de mémoire: Le tri des fonctionnalités continues pour une sélection de fractions optimale nécessite le chargement de l'ensemble de données en mémoire. Pour les ensembles de données dépassant la RAM disponible, le système d'exploitation recourt à l'échange, performance sévèrement dégradante.
- Complexité informatique[: L'évaluation de toutes les scissions possibles pour chaque fonction à chaque noeud est O(m × n] log n) dans une mise en œuvre naïve, où m est le nombre de caractéristiques et n] le nombre d'échantillons.
- Nature séquentielle: L'induction traditionnelle des arbres est intrinsèquement séquentielle, chaque noeud dépend de la décision de division de son parent. Bien que certaines parallélisations soient possibles (p. ex., l'évaluation des scissions en parallèle), l'algorithme global n'est pas bien réparti entre de nombreuses machines.
- Disk I/O: Si les données ne sont pas en mémoire, des passages répétés sur des données résidentes du disque provoquent une latence sévère.
Les cadres de données massives doivent relever ces défis par le biais du stockage distribué, du traitement parallèle et d'algorithmes approximatifs qui sacrifient une précision minimale pour des améliorations considérables de la vitesse et de l'échelle.
Apache Spark: Une centrale informatique distribuée
Apache Spark est un moteur d'analyse unifié et open source conçu pour le traitement de données à grande échelle. Ses innovations architecturales clés comprennent :
- Datasets distribués résilients (RDD): une collection d'objets tolérants aux défauts, partitionnés à travers un cluster, permettant des opérations parallèles.
- DataFrame API[: une abstraction de niveau supérieur qui organise les données en colonnes nommées, semblable à une table relationnelle, avec des optimisations intégrées à travers l'optimiseur de requête Catalyst.
- Processus de mémoire[: les données peuvent être mises en cache dans la mémoire à travers les opérations, réduisant les entrées/sorties de disque par ordre de grandeur par rapport à Hadoop MapReduce.
- MLlib: Spark=s scalable machine learning library, qui fournit des implémentations distribuées d'algorithmes communs, y compris les arbres de décision, les forêts aléatoires et les arbres de gradient. Les algorithmes MLlib sont conçus pour fonctionner sur des DDR ou des DataFrames et peuvent être intégrés dans des pipelines de bout en bout avec des pipelines ML.
Sparks est capable d'effectuer des calculs itératifs efficacement – en conservant les données en mémoire entre les passes – ce qui le rend particulièrement adapté pour la formation des arbres de décision, qui nécessitent plusieurs passes sur les données pour évaluer les candidats divisés.
Décision d'exécution Arbres avec Spark MLlib
Spark MLlib implémente les arbres de décision en utilisant une structure planaire (binaire) pour la classification et la régression. L'algorithme est parallélisé en partitionnant les données à travers le cluster et en utilisant une approche histogramme pour les caractéristiques continues. Au lieu de trier toutes les données pour trouver chaque fraction possible, les valeurs des fonctions MLlibs sont réparties en intervalles discrets (maxBins) et évalue les scissions aux limites des bin. Cette approximation réduit considérablement le coût de calcul tout en maintenant une précision élevée.
Préparation des données
Avant la formation, les données brutes doivent être transformées en un format compris par Spark. Les étapes clés comprennent :
- Indication des caractéristiques: Les caractéristiques catégoriques doivent être converties en valeurs numériques en utilisant StringIndexer. L'arborescence de décision MLlib=1 gère les caractéristiques catégoriques en traitant chaque index comme une catégorie distincte; elle peut également gérer les caractéristiques ordinales si spécifié.
- L'assemblage vectoriel caractéristique[: Toutes les colonnes de caractéristiques (numériques et catégorisées) doivent être combinées en une seule colonne vectoriel caractéristique en utilisant VectorAssembler.
- Encodage de l'étiquette: Pour le classement, la colonne d'étiquette doit être un index numérique (p. ex., 0,1,2). Utiliser StringIndexer si les étiquettes sont des chaînes.
- Manipulation des valeurs manquantes: Les arbres de décision Spark=2 ne ne gèrent pas les valeurs manquantes de façon native. Les lignes avec des caractéristiques manquantes doivent être imputées, abandonnées ou manipulées via un pipeline personnalisé avant l'entraînement.
Toutes ces transformations peuvent être enchaînées en ML Pipeline[, rendant le workflow reproductible et facile à déployer.
Formation du modèle
Avec les données préparées sous forme de DataFrame contenant une colonne --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- maxDépth: profondeur maximale de l'arbre (par défaut 5). Les arbres plus profonds peuvent capturer des motifs plus complexes mais augmenter le risque de surajustement et de réduire l'interpretation.
- maxBins: le nombre de bacs utilisés pour discréter des fonctionnalités continues (par défaut 32).
- impureté: la mesure d'impureté utilisée pour la sélection fractionnée. Pour la classification, -gini ou -entropie; pour la régression, -variance.
- minInstancesPerNode: le nombre minimum d'échantillons requis pour être à un noeud de feuille après une fraction (par défaut 1).
- minInfoGain: le gain minimum d'information requis pour qu'un fractionnement soit considéré (par défaut 0.0).
- semences: semences aléatoires pour la reproductibilité (utilisées pour la division et le bris de cravates).
Pendant l'entraînement, Spark distribue les données entre exécuteurs. Chaque exécuteur calcule les histogrammes locaux pour les partitions qu'il détient. Le conducteur regroupe ensuite les histogrammes, évalue les candidats divisés pour chaque noeud et détermine le meilleur scindé. Ce processus répète niveau par niveau, les données étant redistribuées au besoin.
Tuning hyperparamétrique
La recherche d'hyperparamètres optimaux implique souvent une validation croisée ou une division de validation de train. Spark MLlib fournit CrossValidator et TrainValidationSplit[ qui peut être utilisé avec un ParamGridBuilder pour rechercher des combinaisons de maxDepth, maxBins, ]impureté[, et minInstallationsPerNode[. Pour les grands ensembles de données, une recherche par grille peut prendre du temps; les praticiens commencent souvent par une grille grossière et se raffinent en fonction des résultats, ou utilisent une recherche aléatoire.
Évaluation
Une fois le modèle formé, il peut être utilisé pour transformer l'ensemble de test (ou de nouvelles données) en appelant . Les prédictions sont ajoutées comme une nouvelle colonne.
- Classification: précision, précision, rappel, F1‐score, matrice de confusion, ROC‐AUC (pour le classement binaire).Spark=Classification des binairesÉvaluateur[ et Classification des multiclassesÉvaluateur[ calculent ces valeurs efficacement.
- Régression: erreur carrée moyenne (EME), erreur carrée moyenne de racine (RMSE), erreur absolue moyenne (MAE), R2 (coefficient de détermination).
Le modèle peut également être inspecté par la méthode de DebugString, qui imprime la structure de l'arbre, utile pour l'interprétation et pour vérifier que les règles apprises ont un sens.
Ensemble Méthodes sur l'étincelle : Forêts aléatoires et TGB
Bien qu'un seul arbre de décision soit interprétable, il peut souffrir de variance élevée et de précision limitée. Spark MLlib fournit également des implémentations distribuées de deux méthodes d'ensemble puissantes qui combinent plusieurs arbres de décision:
Forêts aléatoires
Une forêt aléatoire forme de nombreux arbres (commandée par numTries) sur des échantillons de données piégés et sélectionne des scissions à partir d'un sous-ensemble aléatoire de caractéristiques à chaque nœud. Cette décorrlation réduit la variance et donne souvent une précision significativement plus élevée.Sparks RandomForestClassifier[ et RandomForestRegresseur[ parallélisent l'entraînement en construisant plusieurs arbres simultanément à travers le groupe. Les mêmes hyperparamètres que pour les arbres individuels s'appliquent, plus numTries[ et featureSubsetStratégie[ (p. ex., -
Arbres à écorce progressive (GBT)
Le graduant des arbres construit séquentiellement, chaque nouvel arbre corrige les résidus de l'ensemble précédent. Cette nature itérative rend la parallélisation plus difficile, mais Spark distribue toujours le calcul de l'histogramme dans chaque itération. Les TGB obtiennent souvent des performances de pointe sur des données structurées, mais nécessitent un réglage attentif de maxIter, stepSize[ (taux d'apprentissage), et loss type (perte de log pour la classification, erreur carrée pour la régression).
Les deux méthodes d'ensemble bénéficient des mêmes avantages d'évolutivité que Spark offre : la manipulation à grande échelle des données, la tolérance aux défauts et l'intégration avec les pipelines d'ingestion de données.
Applications réelles dans le monde
Les arbres de décision et leurs ensembles construits avec Spark sont déployés dans toutes les industries :
- Évaluation des risques de crédit: Les banques utilisent des arbres de décision pour approuver ou refuser des prêts en fonction de caractéristiques comme le revenu, l'historique du crédit et le ratio dette-revenu.
- Prévision de la consommation[: Les entreprises de télécommunications et de SaaS analysent les journaux d'utilisation, supportent les interactions et les données démographiques pour prédire quels clients sont susceptibles de quitter.
- Détection de fraudulosité : Les institutions financières notent les transactions en temps réel à l'aide d'ensembles d'arbres.
- Entretien prédictif: Les capteurs de fabrication génèrent des téraoctets de données de séries chronologiques; les arbres de régression prévoient la probabilité de défaillance de l'équipement en fonction des valeurs de vibration, de température et de pression.
- Analyse des soins de santé[: Les systèmes hospitaliers construisent des modèles d'arbre de décision sur les dossiers de santé électroniques pour prédire le risque de réadmission, aidant ainsi à répartir les ressources.
Dans chaque cas, la capacité de faire une échelle à la population complète de données, plutôt qu'à un échantillon, conduit à des modèles plus robustes et plus justes.
Meilleures pratiques pour les déploiements de production
Pour tirer le meilleur parti des arbres de décision sur Spark, considérez ce qui suit :
- Cache les données de formation: Utilisez sur le DataFrame après l'ingénierie de la fonctionnalité pour éviter de relire le disque pendant le réglage ou la validation croisée.
- Balance de l'ensemble de données: Pour la classification avec classes déséquilibrées, utiliser le suréchantillonnage, le sous-échantillonnage ou les poids de classe (les arbres de décision Spark=1 ne supportent pas directement les poids par instance; vous pouvez échantillonner de façon appropriée).
- : Un arbre profond avec une valeur élevée maxBins peut causer une OOM côté conducteur si les histogrammes deviennent trop grands. Augmenter la mémoire du conducteur ou réduire maxBins.
- Utiliser l'importance de la fonction: Après la formation, extraire les notes d'importance de la fonction pour les caractéristiques non pertinentes, réduire le temps de formation et améliorer l'interprétation.
- Sérialiser et servir: Utilisez les pipelines ML et pour persister des modèles formés. Pour le marquage en temps réel, convertissez les règles de l'arbre en une simple table de recherche ou déployez le modèle via Sparks en streaming ou en service par lots.
Ressources extérieures
Pour plus de détails et des exemples pratiques, voir ces sources faisant autorité :
- Apache Spark MLlib Décision Trees Documentation
- Wikipedia: Apprentissage des arbres de décision
- Arbres de décision de l'utilisateur (pour comparaison avec l'approche Spark)
- Databricks Blog: Forêts aléatoires et l'amélioration dans MLlib
Conclusion
En les mettant en œuvre sur Apache Spark, les organisations peuvent s'étendre de milliers à des milliards de lignes sans sacrifier la capacité d'interprétation qui rend les arbres si précieux. Sparks a distribué un algorithme basé sur l'histogramme, combiné à son moteur de traitement unifié des données, permet une formation rapide, un réglage facile et une intégration transparente avec des pipelines de données plus importants. Que ce soit utilisé comme modèles autonomes ou comme blocs de construction pour des forêts aléatoires et des arbres à gradient, les arbres de décision sur Spark permettent aux analystes et aux ingénieurs de tirer des informations exploitables de leurs plus grands ensembles de données, de manière efficace, fiable et à grande échelle.