Renversé dans une forêt de survie : Prédiction du désabonnement des clients en Python | par Heiko Onnen

 Renversé dans une forêt de survie : Prédiction du désabonnement des clients en Python | par Heiko Onnen

Modèle de forêt de survie conditionnelle avec PySurvival

Jeune amour rejeté Stock Photo – by iStock/vandervelden (istockphoto.com) sous licence standard

L’activité d’une entreprise taux d’attrition de la clientèle taux est le pourcentage de clients qui ont cessé de faire des affaires avec l’entreprise au cours d’une période donnée. La plupart d’entre eux ont dû commencer à préférer les produits d’un concurrent. Fidélisation de la clientèle cherchent à minimiser le taux d’attrition.

En règle générale, il est plus coûteux d’essayer d’attirer de nouveaux clients – en les détournant de la concurrence – que de conserver les clients existants. Un document de Bain &amp ; Company a indiqué qu’une « augmentation de 5 % de la rétention des clients produit plus de 25 % d’augmentation des bénéfices » dans le secteur des services financiers. (bain.com).

Notre objectif est de construire un modèle qui prédit le risque de désabonnement de chaque client. Afin de fournir des signaux d’alerte précoce à l’équipe de vente et de marketing, le modèle devrait identifier les profils de clients qui sont en corrélation avec un risque accru que le client soit bientôt tenté de se détourner de notre entreprise.

En plus de nos paquets de base tels que pandas et numpy, nous installerons et importerons le paquetage PySurvival bibliothèque.

Comme toujours, vous devriez créer un nouvel environnement virtuel avant d’installer un paquetage complexe, en particulier un paquetage avec des dépendances non-Python. PySurvival nécessite des redistribuables C++.

Pour installer PySurvival sur MacOS ou Linux, vous devez vérifier si gcc a déjà été installé sur votre machine :

Sur un Fenêtres l’installation nécessite quelques étapes supplémentaires. Il semble que les développeurs de PySurvival étaient inconscients du fait qu’une communauté d’utilisateurs de Python existe du côté Windows de la division des systèmes d’exploitation ; ou ils n’aiment tout simplement pas beaucoup les utilisateurs de Windows. Mais nous pouvons faire fonctionner PySurvival sur une machine Windows même si une installation par pip ne fonctionnerait pas. Suivez les étapes suivantes :

  • Créez votre nouvel environnement virtuel avec une version de Python ne dépassant pas 3.8. Par exemple dans conda : $ conda create -n yourchosenname python=3.8. La raison est que la version actuelle de PySurvival utilise une méthode tp_print qui a été dépréciée après la version 3.8.
  • Vous aurez besoin du compilateur C++ de Microsoft. S’il n’est pas déjà installé sur votre machine, une façon de l’obtenir est de télécharger les outils gratuits Visual Studio Build Tools à partir de : Télécharger les outils Visual Studio – Installer gratuitement pour Windows, Mac, Linux (microsoft.com). Dans le coin supérieur gauche de la fenêtre de sélection des outils de construction, sélectionnez l’option « Desktop development with C++ ».
capture d’écran : par l’auteur
  • Téléchargez le paquetage PySurvival forké, qui fonctionne sous Windows, depuis ce dépôt GitHub : bacalfa/pysurvival : Paquet open source pour la modélisation de l’analyse de survie (github.com)[appreciations to its creator B. A. Calfa]. Sauvegardez le paquet téléchargé dans le dossier que vous souhaitez utiliser comme répertoire d’installation.
  • Activez votre nouvel environnement virtuel, par exemple : $ conda activate votre nom d’utilisateur
  • A partir de l’invite de commande, naviguez jusqu’au répertoire dans lequel vous avez sauvegardé et décompressé le paquet PySurvival.
  • À l’invite de commande, repackagez d’abord les fichiers téléchargés, puis installez le paquetage :
image par l’auteur
image par l’auteur

PySurvival est livré avec un jeu de données intégré permettant d’analyser le taux d’attrition des clients. Nous le chargeons à partir du fichier Jeu de données module.

Les données brutes représentent la base de données clients d’un fournisseur de SaaS (software as a service), qui offre une gamme de services aux petites et moyennes entreprises : stockage de données, comptabilité des salaires et des dépenses, marketing en ligne et suivi des réponses des clients. Son modèle commercial est basé sur des abonnements mensuels.

La société SaaS nous demande d’implémenter un modèle qui prédit les risques de désabonnement – afin que l’équipe des ventes et du marketing puisse prendre des mesures qui amélioreraient les chances de conserver ces clients à risque.

image par l’auteur

Les données sources se composent de 13 colonnes, dont cinq sont des variables catégorielles. La fonction info() de Pandas montre que le cadre de données ne contient pas de valeurs nulles.

Deux colonnes serviront de variables cibles lorsque nous essaierons d’identifier les modèles qui sous-tendent le risque de désabonnement :

  • « churned », qui identifie les clients qui n’ont pas renouvelé leur abonnement dans le passé
  • « months_active », qui ajoute une dimension temporelle le long de laquelle nous voulons suivre le risque de désabonnement.

Les autres colonnes représentent les caractéristiques qui influencent le risque de désabonnement d’un client. Nous voulons identifier quelle combinaison de valeurs de caractéristiques – quel profil de client – augmente la probabilité d’attrition de combien.

image par l’auteur
image par l’auteur

Lorsque nous examinons les variables catégorielles, nous constatons le faible nombre de valeurs uniques dans chaque colonne. Leur faible nombre facilitera leur conversion en valeurs numériques.

image par l’auteur

Pour évaluer l’impact des valeurs catégorielles sur le risque de désabonnement, nous devons calculer des valeurs numériques.

La liste catcolsci-dessous, identifie les indices des colonnes catégorielles. Ainsi, oencodage à chaud, en utilisant la fonction get_dummies() crée une nouvelle colonne pour chaque valeur catégorielle unique et la remplit avec les valeurs binaires 1 et 0 : la valeur 1 apparaît dans les lignes où la valeur catégorielle correspondante est trouvée.

La fonction info() confirme qu’il ne reste aucune colonne catégorielle. Elle montre également que le cadre de données contient désormais 26 colonnes, contre 13 dans l’original. Par exemple, les quatre valeurs uniques de l’ancienne colonne « taille de l’entreprise » ont été divisées en quatre colonnes.

image par l’auteur
image par l’auteur

Ce cadre de données élargi nous permettra d’exécuter des modèles de science des données qui peuvent quantifier l’influence des variables caractéristiques sur le risque de désabonnement.

image par l’auteur

Nous achevons nos efforts de traitement des données en séparant les variables cibles :

  • l' »événement » – dans notre exemple, « churned » = 1 ou 0
  • la dimension temporelle : « months_active »

Puis la fonction numpy setdiff1d() à la ligne 6 supprime « churned » et « months_active » de la liste de tous les noms de colonnes, laissant une liste des colonnes de caractéristiques.

image par l’auteur

3.1 Corrélations des caractéristiques

Parmi les fonctions d’utilité de PySurvival, nous trouvons la fonction matrice_de_corrélation. Elle montre le degré d’alignement des caractéristiques. Si l’une des paires présente des corrélations alarmantes, proches de 1,0, nous devons supprimer l’une d’entre elles pour traiter leur multicolinéarité.

La corrélation la plus élevée dans notre exemple, entre les moyennes et les grandes entreprises clientes, ne dépasse pas 0,52. Ce n’est pas un niveau alarmant, nous poursuivons donc notre analyse.

image par l’auteur

3.2 Ensemble de données de formation et de test

Dans la ligne 3, la fonction train_test_split réserve 35 % de l’ensemble de données aux tests.

Les lignes 9 à 11 appliquent la même répartition aux colonnes de caractéristiques X, à la colonne d’événements E (« churned ») et à la colonne de temps T (« months_active »).

image par l’auteur

3.3 Modèle de forêt de survie conditionnelle – Le concept

Nous connaissons les arbres de décision et les forêts aléatoires pour des problèmes de classification en dehors de l’analyse de survie. Vous trouverez une excellente introduction aux arbres de décision dans l’article de Carolina Bento : Decision Tree Classifier explained in real-life : picking a vacation destination | by Carolina Bento | Towards Data Science ; et dans l’article de Tony Yiu sur les forêts aléatoires : Comprendre les forêts aléatoires. Comment l’algorithme fonctionne | par Tony Yiu | Vers la science des données

Les problèmes de survie ajoutent une difficulté : le modèle doit faire face à censuré données. Lorsque l’ensemble de données a atteint la fin de la période d’observation, de nombreux clients (et, espérons-le, la plupart d’entre eux) n’auront pas changé de fournisseur. Leurs événements de désabonnement restent inobservés et se produiront à une date future inconnue. L’ensemble de données est donc censuré à droite.

Pour traiter le problème de la censure, les modèles de survie utilisent une configuration modifiée :

  • Les modèles de régression conventionnels opèrent sur deux tableaux de données, X et y : les régresseurs X et le vecteur cible y.
  • Alors qu’un modèle de survie fonctionne sur trois variables, X, E et T :
  • – le tableau de caractéristiques X (composé des colonnes qui représentent les attributs ou le profil du client)
  • – le vecteur E d’indicateurs d’événements binaires (1 ou 0), qui indiquent si l’événement de désabonnement a été enregistré ou non pour les clients ;
  • – le vecteur temporel T = min(t, c), où t représente le moment de l’événement et c le moment de la censure

Les modèles de survie prédisent la probabilité que l’événement considéré se produise au temps t.

Nous mettrons en œuvre le modèle Forêt de survie conditionnelle conçu par Wright/Dankowski/Ziegler en 2017 (arxiv.org). Le CSF a amélioré l’algorithme d’apprentissage utilisé par les anciennes méthodes de forêt de survie aléatoire.

3.4 Ajustement du modèle

Le modèle CSF de PySurvival prend comme arguments :

  • le nombre maximum de caractéristiques à chaque fractionnement
  • – int = nombre absolu
  • – float = fraction
  • – sqrt » = racine carrée du nombre de caractéristiques
  • – log2″ = logarithme binaire du nombre de caractéristiques
  • – « all »
  • min_node_size = nombre minimum d’échantillons à chaque noeud, par défaut 10
  • alpha = niveau de signification pour permettre le fractionnement, par défaut 0,05
  • sample_size_pct = % des échantillons originaux utilisés dans chaque construction d’arbre, par défaut 0,63
  • num_threads = nombre de cœurs disponibles à utiliser dans les threads parallèles

Après avoir ajusté la forêt de survie, nous examinons sa précision.

3.5 Mesures de précision

Le indice de concordance mesure le pouvoir de discrimination du modèle. Si quatre clients ont quitté l’entreprise après 2, 3, 4 et 5 ans, et que le modèle prédit avec précision qu’ils quitteront l’entreprise dans cet ordre, l’indice de concordance atteint sa valeur optimale de 1,0. Si le modèle prédit un ordre différent, l’indice tombera en dessous de 1. L’indice n’évalue pas le temps de survie prédit, mais l’indice de concordance. ordre de classement. Si le modèle attribuait des périodes de désabonnement de 3, 4, 6 et 7 aux quatre clients, l’indice serait toujours égal à 1,0 parce qu’il indique l’ordre de tri correct des clients (C-index). Bien que cela semble être une faiblesse par rapport à d’autres mesures de précision telles que le MAE, nous avons besoin d’un indicateur tel que l’indice de concordance pour faire face à ce problème. censuré à droite données : les événements de désabonnement n’auront été enregistrés que pour la fraction de tous les clients à la date de fin de l’ensemble de données d’observation.

Pour nos besoins, nous considérons que l’indice de concordance de 0,87 est satisfaisant.

Le Score du Brier mesure l’écart moyen entre l’état réel du churn et la probabilité estimée : la distance quadratique moyenne entre l’état de survie observé (0 ou 1) et la probabilité de survie à un moment t donné. Il peut prendre des valeurs comprises entre 0 et 1, 0 étant la valeur optimale : la fonction de survie prévoirait parfaitement l’état de survie (Score de Brier). Habituellement, un maximum de 0,25 est considéré comme le seuil d’acceptation.

Dans notre exemple, le score de Bier ne dépasse pas 0,14 : il est suffisamment bas pour être considéré comme acceptable.

image par l’auteur

PySurvival’s compare_to_actual La méthode compare le nombre prédit et le nombre réel de clients à risque le long de l’axe du temps. Elle calcule également trois mesures de précision, la RMSE, la MAE et l’erreur absolue médiane. En interne, elle calcule l’estimateur de Kaplan-Meier pour déterminer la fonction de survie réelle des données sources.

image par l’auteur

3.6 Résultats du modèle : Importance des caractéristiques

Le modèle ajusté indique l’importance de chaque caractéristique dans un cadre de données. Le modèle importance mesure l’influence d’une caractéristique sur le risque de désabonnement. Des scores d’importance positifs augmentent le risque, tandis que des scores négatifs l’atténuent.

La colonne « pct_importance » calibre les importances relatives sur une échelle de 0 à 1. La somme des importances relatives est égale à 1,0.

  • Sans surprise, le « csat_score » – le score de satisfaction de la clientèle tel que mesuré par les enquêtes de marketing – est fortement corrélé avec le risque de désabonnement.
  • Les clients qui ont pas Les clients qui n’ont pas réservé de services de paie ou de comptabilité des produits ont une plus forte propension à se détourner de l’entreprise. Soit les autres clients ont appris à apprécier la gamme complète de produits, soit il leur en coûterait beaucoup plus d’efforts de confier ces tâches plus complexes à des concurrents, de sorte qu’ils restent avec la société SaaS tant qu’un concurrent ne peut pas démontrer un avantage concurrentiel nettement supérieur.
  • Les « minutes_customer_support » indiquent que les clients qui ont fréquemment fait des réclamations à la ligne d’assistance avant d’annuler leur abonnement présentent un risque élevé de désabonnement.
image par l’auteur

3.7 Prédictions de désabonnement

Tirons au hasard un client des données source : index 1989.

Rappelez-vous que nous avons créé le cadre de données X pour qu’il contienne toutes les colonnes des caractéristiques (à l’exclusion des variables cibles baratté et mois_actif). Nous introduisons les caractéristiques de la ligne d’indice 1989 choisie au hasard dans trois fonctions : la fonction de survie, la fonction de danger et la fonction de score de risque.

Si nous fixons la variable temporelle t à None, PySurvival calculera les valeurs de la fonction pour toutes les périodes de temps de la base de données et montrera leur tendance – dans notre exemple jusqu’à 12 mois.

image par l’auteur

Le fonction de survie est le complément de la fonction de distribution cumulative :

  • svf(t &gt ; T) = 1 – cdf(t ≤ T)

La variable T représente le temps qui s’écoule jusqu’à ce que l’événement d’intérêt se produise.

La fonction de distribution cumulative retrace la probabilité croissante de l’événement le long de l’axe du temps. Le risque de désabonnement augmente avec le temps. Au bout du compte, de nombreux clients cesseront leur activité ou essaieront un concurrent.

Inversement, la fonction de survie svf


Source de l’article

A découvrir