Estimer plusieurs modèles de propension et comparer leurs performances à l’aide d’une méthodologie agnostique aux modèles
Une application d’interprétabilité d’apprentissage automatique et de sélection de modèle avec H2O et DALEX
Dans ce post, je estimer un certain nombre de modèles et d’évaluer leurs performances et leur adéquation aux données à l’aide d’un méthodologie agnostique aux modèles qui permet de comparer les modèles traditionnels à «boîte en verre» et les modèles à «boîte noire».
Il existe de nombreuses bibliothèques qui aident à Interprétabilité de l’apprentissage automatique, explication des fonctionnalités et évaluation générale des performances et ils ont tous gagné en popularité ces dernières années, mais pour cette étude, j’ai choisi DALEX.
Étant donné que les mesures de performance peuvent refléter un aspect différent de la performance prédictive d’un modèle, il est important d’évaluer et de comparer plusieurs mesures lors de l’évaluation d’un modèle et avec DALEX, vous pouvez faire exactement cela!
De nos jours, une entreprise qui exploite les données pour comprendre les moteurs du comportement de ses clients possède un véritable avantage concurrentiel. Les organisations peuvent considérablement améliorer leurs performances sur le marché en analysant efficacement les données au niveau des clients et en concentrant leurs efforts sur celles qui sont plus susceptibles de s’engager.
Une approche testée et testée pour démêler ce type de perspicacité est Modélisation de la propension, qui combine des informations telles qu’un données démographiques des clients (âge, race, religion, sexe, taille de la famille, origine ethnique, revenu, niveau d’éducation), psycho-graphique (classe sociale, style de vie et caractéristiques de la personnalité), engagement (e-mails ouverts, e-mails cliqués, recherches sur l’application mobile, durée de temporisation des pages Web, etc.), expérience utilisateur (temps d’attente par téléphone et courriel du service à la clientèle, nombre de remboursements, délais de livraison moyens), et comportement des utilisateurs (valeur d’achat sur différentes échelles de temps, nombre de jours depuis le dernier achat, temps entre l’offre et la conversion, etc.) pour estimer la probabilité qu’un certain profil de client exécute un certain type de comportement (par exemple l’achat d’un produit) .
Une fois que vous comprenez la probabilité qu’un certain client interagisse avec votre marque, achète un produit ou s’inscrive à un service, vous pouvez utiliser ces informations pour créer des scénarios, que ce soit en minimisant dépenses de marketing, maximiser cibles d’acquisitionet optimiser fréquence d’envoi des e-mails ou profondeur de remise.
Afin de respecter une durée d’exécution raisonnable du projet, j’ai opté pour H2O comme ma plateforme de modélisation car elle offre un certain nombre d’avantages:
- il est très facile à utiliser et vous pouvez estimer plusieurs modèles de Machine Learning en un rien de temps
- Cela fait pas besoin de prétraiter les variables caractère / facteur en les «binarisant» (cela se fait «en interne»), ce qui réduit encore le temps de formatage des données
- il a une fonctionnalité qui s’occupe du déséquilibre de classe mis en évidence dans la phase d’exploration des données – je mets simplement
balance_classes
= VRAI dans la spécification du modèle, plus à ce sujet plus tard -
validation croisée peut être activé sans avoir besoin d’un autre
validation frame
être «découpé» de l’ensemble de formation - réglage fin des hyper-paramètres (alias la recherche dans la grille) peut être implémentée en parallèle avec un certain nombre de stratégies qui garantissent un temps d’exécution limité sans compromettre les performances
Avant de commencer, je charge les données nettoyées enregistrées à la fin de la analyse exploratoire
Je commence par créer un ensemble aléatoire de formation et de validation avec rsample
Sur les 41 188 clients au total, 32 951 ont été affectés à l’ensemble de formation et 8 237 à l’ensemble de test. Je les enregistre sous train_tbl
et test_tbl
.
La prochaine étape consiste à démarrer un cluster H2O. Je spécifie la taille du cluster de mémoire à «16G» pour aider à accélérer un peu les choses et désactiver la barre de progression.
Ensuite, je trie les ensembles de variables de réponse et de prédicteur. Pour qu’une classification soit effectuée, je dois s’assurer que la variable de réponse est un facteur (sinon h2o effectuera une régression). Cela a été réglé pendant la phase de nettoyage et de formatage des données.
Pour ce projet, j’estime un Modèle linéaire généralisé (alias Elastic Net), un Forêt aléatoire (lequel H2O fait référence à Forêt aléatoire distribuée) et un Machine de renforcement de dégradé (ou GBM).
Pour implémenter une recherche dans la grille tree-based
modèles (DRF et GBM), je dois mettre en place une grille aléatoire pour recherche d’hyper-paramètres optimaux pour le h2o.grid()
une fonction . Pour ce faire, je définis paramètres de recherche à transmettre au hyper_params
argument:
-
sample_rate
est utilisé pour définir le taux d’échantillonnage des lignes pour chaque arbre -
col_sample_rate_per_tree
définit l’échantillonnage des colonnes pour chaque arbre -
max_depth
spécifie la profondeur maximale de l’arbre -
min_rows
pour fixer le nombre minimum d’observations par feuille -
mtries
(DRF uniquement) indique les colonnes à sélectionner au hasard sur chaque nœud de l’arborescence -
learn_rate
(GBM uniquement) spécifie la vitesse à laquelle le modèle apprend lors de la construction d’un modèle
J’ai également mis en place une deuxième liste pour le search_criteria
, qui aide à gérer le temps d’exécution des modèles:
- le
strategy
L’argument est défini sur RandomDiscrete pour que la recherche sélectionne au hasard une combinaison parmi les paramètres de recherche de la grille - Réglage
stopping_metric
à AUC comme mesure d’erreur pour un arrêt précoce – les modèles cesseront de construire de nouveaux arbres lorsque la mesure cessera de s’améliorer - Avec
stopping_rounds
Je précise le nombre de tours d’entraînement avant d’envisager un arrêt précoce - J’utilise
stopping_tolerance
définir les améliorations minimales nécessaires pour que le processus de formation se poursuive -
max_runtime_secs
limite le temps de recherche à une heure par modèle
Enfin, je peux configurer les formulations des modèles. Notez que tous les modèles ont 2 paramètres en commun:
- le
nfolds
paramètre, qui permet validation croisée à effectuer sans avoir besoin d’un cadre de validation – s’il est défini sur 5 par exemple, il effectuera une validation croisée 5 fois - le
balance_classes
le paramètre est défini sur VRAI pour tenir compte du déséquilibre de la variable cible mis en évidence lors de l’analyse exploratoire. Lorsqu’il est activé, h2o sous-échantillonnera la classe majoritaire ou suréchantillonnera la classe minoritaire.
Je trie le modèle arborescent par AUC marquer et récupérer les modèles principaux de la grille
TOUJOURS SE RAPPELER cette H2O nécessite une connexion en direct à leurs serveurs pour fonctionner correctement. Pour cette raison, il est important que vous enregistrer tous les modèles que vous estimez dans votre connexion en direct actuelle afin qu’ils soient accessibles à tout moment.
Ceci est particulièrement important en cas de perte momentanée de connexion Web, ce que j’ai compris à mes frais. En cas de perte de connexion et de redémarrage du cluster H2O, les modèles qui sont toujours dans l’environnement RStudio mais estimés lors de la session précédente ne sont PAS reconnus comme faisant partie du cluster actuel et doivent être réestimés. Cela peut être un peu gênant, en particulier lorsque vous ajustez des modèles complexes qui nécessitent un temps d’exécution long pour converger.
Il existe de nombreuses bibliothèques (comme IML, PDP, VIP, et DALEX pour ne nommer que les plus populaires) qui aident à Interprétabilité de l’apprentissage automatique, explication des fonctionnalités et évaluation générale des performances et ils ont tous gagné en popularité ces dernières années.
Il existe un certain nombre de méthodologies pour interpréter les résultats de l’apprentissage automatique (c.-à-d. explications locales indépendantes du modèle et agnostiques, parcelles de dépendance partielle, importance variable basée sur la permutation) mais dans ce projet, j’examine DALEX
paquet, qui se concentre sur Interprétabilité modèle-agnostique et fournit un moyen pratique de comparer les performances de plusieurs modèles avec différentes structures.
Une des clés avantages de l’approche modèle-agnostique utilisée par DALEX
c’est que vous pouvez comparer les contributions des modèles traditionnels «à boîte de verre» aux modèles à boîte noire à la même échelle. Cependant, étant basé sur la permutation, l’un de ses principaux désavantages est qu’il n’évolue pas bien avec un grand nombre de variables prédictives et des ensembles de données plus importants.
Actuellement DALEX
ne prend pas en charge certains des packages ML les plus récents comme H2O ou xgboost. Pour le rendre compatible avec de tels objets, j’ai suivi la procédure illustrée par Bradley Boehmke dans sa brillante étude Interprétabilité du modèle avec DALEX, dont j’ai tiré beaucoup d’inspiration et emprunté du code.
Tout d’abord, l’ensemble de données doit être dans un format spécifique:
Ensuite, je crée une fonction de prédiction renvoyant un vecteur de valeurs numériques, qui extrait la probabilité de la réponse aux problèmes de classification binaire.
Maintenant, je peux convertir mes modèles d’apprentissage automatique en «explicateurs» DALEK avec le explain()
, qui fonctionne comme un «conteneur» pour les paramètres.
Enfin, je suis prêt à passer le cap objets explicatifs à plusieurs fonctions DALEX qui aideront à évaluer et à comparer les performances des différents modèles. Étant donné que les mesures de performance peuvent refléter un aspect différent de la performance prédictive d’un modèle, il est important d’évaluer et de comparer plusieurs mesures lors de l’évaluation d’un modèle et avec DALEX, vous pouvez faire exactement cela!
Pour évaluer et comparer les performances de mes modèles, je me suis inspiré du cadre utilisé par Przemyslaw Biecek et Tomasz Burzykowski dans leur livre, Analyse de modèle explicative, qui s’articule autour de questions clés:
- 1 – Les modèles sont-ils bien ajustés?
- 2 – Comment les modèles se comparent-ils?
- 3 – Quelles variables sont importantes dans les modèles?
- 4 – Comment une seule variable affecte-t-elle la prédiction moyenne?
Ajustement général du modèle
Pour avoir une première idée de l’adéquation de mes modèles avec les données, je peux utiliser le model_performance()
, qui calcule les mesures de performances du modèle sélectionné.
Sur la base des métriques disponibles pour tous les modèles (précision et AUC), Je peux voir ça forêt aléatoire et accentuation du gradient sont à peu près au même niveau les uns avec les autres, avec filet élastique loin derrière. L’AUC varie entre 0,75 et 0,80 tandis que la précision a une plage légèrement plus étroite de 0,89 à 0,90
Diagnostics résiduels
Comme indiqué dans le paragraphe précédent, model_performance()
produit également des quantiles résiduels qui peuvent être tracés pour comparer les valeurs résiduelles absolues entre les modèles.
le DRF et GBM les modèles semblent fonctionner à égalité les uns avec les autres, étant donné les résidus absolus médians. En regardant la distribution des résidus sur le côté droit, vous pouvez voir que les résidus médians sont les plus bas pour ces deux modèles, avec le GLM voir un plus grand nombre de résidus de queue. Cela se reflète également dans les boîtes à moustaches du côté gauche, où les modèles arborescents atteignent tous les deux la valeur résiduelle absolue médiane la plus faible.
ROC et AUC
le Caractéristiques de fonctionnement du récepteur (ROC) La courbe est une méthode graphique qui permet de visualiser les performances d’un modèle de classification par rapport à une estimation aléatoire, qui est représentée par la ligne rayée sur le graphique. La courbe trace le vrai taux positif (TPR) sur l’axe des y contre le taux de faux positifs (FPR) sur l’axe des x.
La perspicacité d’une courbe ROC est double:
- Lecture directe: Tous les modèles fonctionnent bien mieux qu’une estimation aléatoire
- Comparaison de lecture: le AUC (zone sous la courbe) résume la courbe ROC et peut être utilisé pour comparer directement les performances des modèles – le classificateur parfait aurait AUC = 1.
Tous les modèles fonctionnent bien mieux que la supposition aléatoire et atteignent un AUC de 0,75 à 0,80, le DRF atteignant le score le plus élevé de 0,799.
Tracés d’importance variable
Chaque algorithme ML a sa propre façon d’évaluer l’importance de chaque variable: les modèles linéaires, par exemple, font référence à leurs coefficients, tandis que les modèles arborescents examinent l’impureté, ce qui rend difficile la comparaison de l’importance des variables entre les modèles.
DALEX calcule des mesures d’importance variable via la permutation, qui est un modèle agnostique, permettant une comparaison directe entre des modèles de structure différente. Cependant, avec des scores d’importance variable basés sur des permutations, nous devons nous rappeler que les calculs ralentissent lorsque le nombre de fonctions augmente.
Encore une fois, je passe «l’explicateur» pour chaque modèle au feature_importance()
fonction et réglage n_sample
à 8000 pour utiliser pratiquement toutes les observations disponibles. Bien qu’il ne soit pas exorbitant, le temps d’exécution total était près de 30 minutes mais cela est basé sur un ensemble de données relativement petit. Mais n’oubliez pas que la vitesse de calcul peut être augmentée en réduisant n_sample
, ce qui est particulièrement important pour les grands ensembles de données.
Maintenant je n’ai plus qu’à passer le VIP des objets à une fonction de traçage: comme suggéré par l’étiquette de l’axe x générée automatiquement ( Perte d’abandon), la principale intuition derrière le calcul de l’importance des variables réside dans la diminution de l’ajustement du modèle si la contribution d’une variable explicative sélectionnée était supprimée. Plus le segment est grand, plus la perte est importante lorsque cette variable est supprimée du modèle.
J’aime cette intrigue car elle rassemble une mine d’informations!
Tout d’abord, vous pouvez remarquer que, bien qu’avec des poids relatifs légèrement différents, les 5 principales fonctionnalités sont communes à chaque modèle, avec nr_employed
(employé dans l’économie) étant le prédicteur le plus important dans chacun d’eux. Cette cohérence est rassurante car elle nous dit que tous les modèles captent la même structure et les mêmes interactions dans les données, et nous donne l’assurance que ces caractéristiques ont un fort pouvoir prédictif.
Vous pouvez également remarquer point de départ distinct pour le bord gauche de l’axe x, qui reflète la différence de perte RMSE entre les trois modèles: dans ce cas, le filet élastique Le modèle a le RMSE le plus élevé, ce qui suggère que le plus grand nombre de résidus résiduels observé plus tôt dans le diagnostic résiduel pénalise probablement le score RMSE.
Profils de dépendance partielle
Après avoir identifié le pouvoir prédictif relatif de chaque variable, nous pourrions vouloir étudier comment leur relation avec la réponse prédite diffère entre les trois modèles. Tracés de dépendance partielle (PD), parfois aussi appelé Profils PD, offrent un excellent moyen d’inspecter la façon dont chaque modèle répond à un prédicteur particulier.
Nous pouvons commencer par jeter un œil à la caractéristique la plus importante, nr_employed
:
Bien qu’avec des pondérations de prédiction moyennes différentes, les trois modèles ont constaté que les clients des banques sont plus susceptibles de soupirer jusqu’à un dépôt à terme lorsque le niveau de employé dans l’économie est jusqu’à 5,099 m (nInf_5099.1
). Tous les deux filet élastique et forêt aléatoire ont trouvé exactement la même hiérarchie de pouvoir prédictif parmi les 3 différents niveaux de nr_employed
(moins prononcé pour le forêt aléatoire) que nous avons observé dans le correlationfunnel
analyse, avec GBM étant celui légèrement hors de kilter.
Voyons maintenant age
, un prédicteur qui, si vous vous souvenez de l’EDA, n’était PAS censé avoir un impact sur la variable cible:
Une chose que nous remarquons est que la plage de variation de la prédiction moyenne (axe x) est relativement peu profonde à travers le spectre d’âge (axe y), confirmant la conclusion de l’analyse exploratoire selon laquelle cette variable aurait un faible pouvoir prédictif. Aussi, les deux GBM et forêt aléatoire utilisent age
de manière non linéaire, alors que le filet élastique le modèle est incapable de capturer cette dynamique non linéaire.
Les graphiques de dépendance partielle pourraient également fonctionner comme outil de diagnostic: regarder poutcome
(résultat de la previous
campagne de marketing) révèle que GBM et forêt aléatoire correctement retenu sur une probabilité plus élevée de s’inscrire lorsque le résultat d’une campagne précédente a été un succès (scs
).
Cependant, le filet élastique le modèle ne fait pas de même, ce qui pourrait représenter un grave défaut car le succès d’une campagne précédente avait une très forte corrélation positive avec la variable cible.
Je vais finir avec le month
car il offre un excellent exemple de l’un de ces cas où vous souhaiterez peut-être remplacer le résultat du modèle par des connaissances de l’industrie et du bon sens. Plus précisément, le GBM modèle semble suggérer que Mars, octobre et décembre sont des périodes associées à de bien meilleures chances de réussite.
Sur la base de mon expérience précédente en analyse de produits financiers similaires, je ne conseillerais pas à une organisation bancaire de développer son activité de marketing direct dans les semaines à Noël, car c’est une période de l’année où l’attention des consommateurs se détourne de cela. type d’achats.
En tout forêt aléatoire est mon modèle final de choix: il apparaît comme le plus équilibré des trois et n’affiche pas certaines des «bizarreries» vues avec des variables comme month
et poutcome
.
Je peux maintenant affiner davantage mon modèle et réduire sa complexité en combinant les résultats de l’analyse exploratoire, les informations issues de l’évaluation des modèles et un certain nombre de considérations propres au secteur / sens commun.
En particulier, mon modèle final:
- Exclut un certain nombre de fonctionnalités (
age
,housing
,loan
,campaign
,cons_price_idx
) qui ont un faible pouvoir prédictif - Supprime
previous
, qui montre peu de différence entre ses 2 niveaux dans le tracé PD – il est également modérément corrélé avecpdays
, suggérant qu’ils peuvent capturer le même comportement - Goutte également
emp_var_rate
en raison de sa forte corrélation avecnr_employed
et aussi parce que conceptuellement, ils contrôlent un comportement économique très similaire
Pour le modèle final, j’utilise les mêmes spécifications que pour la forêt aléatoire d’origine
Encore une fois, nous trions le modèle par score AUC et récupérons le modèle principal
N’oubliez pas de sauvegarder vos modèles!
Évaluation finale du modèle
Par souci de concision, je visualise le graphique d’importance variable avec le vip()
fonction du package homonyme, qui renvoie la contribution classée de chaque variable.
Suppression emp_var_rate
a autorisé education
pour entrer dans le top 10 des fonctionnalités. Naturellement, la hiérarchie des variables et le pouvoir prédictif relatif se sont ajustés et ont légèrement changé, mais il est rassurant de voir que les 9 autres variables figuraient dans le top 10 du modèle précédent.
Enfin, je compare les performances du modèle avec l’original forêt aléatoire modèle.
le AUC n’a changé que d’une fraction de pour cent, me disant que le modèle a maintenu un pouvoir prédictif comparable.
Connaissant déjà les odds ratios dans le cadre d’une régression logistique, j’ai cherché à savoir si la même intuition pouvait être étendue aux modèles de classification boîte noire. Au cours de mes recherches, un article très intéressant sur Validation croisée s’est démarqué pour établir un parallèle entre rapport de cotes de l’arbre de décision et de la forêt aléatoire.
Fondamentalement, cela nous indique que les graphiques de dépendance partielle peuvent être utilisés de manière similaire aux rapports de cotes pour définir les caractéristiques d’un profil de client qui influencent sa propension à adopter un certain type de comportement.
Par exemple, des fonctionnalités comme job
, month
et contact
fournirait un contexte autour qui, quand et Comment cibler:
- Regarder
job
nous dira qu’un client dans un administrateur rôle est environ 25% plus susceptible de souscrire qu’un travailleur indépendant. - Entrer en contact avec un client potentiel dans le
month
de octobre doublera plus que les chances d’aboutir à un résultat positif Mai. -
contacting
votre client sur leur mobile augmente les chances de souscription de près d’un quart par rapport à un Téléphone appel.
NOTEZ QUE Des graphiques de dépendance partielle pour tous les prédicteurs du modèle final peuvent être trouvés dans l’annexe de le message d’origine.
Armé d’une telle perspicacité, on peut aider façonner des plans globaux de marketing et de communication pour se concentrer sur les clients plus susceptibles de souscrire à un dépôt à terme.
Cependant, ceux-ci sont basés sur des explicateurs au niveau du modèle, qui reflètent une vue globale agrégée. Si vous souhaitez comprendre comment un modèle produit une prédiction pour une seule observation (c.-à-d. Quels facteurs influencent la probabilité de s’engager au niveau du client unique), vous pouvez Explications locales indépendantes du modèle et agnostiques (LIME) méthode qui exploite le concept de «modèle local». J’explorerai la méthodologie LIME dans un prochain article.
Pour la partie analyse de ce projet j’ai opté pour H2O comme ma plate-forme de modélisation. H2O est non seulement très facile à utiliser, mais possède également un certain nombre de fonctionnalités intégrées qui aident à accélérer la préparation des données: il prend en charge déséquilibre de classe sans besoin de rééchantillonnage de pré-modélisation, automatiquement Caractère / facteur «binarisé» variables et implémente validation croisée sans avoir besoin d’un autre validation frame
être «découpé» de l’ensemble de formation.
Après avoir configuré une grille aléatoire pour rechercher les meilleurs hyper-paramètres, J’ai estimé un certain nombre de modèles (un régression logistique, une forêt aléatoire et un machines de renforcement de gradient) et utilisé le DALEX bibliothèque à évaluer et comparer leurs performances grâce à un tableau de mesures. Cette bibliothèque emploie un approche modèle-agnostique qui permet de comparer les modèles traditionnels à «boîte en verre» et les modèles à «boîte noire» sur la même échelle.
Mon dernier modèle de choix est le forêt aléatoire, que j’ai affiné en combinant les résultats de l’analyse exploratoire, les informations recueillies à partir de l’évaluation des modèles et un certain nombre de considérations propres au secteur / bon sens. Cela a permis de réduire la complexité du modèle sans compromettre la puissance prédictive.
Dans la dernière décennie apprentissage automatique a pris de l’importance dans de nombreux domaines de l’analyse et est devenue une présence stable dans la boîte à outils du data scientist. Parallèlement, le domaine de Interprétabilité de l’apprentissage automatique a pris de l’ampleur et a été témoin de l’épanouissement de nombreuses bibliothèques (comme IML, PDP, VIP, et DALEX pour ne nommer que les plus populaires) qui aident à explication des fonctionnalités et évaluation générale des performances.
Je ce projet, j’explore en particulier la DALEX paquet, qui se concentre sur Interprétabilité modèle-agnostique et fournit un moyen pratique de comparer les performances de plusieurs modèles avec différentes structures.
Une de ses clés avantages est la capacité de comparer les contributions des modèles traditionnels «à boîte de verre» ainsi que des modèles à boîte noire sur la même échelle. Cependant, étant basé sur la permutation, l’un de ses principaux désavantages est qu’il ne s’adapte pas bien à un grand nombre de prédicteurs et à de plus grands ensembles de données.
En fonction de l’échelle de votre jeu de données et du nombre de variables explicatives que vous souhaitez / devez inclure dans votre modèle, vous devez soigneusement réfléchir à l’opportunité de faire de DALEX votre Interprétabilité de l’apprentissage automatique bibliothèque de choix.
Dans ce post, je montre le processus de décision qui a conduit à sélectionner la finale modèle de forêt aléatoire, qui combine les résultats de l’analyse exploratoire et les perspectives de l’évaluation et de la sélection des modèles.
Si vous êtes intéressé de voir comment j’arrive aux résultats que j’utilise pour préparer les données pour l’analyse, vous pouvez vous référer à ce post (Préparation des données et analyse exploratoire des données) sur ma page Web.
Pour voir comment j’utilise le modèle de forêt aléatoire final pour implémenter un optimisation des bénéfices multi-clients qui révèle un bénéfice supplémentaire potentiel attendu de près de 1,7 £ par client (ou 850 k £ si vous aviez 500 000 clients), vous pouvez vous référer à ce post (Optimiser le profit avec le cadre de valeur attendue) sur ma page Web.
Le code R complet et tous les fichiers pertinents peuvent être trouvés sur mon profil GitHub @ Modélisation de la propension
I recently tried https://killakush.com/product-category/thc-by-benefits/thc-for-energy/ , and I’m really impressed with the quality. The effects were smooth, calming, and literally what I was hoping for. The miscellany of options also allowed me to upon something made-to-order an eye to both relaxing evenings and rich days. Absolutely advise in favour of anyone seeking wonderful results!