Méthodes d'ensemble : le champion de l'apprentissage automatique de Kaggle
Publié: 2022-03-11Le proverbe "Deux têtes valent mieux qu'une" prend un nouveau sens lorsqu'il s'agit d'ensembles d'apprentissage automatique. Les méthodes d'ensemble font partie des familles ML les plus récompensées lors des compétitions Kaggle, où elles remportent souvent des concours avec leurs résultats impressionnants.
Mais c'était un siècle avant Kaggle lorsque le statisticien Sir Francis Galton remarqua la puissance de l'intelligence agrégée. Il est tombé sur un concours lors d'une foire aux bestiaux où les participants devaient deviner le poids d'un bœuf. Huit cents personnes ont soumis des suppositions, mais leurs niveaux de compétence variaient : les agriculteurs et les bouchers ont deviné aux côtés des citadins qui n'avaient jamais vu un bœuf de près, alors Galton a pensé que la supposition moyenne serait tout à fait fausse.
Il s'est avéré que la moyenne des suppositions de la foule était erronée de moins d'une livre (< 0,1 %). Cependant, même les meilleures prédictions individuelles étaient loin de la vérité.
Comment cela pourrait-il être? Qu'est-ce qui a rendu possible un résultat aussi inattendu ?
Ce qui rend les ensembles de machines si efficaces
L'événement qui a forcé Galton à remettre en question ses croyances illustre également ce qui rend les ensembles si puissants : si vous avez des modèles différents et indépendants , entraînés à l'aide de différentes parties de données pour le même problème, ils fonctionneront mieux ensemble qu'individuellement. La raison? Chaque modèle apprendra une partie différente du concept. Par conséquent, chaque modèle produira des résultats valides et des erreurs basées sur sa « connaissance ».
Mais le plus intéressant est que chaque partie vraie viendra compléter les autres tandis que les erreurs s'annuleront :
Vous devez entraîner des modèles à variance élevée (comme des arbres de décision) sur des sous-ensembles de données distincts. Cette variance supplémentaire signifie que chaque modèle surajuste différentes données, mais lorsqu'il est combiné, la variance disparaît, comme par magie. Cela crée un nouveau modèle plus robuste.
Tout comme dans le cas de Galton, lorsque toutes les données de toutes les sources sont combinées, le résultat est « plus intelligent » que des points de données isolés.
Un regard plus attentif sur l'apprentissage d'ensemble dans les compétitions Kaggle
Lors de l'Otto Group Product Classification Challenge, les participants devaient construire un modèle prédictif capable de distinguer les principales catégories de produits.
Ici vous pouvez voir comment le modèle gagnant a été construit. Il s'agissait d'un empilement de trois couches : la première comportait 33 modèles, la seconde en ajoutait trois autres (XGBoost, un réseau de neurones et AdaBoost), et la troisième était la moyenne pondérée des sorties de la couche précédente. C'était à la fois un modèle très complexe et un ensemble.
Un autre succès de Kaggle est le modèle créé par Chenglong Chen lors du concours Crowdflower Search Results Relevance. Le défi était de créer un prédicteur qui pourrait être utilisé pour mesurer la pertinence des résultats de recherche. Vous pouvez lire l'explication complète de sa méthode, mais comme notre point d'intérêt est les ensembles, la partie critique de l'histoire est que la solution gagnante a utilisé un ensemble de 35 modèles, dont beaucoup étaient également des ensembles - un méta-ensemble, donc parler.
Méthodes d'ensemble
Il existe de nombreuses façons d'implémenter des méthodes d'ensemble dans l'apprentissage automatique. Nous allons explorer certaines des méthodes les plus populaires :
- Ensachage
- Forêt aléatoire
- Booster
- AdaBoost
- Gradient Boosting et XGBoost
- Méthodes d'ensemble hybrides
- Vote
- Empilage
- Cascade
Ensachage
Comme mentionné, vous devez entraîner de nombreux modèles sur différents sous-ensembles de données. En pratique, ce n'est pas facile car vous aurez besoin de beaucoup plus de données pour de nombreux modèles que pour un seul modèle, et il n'est parfois pas facile d'obtenir des ensembles de données de haute qualité. C'est à ce moment que le bagging (agrégation bootstrap) est utile, car il divise les données par bootstrap : un échantillon aléatoire avec un remplacement, ce qui donne différents sous-ensembles qui se chevauchent.
Une fois que vous avez entraîné vos modèles d'ensemble, vous construisez votre prédiction finale en agrégeant chaque prédiction de modèle à l'aide de la métrique de votre choix : la moyenne, la médiane, le mode, etc. Vous pouvez également utiliser les probabilités de prédiction du modèle pour créer une métrique pondérée :
Si nous voulons utiliser des arbres de décision comme modèles mais que nous avons peu d'attributs prédictifs forts dans nos données, tous les arbres seront similaires. En effet, les mêmes attributs auront tendance à se trouver dans le nœud racine, produisant des résultats similaires dans chaque branche de l'arbre.
Forêt aléatoire
Une technique pour résoudre ce problème est la forêt aléatoire . Il crée un ensemble d'ensachage à l'aide d'arbres, mais chaque nœud contraint ses attributs possibles à un sous-ensemble aléatoire. Cela oblige les modèles à être différents, résolvant le problème précédent. Cela fait également de la forêt aléatoire un très bon modèle pour la sélection des fonctionnalités.
La forêt aléatoire est l'un des modèles ML les plus populaires, car il offre de bonnes performances avec une variance et un temps d'apprentissage faibles.
Booster
Le boosting utilise également le bootstrap pour former les modèles, la principale différence étant qu'il ajoute des poids à chaque instance en fonction des erreurs de prédiction du modèle. Alors que le bagging est un processus parallèle, le boosting est un processus séquentiel, dans lequel chaque modèle a plus de probabilités. Cela lui permet d'accéder à certaines instances de prédictions de modèles précédentes.
Avec cette modification, le boosting essaie d'augmenter l'attention sur les instances mal classées pour atteindre de meilleures performances globales :
Il ajoute également des poids aux modèles. Les prédicteurs avec de meilleures performances au moment de l'entraînement auront un poids plus élevé à l'étape de la prédiction.
Examinons de plus près certains des modèles de boosting les plus populaires :
AdaBoost
AdaBoost a été l'une des premières implémentations du boosting. Il fait presque exactement ce que nous avons décrit à propos du boosting en général et utilise des arbres de décision comme modèles. Expliquons la phase d'entraînement avec un pseudo codage :
For each instance i Assign w[i] (weight, same for all) For each iteration t Generate a subset s[t] by weighted boosting (using the w[i] weights) Train model m[t] using s[t] Store m[t] Calculate e[t] (error rate of m[t]) Assign error rate e[t] to stored m[t] model If (e[t] <= a_threshold) Exit for Update weights using m[t] errors Au moment de la prédiction, il pondère chaque prédiction en fonction du taux d'erreur e[t] calculé pour chacune. Les résultats avec un taux d'erreur élevé auront moins de poids que d'autres avec une meilleure précision.
Gradient Boosting et XGBoost
L'un des problèmes majeurs lors de la formation d'un si grand nombre de modèles et de leur fonctionnement conjoint est de trouver la meilleure configuration d'hyperparamètres. Il est difficile de trouver la meilleure configuration pour un seul modèle ; trouver la meilleure configuration pour n modèles augmente la complexité de façon exponentielle. La configuration idéale pour un modèle isolé n'est probablement pas la même que la configuration d'un modèle qui doit fonctionner avec d'autres. A ce titre, vous devriez rechercher la configuration de tous les modèles en même temps, mais comment ?
Le gradient boosting apporte une solution élégante à ce problème. Il crée une fonction de perte qui a, en entrée, toutes les valeurs d'hyperparamètres de tous les modèles et, en sortie, l'erreur de l'ensemble entier. Grâce à la descente de gradient, il trouve la valeur minimale de la fonction (c'est-à-dire l'erreur la plus faible) et ainsi la meilleure configuration d'hyperparamètres pour chaque modèle.

Cette approche introduit un problème d'échelle. Entrez dans le roi du machine learning pour les données structurées : l'extrême gradient boosting, XGBoost en abrégé. Il s'agit d'une mise en œuvre incroyablement efficace de l'amplification de gradient, grâce à diverses techniques, telles que le calcul parallélisé, la capacité de validation croisée intégrée, la régularisation pour éviter le surajustement et l'optimisation du matériel. XGBoost offre des performances exceptionnelles.
XGBoost est devenu populaire lorsque son créateur l'a utilisé pour un défi Kaggle et a gagné par une large marge. Il a publié le résultat et créé un wrapper Python pour permettre à plus de personnes de l'utiliser. Lorsque de nombreuses personnes ont reconnu son potentiel, XGBoost est rapidement devenu un champion du ML.
Méthodes d'ensemble hybrides
Mais l'histoire ne s'arrête pas là. Nous avons vu de nombreux types d'ensembles qui utilisent tous le même type de modèle. Pourquoi ne pas essayer des combinaisons de différents modèles ? Si vous le faites bien, vous pouvez créer une méthode ML encore plus puissante : un ensemble hybride .
Vote
Le vote est l'une des approches les plus simples pour créer un ensemble hybride. Il entraîne de nombreux algorithmes de modèles différents et les fait « voter » lors de la phase de prédiction :
Vous pouvez ajouter des pondérations à chaque modèle en fonction de ses performances ou de ses probabilités de prédiction et générer un vote pondéré.
Empilage
L'empilement fait avancer l'idée du vote en ajoutant une nouvelle couche sur les modèles de base pour faire la prédiction finale au lieu de simplement calculer la moyenne ou la majorité. Il ajoute le concept de méta-apprentissage, car la nouvelle couche apprend non pas des données mais des prédictions du modèle :
Vous pouvez empiler toutes les méta-couches que vous aimez, ce qui donne un modèle à plusieurs niveaux. Pour les modèles empilés, je recommande d'utiliser des arbres de décision, des SVM ou des perceptrons. Pour les modèles de base, vous pouvez utiliser la méthode de votre choix, même un autre ensemble, en créant un ensemble d'ensembles. L'empilement fonctionne encore mieux avec des modèles de base tels que des arbres de décision qui génèrent non seulement une prédiction de valeur, mais également la probabilité qu'elle soit correcte.
L'empilement est moins populaire que le bagging ou le boosting car il est plus difficile d'interpréter ce que les modèles empilés apprennent et parce qu'il existe un nombre beaucoup plus grand de variantes : vous pouvez jouer avec de nombreuses combinaisons d'algorithmes de modèles, de configurations d'hyperparamètres et de couches d'empilement. Cependant, avec la bonne combinaison de modèles, l'empilement peut être encore plus fort que le boosting et le bagging.
Cascade
La cascade est utilisée lorsque vous souhaitez avoir un degré élevé de certitude dans la prédiction. Il utilise une approche d'empilement mais n'a qu'un seul modèle dans chaque couche. A chaque niveau, les modèles rejettent les instances qu'ils jugent ne pas appartenir à la classe souhaitée.
Avec la cascade, les modèles simples évaluent les données avant les modèles complexes. A l'étape de prédiction, le premier modèle reçoit les données. Si la certitude n'est pas supérieure à x (la valeur doit être élevée, supérieure à 0,9), il passe l'instance au modèle suivant. Sinon, la cascade renvoie la sortie prédite de ce modèle. Si aucune couche ne peut prédire la classe souhaitée avec un degré élevé de certitude, l'ensemble renvoie la classe négative.
Un cas d'utilisation classique de ce modèle consiste à prédire quand une transaction est susceptible d'être frauduleuse. Supposons qu'un système calcule des millions de transactions par jour et qu'il soit impossible de contrôler chacune d'elles manuellement. L'utilisation d'un ensemble en cascade peut éliminer les transactions qui ne sont pas frauduleuses avec une probabilité très élevée, ne laissant qu'un petit sous-ensemble de transactions à vérifier manuellement :
Ces modèles sont de bonnes options lorsque vous avez besoin d'une excellente métrique de rappel.
Contrairement au vote et à l'empilement, un ensemble en cascade utilise une approche multi-états plutôt qu'une approche multi-expert. Il est important d'être prudent avec les cascades très profondes car cela pourrait produire un surajustement.
La valeur des méthodes d'ensemble
La combinaison de nombreux modèles nous permet de créer des prédicteurs meilleurs et plus puissants, comme cela se produit lorsque les humains travaillent ensemble. Nous avons décrit trois familles d'ensembles - bagging, boosting et hybrides - et vu comment ils s'entraînent et prédisent.
Un arbre de décision peut être un modèle très faible et instable (avec une variance élevée), mais une foule d'arbres différents (forêt aléatoire) peut être un prédicteur très précis et stable. L'un des principaux avantages des ensembles est qu'ils construisent des modèles avec une faible variance et un faible biais, l'un des plus grands compromis de l'apprentissage automatique. Dans la plupart des cas, ils surpassent les autres méthodes, et parfois ils sont même meilleurs que l'apprentissage en profondeur. Ils ont tendance à être plus faibles que les réseaux de neurones profonds uniquement lorsqu'ils fonctionnent sur des données non structurées.
Si nous poursuivons la comparaison avec les réseaux de neurones profonds, nous pouvons également dire que les ensembles ont tendance à être plus légers et plus rapides lors des phases d'apprentissage et de test. De plus, ils ne nécessitent pas de matériel coûteux pour fonctionner, comme des GPU puissants et discrets.
Il est vrai que les ensembles n'ont pas la possibilité d'être compris intuitivement par les humains car avoir des dizaines ou des centaines de modèles fonctionnant en même temps crée un outil énorme et complexe. Heureusement, certaines techniques nous permettent de comprendre comment ces méthodes prennent leurs décisions. L'une des plus populaires est LIME, une méthode qui crée des explications interprétables pour une instance particulière sur n'importe quel modèle d'apprentissage automatique.
Les compétitions Kaggle n'existent pas uniquement pour que les développeurs puissent s'amuser, acquérir de nouvelles compétences ou gagner des prix. Le but ultime est de créer des modèles solides et de les relâcher dans la nature, pour les laisser faire leur magie dans des scénarios du monde réel. Ces types de modèles sont utilisés par les organisations qui traitent des problèmes critiques. Par exemple, la détection des fraudes est un cas d'utilisation courant dans des secteurs comme la banque et les voyages, qui traitent de grosses sommes d'argent déplacées en une seule transaction.
Les ensembles produisent de meilleures prédictions avec une variance et un biais inférieurs à ceux des autres modèles. Cependant, il est difficile d'interpréter ce qu'ils apprennent, et cela peut être d'une importance cruciale dans certaines applications sensibles. Le secteur des prêts personnels en est un exemple : un modèle ML pourrait déterminer si un individu est éligible ou non à un prêt. Cependant, si le client demande pourquoi l'institution financière a refusé le prêt, il devrait y avoir une explication détaillée, pas seulement "Parce que notre modèle ML l'a dit".
En fin de compte, que vous souhaitiez créer de puissants modèles ML pour les applications d'entreprise, les grandes banques ou les petites entreprises, ou simplement participer à des concours pour renforcer votre réputation professionnelle, les ensembles devraient être votre outil de choix.
