Marketing : utiliser le Big Data pour prédire le churn

Marketing : utilisation du Big Data pour prédire le churn

L’arrêt d’utilisation des services par les clients existants est un phénomène omniprésent dans le milieu des business et en particulier dans les milieux économiques à forte compétitivité.

Le domaine des télécommunications est en perpétuelle effervescence du fait de la forte attractivité que suscite ce milieu.

De là, nous comprenons l’ampleur du phénomène d’attrition dans les compagnies de télécommunications.

Les data enthousiasts de la société BAAMTU ont mis en place une solution visant entre autres à réduire ce phénomène de l’attrition que le marketing appel  » churn  » par utilisation combinée du Big Data et du Machine Learning. 

Mais qu’est-ce l’attrition au juste ?

L’attrition client peut être définie comme quand un client suspend définitivement l’utilisation des services auxquels il a auparavant souscrit. Cette suspension peut également être synonyme de non utilisation pendant une période donnée.

Les stratégies marketing traditionnellement utilisées par les entreprises de télécommunications pour gérer leurs clients sont souvent de l’ordre de trois : 

  1. l’acquisition de nouveaux clients,
  2. la vente incitative aux clients existants et 
  3. la rétention client. 

L’utilisation de chacune de ces techniques est liée à un coût. L’acquisition occupe une place prépondérante dans les stratégies marketing des entreprises de télécommunications.

Tant que l’acquisition continuera à monopoliser les efforts marketing, la rétention client ne cessera d’en pâtir et le taux d’attrition ( churn rate ) ne cessera d’augmenter.

Un taux d’attrition ?

Le taux d’attrition est la mesure du nombre de clients de la compagnie arrêtant l’utilisation des services mesurée sur une période donnée. Sa mesure est très importante car ses fluctuations peut informer sur “l’état de santé”, je me permet le terme, du business.

Ce taux d’attrition donc, quand il n’est pas contrôlé, réduit à zéro les efforts d’acquisition consentis par le marketing. D’où la nécessité de mettre en place une politique de rétention efficace.

Mais que faire quand on a un nombre extra de clients ?

Les entreprises de télécommunications ont souvent un nombre très élevé de clients à gérer et le service marketing ne peut donc s’offrir le loisir de s’intéresser à chacun d’entre eux de façon isolée.

Mais, imaginez qu’il puisse avoir l’information qu’un client est à une très forte probabilité de les quitter/de churn. Cela peut réduire les efforts marketing liés à la rétention en redirigeant ces dernières vers le type précis de clients à risque.

Processus

L’idée est de mettre en place un modèle prédictif de l’attrition, autrement dit un outil à même de nous dire qu’un client donné va “churn-er”, arrêter l’utilisation de services,  avec un certain score. L’objectif étant de permettre à un manager de faire ces prédictions de manière interactive avec un temps de latence s’apparentant au temps réel et de disposer à vue d’une stratification des clients par rapport à leurs scores d’appétences.

Le modèle prédictif à utiliser sera mis en place à partir de données historiques. Par données historiques, nous entendons les données issues de clients ayant arrêté l’utilisation des services mais également celles de clients demeurant dans le service conformément à l’idéologie machine learning.

Pour cela, plusieurs technologies et outils doivent être mis en place. Nous allons donc les présenter dans la section suivante.

 

Outils

  1. Apache Spark

En matière de connaissance client, plus les données les décrivant sont les plus variées et nombreuses, mieux on se porte ! Le problème que pourrait soulever leur stockage et leur traitement ne sont plus d’ordre grâce notamment au paradigme distribué.

Apache Spark est un moteur de traitement de données massives offrant plusieurs possibilités de traitement incluant le traitement des données en batch, en temps réel, des graphes et finalement du machine learning.

La librairie Machine Learning de Spark, Mllib,  offre le support à plusieurs classes d’algorithmes de classification, de régression, de réduction de dimension ainsi qu’un nombre important d’outils pour le prétraitement de données.

Mais, nous utilisons pour la création de notre modèle la librairie  XGBoost à travers ses packages JVM combinées à Apache Spark. Ceci nous permet de gagner en rapidité lors de l’entraînement, le choix des paramètres à travers la validation croisée est également fait de manière distribuée.

Nous utilisons Spark à travers son API scala.

 

2.XGBoost

XGBoost ou eXtreme Gradient Boosting est un algorithme se basant sur le boosting de la descente du gradient. Le boosting à l’opposé du bagging consiste à l’exécution séquentielle de plusieurs arbres de décisions dont chacun corrige les erreurs effectuées lors de la précédente itération. Les modèles sont ajoutés de manière séquentielle jusqu’à ce qu’aucune amélioration ne puisse être faite. La prédiction finale est obtenue en sommant les prédictions effectuées par les différents arbres de décisions.

Le terme ‘gradient boosting’ fait référence à l’utilisation de l’algorithme de descente du gradient  pour minimiser la perte ou l’erreur en ajoutant de nouveaux modèles.

 

3.Mleap

On a souvent besoin de fournir à l’utilisateur final la possibilité d’interagir avec notre modèle soit à travers une application web, mobile ou à travers des API…

Pour ce faire, le modèle entraîné a besoin d’être utilisable sur tous types de plateformes. C’est en cela que le projet MLeap a été créé. MLeap est le successeur probable du format PMML, format d’exportation des modèles de machine learning sous format xml. Mleap propose la sérialisation de modèles codées avec la librairie Mllib de Spark, Scikit Learn, Tensorflow sous un format JSON ou protobuff et de les exporter sous un format unique appelée Bundle, utilisable en particulier sur les plateformes exécutant la JVM.

Les modèles peuvent être utilisés indépendamment (sans aucune dépendance) de leur plateforme d’entraînement d’origine(Spark, Tensorflow, Scikit Learn, …) par utilisation seule du runtime : MLeap Runtime.

Nous utilisons MLeap à travers son API Scala.

 

  1. Play 

Play est un framework MVC permettant de créer des applications web.

Play offre un support pour les langages de programmation Java et Scala. 

De plus, Play ! vient packagé avec son propre serveur : Akka depuis la version 2.6.X et Netty depuis sa dernière version. Il n’est donc pas besoin de configurer un serveur web dans son environnement de développement et de production.

En outre, il offre un moteur asynchrone basé sur Akka.

Dans notre cas, nous utilisons Play À travers son API scala pour mettre en place une application web à travers laquelle un manager peut envoyer des requêtes de prédiction pour ses clients et visualiser les résultats.

 

  1. Scala

Vous l’aurez sans doute remarqué, mais nous adorons Scala. Pourquoi ? C’est somme toute assez simple :.

J’adore positivement cette phrase vue je ne sais plus où:

Il est fonctionnel, il est orienté-objet, il est …, il est tout ce dont vous avez besoin et plus encore !

Vous l’aurez compris, Scala est un langage de programmation orienté objet dans le sens où tout est objet et fonctionnel dans le sens où toute fonction est valeur. Scala dispose d’un excellent support de gestion des types et offre de plus l’inférence de ces types.

 

Données utilisées

Comme souligné plus haut, nous mettons en place un modèle prédictif de l’attrition (“churn”) autrement dit nous proposons un modèle à même de prédire un certain score d’appétence du client à arrêter l’utilisation des services. Le modèle produit est issu d’un apprentissage supervisé et plus précisément d’une classification binaire et donc a nécessité des données labellisées (informant sur la variable à prédire).

CHAMP DESCRIPTION
Account Length Equivalent de l’ancienneté du client dans le business
VMail Message Agrégation des messages vocaux du client
Day Minutes Cumul des minutes des actions du client durant le jour
Eve Minutes Cumul des minutes des actions du client durant la soirée
Night Minutes Cumul des minutes des actions du client durant la nuit
International Minutes Cumul des minutes des actions du client à l’international
Customer Service Calls Cumul des appels du client au service client
Churn Variable cible que l’on cherche à prédire, client churner ou pas
International Plan Est-ce que le client dispose du service International
Vmail Plan Est-ce que le client dispose du service de messagerie vocale
Day Calls Cumul des appels du client durant le jour
Day Charge Cumul du montant de crédit des actions du client durant le jour
Eve Calls Cumul des appels du client durant la soirée
Eve Charge Cumul du montant de crédit des actions du client durant la soirée
Night Calls Cumul des appels du client durant la nuit
Night Charge Cumul du montant de crédit des actions du client durant la nuit
International Calls Cumul des appels du client à l’international
International Charge Cumul du montant de crédit des actions du client à l’international
State État d’origine du client
Area Code Area Code
Phone Numéro de téléphone du client

 

Ces données regroupent quelques catégories de données client couramment utilisées dans les entreprises de télécommunications, à savoir :

  1. Les données d’usage : toute donnée liée au client faisant référence à son utilisation des services, les appels,les messages vocaux, les services internet…
  2. Les données d’interaction : informant sur les interactions du client avec les services telles le service client, les centres d’appels, …
  3. Les données de contexte : toute autre donnée pouvant caractériser le client telles les données personnelles

 

Architecture fonctionnelle

L’on peut remarquer que les données contextuelles telles state, area code et phone ne sont pas très significatives dans le problème que nous cherchons à résoudre. Ces variables ont donc été écartées du processus.

Spark
Outils pour gérer les différentes tâches impliquées dans la mise en place d’un modèle en machine learning

Nous n’aurons donc plus à travailler avec des valeurs catégorielles dans le processus de construction de notre modèle.

Comme dit plus haut, Spark fournit des outils pour gérer les différentes tâches impliquées dans la mise en place d’un modèle : 

  1. Les Transformeurs sont utilisées lors de conversions ou modifications de features
  2. Les Extracteurs aident à extraire les features des données brutes
  3. Les Sélecteurs fournissent le moyen de sélectionner un nombre donné de features sur un plus grand ensemble de features
  4. Les Estimateurs constituent l’abstraction du concept d’algorithme d’apprentissage automatique qui est utilisé pour produire un modèle par application sur des données

Notre première étape consiste à faire quelques tâches exploratoires des données : statistiques numériques sur les différentes colonnes de variables numériques, étude de corrélation et d’intercorrélation et pouvoir de prédiction de chaque variable.

Ces tâches visent à fournir une assez bonne compréhension des données qui nous sont fournies.

Durant le prétraitement, nous effectuons le ‘bucketing’ des colonnes de variables continues. Le transformeur Bucketizer de Apache Spark transforme une colonne de features continues en une autre constituée de ‘buckets’ qui sont spécifiés par l’utilisateur.

On crée finalement un vecteur unique de features en utilisant le transformeur VectorAssembler de Apache Spark. Cela nous permet d’effectuer une réduction de dimensions en utilisant le transformeur PCA de Apache Spark.

L’Analyse en Composantes Principales (PCA) est une procédure statistique utilisant une transformation orthogonale pour convertir un ensemble d’observations corrélées en un ensemble d’observations non corrélées que l’on appelle composantes principales.

val assembler = new VectorAssembler(« Churn_Assembler »)
  .setInputCols(assemblerColumns.toArray)
  .setOutputCol(« assembled »)

stages :+= assembler

val reducer = new PCA(« Churn_PCA »)
.setInputCol(assembler.getOutputCol)
.setOutputCol(« features »)
.setK(reducer_num_dimensions)

stages :+= reducer

L’estimateur utilisée est la classe XGBoostClassifier du package classification de XGBoost. Il lui est donné les valeurs adéquates des paramètres obtenues après validation croisée.Pour explication de la signification de ces paramètres et plus, se rendre sur le site de XGBoost.

val xgbParam = Map(

« eta » -> booster_eta,

« max_depth » -> booster_max_depth,

« objective » -> booster_objective,

« num_round » -> booster_num_round,

« num_workers » -> booster_num_workers,

« min_child_weight » -> booster_min_child_weight,

« gamma » -> booster_gamma,

« alpha » -> booster_alpha,

« lambda » -> booster_lambda,

« subsample » -> booster_subsample,

« colsample_bytree » -> booster_colsample_bytree ,

« scale_pos_weight » -> booster_scale_pos_weight,

« base_score » -> booster_base_score

)

val xgbClassifier = new XGBoostClassifier(xgbParam)

.setFeaturesCol(reducer.getOutputCol)

.setLabelCol(« label »)

Le classifieur est alors ajouté à nos stages pour constituer le pipeline final :

stages :+= xgbClassifier

val pipeline = new Pipeline(« Churn_Pipeline »).setStages(stages)

Le modèle est obtenu par application de ce pipeline sur les données d’entraînement. Ce modèle obtenu est exporté sous forme d’un Bundle Mleap :

implicit val sbc : SparkBundleContext = SparkBundleContext()
.withDataset(model.transform(train))

(for (bundle <- managed(BundleFile(« jar:file:/tmp/churn-model-protobuff.zip »))) yield {
  model.writeBundle.format(SerializationFormat.Protobuf).save(bundle).get
}).tried.get

Le modèle exporté sera utilisé dans notre application web pour effectuer la prédiction de churn pour les ‘nouveaux’ clients “en ligne”.

val dirBundle : Transformer= (for(bundle <- managed(BundleFile(« jar: »+cwd+« conf/resources/churn-model-protobuff.zip »))) yield {
  bundle.loadMleapBundle().get.root
}).tried.get

val transformedLeapFrame = dirBundle.transform(leapFrame).get

Résultats

Eventuellement, nous aurons besoin d’ajouter les informations des clients à ‘scorer’. Pour cela, on peut les ajouter individuellement ou en ajouter plusieurs à la fois en uploadant un fichier. Pour rappel, le modèle étant issu d’un apprentissage automatique, pour l’utiliser il doit lui être donné des données de même nom et contenant le même nombre de variables que celles utilisées lors de l’entraînement.

 

Résultats

Eventuellement, nous aurons besoin d’ajouter les informations des clients à ‘scorer’. Pour cela, on peut les ajouter individuellement ou en ajouter plusieurs à la fois en uploadant un fichier. Pour rappel, le modèle étant issu d’un apprentissage automatique, pour l’utiliser il doit lui être donné des données de même nom et contenant le même nombre de variables que celles utilisées lors de l’entraînement.

Churn : comment construire un modèle de prédiction ?n modélede
Informations sur les clients à scorer

L’étape suivante après l’ajout de clients est la prédiction  proprement dite en utilisant le modèle précédemment exporté.

Scoring client
Résultat du modèle de prédiction de churn

Les données ci-dessous sont sorties par le modèle. Ils informent sur la probabilité et la confidence du client d’appartenir à chacune des deux classes autrement dit le score d’appétence d’un client à ‘churner’ ou non.

Affecter un score à vos clients pour prédire le churn et mener des actions sur-mesures

Dépendamment de ces valeurs, le client est prédit comme étant un potentiel ‘churner’ ou pas en respect au ‘threshold’ choisi.

Éventuellement ces prédictions peuvent être enregistrées dans une base de données pour des utilisations ultérieures.

Dépendamment de leurs scores d’appétence à ‘churner’, les clients peuvent être classés en clients à ‘haut risque’, à ‘risque moyen’ ou à ‘faible risque’.

Affecter un score à vos clients pour mener des actions marketings chirurgicales

Cette segmentation peut aider à rediriger les efforts marketing de rétention de manière plus précise vers les clients ciblés, comme l’envoi de messages ciblés :

Rétention client
Rediriger les actions marketing de manières plus précises

Conclusion

Le phénomène de ‘churn’ est omniprésent dans les télécommunications du fait notamment de la forte compétitivité qui y règne. Penser ce phénomène d’une manière différente en prônant la rétention pourrait s’avérer très bénéfique. A travers la prédiction, l’utilisation des techniques de machine learning couplées au Big Data peut aider à rediriger les stratégies marketing visant la rétention vers les clients qu’il faut.

Sur une autre dimension, en considérant qu’un client est influencé par son réseau (ensemble des autres clients avec qui il communique souvent), si certains  membres de son réseau “churnent”, il est très probable qu’il suivra.

Considérer les informations  non plus restreintes à son interaction avec les services mais y ajouter les informations liées à son interaction avec son réseau de clients peut contribuer à augmenter les performances et la précision d’un modèle prédictif de l’attrition client.

 

Awa Thiam

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *