Vous êtes sur la page 1sur 102

REPUBLIQUE TUNISIENNE

MINISTERE DE L’ENSEIGNEMENT SUPERIEUR ET

DE LA RECHERCHE SCIENTIFIQUE

Université de Jendouba
Institut Supérieur d’Informatique de Kef

RAPPORT DE MEMOIRE DE FIN D’ETUDES


Présenté en vue de l’obtention du

DIPLÔME DE MASTERE DE RECHERCHE


EN SYSTEME D’INFORMATION ET WEB

Implémentation d’une solution de prédiction de taux de


désabonnement « Customer Churn » et d’évaluation de la
clientèle pour un opérateur de télécommunication

Réalisé par

LABIDI Ali

Encadré par : Mr. MAHER HENI

Soutenu le : …/…/2019 devant le jury composé de :

Président : …………………
Rapporteur : ……………

Année Universitaire 2018-2019


Dédicaces
Je dédie ce travail avec grand amour et fierté à mes chers Parents,
ma famille, mes professeurs et mes encadreurs.
Je le dédie de même au staff de Centre International de Transmission
Tunisie Telecom et à toute personne qui m’a supporté tout au long de
la période de la réalisation de ce projet.

LABIDI Ali
Remerciements

Je tiens à remercier mon encadrant Mr Maher Heni qui, par son expérience,
son don d’écoute et sa tolérance, a guidé mon activité tout en préservant mon
esprit d’initiative, durant toute la période de construction du projet.

J’adresse également mes remerciements à l’ensemble des professeurs du


Master de Système d’Information et Web pour l’enseignement qu’ils m’ont
apporté et pour leur accompagnement pédagogique.
Table des matières
Introduction Générale .............................................................................................................. 1
Chapitre 1 Contexe de projet .................................................................................................. 2
1.1. Introduction ......................................................................................................................... 2
1.2. Prédiction du churn ............................................................................................................. 2
1.2.1. Les facteurs de risque ................................................................................................... 2
1.2.2. Identifier et analyser les causes possibles de désabonnements .................................... 3
1.2.3. Les influenceurs ........................................................................................................... 4
1.2.4. Stratégie anti-churn ...................................................................................................... 5
1.3. Data Mining......................................................................................................................... 6
1.4. Machine Learning ............................................................................................................... 8
1.5. Conclusion ........................................................................................................................... 8
Chapitre 2 Etat de l’art ............................................................................................................ 9
2.1. Introduction ......................................................................................................................... 9
2.2. Positionnement de problème ............................................................................................... 9
2.3. Taux de désabonnement ...................................................................................................... 9
2.4. Effets du désabonnement .................................................................................................. 10
2.4.1. Augmentation des coûts ............................................................................................. 10
2.4.2. L’insatisfaction des clients ......................................................................................... 10
2.5. Approche Business Intelligence (BI) traditionnelle .......................................................... 10
2.5.1. Mesurer le désabonnement ......................................................................................... 10
2.5.2. Résoudre le probléme de désabonnement .................................................................. 11
2.5.2.1. Améliorations des services .................................................................................. 11
2.5.2.2. Envoi de promotion agressives post-churn ......................................................... 12
2.5.3. Lacunes de l’approche BI traditionnelle .................................................................... 12
2.5.3.1. Enjeu des agrégats ............................................................................................... 12
2.5.3.2. Enjeu de la latence............................................................................................... 12
2.6. Changement de paradigme ................................................................................................ 13
2.7. Intervention de Machine Learning .................................................................................... 14
2.7.1. Concepts ..................................................................................................................... 14
2.7.2. Les principales étapes au développement d’un modèle prédictif ............................... 14
2.8. Conclusion ......................................................................................................................... 16
Chapitre 3 Analyse prédictive ............................................................................................... 17
3.1. Introduction ....................................................................................................................... 17
3.2. Collection des données utiles ........................................................................................... 17
3.2.1. Données ...................................................................................................................... 17
3.2.2. Informations ............................................................................................................... 17
3.2.3. Savoir ......................................................................................................................... 17
3.3. Différentes étapes d’extraction de Connaissances ............................................................ 18
3.4. Importation et préparation des données............................................................................. 19
3.5. Modèles de prédiction ....................................................................................................... 21
3.5.1. Sélection et création des variables important ............................................................. 22
3.5.1.1. Sélection univariée............................................................................................... 23
3.5.1.2. Importance des fonctionnalités ............................................................................ 23
3.5.1.3. Matrice de corrélation ........................................................................................... 23
3.5.2. Algorithmes de Prédiction .......................................................................................... 24
3.5.2.1. Régression logistique .......................................................................................... 24
3.5.2.2. Technique de sur-échantillonnage minoritaire synthétique ................................ 24
3.5.2.3. Élimination récursive de caractéristiques ............................................................ 25
3.5.2.4. Arbre de décision ................................................................................................ 25
3.5.2.5. Forêt Aléatoire..................................................................................................... 26
3.5.2.6. Naïve Gaussien Bayes ........................................................................................ 27
3.5.2.7. Support Vector Machine .................................................................................... 28
3.5.2.8. Prédicteur LightGBM ......................................................................................... 29
3.5.2.9. Prédicteur XGBoost ........................................................................................... 30
3.5.3. Performances du modèle ............................................................................................ 31
3.5.3.1. Mesures de performance du modèle .................................................................... 31
3.5.3.2. Matrices de confusion ......................................................................................... 31
3.5.3.3. Courbe ROC ‘’ Receiver Operating Characteristic ‘’ ......................................... 32
3.5.3.4. Courbe de rappel de précision ............................................................................. 33
3.6. Conclusion ......................................................................................................................... 34
Chapitre 4 Analyse des résultats……………………………………………………………35
4.1. Introduction ....................................................................................................................... 35
4.2. Environnement logiciel ..................................................................................................... 35
4.3. Analyse de données exploratoire....................................................................................... 35
4.4. Prétraitement des données ................................................................................................. 42
4.4.1. Matrice de corrélation ................................................................................................ 42
4.4.2. Techniques de sélection des fonctionnalités .............................................................. 44
4.4.3. Sélection univariée « Test du chi carré » ................................................................... 45
4.5. Construction du Modèle de prédiction .............................................................................. 45
4.5.1. Modèle de base ‘’ Regression logistic‘’ ..................................................................... 45
4.5.2. Technique de sur-échantillonnage minoritaire synthétique........................................ 46
4.5.3. Élimination récursive de caractéristiques ................................................................... 47
4.5.4. Visualisation de l'arbre de décision ............................................................................ 47
4.5.5. Forêt aléatoire ‘’RF ‘’ ................................................................................................ 51
4.5.6. Naïf Gaussien Bayes .................................................................................................. 53
4.5.7. Vecteur de support machine ‘’SVM ‘’ ....................................................................... 54
4.5.8. Classificateur LightGBM ........................................................................................... 54
4.5.9. Classificateur XGBoost .............................................................................................. 55
4.6. Performances du modèle ................................................................................................... 55
4.6.1. Mesures de performance du modèle ........................................................................... 55
4.6.2. Comparer les métriques du modèle ............................................................................ 56
4.7. Validation de Modèle avec Knime .................................................................................... 57
4.7.1. Pré-traitement ............................................................................................................. 57
4.7.2. Entraînement .............................................................................................................. 58
4.7.3. Évaluation................................................................................................................... 58
4.7.4. Déploiement ............................................................................................................... 59
4.8. Conclusion ......................................................................................................................... 67
Conclusion Générale ................................................................................................................ 68
Webographie ............................................................................................................................ 69
Bibliographie ............................................................................................................................ 70
Annexes .................................................................................................................................... 71
Liste des Figures

Figure 1: Churn Customer .......................................................................................................... 2


Figure 2 : Les étapes de prédiction [2] ....................................................................................... 6
Figure 3 : Data Mining, une foule d’applications [3] ................................................................. 7
Figure 4 : Efforts marketing dans une approche BI traditionnelle [5] ..................................... 11
Figure 5: exemple sondages [5] ............................................................................................... 12
Figure 6 : Contact Clients avant désabonnement [5] ............................................................... 13
Figure 7 : exemple de message au clients [5]........................................................................... 16
Figure 8 : Processus Data Mining[6]........................................................................................ 19
Figure 9 : Aperçu Jupyter-notebook......................................................................................... 20
Figure 10 : Aperçu de contenu de fichier ................................................................................. 20
Figure 11 : Visualisation des données chargées ....................................................................... 21
Figure 12 : arbre de décision [9] .............................................................................................. 26
Figure 13 : Prédicteur Random Forest [10] .............................................................................. 27
Figure 14 : Explication SVM [11]............................................................................................ 29
Figure 15 : Prédicteur SVM [B4] ............................................................................................. 29
Figure 16 : LGBM [12] ............................................................................................................ 30
Figure 17 : XGBoost [12]......................................................................................................... 31
Figure 18 : Matrice Confusion ................................................................................................. 32
Figure 19 : Rappel/Précision [13] ............................................................................................ 34
Figure 20 : Statistique globale .................................................................................................. 36
Figure 21 : Répartition selon le genre ...................................................................................... 36
Figure 22: Répartition selon nombres des lignes téléphoniques .............................................. 37
Figure 23 : Répartition selon type de service internet .............................................................. 37
Figure 24 : Répartition selon type de contrat ........................................................................... 38
Figure 25 : Répartition selon méthode de payement ................................................................ 38
Figure 26: Répartition selon durée de mandat ......................................................................... 39
Figure 27: Répartition des clients selon période d'abonnement ............................................... 39
Figure 28 : charge mensuelle des clients .................................................................................. 40
Figure 29: Classification des clients selon la charge totale ...................................................... 40
Figure 30 : charges totales et période d’abonnement par groupe d'occupation ....................... 41
Figure 31 : Charges mensuelles et période d’abonnement par groupe d'occupation ............... 41
Figure 32 : Charges mensuelles et charges totales par groupe d'occupation ........................... 42
Figure 33: Matrice Corrélation ................................................................................................. 43
Figure 34 : Importances des variables ...................................................................................... 44
Figure 35 : Extraction de caractéristiques chi^2 ...................................................................... 45
Figure 36 : Courbe ROC & Matrice de confusion de régression logistique ............................ 46
Figure 37 : Courbe ROC & Matrice de confusion de régression logistique(SMOTE) ............ 47
Figure 38 : Courbe ROC & Matrice de confusion de régression logistique(RFE) .................. 47
Figure 39 : Arbre de décision ‘’Gini‘’ ..................................................................................... 49
Figure 40 : Arbre de décision ‘’Entropy‘’ ............................................................................... 50
Figure 41 : Courbe ROC & Matrice de confusion d’arbre de décision .................................... 51
Figure 42 : RF ‘’Entropy‘’ ....................................................................................................... 52
Figure 43 : Courbe ROC & Matrice de confusion RF ............................................................. 53
Figure 44 : Courbe ROC & Matrice de confusion GaussianNB .............................................. 53
Figure 45 : Courbe ROC & Matrice de confusion SVM.......................................................... 54
Figure 46 : Courbe ROC & Matrice de confusion LGBM ....................................................... 54
Figure 47 : Courbe ROC & Matrice de confusion XGBoost ................................................... 55
Figure 48 : Comparaison des métriques des modèles .............................................................. 57
Figure 49 : phase pré-traitement............................................................................................... 58
Figure 50 : phase entrainement ................................................................................................ 58
Figure 51 : Construction workflow d’un modèle ..................................................................... 59
Figure 52 : phase déploiement ................................................................................................. 60
Figure 53 : Construction workflow des modèles ..................................................................... 61
Figure 54 :Résultats workflow régression logistique ............................................................... 62
Figure 55: Résultats workflow Decision tree ........................................................................... 63
Figure 56 : Résultats workflow RF .......................................................................................... 63
Figure 57 : Résultats workflow NB.......................................................................................... 64
Figure 58 : Résultats workflow SVM ...................................................................................... 65
Figure 59 : Résultats workflow LGBM .................................................................................... 65
Figure 60 : Résultats workflow XGBoost ................................................................................ 66
Figure 61 : Graphique de comparaison .................................................................................... 67
Liste des tableaux
Tableau 1 : Exemple Matrice Confusion .................................................................................. 32
Tableau 2 : Performance des modèles ...................................................................................... 56
Tableau 3 : Comparaison de performance ................................................................................ 66
Liste des abréviations
AUC: Zone sous la courbe
CSV: valeurs séparées par des virgules
DT: Arbre de décision
GBM: Gradient Boosted Machine
LR : Régression logistique
PCA: analyse des composants principaux
RF: Forêt aléatoire
ROC: caractéristique de fonctionnement du récepteur
RFE : Élimination récursive de caractéristiques
SMOTE : Technique de sur-échantillonnage minoritaire synthétique
SVM : Support Vector Machine
XGBoost: Boosting de gradient extrême
Introduction Générale
Le secteur de la télécommunication est devenu l'une des principales industries des pays
développés. Le progrès technique et le nombre croissant d'opérateurs ont accru le niveau de
concurrence. Les entreprises travaillent dur pour survivre sur ce marché concurrentiel en
utilisant des stratégies multiples. Le maintien d’un client existant coûte bien moins que
l’acquisition d’un nouveau, c’est pour cette raison que les entreprises doivent réduire le
potentiel de désabonnement des clients « transfert de clientèle d'un fournisseur à un autre ».

Le désabonnement des clients est une préoccupation considérable dans les secteurs de
services où les services sont très compétitifs. D'autre part, la prévision des clients susceptibles
de quitter l'entreprise représentera une source de revenus supplémentaire potentiellement
importante si cela est fait à un stade précoce. Des nombreuses recherches ont confirmé que la
technologie d’apprentissage automatique est très efficace pour prévoir cette situation. Cette
technique est appliquée en tirant parti des données précédentes.

Dans ce projet, nous nous sommes concentrés sur l’évaluation et l’analyse des performances
d’un ensemble de méthodes et d’algorithmes d’apprentissage automatique permettant de
prévoir le désabonnement des clients dans des entreprises de télécommunications. Dans un
premier abord nous présenterons des fondements, à savoir l’analyse de données, Machine
learning et Prédiction. Par la suite, nous vous présenterons la problématique et qui ont la
vocation d’être résolues.
Passant par la suite à notre choix une solution technologique, des modèles de prédiction
développé par python à base de machine learning. L’output généré fera objet d’analyse et
d’interprétation pour démontrer l’utilité de l’analyse de données dans la prédiction de faits
dans le domaine de télécommunication.

1
Chapitre 1

Contexte du projet
Chapitre 1 : Contexte du projet

1.1. Introduction
Dans ce premier chapitre, nous allons aborder les concepts clés relatifs de notre sujet à
savoir : La prédiction du churn, vers l’analyse des données et en finissant par l’intervention de
la machine Learning dans la prédiction. Nous allons définir leurs différentes notions ainsi que
leurs domaines d’application.

1.2. Prédiction du churn

Churn, ou le désabonnement, qui désigne l’érosion du portefeuille clients, est une


donnée quantifiable. Les entreprises doivent désormais prendre en compte cet indicateur de
performance dans leur stratégie de conquête et de fidélisation, notamment grâce à l’historique
des données.

Figure 1: Churn Customer

Le désabonnement est un risque normal et fréquent. C’est pourquoi l’analyse du taux de


désabonnement, qui est un véritable indicateur de performance, permet de prédire le risque de
perte de clients en temps réel, d’identifier les besoins réels des clients et d’adapter l’offre [1].

1.2.1. Les facteurs de risque


Le risque de désabonnement peut varier d’un client à l’autre selon ses motivations :
 Un risque de désabonnement élevé peut concerner des clients qui ne correspondent pas
à l’audience de l’entreprise concernée et peut également traduire un besoin ponctuel.
 Un risque moyennement élevé peut indiquer des besoins occasionnels ou espacés.

2
Chapitre 1 : Contexte du projet

 Un risque faible peut traduire la nécessité de réajuster votre offre ou d’adapter


davantage les services aux besoins de la clientèle.

D’autres facteurs peuvent influencer le désabonnement des clients. On parle généralement du


désabonnement conjoncturel et structurel, liée au contexte économique, notamment dans les
secteurs financiers et bancaires. Le désabonnement peut également être d’ordre anecdotique
ou survenir après une insatisfaction du client. C’est souvent le cas lorsqu’une entreprise met
fin à son contrat avec un prestataire de services : transporteurs, logiciels de gestion, etc…

La dynamique concurrentielle peut elle aussi influer sur les risques de désabonnement,
comme c’est le cas dans le secteur de télécommunication, où elle représente un défi de taille.
Les entreprises spécialisées dans la gestion des données sont donc de plus en plus nombreuses
à proposer des outils de prédiction. Ceux-ci permettent, à partir des données clients, de
déterminer ceux qui ont la plus forte probabilité de désabonnement.
Prédire le désabonnement permet d’adapter sa stratégie de fidélisation, et d’épargner ainsi aux
entreprises les efforts déployés pour retenir les clients.

1.2.2. Identifier et analyser les causes possibles de désabonnements

S’il est difficile d’empêcher les clients de quitter une plateforme donnée, on peut en
revanche identifier les causes des désabonnements précédents et tenter d’y remédier. Plusieurs
outils permettent de collecter et de retrouver ces données :
 Le sondage en phase de désabonnement, qui doit proposer plusieurs choix de réponse
au client.
 Des outils de prédiction et d’analyse des données liées au désabonnement.
 Une stratégie de suivi afin de prévenir le départ des clients, notamment à travers des
campagnes personnalisées et des enquêtes.

Notons que l’entreprise elle-même peut être à l’origine de la perte du client, dans le cas d’un
défaut de paiement par exemple.
Une fois les causes de désabonnement décelées et classées, il est ensuite possible de rectifier
le tir en mettant en place des actions destinées à réduire la perte de clients. Parmi ces actions,
on peut citer :
 Cibler la bonne audience, en étudiant notamment les besoins de vos prospects.

3
Chapitre 1 : Contexte du projet

 Fidéliser la clientèle existante en rendant votre site plus intuitif.


 Mettre en place un suivi de la clientèle, en lui soumettant régulièrement un
questionnaire de satisfaction sur votre site, par des sondages e-mailing ou via les
réseaux sociaux.
 Etablir un modèle de prédiction du taux de désabonnement.

Afin d’anticiper efficacement au désabonnement des clients, l’intervention de l’analyse des


données (data mining) et l’apprentissage machine (machine learning) est exigée.
Des entreprises comme Microsoft, Soft Computing ou Censio ont développé des outils de
mesure de désabonnement, basés à la fois sur l’évolution des entreprises et sur les habitudes
des clients.
Notons que les comportements et besoins des clients peuvent varier d’un secteur à un autre.
Ils varient même d’un département à un autre dans certains secteurs : les télécommunications
ou les banques de détail sont régulièrement confrontés aux clients dits switchers, qui peuvent
passer d’une entreprise à une autre au gré de la variation de leurs besoins.
La mesure et la gestion de désabonnement doivent donc suivre des schémas différents, de plus
en plus précis et personnalisables. Cela est possible grâce au machine-learning et l’analyse
des données. Dataiku, une société spécialisée dans la data science, propose ainsi aux
entreprises de développer, à partir d’un modèle pré-construit, leur outil de prédiction
personnalisé. Ces outils permettent par exemple de prévoir le panier moyen de chaque client,
de déterminer la taille de celui-ci, et d’identifier ceux qui deviendront des comptes clés. De
même, une démarche de science des données permet d’identifier les clients les plus
susceptibles de désabonné.

1.2.3. Les influenceurs

L’objectif étant d’éviter autant que possible le désabonnement des clients. Lorsque, en
dépit des précautions prises, le désabonnement survient, l’entreprise doit prendre des mesures
visant à retenir ses clients et déployer une stratégie anti-churn efficace pour éviter de perdre
plus de clients.
Il s’agit donc d’éviter le désabonnement et de limiter le risque de perte quand celui-ci s’avère
inévitable. Une manœuvre anti-churn efficace prend en compte les grands comptes : clients
les plus rentables, influenceurs et prescripteurs

4
Chapitre 1 : Contexte du projet

Gérer le risque de désabonnement et la perte de ces clients passe généralement par trois
mesures différentes :

 Les actions de fidélisation, en visant la satisfaction du client, doivent susciter l’envie


de rester tout en le laissant libre de son choix. Dans le secteur des télécommuncations
les abonnements sans durée d’engagement sont un bon exemple de stratégie de
fidélisation.
 Les actions de prévention consistent à proposer un nouvel engagement aux clients
avant l’expiration des contrats en cours. C’est également un bon “système d’alarme”
pour prédire un risque éventuel de désabonnement. Des entreprises comme Billjobs ou
LinkedIn proposent systématiquement à leurs clients de renouveler leur abonnement
lorsque celui-ci approche de sa date d’expiration.
 Les actions de rétention visent à rappeler au client sur le départ les avantages qu’il
aurait à maintenir son contrat, et qu’il perdrait s’il le résiliait. Cela comporte l’accès à
certaines fonctionnalités pour les sites Internet professionnels, la relation client dans le
secteur de télécommunication, les prix préférentiels, etc…

1.2.4. Stratégie anti-churn

Lorsqu’une stratégie anti-churn est assez prévoyante et efficace, les revenus de l’entreprise
s’en ressentent immédiatement. Le fait d’avoir mesuré le risque de désabonnement permet par
conséquent de mesurer immédiatement et avec précision le résultat en termes de revenus. Il
faut donc ajouter aux actions de conquête et de fidélisation des actions de reconquête, telles
que des campagnes ad-hoc ou un enrichissement du programme de fidélisation. C’est le trio
gagnant pour apprendre de ses erreurs, rectifier le tir, et soutenir la prospérité de l’entreprise.

L'étude met en exergue un cycle de six étapes clés dans l'élaboration de solutions prédictives
grâce au Big data : [2]

 Identifier les données utiles en évaluant diverses sources possibles


 Triturer les données, les agréger, les compléter, etc…
 Construire un modèle prédictif, à partir d'algorithmes statistiques et de 'Machine
Learning'
 Evaluer l'efficacité et la précision du modèle prédictif
 Utiliser le modèle prédictif pour orienter des décisions métiers

5
Chapitre 1 : Contexte du projet

 Assurer un suivi de l'application et de l'efficacité du modèle prédictif

Figure 2 : Les étapes de prédiction [2]

Pour manipuler les deux premiers étapes d’études ont besoin donc de data mining que nous
allons aborder maintenant.

1.3. Data Mining

Le Data Mining est une composante essentielle des technologies Big Data et des
techniques d’analyse de données volumineuses. Il s’agit là de la source des Big Data
Analytics, des analyses prédictives et de l’exploitation des données. [B1]
Comme dans toute exploitation, le but recherché est de pouvoir extraire de la richesse. Ici, la
richesse est la connaissance de l'entreprise. Fort du constat qu'il existe au sein des bases de
données de chaque entreprise une ressource de données cachées et surtout inexploitée, le data
Mining permet de faire les apparaître, et cela grâce à un certain nombre de techniques
spécifiques. Nous appellerons data Mining l'ensemble des techniques qui permettent de
transformer les données en connaissances. Le périmètre d'exploitation du data Mining ne se
limite pas à l'exploitation des Data warehouse. Il veut d'être capable d'exploiter toutes bases

6
Chapitre 1 : Contexte du projet

de données contenant de grandes quantités de données telles que des bases relationnelles, des
entrepôts de données mais également des sources plus ou moins structurées comme internet.
Le data Mining est un processus itératif qui met en œuvre un ensemble de techniques
hétéroclites tel que le data warehouse, de la statistique, de l'intelligence artificielle, de
l'analyse des données et des interfaces de communication homme - machine. Le résultat du
data mining peut se présenter sous différent format : texte plat, tableau, graphique...[3]

Avec le succès de la numérisation, l'avènement d'internet, le web représente un réservoir de


données colossal qui continue de croître chaque jour et l'émergence des objets connectés, les
entreprises sont entrées dans l'air du Big Data. Elles sont inondées d'informations en tous
genres. Et le volume des données stockées a de quoi faire tourner les têtes. Sans parler de leur
variété (textes, images, sons, etc.) qui ne cesse de s'accroître, toujours en corrélation avec les
données qui circulent en ligne.

Figure 3 : Data Mining, une foule d’applications [3]

Le data Mining peut explorer les données pour découvrir un lien "inconnu". Quand le
décideur n’a pas d'hypothèse ou d'idée sur un fait précis, il peut demander au système de
proposer des associations ou des corrélations qui pourront aboutir à une explication. Il est
utopique de croire que le data Mining pourrait remplacer la réflexion humaine. Le data
Mining ne doit être vu et utiliser uniquement en tant qu'aide à la prise de décision. Par contre,

7
Chapitre 1 : Contexte du projet

l'informatique décisionnelle dans son ensemble, et plus particulièrement le data Mining


permet de suggérer des hypothèses. La décision finale appartiendra toujours au décideur.

1.4. Machine Learning


La Machine Learning, c’est la capacité à faire progresser un programme dans la tâche
qu’il a effectué, de manière autonome, sans intervention humaine. Cette amélioration de la
tâche s’effectue en fonction des données que ce programme reçoit pour l’alimenter, et des
résultats produits par le traitement qu’il effectue. [4]
Cibler le bon client au bon moment, améliorer la qualité de service, déployer une stratégie
marketing d’analyse prédictive à partir des données sont autant de domaines d’application de
l’apprentissage automatique. Cette révolution reposant sur la mise en place d’algorithmes
auto-apprenants marque un véritable tournant pour la relation client.
Un même élan unit les marketeurs dans l’analyse des données clients et l’usage qui peut en
être faite en matière de satisfaction et de fidélisation client. Car l’enjeu est de taille : exploiter
la data permet aussi de devancer les attentes et besoins des consommateurs. Cette tâche
ambitieuse repose intégralement sur le machine Learning qui en traitant de grandes quantités
de données recueillies sur les réseaux sociaux, objets connectés et autres fichiers clients
permet de décrypter les comportements d’achat.
Si l’intelligence artificielle est une science visant à développer des appareils capables de se
comporter intelligemment, la machine Learning désigne la mise en œuvre des méthodes de
calcul informatiques ou algorithmes qui supportent l’intelligence des machines. Le dernier
n’est qu’une approche du premier : les algorithmes déployés dans ce cadre sont capables
d’auto-apprendre en temps réel. Plus ils ont de données à traiter, plus ils deviennent précis.

1.5. Conclusion
Dans ce premier chapitre, nous avons traité les concepts clés de notre sujet qui sont
respectivement Prédiction du churn, l’analyse des données et l’intervention de la machine
Learning. Nous avons aussi dégagé le lien entre ces disciplines qui convergent ensemble vers la
connaissance et la maîtrise d’un pouvoir indéniable de l’ère actuelle.

8
Chapitre 2

Etat de l’art
Chapitre 2 : Etat de l’art

2.1. Introduction
Rien d’étonnant lorsque l’on sait que plusieurs recherches prouvent qu’il coûte presque
5 à 25 fois plus cher d’aller chercher de nouveaux clients que de fidéliser ses clients existants.
Par conséquent, Les entreprises mettent en place des moyens colossaux pour atténuer le
désabonnement et maintenir leurs clientèles. Cette problématique est importante dans
l’industrie des fournisseurs de service comme par exemple Vidéotron, Netflix, les opérateurs
de télécommunications, etc…

Dans ce chapitre, nous présentons le problème de désabonnement ainsi que les différents
paradigmes utilisés par les industries pour remédier à cette problématique.

2.2. Positionnement de problème


Pour pouvoir survivre sur ce marché concurrentiel, les entreprises adoptent des
stratégies multiples qui permettent de générer davantage de revenus. Trois stratégies sont
principalement utilisées : (1) acquérir de nouveaux clients, (2) augmenter le nombre de clients
existants et (3) augmenter la période de rétention des clients. Cependant, la comparaison de
ces stratégies en tenant compte de la valeur du retour sur investissement (ROI) de chacune
d’elles a montré que la troisième stratégie est la stratégie la plus rentable, ce qui prouve que
conserver un client existant coûte bien moins que d’acquérir un nouveau client, en plus d'être
considéré comme beaucoup plus facile que la stratégie de montée en gamme. Pour appliquer
la troisième stratégie, les entreprises doivent réduire le potentiel de désabonnement des clients
[B2].
Le désabonnement des clients est une préoccupation considérable dans les secteurs de
services où les services sont très compétitifs, tel que le secteur de télécommunication. D'autre
part, la prévision des clients susceptibles de quitter l'entreprise représentera une source de
revenus supplémentaire potentiellement importante si cela est fait à un stade précoce.

Des nombreuses recherches ont confirmé que la technologie d’apprentissage automatique est
très efficace pour prévoir cette situation. Cette technique est appliquée en tirant parti des
données précédentes.

2.3. Taux de désabonnement


Les entreprises cherchent à mesurer le taux de désabonnement (Churn rate) afin de
pouvoir le réduire par la suite. Évidemment, on ne peut pas améliorer ce qu’on ne mesure pas.
Les approches analytiques et paradigmes usuels, comme le Business Intelligence (BI)

9
Chapitre 2 : Etat de l’art

traditionnelle, utilisent des indicateurs généralisés pour mesurer le désabonnement [5]. Ces
indicateurs présentent de l’information agrégée sur des données passées, par exemple le
nombre de désabonnement du mois dernier.
Le problème, c’est que les entreprises utilisant ces techniques sont continuellement dans une
approche réactive pour résoudre leur problème de désabonnement. Autrement dit, elles ont
toujours un temps de retard.
La bonne nouvelle c’est que l’apprentissage machine permet maintenant à ces entreprises de
développer des modèles prédictifs pour identifier les clients à risque avant qu’ils ne se
désabonnent. Plutôt que d’être réactives, les entreprises ont désormais la chance d’adopter une
approche proactive. Il s’agit là d’un véritable changement de paradigme.

2.4. Effets du désabonnement


2.4.1. Augmentation des coûts
Les clients qui tournent le dos aux services d’une entreprise au profit d’un compétiteur leur
coûtent très cher. Une fois perdus, il est extrêmement dispendieux de les reconquérir. En plus
d’avoir déjà dépensé beaucoup pour les acquérir. L’acquisition d’un nouveau client coûte
généralement 50 fois plus cher que de le fidéliser.
Une augmentation de seulement 5% du churn rate peut réduire les bénéfices de 25 à 95% et
affecter la valorisation de l’entreprise [B3].

2.4.2. L’insatisfaction des clients


Si vos clients ne sont pas satisfaits et se désabonnent de vos services, ils ne vont pas vanter
par l’entreprise dans leur entourage. Ces commentaires auront un impact négatif sur l’image
de marque et, à terme, cela fera augmenter significativement vos coûts d’acquisition.

2.5. Approche Business Intelligence (BI) traditionnelle


2.5.1. Mesurer le désabonnement
Les entreprises utilisent une approche BI (Business Intelligence) pour mesurer le taux de
désabonnement on l’appelle aussi taux d’attrition.

𝑇𝑎𝑢𝑥 𝑑𝑒 𝑑é𝑠𝑎𝑏𝑜𝑛𝑛𝑒𝑚𝑒𝑛𝑡=

10
Chapitre 2 : Etat de l’art

Le taux de désabonnement est important pour les entreprises puisqu’il est l’indicateur par
excellence de la satisfaction de leurs clients. S’ils sont frustrés et insatisfaits, ces indicateurs
sont essentiels pour mesurer les effets des actions marketing : sont-elles bénéfiques?
L’entreprise est-elle sur la voie de la rentabilité?

Le cœur du système de mesure de la satisfaction client est le taux de désabonnement.

2.5.2. Résoudre le probléme de désabonnement


L’extrant des approches BI traditionnelle est réactif par définition. Les activités marketing
sont donc entreprises après le désabonnement.

Figure 4 : Efforts marketing dans une approche BI traditionnelle [5]

L’image ci-dessus présente les efforts marketing dans une approche BI traditionnelle. La
question principale est : « Maintenant que le client s’est désabonné, comment nous pouvons le
regagner ? »

Les stratégies de rétention traditionnelles comportent des éléments permettant aux entreprises
d’apprendre de leurs erreurs et tenter de regagner leurs clientèles.

2.5.2.1. Améliorations des services

Des nombreuses entreprises vont s’adresser aux clients désabonnés pour comprendre leur
motif et améliorer leurs services en fonction de leurs commentaires.

11
Chapitre 2 : Etat de l’art

Exemple : les sondages de satisfaction. Malheureusement, leur taux de participation est


généralement très faible.

Figure 5: exemple sondages [5]

2.5.2.2. Envoi de promotion agressives post-churn


Une stratégie de rétention largement utilisée consiste à l’envoie de promotions agressives
post-Churn. Une fois de plus, le taux de conversion de ces offres est très bas. Une compagnie
nous rappelle une fois que nous l’avons quitté avec une offre alléchante. Pourquoi n’avons-
nous pas profité de ces rabais AVANT de quitter l’entreprise ?

2.5.3. Lacunes de l’approche BI traditionnelle


2.5.3.1. Enjeu des agrégats
Les agrégats présentent les grandes tendances mais cachent l’information la plus pertinente
et actionnable. Aucun agrégat ne communiquera le comportement d’un client en particulier.
C’est même l’effet inverse, un agrégat est une compression avec une perte d’information.

2.5.3.2. Enjeu de la latence


Un autre problème avec les approches BI est que l’indicateur du taux de désabonnement
présente uniquement des événements passés. Dans cette approche, les entreprises seront

12
Chapitre 2 : Etat de l’art

averties que quelque chose ne va pas, dans le meilleur des cas, le mois suivant le
désabonnement de leurs clients… mode réactif plutôt que proactif.

2.6. Changement de paradigme


Changement de paradigme grâce à l’apprentissage machine, l’entreprise pouvait
intervenir auprès de ses clients à risque, mais avant que ceux-ci quittent.
Exemple, offrant du marketing ultra-personnalisées aux clients qui ont le plus de risque de
quitter. C’est exactement ce qu’offre l’apprentissage machine : un système d’alerte proactif
pour identifier les clients à risque et leurs motifs particuliers.

Figure 6 : Contact Clients avant désabonnement [5]

L’image ci-dessus présente les efforts marketing dans l’apprentissage machine.


Les effets positifs :
 Concentrer les efforts, ressources matérielles et financières de rétention sur les clients
profitables.
 Réduire les coûts et les pertes.
 Augmenter le nombre de clients tout en réduisant le taux de désabonnement.

13
Chapitre 2 : Etat de l’art

2.7. Intervention de Machine Learning


2.7.1. Concepts
Un nouveau paradigme appliqué par les indusrties consiste à l’utilisation de l’apprentissage
machine pour contrer le désabonnement grâce aux données de l’entreprise. Les données
constituent la matière première pour alimenter n’importe quel modèle prédictif. En les
examinant vous pourrez identifier les caractéristiques et comportements à facteurs prédictifs
du désabonnement de vos clients.
Par exemple, vous pouvez regarder le nombre d’appels de support, les données de
consommation, les promotions en cours, le type et la composition des forfaits des clients qui
ont résilié leur contrat de service, etc…
En adaptant un modèle statistique selon ces facteurs prédictifs, vous pourrez obtenir la
probabilité de désabonnement des clients existants. En science des données, il s’agit d’une
problématique de classification binaire. Les prédictions indiquent la probabilité pour chaque
client qu’ils appartiennent ou non à la classe des clients à risque de désabonnement.

2.7.2. Les principales étapes au développement d’un modèle prédictif


Le développement d’un modèle prédictif suit des étapes bien précises afin d’assurer le
succès d’un projet. Voici les étapes et une courte description de chacune d’elles.

 Problématique et objectif d’affaires : La première étape consiste à définir la


problématique d’affaires ainsi que les résultats souhaités. Ce n’est qu’en comprenant
l’objectif final que vous pourrez construire un modèle utile. Dans notre cas, il s’agit
d’identifier les clients à risque de se désabonner.
 Collecter les données utiles : Nous devons ensuite identifier les meilleures sources de
données, puis les collecter et les agréger. Cela semble assez simple à priori, mais c’est
la partie la plus difficile. N’oublions pas qu’un modèle prédictif est toujours aussi bon
que la qualité des données utilisées pour le développer.
 Nettoyage, sélection et création des variables : La troisième étape, consiste à la
préparation des données qui alimenteront le modèle prédictif. C’est l’étape la plus
chronophage en apprentissage machine.
 La modélisation : Pour obtenir de bonnes prédictions, il faut trouver le bon
algorithme et évaluer sa performance. Il existe de très bons algorithmes open source
pouvant répondre à votre problématique et à vos données. Sachez que cette étape

14
Chapitre 2 : Etat de l’art

comporte généralement plusieurs itérations. Il existe des différences de performance,


de rapidité ou encore d’interopérabilité entre les algorithmes.

 La règle du 80/20 pour entraîner, tester et valider l’algorithme.

80% des données historiques sont utilisées pour entraîner le modèle statistique. Le 20%
restant est utilisé pour valider si le modèle donne les bons résultats. Ces données de test sont
vues comme des données nouvelles puisqu’elles n’ont pas été utilisées dans la phase
d’entrainement de l’algorithme.

 Obtenir les prédictions : Une fois le modèle statistique testé et validé, vous serez en
mesure d’identifier vos clients à risques. Un modèle permet non seulement de
découvrir ces clients mais également les caractéristiques ayant une influence sur le
désabonnement.
 Passer à l’action : Une fois que vous avez en main les probabilités que vos clients se
désabonnent vous devez mettre en place des actions concrètes.

Les prédictions ne servent à rien si elles ne sont pas suivies par des actions concrètes.
Examinez leur profil, identifiez leurs caractéristiques, analysez les interactions passées avec
vos services et produits. Communiquez vos plus récentes offres et services susceptibles de
combler leurs besoins. bien que s’assurer de leur proposer des solutions adaptées à leurs
besoins, de ce fait vous créerez un sentiment d’appartenance chez vos clients et cela les liera à
votre entreprise.

15
Chapitre 2 : Etat de l’art

Figure 7 : exemple de message au clients [5]

2.8. Conclusion

Dans ce chapitre nous avons présenté l’état de l’art dans le domaine de prédiction des
taux de désabonnement. Nous avons positionné notre problème et nous avons décrit le grand
titre de notre recherche.

16
Chapitre 3

Analyse Prédictive
Chapitre 3 : Analyse Prédictive

3.1. Introduction
Pour développer un modèle prédictif qui permet de résoudre le probélme de
désabonnement de clients, il faut collecter les données utiles, nettoyer ces données,
sélectionner les variables et finir par la modélisation. Ce qui fait appel aux deux intervenants
principaux qui sont le data mining et la machine learning,

Dans ce chapitre, nous présenterons les étapes de préparation de l’environnement nécessaire à


la simulation, ainsi que les differents outils et langage de programmation utilisés.

3.2. Collection des données utiles


3.2.1. Données
Les données sont des faits, des nombres, ou des textes pouvant être traités par un
ordinateur. Aujourd’hui, les entreprises accumulent de vastes quantités de données sous
différents formats, dans différentes quantités de données. Parmi ces données, on distingue :
 Les données opérationnelles ou transactionnelles telles que les données de ventes, de coûts,
d’inventaire, de tickets de caisse ou de comptabilité.
 Les données non opérationnelles, telles que les ventes industrielles, les données
prévisionnelles, les données macro-économiques.
 Les métadonnées, à savoir les données concernant les données elles-mêmes, telles que les
définitions d’un dictionnaire de données.
3.2.2. Informations
Les patterns, associations et relations entre toutes ces données permettent d’obtenir des
informations. Par exemple, l’analyse des données de transaction d’un point de vente permet
de recueillir des informations sur les produits qui se vendent, et à quel moment ont lieu ces
ventes.
3.2.3. Savoir
Les informations peuvent être converties en savoir à propos de patterns historiques ou des
tendances futures. Par exemple, l’information sur les ventes au détail d’un supermarché peut
être analysée dans le cadre d’efforts promotionnels, pour acquérir un savoir au sujet des
comportements d’acheteurs. Ainsi, un producteur ou un retailler peut déterminer quels
produits doivent faire l’objet d’une promotion à l’aide du Data Mining.

17
Chapitre 3 : Analyse Prédictive

3.3. Différentes étapes d’extraction de Connaissances

 Identification du problème : les systèmes de Business Intelligence ne se construisent


sur des données techniques, mais sur la compréhension des objectifs métiers de
l'entreprise. Cette recherche préliminaire aboutit à la définition de problèmes auxquels
la fouille de données tentera d'apporter une réponse.
 Rassemblement de données :la plupart du temps, les projets data mining assemblent
une grande quantité de données en combinant plusieurs sources de données
hétérogènes. Lorsque la source n'est pas directement un entrepôt de données, une
première phase consiste à repartir les données brutes et à les stocker localement sous
forme d'une base de données.
 Préparation des données : dans la réalité, les données extraites doivent être filtrées,
mise en forme, traitées avant de pouvoir être exploitées par les algorithmes de data
mining. La préparation des données est donc un point crucial, et les développeurs
doivent pouvoir s'appuyer sur les fonctionnalités d'une base de données pour effectuer
les traitements préliminaires tels que l'élimination des valeurs erronées ou régénération
de valeurs manquantes.
 Modélisation des données : Les fonctions de data mining se répartissent en deux
grandes catégories :

 Les fonctions supervisées : elles travaillent avec une cible, permettent de prédire
une valeur. La modélisation et la décision se fondent sur l'observation du passé.
Les fonctions supervisées sont aussi désignées par les termes fonctions distinctes
ou fonctions prédictives.
 Les fonctions non supervisées : elles détectent des relations, des analogies ou
concordances entre les données. Ces fonctions n'utilisent aucune cible. Ces
fonctions s'appuient sur le clustering hiérarchique, les centres mobiles, les règles
d'association, etc. pour extraire des similitudes dans les données. Les fonctions
non supervisées sont aussi désignées par les termes fonctions indirectes ou
fonctions descriptives.

 Évaluation des modèles : l'évaluation du (où) des modèle(s) est une étape importante
qui permet de vérifier que les questions posées lors de l'étape 1 ont bien trouvé une
réponse fiable. Une fois les modèles construits, il peut s'avérer nécessaire de revoir les

18
Chapitre 3 : Analyse Prédictive

étapes 2 et 3 afin d'affiner la collecte et la préparation des données. Le succès de cette


étape conditionne le déploiement.
 Déploiement : après avoir été validés, les modèle data mining sont déployés dans
leurs domaines d'application respectifs. Le déploiement couvre des domaines aussi
divers que la production de rapports ou l'automatisation de l'acquisition de données
dans l'entrepôt.

Figure 8 : Processus Data Mining[6]

3.4. Importation et préparation des données


Nous avons utilisé la version 3.7.1 de l’interpréteur Python sous jupyter-notebook et
nous avons exploiter le package « pandas », pour télécharger le fichier csv qui présente notre
base de données.

19
Chapitre 3 : Analyse Prédictive

Figure 9 : Aperçu Jupyter-notebook

Nous avons obtenus un ensemble de données avec 7043 lignes et 21 colonnes.

Figure 10 : Aperçu de contenu de fichier

La figure suivante présente un extrait de visualisation de base des données, on utilise la


commande « telcom.head(10) ».

20
Chapitre 3 : Analyse Prédictive

Figure 11 : Visualisation des données chargées

Nous avons extrait des matrices et des vecteurs de type « NumPy » pour les analyses
subséquentes avec « scikit-learn ». Une explication de toute les packages utilisées et leurs
utilités sera détaillée dans le chapitre suivant.
Les analyses prédictives consistent à utiliser les données et les techniques de Machine
Learning pour prédire les probabilités des tendances et des résultats utiles pour les
entreprises, en se basant sur l’historique des données. Ces analyses rassemblent plusieurs
technologies et disciplines comme les analyses statistiques, le data mining, la modélisation
prédictive et la Machine Learning pour prédire le futur des entreprises.

Dans la suite de chapitre, nous présentons les différents modèles de prédiction et les
différents outils de sélection et de création de variables important.

3.5. Modèles de prédiction


Les modèles de prédiction utilisent des méthodes mathématiques et informatiques pour
prédire un événement ou un résultat. Ces modèles prévoient un résultat à un moment ou à un
état futur en fonction des modifications apportées aux entrées du modèle. À l'aide d'un
processus itératif, on développe le modèle à l'aide d'un jeu de données d'apprentissage, puis
on le teste et le valide afin de déterminer sa précision pour les prévisions.

21
Chapitre 3 : Analyse Prédictive

Le processus de modélisation implique l’exécution d’un algorithme sur des données à des fins
de prédiction car le processus est itératif, il forme le modèle qui fournit les connaissances les
plus appropriées pour la réalisation des tâches. Voici quelques étapes de la modélisation
analytique.

 Collecte de données et nettoyage : Rassemblez les données de toutes les sources pour
extraire les informations nécessaires en nettoyant les opérations pour supprimer les
données bruitées afin que la prédiction puisse être précise.

 Analyse / transformation de données : Pour la normalisation, les données doivent


être transformées pour un traitement efficace. Mise à l'échelle des valeurs à une
normalisation de plage afin que la signification si les données ne sont pas
perdues. Supprimez également les éléments non pertinents par analyse de corrélation
pour déterminer le résultat final.

 Construire un modèle prédictif : une technique de régression est utilisée pour


construire un modèle prédictif à l'aide d'un algorithme de classification. Par la suite,
pour vérifier l'efficacité du modèle de classification par rapport aux données de test, il
faut identifier les données de test et appliquer des règles de classification classique

 Inférences / évaluation: Pour faire des déductions, il faut effectuer une analyse de
cluster et créer des groupes de données.

3.5.1. Sélection et création des variables important


La sélection des fonctionnalités et le nettoyage des données doivent constituer la première
et la plus importante étape de la conception de modèle. Des caractéristiques non pertinentes ou
partiellement pertinentes peuvent avoir un impact négatif sur les performances du modèle.

Les avantages de la sélection de fonctionnalités avant de modéliser les données sont :


 Réduit les sur-ajustements : moins de données redondantes signifie moins
d'opportunités pour prendre des décisions basées sur le bruit.
 Améliore la précision : moins de données trompeuses permettent
d'améliorer la précision de la modélisation.

22
Chapitre 3 : Analyse Prédictive

 Réduction du temps de formation : moins de points de données réduisent


la complexité de l'algorithme et l'entraînement des algorithmes est plus
rapide.

Trois techniques de sélection de fonctionnalités faciles à utiliser et qui donnent également de


bons résultats on l’utilise dans notre modèle.
 Sélection univariée
 Importance des fonctionnalités
 Matrice de corrélation

3.5.1.1. Sélection univariée


Les tests statistiques peuvent être utilisés pour sélectionner les entités qui ont la relation la
plus forte avec la variable de sortie.

La bibliothèque « scikit-learn » fournit la classe « SelectKBest » qui peut être utilisée avec une
suite de différents tests statistiques pour sélectionner un nombre spécifique de fonctionnalités.

On utilise dans notre cas le test statistique chi-carré (chi²) pour les caractéristiques non
négatives afin de sélectionner les meilleures caractéristiques du jeu de données de prévision du
désabonnement des clients.

3.5.1.2. Importance des fonctionnalités

Vous pouvez connaître l'importance de chaque entité de votre ensemble de données en


utilisant la propriété d'importance du modèle.
L'importance de la fonction vous donne un score pour chaque caractéristique de vos données.
Plus la note est élevée, plus la pertinence est importante ou pertinente pour la variable de
sortie. Dans python L'importance des fonctionnalités est une classe intégrée fournie avec les
classificateurs basés sur les arbres.

3.5.1.3. Matrice de corrélation

La corrélation indique comment les entités sont liées les unes aux autres ou à la variable
cible. De même elle peut être positive (augmentation d'une valeur d'entité augmente la valeur
de la variable cible) ou négative (augmentation d'une valeur d'entité diminue la valeur de la
variable cible). Nous allons tracer la carte thermique des entités corrélées à l'aide de la
bibliothèque « Seaborn ».

23
Chapitre 3 : Analyse Prédictive

3.5.2. Algorithmes de Prédiction

Les algorithmes effectuent l’analyse et l’exploration de données afin de déterminer les


tendances et les modèles de données. Les solutions logicielles d’analyse de prédiction
intègrent des algorithmes tels que :

 Régression logistique
 Synthetic Minority Oversampling TEchnique (SMOTE)
 Recursive Feature Elimination (RFE)
 Decision Tree
 A random forest
 Gaussian Naive Bayes
 Support Vector Machine
 LightGBMClassifier
 XGBoost Classifier

3.5.2.1. Régression logistique

La régression logistique est un modèle statistique populaire utilisé pour la classification


binaire, c'est-à-dire pour les prédictions du type tel ou tel, oui ou non, A ou B, etc. La
régression logistique peut toutefois être utilisée pour la classification multi-class, mais nous
allons nous concentrer dans notre cas sur sa plus simple application prédiction de churn ou
non churn.

3.5.2.2. Technique de sur-échantillonnage minoritaire synthétique

Dans Machine Learning et Data Science, nous rencontrons souvent un terme


appelé distribution de données déséquilibrée, qui se produit généralement lorsque les
observations d'une classe sont beaucoup plus élevées ou plus basses que les autres
classes. Comme les algorithmes d’apprentissage automatique ont tendance à augmenter la
précision en réduisant l’erreur, ils ne tiennent pas compte de la distribution des classes. Ce
problème est très répandu dans les exemples tels que détection de la fraude, Anomaly
Detection, reconnaissance faciale, etc…

SMOTE (technique de sur-échantillonnage minoritaire synthétique) est l’une des méthodes de


sur-échantillonnage les plus couramment utilisées pour résoudre le problème de déséquilibre.
Il vise à équilibrer la répartition des classes en augmentant de manière aléatoire les exemples

24
Chapitre 3 : Analyse Prédictive

de classes minoritaires en les répliquant. SMOTE synthétise les nouvelles instances


minoritaires entre instances minoritaires existantes. Il génère les enregistrements de formation
virtuels par interpolation linéaire pour la classe de minorité. Ces enregistrements
d'entraînement synthétiques sont générés en sélectionnant de manière aléatoire un ou
plusieurs des k-voisins les plus proches pour chaque exemple de la classe de minorité. Après
le processus de sur-échantillonnage, les données sont reconstruites et plusieurs modèles de
classification peuvent être appliqués aux données traitées. [7]

3.5.2.3. Élimination récursive de caractéristiques

L'élimination des caractéristiques récursives (RFE) est fondamentalement une sélection en


arrière des prédicteurs. Cette technique commence par créer un modèle sur l'ensemble des
prédicteurs et par calculer un score d'importance pour chaque prédicteur. Les prédicteurs les
moins importants sont ensuite supprimés, le modèle est reconstruit et les scores d'importance
sont à nouveau calculés.

3.5.2.4. Arbre de décision

Les arbres de décision sont des algorithmes d'apprentissage supervisé utilisés pour les
tâches de classification, de régression et de prédiction dans lesquelles nous allons nous
concentrer sur la prédiction. Des arbres de décision sont attribués aux algorithmes
d'apprentissage basés sur l'information qui utilisent différentes mesures du gain d'information
pour l'apprentissage. Nous pouvons utiliser des arbres de décision pour les problèmes pour
lesquels nous disposons d’éléments d’entrée et de cibles continus mais également
catégoriels. L'idée principale des arbres de décision est de rechercher les entités descriptives
contenant le plus "d'informations" concernant l'entité cible, puis de scinder le jeu de données
en fonction de la valeur de ces entités, de sorte que les valeurs des entités cibles pour les sous-
jeux de données résultants soient aussi pures que possible. Ce processus de recherche de la
fonctionnalité est effectué jusqu'à ce que nous remplissions un critère d'arrêt, où nous nous
retrouvons finalement dans des nœuds terminaux. Les nœuds terminaux contiennent les
prédictions que nous allons effectuer pour les nouvelles instances de requête présentées à
notre modèle formé. Cela est possible car le modèle a en quelque sorte appris la structure
sous-jacente des données d'apprentissage et peut donc, compte tenu de certaines hypothèses,
effectuer des prédictions sur la valeur de caractéristique cible (classe) d'instances de requête
invisibles. Un arbre de décision contient principalement un nœud racine, des nœuds
intérieurs et des nœuds feuille qui sont ensuite connectés par des branches. [8]

25
Chapitre 3 : Analyse Prédictive

Figure 12 : arbre de décision [9]

En principe, les arbres de décision peuvent être utilisés pour prédire la fonctionnalité cible
d'une instance de requête inconnue en construisant un modèle basé sur des données existantes
pour lesquelles les valeurs de fonctionnalité cible sont connues (apprentissage supervisé). De
plus, nous savons que ce modèle peut effectuer des prédictions pour des instances de requête
inconnues, car il modélise la relation entre les fonctionnalités descriptives connues et la
fonctionnalité de cible connue. De plus, nous savons que pour former un modèle d'arbre de
décision, nous avons besoin d'un jeu de données composé d'un certain nombre d'exemples de
formation caractérisés par un certain nombre de caractéristiques descriptives et une
fonctionnalité cible. [8]

3.5.2.5. Forêt Aléatoire

La prédicteur de forêt aléatoire crée un ensemble d'arbres de décision à partir d'un sous-
ensemble sélectionné d'un ensemble d'apprentissage. Il regroupe ensuite les votes de
différents arbres de décision pour décider de la classe finale de l'objet à tester. Les paramètres
de base du prédicteur de forêt aléatoire peuvent être le nombre total d’arbres à générer et les
paramètres associés aux arbres de décision tels que la division minimale, les critères de
division, etc…

Avant de pouvoir appliquer les prédicteurs, nous devons nettoyer les données. Le nettoyage
implique la suppression des mots vides, l'extraction des mots les plus courants du texte, etc…

La prédicteur de forêt aléatoire fonctionne en quatre étapes:

26
Chapitre 3 : Analyse Prédictive

 Sélectionnez des échantillons aléatoires à partir d'un ensemble de données donné.

 Construisez un arbre de décision pour chaque échantillon et obtenez un résultat de


prédiction de chaque arbre de décision.

 Effectuer un vote pour chaque résultat prévu.

 Sélectionnez le résultat de la prédiction avec le plus de votes comme prédiction finale.

Figure 13 : Prédicteur Random Forest [10]

3.5.2.6. Naïve Gaussien Bayes


Naive Bayes est un algorithme simple mais étonnamment puissant pour la modélisation
prédictive.

 Théorème de Bayes : En apprentissage automatique, nous sommes souvent intéressés


par la sélection de la meilleure hypothèse (h) à partir des données (d).

Dans un problème de classification, notre hypothèse (h) peut être la classe à affecter à une
nouvelle instance de données (d).

27
Chapitre 3 : Analyse Prédictive

L’un des moyens les plus simples de sélectionner l’hypothèse la plus probable compte tenu
des données dont nous disposons et que nous pouvons utiliser comme connaissance préalable
du problème. Le théorème de Bayes fournit un moyen de calculer la probabilité d'une
hypothèse compte tenu de nos connaissances antérieures.
Le théorème de Bayes est formulé comme suit:

P (h | d) = (P (d | h) * P (h)) / P (d)


 P (h | d) est la probabilité de l'hypothèse h étant donnée les données d.
 P (d | h) est la probabilité pour les données d étant donné que l'hypothèse h était vraie.
 P (h) est la probabilité que l'hypothèse h soit vraie (quelles que soient les données).
 P (d) est la probabilité des données (quelle que soit l'hypothèse).
Il existe également les Bayes naïfs multinomiaux et les Bayes naïfs de Bernoulli. Nous
choisissons le naïf gaussien parce que c'est le plus simple et le plus populaire.

3.5.2.7. Support Vector Machine


Support machine vectorielle, une nouvelle approche prometteuse pour la catégorie de
chaque donnée linéaire et non linéaire. Un SVM est un ensemble de règles qui fonctionne
comme suit, il utilise une cartographie non linéaire pour transformer les dossiers de formation
authentiques en une mesure plus élevée. Au sein de cette nouvelle dimension, il cherche à
distinguer les hydravions les plus linéaires. Avec la cartographie non linéaire idéale à une
mesure suffisamment excessive, l'information provenant des instructions peut généralement
être séparée par un hyper plan. Le SVM révèle cet hyper plan à l'aide de vecteurs d'aide et de
marges. Même si le temps de formation des SVM les plus rapides peut être extrêmement lent,
ils sont tout à fait corrects, en raison de leur capacité à modéliser des obstacles complexes non
linéaires à la décision. Ils sont beaucoup moins susceptibles d'être sur-ajustés que d'autres
méthodes. Le vecteur guide offre en outre une description compacte de la version découverte.
[B4]

28
Chapitre 3 : Analyse Prédictive

Figure 14 : Explication SVM [11]

Les SVM peuvent être utilisés aussi bien pour la prédiction que pour la classification. Elles
avaient été réalisées dans certains domaines, à savoir la popularité manuscrite à chiffres, la
reconnaissance d'objets et l'identité du haut-parleur, en plus des vérifications de prédiction des
séries chronologiques de référence.

Figure 15 : Prédicteur SVM [B4]

3.5.2.8. Prédicteur LightGBM


LightGBM est un framework de renforcement de gradient rapide, distribué et hautes
performances basé sur un algorithme d'arbre de décision, utilisé pour la prédiction, la
classification et de nombreuses autres tâches d'apprentissage automatique.
Comme il est basé sur des algorithmes d’arbre de décision, il divise la feuille d’arbre de la
meilleure manière possible, tandis que d’autres algorithmes de renforcement divisent la
profondeur de l’arbre ou le niveau plutôt que la feuille. Ainsi, lors de la croissance sur la même

29
Chapitre 3 : Analyse Prédictive

feuille dans Light GBM, l’algorithme feuille-feuille peut réduire plus de pertes que
l’algorithme niveau-résultats et permet donc d’obtenir une bien meilleure précision que l’un
des algorithmes de renforcement existants ne permet que rarement. En outre, il est
étonnamment très rapide, d’où le mot « lumière ».
LGBM utilise la division par feuille sur la division par profondeur, ce qui lui permet de
converger beaucoup plus rapidement.

Figure 16 : LGBM [12]

3.5.2.9. Prédicteur XGBoost


Les classificateurs de renforcement de gradient sont un groupe d'algorithmes
d'apprentissage automatique qui combinent plusieurs modèles d'apprentissage faibles pour
créer un modèle prédictif puissant. Les arbres de décision sont généralement utilisés pour
renforcer le gradient. Les modèles de renforcement de gradient deviennent de plus en plus
populaires en raison de leur efficacité à classer des ensembles de données complexes.
XGBoost est une version raffinée et personnalisée d'un système d'arbre de décision stimulant le
gradient, créée pour la performance et la rapidité. XGBoost signifie en fait "eXtreme Gradient
Boosting" et se réfère au fait que les algorithmes et les méthodes ont été personnalisés pour
repousser les limites de ce qui est possible pour les algorithmes de renforcement de gradient.

30
Chapitre 3 : Analyse Prédictive

Figure 17 : XGBoost [12]

3.5.3. Performances du modèle


Les métriques d'évaluation expliquent les performances d'un modèle, Un aspect important
des paramètres d’évaluation est leur capacité à distinguer les résultats du modèle.
3.5.3.1. Mesures de performance du modèle
Lorsque nous parlons de modèles prédictifs, nous parlons soit d’un modèle de régression
(sortie continue), soit d’un modèle de classification (sortie nominale ou binaire). Les métriques
d'évaluation utilisées dans chacun de ces modèles sont différentes.
 Sortie de classe : des algorithmes tels que SVM et KNN créent une sortie de classe.
 Résultats de probabilité : des algorithmes tels que la régression logistique, la forêt
aléatoire, le renforcement du gradient, etc...

3.5.3.2. Matrices de confusion


Dans l'analyse prédictive , un matrice de confusion est un tableau avec deux lignes et deux
colonnes indiquant le nombre de faux positifs , de faux négatifs ,de vrais positifs et de vrais
négatifs. Il s’agit d’une mesure de performance pour un problème de classification
d’apprentissage automatique dans lequel le résultat peut être constitué de deux classes ou
plus. C'est un tableau avec 4 combinaisons différentes de valeurs prédites et réelles.

31
Chapitre 3 : Analyse Prédictive

Figure 18 : Matrice Confusion

Exemple :
Si un système de prédiction a été formé pour faire la distinction entre « churn » et « not-
churn », une matrice de confusion résumera les résultats du test de l'algorithme en vue d'une
inspection plus poussée. En supposant un échantillon de 13 clients « 8 churn » et « 5 not-
churn » la matrice de confusion résultante pourrait ressembler au tableau ci-dessous:

Classe actuelle

Churn Not-churn

Churn 5 vrais positifs 2 faux positifs

Classe prédite
Not-churn 3 faux négatifs 3 vrais négatifs

Tableau 1 : Exemple Matrice Confusion

3.5.3.3. Courbe ROC ‘’ Receiver Operating Characteristic ‘’


Les courbes ROC nous permettent d’évaluer les performances du classificateur sur
l’ensemble de sa plage de fonctionnement, C'est l'un des paramètres d'évaluation les plus
importants pour la vérification des performances d'un modèle de classification. La mesure la
plus largement utilisée est l'aire sous la courbe AUC (Area Under The Curve). Un excellent
modèle a une AUC proche de 1, ce qui signifie qu'il a une bonne mesure de séparabilité. Un
modèle médiocre a une AUC proche de 0, ce qui signifie que sa séparabilité est la pire

32
Chapitre 3 : Analyse Prédictive

mesure. En fait, cela signifie que le résultat est réciproque. Il prédit que les 0 sont 1 et les 1 que
les 0. Et lorsque l’AUC est de 0,5. cela signifie que le modèle n’a aucune capacité de
séparation de classe.

3.5.3.4. Courbe de rappel de précision

La courbe de rappel de précision montre le compromis entre précision et rappel pour


différents seuils. Une zone haute sous la courbe représente à la fois un rappel élevé et une
précision élevée, où une précision élevée correspond à un faible taux de faux positifs, et un
rappel élevé correspond à un faible taux de faux négatifs. Des scores élevés pour les deux
montrent que le classificateur renvoie des résultats précis (haute précision), ainsi que la
majorité des résultats positifs (rappel élevé).

Un système avec un rappel élevé mais une faible précision renvoie de nombreux résultats, mais
la plupart de ses étiquettes prédites sont incorrectes par rapport aux étiquettes de formation. Un
système avec une précision élevée mais un faible rappel est tout à fait le contraire: il ne donne
que très peu de résultats, mais la plupart de ses étiquettes prédites sont correctes par rapport
aux étiquettes de formation. Un système idéal avec une grande précision et un rappel élevé
renverra de nombreux résultats, tous étiquetés correctement.
Précision (P) est défini comme le nombre de vrais positifs (Tp) sur le nombre de vrais positifs
plus le nombre de faux positifs (Fp).
P=Tp/(Tp+Fp)
Rappel (R) est défini comme le nombre de vrais positifs (Tp) sur le nombre de vrais positifs
plus le nombre de faux négatifs (Fn).
R=Tp/(Tp+Fn)

33
Chapitre 3 : Analyse Prédictive

Figure 19 : Rappel/Précision [13]

3.6. Conclusion
Dans ce chapitre, on a montré que les outils intelligents (Data Mining, Machine
Learning) revêtent, de plus en plus, une importance cruciale dans tous les domaines qui
rendent des services aux clients et en particulier nous mentionnons les opérateurs de
télécommunication.

L’apport considérable de ces techniques est varié. Il touche essentiellement à la prévision, à


l’optimisation, la prédiction ou encore à la classification. La mise en place et en œuvre de
systèmes intelligents permet d’instaurer une volonté continue d’actualiser les données
économiques et financières, d’inciter les opérateurs des télécommunications à collecter mieux
les informations et les bien classer.

34
Chapitre 4

Analyse des résultats


Chapitre 4 : Analyse des résultats

4.1. Introduction
Dans ce chapitre, nous présenterons les résultats obtenus suite aux différentes analyses
effectuées sur la base de données. Tout d’abord, une analyse descriptive des variables
prédictives les plus importantes donnera un aperçu global sur les désabonnements des clients.
En deuxième lieu, une analyse des résultats obtenus par le modèle développé permettra de
répondre aux objectifs de recherche que se fixe ce mémoire.

Nous allons détailler dans ce qui suit les différentes manipulations effectuées :
 Analyse de données exploratoire
 Prétraitement de données
 Construction du modèle de prédiction ‘’Machine learning‘’
 Validation du modèle de prédiction

4.2. Environnement logiciel


 Jupyter-notebook : une interface web utilisée pour programmer dans plus de
40 langages de programmation.
 KNIME : un logiciel libre et open-source d'analyse de données utilisant une
interface graphique similaire à LabView.
 Python : un langage de programmation interprété

4.3. Analyse de données exploratoire


En première lieu, une analyse globale sur le taux de désabonnements de la clientèle dans
le base de données est présentée par la figure suivante. La figure montre que 26.6% des
clients Churn et 73.4% non churn.
A noter que le code source de ce projet a été rattaché en annexe vu la taille conséquente du script.
On utilise le package « go » de « plotly.graph_objs » pour l’affichage de Pie.

35
Chapitre 4 : Analyse des résultats

Figure 20 : Statistique globale

Dans ce qui suit, quelques figures d’analyse de désabonnement selon la distribution des
variables dans notre base de donnée.
La figure ci-dessous illustre la répartition de churn selon le genre des clients avec 49.8% des
femmes churn et 49.3% non churn et 50.2% des hommes churn et 50.7% non churn.

Figure 21 : Répartition selon le genre

La figure suivante illustre le désabonnement selon le service téléphonique, on a donc selon le


graphique a secteur (Pie) 9.1% des clients churn qui n’utilisent pas le service téléphonique,
45.4% avaientt une seule ligne et 45.5% qui ont des multiples lignes téléphoniques, de même
pour les clients non churn presque des valeurs similaires.

36
Chapitre 4 : Analyse des résultats

Figure 22: Répartition selon nombres des lignes téléphoniques

Ensuite, la variable utilisée c’est le service internet. Comme il est présenté dans la figure
suivante, 69.4% des clients churn utilise la service internet avec fibre optique, 24.6% ADSL
et 6.05% Ils n'ont pas de services internet. Pour les clients non churn 34.8% service fibre
optique, 37.9% ADSL et 27.3% n’utilise pas ce service. On remarque que le taux de
désabonnement de services internet avec fibre optique et élevée et c’est à cause de leurs couts.

Figure 23 : Répartition selon type de service internet

La figure ci-dessous présente le taux de désabonnement selon le période d’engagement des


clients. Pour les churns on a 88.6% ont des factures mensuelles, 8.88% un contrat 1 ans et
2.57% contrat de deux ans. De même pour les clients non churn on a 43% contrat mensuelle,
25.3% contrat 1 ans et 31.7% ont des contrats deux ans.

37
Chapitre 4 : Analyse des résultats

Figure 24 : Répartition selon type de contrat

La variable suivante c’est la méthode de paiements. La figure ci-dessous illustre les


pourcentages de churn respectivement les non churn. Comme on voit 57.3% et 25.1% pour le
paiement avec chèques électroniques, 16.5% et 25.1% les chèques par courrier, 13.8% et
24.9% par transfert bancaire et finalement 12.4% et 25% avec des cartes de crédits.

Figure 25 : Répartition selon méthode de payement

La figure ci-dessous illustre le taux de désabonnements selon la répartition de mandat des


clients par mois. 55.5% churn et 22% non churn avec mandat inferieur ou égale à 12 mois,
15.7% churn et 14.1% non churn entre 12-24 mois, 14.4% churn et 24.6% non churn entre 24-
48 mois, 6.42% churn et 13.8% non churn entre 24-60 mois, 4.98% churn et 25.5% non churn
plus que 60 mois.

38
Chapitre 4 : Analyse des résultats

Figure 26: Répartition selon durée de mandat

On remarque que plus le mandat augmente plus le taux de désabonnement se diminue,


l’histogramme suivant peut nous montrer plus clairement la fidélité des clients selon la
période d’abonnement.

Figure 27: Répartition des clients selon période d'abonnement

Les deux histogrammes suivants présentent les variables numériques dans notre base de
données, la figure ci-dessous illustre le churn et le non churn selon le pourcentage de charge
mensuelle. De même pour la figure 29 qui présente la charge totale.

39
Chapitre 4 : Analyse des résultats

Figure 28 : charge mensuelle des clients

Figure 29: Classification des clients selon la charge totale

Dans les trois figures suivantes on utilise la dispersion groupée. C’est une pratique courante
dans le diagramme de dispersion qui permet d’étudier le comportement des groupes pour deux
variables choisies.

La figure suivante présente le diagramme de dispersion avec « Total Charges » et « Tenure »


comme deux variables. Nous pouvons conclure que le taux de désabonnements est trop élevée
dans la première période de l’abonnement des clients et les pertes continuent d'augmenter tant
que le total charge s’agrandir.

40
Chapitre 4 : Analyse des résultats

Figure 30 : charges totales et période d’abonnement par groupe d'occupation

On a changé l’un des deux variables « Total Charges » par « Monthly charges ». On a trouvé
presque le même résultat, un taux de désabonnement élevé lors des premières périodes des
engagements et avec une augmentation en fonction d’augmentation de charges mensuelles.

Figure 31 : Charges mensuelles et période d’abonnement par groupe d'occupation

41
Chapitre 4 : Analyse des résultats

La figure suivante illustre que le taux de désabonnement s’agrandir avec une charge totale et
une charge mensuelle élevée.

Figure 32 : Charges mensuelles et charges totales par groupe d'occupation

4.4. Prétraitement des données


4.4.1. Matrice de corrélation
La matrice de corrélation croise l’ensemble des variables une à une afin de calculer leurs
variances respectives. Le calcul de variance permet de détecter la corrélation entre deux
attributs donnés. Plus la valeur est proche de 1, plus le couplage des valeurs en question est
fort. Ainsi, nous pouvons détecter les paramètres les plus importants pouvant influencer les
désabonnements des clients comme indique la figure suivante. On a les variables
« MonthlyCharges/ InternetService_FibreOptique » respectivement « Tenure / TotalCharges »
en un couplage fort à l’ordre de 0.8, de même pour les deux variables « TotalCharges/
MonthlyCharges » avec un valeur 0.7 selon la matrice de corrélation.

42
Chapitre 4 : Analyse des résultats

Figure 33: Matrice Corrélation

43
Chapitre 4 : Analyse des résultats

4.4.2. Techniques de sélection des fonctionnalités


La sélection des fonctionnalités est le processus par lequel on sélectionne automatiquement
les fonctionnalités qui contribuent le plus à la variable de prédiction ou à la sortie qui vous
intéressent. Le fait de disposer de fonctionnalités non pertinentes dans les données, ça peut
réduire la précision des modèles et permettre au modèle d'apprendre à partir de fonctionnalités
non pertinentes.

Nous affichons par ordre décroissant d’importance les variables dans la figure suivante. On
note surtout un fort décalage entre les trois premières variables et les autres variables.

Figure 34 : Importances des variables

D’après l’histogramme précédent nous pouvons détecter les paramètres les plus importants
pouvant influencer les désabonnements des clients « MonthlyCharges », « TotalCharges » et
« Tenure ».

44
Chapitre 4 : Analyse des résultats

4.4.3. Sélection univariée « Test du chi carré »


La sélection des fonctionnalités est un processus dans lequel on sélectionne
automatiquement les fonctionnalités de nos données qui contribuent le plus à la variable de
prédiction ou à la sortie qui nous intéressent. On utilise le test statistique chi carré (chi ^ 2)
pour sélectionner les meilleures caractéristiques, la figure suivante indique le résultat de ce
dernier.

Figure 35 : Extraction de caractéristiques chi^2

La figure ci-dessus illustre l’importance des variables par ordre décroissante, Où il se divise
en deux catégories et nous donnes les variables importantes pour les deux, « TotalCharges »
pour les variables numériques et « contract_Month-to-Month » pour les variables
catégoriques.

4.5. Construction du Modèle de prédiction


4.5.1. Modèle de base ‘’ Regression logistic‘’
Les données doivent avoir deux colonnes : les caractéristiques et l'étiquette. Les colonnes
vectorielles doivent être nommées en tant que caractéristiques. La variable cible doit être
nommée en tant qu'étiquette. Ensuite, le data frame peut être directement alimenté à un
modèle pour effectuer l’apprentissage.

45
Chapitre 4 : Analyse des résultats

L’approche de classification exige le découpage des données en deux lots : le lot


d’apprentissage représentant 75% des données initiales, et le reste constitue les données de
test.
Le premier modèle de classification choisi est la régression linéaire. Le résultat des valeurs
prédites est représenté par la figure 36 :

166 198

952 91

AUC = 0.728

Figure 36 : Courbe ROC & Matrice de confusion de régression logistique

D’après ce modèle 1118 (Prédiction)/1043(réel) non churn et 289 (prédiction)/ 364 (réel)
churn avec un taux d’erreur 0.183.

La courbe ROC est un graphique représentant les performances, cette courbe trace le taux de
vrais positifs en fonction du taux de faux positifs. Plus la valeur de l'AUC est élevée, meilleur
est le modèle qui prédit, dans ce cas AUC=0.728.

4.5.2. Technique de sur-échantillonnage minoritaire synthétique


Pour aborder la question du déséquilibre des classes, on introduit la technique de sur-
échantillonnage des minorités synthétiques (SMOTE) à la régression logistique. La figure ci-
dessous illustre les résultats de ces derniers. Pour 1043 (réel)/841(prédiction) non churn et
364(réel)/566(prédiction) avec un taux d’erreur 0.239 et AUC=0779.

46
Chapitre 4 : Analyse des résultats

67 297

774 269

AUC = 0.779

Figure 37 : Courbe ROC & Matrice de confusion de régression logistique(SMOTE)

4.5.3. Élimination récursive de caractéristiques


RFE (Recursive Feature Elimination) comme son titre l’indique, suggère de supprimer
récursivement les fonctionnalités, construire un modèle en utilisant les attributs restants et
calculer la précision du modèle. Les résultats sont illustrés dans La figure ci-dessous, on a donc
1043(réel)/843(prédiction) non churn et 364(réel)/564(prédiction) avec un taux d’erreur =
0.242 et AUC=0.774.

70 294

773 270

AUC = 0.774

Figure 38 : Courbe ROC & Matrice de confusion de régression logistique(RFE)

4.5.4. Visualisation de l'arbre de décision


Nous instancions et nous construisons un arbre de décision avec la classe
DecisionTreeClassifier de la librairie ‘’scikit-learn’’. Nous avons limité la profondeur de
l’arbre à 3 niveaux (max_depth = 3) pour faciliter la lecture.

47
Chapitre 4 : Analyse des résultats

L’affichage d’un arbre n’est pas aisé avec Python. Il faut travailler en deux temps : (1) créer
un fichier ‘.dot’ à partir de l’arbre généré. (2) que l’on fait traduire en image PNG avec le
logiciel GraphViz (qu’il faut installer au préalable) (cf. Russel, ‘’Creating and Visualizing
Decision Trees with Python’’, août 2017).

48
Chapitre 4 : Analyse des résultats

Figure 39 : Arbre de décision ‘’Gini‘’

49
Chapitre 4 : Analyse des résultats

La racine a été segmentée avec la variable ‘’TotalesCarges’’, avec valeur seuil ‘’198.05’’. La
branche à gauche (True) correspond à la condition ‘’ TotalesCarges ≤ 198.05’’, la branche à
droite (False) à ‘’ TotalesCarges > 198.05’’. Etc. Chaque chemin aboutissant à une feuille
correspond à une règle. Pour comprendre le mécanisme d’affectation d’une classe à un
individu, il suffit de suivre la voie qu’il emprunte de la racine vers la feuille.

Figure 40 : Arbre de décision ‘’Entropy‘’

L'indice de Gini est une mesure permettant de mesurer la fréquence à laquelle un élément
choisi au hasard serait incorrectement identifié. Cela signifie qu'un attribut avec un indice de
gini inférieur devrait être préféré.
Sklearn prend en charge les critères « gini » pour Gini Index et prend par défaut la valeur «
gini ».
L'entropie est la mesure de l'incertitude d'une variable aléatoire, elle caractérise l'impureté
d'une collection arbitraire d'exemples. Plus l'entropie est élevée, plus le contenu de
l'information est important.
La figure suivante présente le courbe ROC et la matrice de confusion de décision tree qui
nous donnes 1043(réel)/ 861(prédiction) non churn et 364(réel)/546(prédiction) churn avec un
taux d’erreur = 0.222 et AUC = 0718.

50
Chapitre 4 : Analyse des résultats

105 259

756 287

AUC = 0.718

Figure 41 : Courbe ROC & Matrice de confusion d’arbre de décision

4.5.5. Forêt aléatoire ‘’RF ‘’

Les arbres de décision profonds peuvent souffrir de sur-ajustement, mais ils sont plus
rapides en calcul est facilement interprétable et peut être converti en règles.
Les forêts aléatoires sont un ensemble de plusieurs arbres de décision. Ils empêchent le sur-
ajustement en créant des arbres sur des sous-ensembles aléatoires, mais difficiles à interpréter,
Contrairement à un arbre de décision.

51
Chapitre 4 : Analyse des résultats

Figure 42 : RF ‘’Entropy‘’

52
Chapitre 4 : Analyse des résultats

Comme nous montre la figure ci-dessous de RF 1043(réel) / 1268(prédiction) non churn et


364(réel) / 139(prédiction) churn avec un taux d’erreur = 0.179 et AUC = 0.620.

263 101

1005 38

AUC = 0.620

Figure 43 : Courbe ROC & Matrice de confusion RF

4.5.6. Naïf Gaussien Bayes


Pour le modèle NGB comme montre la figure ci-dessous 1043(réel) / 1033(prédiction) non
churn et 490(réel) / 725(prédiction) avec un taux d’erreur = 0.247 et AUC = 0.767.

99 391

934 334

AUC = 0.767

Figure 44 : Courbe ROC & Matrice de confusion GaussianNB

53
Chapitre 4 : Analyse des résultats

4.5.7. Vecteur de support machine ‘’SVM ‘’


Pour le modèle SVM comme montre la figure ci-dessous 1043(réel) / 995(prédiction) non
churn et 364(réel) / 412(prédiction) avec un taux d’erreur = 0.081 et AUC = 0.915.

33 331

962 81
AUC = 0.915

Figure 45 : Courbe ROC & Matrice de confusion SVM

4.5.8. Classificateur LightGBM


Pour le modèle LGBM comme montre la figure ci-dessous 1043(réel) / 1037(prédiction)
non churn et 364(réel) / 370(prédiction) avec un taux d’erreur = 0.041 et AUC = 0.948.

26 338

1011 32

AUC = 0.948

Figure 46 : Courbe ROC & Matrice de confusion LGBM

54
Chapitre 4 : Analyse des résultats

4.5.9. Classificateur XGBoost


Pour le modèle XGBoost comme montre la figure suivante 1043(réel) / 1048(prédiction)
non churn et 364(réel) / 359(prédiction) avec un taux d’erreur = 0.029 et AUC = 0.96.

23 341

1025 18

AUC = 0.959

Figure 47 : Courbe ROC & Matrice de confusion XGBoost

Les trois derniers modèles nous donnent des meilleurs résultats pour la prédiction. Dans ce
qui suit on s’intéresse à la performance des modèles de prédiction.

4.6. Performances du modèle


4.6.1. Mesures de performance du modèle
Le tableau ci-dessous donne une récapitulation de l’évaluation des performances des modèles
à l'aide de métriques de précision (accuracy), de précision, de rappel, score F1, AUC et le taux
d’erreur.

Accuracy : Il s'agit simplement d'un ratio d'observations correctement prédites par rapport au
nombre total d'observations.

Accuracy = TP + TN / TP + FP + FN + TN

Précision : La précision est le rapport entre les observations positives correctement prédites et
le total des observations positives prédites

Précision = TP / TP + FP

Rappel : Le rappel est le rapport entre les observations positives correctement prédites et
toutes les observations de la classe réelle

Rappel = TP / TP + FN

55
Chapitre 4 : Analyse des résultats

Score F1 : Le score F1 est la moyenne pondérée de la précision et du rappel.

Score F1 = 2 * (Rappel * Précision) / (Rappel + Précision)

Tableau 2 : Performance des modèles

4.6.2. Comparer les métriques du modèle


La figure ci-dessous présente une comparaison graphique des métriques de performance
des modèles. Le modèle a expérimenté neuf algorithmes: régression logistique, régression
logistique SMOTE, régression logistique RFE, arbre de décision, forêt aléatoire, naïve bayes,
SVM, arbre de la machine optimisé par gradient (LGBM) et accélération du gradient extrême
« XGBOOST ». Cependant, les meilleurs résultats ont été obtenus en appliquant l'algorithme
SVM, LGBM et XGBOOST.

56
Chapitre 4 : Analyse des résultats

Figure 48 : Comparaison des métriques des modèles

4.7. Validation de Modèle avec Knime


4.7.1. Pré-traitement
Après avoir charger les données, en colorant les lignes de données en vert (churn = YES)
et bleu (churn = NO), puis un nœud Partitioning doit partitionner la plupart des données
(80%) à des formations et le restant (20%) à d'évaluation.la figure ci-dessous illustre la phase
de pré-traitement

57
Chapitre 4 : Analyse des résultats

Figure 49 : phase pré-traitement

Maintenant former un modèle d’apprentissage automatique permettant de prédire le taux de


désabonnement de churn ou non churn en fonction de tous les autres attributs du client.

4.7.2. Entraînement
Prenons l’exemple de l’arbre de décision, La séquence suivante défini une analyse de
prédiction par l’arbre de décision. Le composant Partitioning initie la boucle de prédiction à
partir des données d’apprentissage. Il est connecté à un outil d’apprentissage DECISION
TREE LEARNER, mais aussi à un outil prédictif DECISION TREE PREDICTOR.

Le nœud Equal size sampling pour supprimer les lignes aléatoires appartenant aux classes
majoritaires. Après cela, le modèle PMML est enregistré dans un fichier.

Figure 50 : phase entrainement

4.7.3. Évaluation
Pour l'évaluation, nous utilisons les 20% de données que nous avons gardées de côté et non
utilisées pendant la phase de formation pour alimenter un nœud de prédiction. Ce nœud
applique le modèle à toutes les lignes de données une par une et génère la probabilité que ce
client a créé des données en fonction de son contrat et de ses données opérationnelles (P

58
Chapitre 4 : Analyse des résultats

(Churn = YES/NO)). En fonction de la valeur de cette probabilité, une classe prédite sera
affectée à la ligne de données (Prédiction (Churn) = YES/NO).

Le nombre des fois où la classe prédite coïncide avec la classe de désabonnement d'origine
constitue la base de toute mesure de la qualité du modèle telle qu'elle est calculée par le nœud
Scorer.

Figure 51 : Construction workflow d’un modèle

4.7.4. Déploiement
Lorsque nous sommes satisfaits des performances de notre modèle, nous pouvons le faire
passer en production pour un déploiement sur des données réelles. Ici, il suffit de lire le flux
de données réelles provenant d’un fichier, d’une base de données et du modèle généré. Nous
appliquons ensuite un prédicteur PMML pour exécuter le modèle sur les données d'entrée
réelles. Les données de sortie contiendront quelques colonnes supplémentaires avec la classe
de prédiction.

59
Chapitre 4 : Analyse des résultats

Figure 52 : phase déploiement

Après l’explication des méthodes de validation, la figure suivante illustre tous la construction
de workflow de tous les modèles de notre recherche.

60
Chapitre 4 : Analyse des résultats

Figure 53 : Construction workflow des modèles

61
Chapitre 4 : Analyse des résultats

Maintenant on commence de traiter les résultats des modèles workflow et l’on compare avec
les résultats de modèles développé.

La première modèle c’est la régression logistique comme l’indique la figure suivante on a un


taux d’erreur 36.765% et AUC = 0.699 un peu de différences entre cette resultat et celle de
modèle developper qui nous donne 18.3% taux d’erreur et AUC = 0.728.

AUC=0.699

Figure 54 :Résultats workflow régression logistique

La figure suivante illustre les résultats de workflow décision tree avec un taux d’erreur
34.261% et AUC = 0.681, rappelons que le modèle développé donne des résultats plus au
moins meilleur un taux d’erreur 22.2% et AUC = 0.7.

62
Chapitre 4 : Analyse des résultats

AUC=0.681

Figure 55: Résultats workflow Decision tree

Passant au résultat de RF un taux d’erreur 31.37% et AUC = 0.761 une comparaison avec le
modèle développé nous donnes AUC presque même valeur 0.724 mais d’un taux d’erreur plus
faible 17.9% donc une précision meilleure.la figure 56 illustre les résultats.

AUC=0.761

Figure 56 : Résultats workflow RF

63
Chapitre 4 : Analyse des résultats

Les résultats de naïve bayes similaire à celle de modèle développé avec un taux d’erreur
24.732% et 24.7% de modèle développé, AUC = 0.793 et 0.775 de modèle développé. La
figure 57 illustre les résultats de modèle workflow.

AUC=0.793

Figure 57 : Résultats workflow NB

Pour les résultats donnés par workflow SVM, un taux d’erreur trop élevé 46.146%
contrairement à celle de modèle développé 8.1%, mais avec AUC presque similaire 0.927
pour workflow et 0.916 pour le modèle développé.

La figure ci-dessous illustre les résultats workflow knime.

64
Chapitre 4 : Analyse des résultats

AUC=0.927

Figure 58 : Résultats workflow SVM

Également pour les deux modèles LGBM et XGBoost, présentés par les figures suivantes, un
taux d’erreur trop élevé est observé. Ce qui montre que les modèles développés offrent des
meilleurs résultats que celle de workflow avec 4.1% respectivement 2.9% pour les taux
d’erreur et 0.949 respectivement 0.96 pour AUC.

AUC=0.898

Figure 59 : Résultats workflow LGBM

65
Chapitre 4 : Analyse des résultats

AUC=0.825

Figure 60 : Résultats workflow XGBoost

Modèle workflow knime Modèle développé python

Modèle AUC Error_Rate AUC Error_Rate

LR 0.699 36.765% 0.728 18.3%

DT 0.681 34.261% 0.7 22.2%

RF 0.761 31.37% 0.724 17.9%

NB 0.793 24.732% 0.775 24.7%

SVM 0.927 46.146% 0.916 8.1%

LGBM 0.898 32.013% 0.949 4.1%

XGBoost 0.825 33.084% 0.96 2.9%

Tableau 3 : Comparaison de performance

66
Chapitre 4 : Analyse des résultats

Figure 61 : Graphique de comparaison

La figure ci-dessus illustre une comparaison entre les résultats des modèles développés sous
python et celles des modèles workflows sous le logiciel d’analyse de données Knime. On a
une similitude au niveau de la courbe de AUC jusqu’à les trois derniers modèles. Les modèles
développés donnent des résultats meilleurs. En revanche, au niveau de taux d’erreur, les
modèles développés sous python offrent des résultats meilleurs ce qui montre la précision des
modèles développés.

4.8. Conclusion
Dans ce dernier chapitre, nous avons appliqué les différents concepts théoriques décrites
lors des chapitres précédents. Il s’agit d’une présentation des résultats de programmation, en
Python, des modèles de prédiction de taux de désabonnements des clients d’un opérateur de
télécommunication sous Jupyter-notebook, puis une construction workflow sous KNIME de
ces derniers afin de comparer et valider les résultats de notre code développé.

67
Conclusion Générale
La prévision du taux de désabonnement est l’une des sources de revenus les plus
importantes pour les entreprises de télécommunications. Par conséquent, cette recherche visait
à construire un système qui prédit le désabonnement des clients dans des sociétés de
télécommunications. Ces modèles de prédiction doivent atteindre des valeurs AUC
élevées. Pour tester et former le modèle, l'échantillon de données est divisé en 80% pour la
formation et 20% pour les tests. Nous avons appliqué l'ingénierie des caractéristiques, une
transformation efficace des caractéristiques et une approche de sélection afin de les préparer
pour les algorithmes d'apprentissage automatique. De plus, nous avons rencontré un autre
problème: les données n'étaient pas équilibrées. Environ 26.6% seulement des entrées
représentent le désabonnement des clients. Ce problème a été résolu en sous-échantillonnant
ou en utilisant des algorithmes d'arbres non affectés par ce problème. Trois algorithmes basés
sur la régression logistique, quatre algorithmes basés sur des arbres et deux autres algorithmes
un basé sur la classification linéaire et l’autre sur le théorème de bayes donc probabiliste ont
été choisis en raison de leur diversité et de leur applicabilité dans ce type de prédiction. Ces
algorithmes sont régression logistique, régression logistique SMOTE, régression logistique
RFE, Naïve Bayes et SVM respectivement l'arbre de décision, la forêt aléatoire, l'algorithme
d'arborescence GBM et l'algorithme XGBOOST. La méthode de préparation et de sélection
des fonctionnalités ainsi que la saisie des fonctionnalités ont eu le plus grand impact sur le
succès de ce modèle, puisque la valeur de l’AUC a atteint 96%. Le modèle arborescent
XGBOOST a obtenu les meilleurs résultats pour toutes les mesures. L'algorithme LGBM
vient en deuxième place et SVM viennent en troisième en ce qui concerne les valeurs de
l'AUC.

68
Webographie
[1]. http://www.marketing-professionnel.fr/tribune-libre/churn-marketing-predire-gerer-
attrition-perte-clients-201705.html, dernière visite le (23/04/2019).
[2]. https://www.zdnet.fr/actualites/big-data-quel-interet-pour-l-analyse-predictive-
39824666.htm, dernière visite le (29/04/2019).
[3]. https://www.futura-sciences.com/tech/definitions/big-data-data-mining-16876/,dernière
visite le (02/06/2019).
[4]. https://www.eurocloud.fr/machine-learning-linformatique-devient-de-plus-plus-
intelligente/, dernière visite le (02/06/2019).
[5]. https://moov.ai/fr/blog/predire-le-desabonnement-de-clients-grace-a-lapprentissage-
machine/, dernière visite le (17/06/2019).
[6]. https://www.memoireonline.com/08/13/7308/m_Analyse-et-detection-de-lattrition-dans-
une-entreprise-de-telecommunication21.html, dernière visite le (13/08/2019).
[7]. https://www.lebigdata.fr/data-mining-definition-exemples, dernière visite le (29/08/2019).
[8]. https://www.fromthegenesis.com/pros-and-cons-of-k-nearest-neighbors/, dernière visite le
(07/09/2019).
[9]. https://www.geeksforgeeks.org/ml-handling-imbalanced-data-with-smote-and-near-miss-
algorithm-in-python/, dernière visite le (10/09/2019).
[10]. https://www.analyticsvidhya.com/blog/2017/06/which-algorithm-takes-the-crown-light-
gbm-vs-xgboost/, dernière visite le (23/09/2019).
[11]. https://www.python-course.eu/Decision_Trees.php, dernière visite le (01/10/2019).
[12]. https://www.analyticsvidhya.com/blog/2017/06/which-algorithm-takes-the-crown-light-
gbm-vs-xgboost/, dernière visite le (03/10/2019).
[13]. https://fr.wikipedia.org/wiki/Pr%C3%A9cision_et_rappel, dernière visite le
(18/10/2019).

69
Bibliographie
[B1]. MÉMOIRE DE MASTER RECHERCHE [Implémentation et test d'une solution de la
prédiction en utilisant les technologies du Big Data et Machine Learning]
[B2]. Wei CP, Chiu IT. Transformer les détails des appels de télécommunication en
prévisions de désabonnement: une approche d'exploration de données. Expert Syst
Appl. 2002; 23 (2): 103-12.Voir l'articleGoogle Scholar
[B3]. Qureshii SA, AS Rehman, AM Qamar, Kamal A, Rehman A. Modèle de prévision du
taux de désabonnement des abonnés des services de télécommunication utilisant
l'apprentissage automatique. In: Huitième conférence internationale sur la gestion de
l'information numérique. 2013. p. 131–6.Google Scholar
[B4]. SVM-Support Vector Machine/ Machines à Vecteurs de Support–Séparateurs à Vaste
Marge [Ricco Rakotomalala Université Lumière Lyon 2] .Voir l'articleGoogle Scholar

70
Annexes
Code source du projet de prédiction

N.B. merci de lancer le code par bloc pour une meilleure visibilité du résultat et une nette
qualité du rendu, les blocs sont séparer par une série des dièses.

#Importer des bibliothèques


import numpy as np
import pandas as pd #fichier csv
import os
#visualisation
import matplotlib.pyplot as plt#visualisation
from PIL import Image
%matplotlib inline
import seaborn as sns
import itertools
import warnings
warnings.filterwarnings("ignore")
import io
import plotly.offline as py
py.init_notebook_mode(connected=True)
import plotly.graph_objs as go
import plotly.tools as tls
import plotly.figure_factory as ff

##########importation des données


telcom = pd.read_csv("base_de_donnée_telecom.csv")
#affiche ficher csv
telcom.head(10)
print ("Rows : " ,telcom.shape[0])
print ("Columns : " ,telcom.shape[1])
print ("\nFeatures : \n" ,telcom.columns.tolist())
print ("\nMissing values : ", telcom.isnull().sum().values.sum())
print ("\nUnique values : \n",telcom.nunique())

##########Manipulation de donnée
#Remplacer des espaces avec des valeurs NULL dans la colonne des charges totales
telcom['TotalCharges'] = telcom["TotalCharges"].replace(" ",np.nan)
# Suppression des valeurs nulles de la colonne des charges totales
telcom = telcom[telcom["TotalCharges"].notnull()]
telcom = telcom.reset_index()[telcom.columns]
#convert to float type
telcom["TotalCharges"] = telcom["TotalCharges"].astype(float)
# remplace 'No internet service' par 'No' pour les colonnes suivantes
replace_cols = [ 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection',
'TechSupport','StreamingTV', 'StreamingMovies']
for i in replace_cols :
telcom[i] = telcom[i].replace({'No internet service' : 'No'})

71
# remplacer les valeurs
telcom["SeniorCitizen"] = telcom["SeniorCitizen"].replace({1:"Yes",0:"No"})
# Durée de service dans la colonne catégorique
def tenure_lab(telcom) :

if telcom["tenure"] <= 12 :
return "Tenure_0-12M"
elif (telcom["tenure"] > 12) & (telcom["tenure"] <= 24 ):
return "Tenure_12-24M"
elif (telcom["tenure"] > 24) & (telcom["tenure"] <= 48) :
return "Tenure_24-48M"
elif (telcom["tenure"] > 48) & (telcom["tenure"] <= 60) :
return "Tenure_48-60M"
elif telcom["tenure"] > 60 :
return "Tenure_+60M"
telcom["tenure_group"] = telcom.apply(lambda telcom:tenure_lab(telcom),
axis = 1)
# Separer churn and non churn customers
churn = telcom[telcom["Churn"] == "Yes"]
not_churn = telcom[telcom["Churn"] == "No"]
# Séparer les colonnes catégoriques et numériques
Id_col = ['customerID']
target_col = ["Churn"]
cat_cols = telcom.nunique()[telcom.nunique() < 6].keys().tolist()
cat_cols = [x for x in cat_cols if x not in target_col]
num_cols = [x for x in telcom.columns if x not in cat_cols + target_col + Id_col]

##########affichage de churn et non churn


#labels
lab = telcom["Churn"].value_counts().keys().tolist()
#values
val = telcom["Churn"].value_counts().values.tolist()
trace = go.Pie(labels = lab ,
values = val ,
marker = dict(colors = [ 'blue' ,'green'],
line = dict(color = "white",
width = 3.5)
)
)
layout = go.Layout(dict(title = "Churn/Non_Churn",
plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
)
)

data = [trace]
fig = go.Figure(data = data,layout = layout)
py.iplot(fig)

##########classification des clients

72
#function pie plot pour classification des clients(churn&notchurn) selon les colonnes
catégoriques
def plot_pie(column) :
trace1 = go.Pie(values = churn[column].value_counts().values.tolist(),
labels = churn[column].value_counts().keys().tolist(),
hoverinfo = "label+percent+name",
domain = dict(x = [0,.48]),
name = "Churn_Customers",
marker = dict(line = dict(width = 2,
color = "rgb(243,243,243)")
)
)
trace2 = go.Pie(values = not_churn[column].value_counts().values.tolist(),
labels = not_churn[column].value_counts().keys().tolist(),
hoverinfo = "label+percent+name",
marker = dict(line = dict(width = 2,
color = "rgb(243,243,243)")
),
domain = dict(x = [.52,1]),
name = "Non_churn_customers"
)
layout = go.Layout(dict(title = "column_"+ column,
plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
annotations = [dict(text = "churn",
font = dict(size = 10),
showarrow = False,
x = .25, y = .5),
dict(text = "Non_churn",
font = dict(size = 10),
showarrow = False,
x = .8,y = .5
)
]
)
)
data = [trace1,trace2]
fig = go.Figure(data = data,layout = layout)
py.iplot(fig)
#for all plot pie
for i in cat_cols :
plot_pie(i)

##########Colones numériques
#function histogram pour classification des clients(churn&notchurn) selon le
mondat&Frais_mensuels&Charges_totales
def histogram(column) :
trace1 = go.Histogram(x = churn[column],
histnorm= "percent",
name = "Churn",

73
marker = dict(line = dict(width = .75,
color = "black"
)
),
opacity = .9
)
trace2 = go.Histogram(x = not_churn[column],
histnorm = "percent",
name = "Non_churn",
marker = dict(line = dict(width = .75,
color = "black"
)
),
opacity = .9
)
data = [trace1,trace2]
layout = go.Layout(dict(title ="Répartition_des_clients_" + column,
plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
xaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = column,
zerolinewidth=1,
ticklen=5,
gridwidth=2
),
yaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "percent",
zerolinewidth=1,
ticklen=5,
gridwidth=2
),
)
)
fig = go.Figure(data=data,layout=layout)
py.iplot(fig)
#for all plot histogram
for i in num_cols :
histogram(i)

##########classification des clients selon leurs mondat


tg_ch = churn["tenure_group"].value_counts().reset_index()
tg_ch.columns = ["tenure_group","count"]
tg_nch = not_churn["tenure_group"].value_counts().reset_index()
tg_nch.columns = ["tenure_group","count"]
#bar - churn
trace1 = go.Bar(x = tg_ch["tenure_group"] , y = tg_ch["count"],
name = "Churn",
marker = dict(line = dict(width = .5,color = "black")),
opacity = .9)
#bar - not churn

74
trace2 = go.Bar(x = tg_nch["tenure_group"] , y = tg_nch["count"],
name = "Non_Churn",
marker = dict(line = dict(width = .5,color = "black")),
opacity = .9)
layout = go.Layout(dict(title = "Répartition_des_clients_selon_periode_d'abonnement",
plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
xaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "tenure group",
zerolinewidth=1,ticklen=5,gridwidth=2),
yaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "count",
zerolinewidth=1,ticklen=5,gridwidth=2),
)
)
data = [trace1,trace2]
fig = go.Figure(data=data,layout=layout)
py.iplot(fig)

##########Charges mensuelles et total par groupe de désabonnement


def plot_churncharges_scatter(churn,color) :
tracer = go.Scatter(x = telcom[telcom["Churn"] == churn]["MonthlyCharges"],
y = telcom[telcom["Churn"] == churn]["TotalCharges"],
mode = "markers",marker = dict(line = dict(color = "black",
width = .2),
size = 8 , color = color,
symbol = "circle",
),
name = "Churn - " + churn,
opacity = .9
)
return tracer
trace6 = plot_churncharges_scatter("Yes","#030303")
trace7 = plot_churncharges_scatter("No","#F70104")
data2 = [trace7,trace6]
#layout
def layout_title(title) :
layout = go.Layout(dict(title = title,
plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
xaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "Monthly charges",
zerolinewidth=1,ticklen=5,gridwidth=2),
yaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "Total Charges",
zerolinewidth=1,ticklen=5,gridwidth=2),
height = 600
)
)
return layout

75
layout2 = layout_title("")
fig2 = go.Figure(data = data2,layout = layout2)
py.iplot(fig2)

##########Charges total et periode d'abonnement par groupe de désabonnement


def plot_churncharges_scatter(churn,color) :
tracer = go.Scatter(x = telcom[telcom["Churn"] == churn]["tenure"],
y = telcom[telcom["Churn"] == churn]["TotalCharges"],
mode = "markers",marker = dict(line = dict(color = "black",
width = .2),
size = 8 , color = color,
symbol = "circle",
),
name = "Churn - " + churn,
opacity = .9
)
return tracer
trace6 = plot_churncharges_scatter("Yes","#030303")
trace7 = plot_churncharges_scatter("No","#6666FF")
data2 = [trace7,trace6]
#layout
def layout_title(title) :
layout = go.Layout(dict(title = title,
plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
xaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "tenure",
zerolinewidth=1,ticklen=5,gridwidth=2),
yaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "Total Charges",
zerolinewidth=1,ticklen=5,gridwidth=2),
height = 600
)
)
return layout
layout2 = layout_title("")
fig2 = go.Figure(data = data2,layout = layout2)
py.iplot(fig2)

##########Charges mensuelles et période d'abonnements par groupe de désabonnement


def plot_churncharges_scatter(churn,color) :
tracer = go.Scatter(x = telcom[telcom["Churn"] == churn]["tenure"],
y = telcom[telcom["Churn"] == churn]["MonthlyCharges"],
mode = "markers",marker = dict(line = dict(color = "black",
width = .2),
size = 8 , color = color,
symbol = "circle",
),
name = "Churn - " + churn,
opacity = .9

76
)
return tracer
trace6 = plot_churncharges_scatter("Yes","#030303")
trace7 = plot_churncharges_scatter("No","#FAF80D")
data2 = [trace7,trace6]
#layout
def layout_title(title) :
layout = go.Layout(dict(title = title,
plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
xaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "tenure",
zerolinewidth=1,ticklen=5,gridwidth=2),
yaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "MonthlyCharges",
zerolinewidth=1,ticklen=5,gridwidth=2),
height = 600
)
)
return layout
layout2 = layout_title("")
fig2 = go.Figure(data = data2,layout = layout2)
py.iplot(fig2)

##########préparation des données


from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
#id clients
Id_col = ['customerID']
# Colonnes cibles
target_col = ["Churn"]
# colonnes catégoriques
cat_cols = telcom.nunique()[telcom.nunique() < 6].keys().tolist()
cat_cols = [x for x in cat_cols if x not in target_col]
# colonnes numériques
num_cols = [x for x in telcom.columns if x not in cat_cols + target_col + Id_col]
# Colonnes binaires avec 2 valeurs
bin_cols = telcom.nunique()[telcom.nunique() == 2].keys().tolist()
# Colonnes plus de 2 valeurs
multi_cols = [i for i in cat_cols if i not in bin_cols]
# Label Encodage des colonnes binaires
le = LabelEncoder()
for i in bin_cols :
telcom[i] = le.fit_transform(telcom[i])
# Duplication de colonnes pour des colonnes à valeurs multiples
telcom = pd.get_dummies(data = telcom,columns = multi_cols )
#Scaling colonnes numérique
std = StandardScaler()
scaled = std.fit_transform(telcom[num_cols])
scaled = pd.DataFrame(scaled,columns=num_cols)

77
#dropping original values merging scaled values for numerical columns
df_telcom_og = telcom.copy()
telcom = telcom.drop(columns = num_cols,axis = 1)
telcom = telcom.merge(scaled,left_index=True,right_index=True,how = "left")

##########corrélation
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize = (25,15))
sns.heatmap(telcom.corr(method='pearson'), annot=True, fmt='.1f',
cmap=plt.get_cmap('YlGnBu'), cbar=False, ax=ax)
ax.set_yticklabels(ax.get_yticklabels())
plt.savefig('result.jpeg')

##########regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix,accuracy_score,classification_report
from sklearn.metrics import roc_auc_score,roc_curve,scorer
from sklearn.metrics import f1_score
import statsmodels.api as sm
from sklearn.metrics import precision_score,recall_score
from yellowbrick.classifier import DiscriminationThreshold
#fractionnement des données de train et de test
train,test = train_test_split(telcom,test_size = .2 ,random_state = 1000)
#séparer les variables dépendantes et indépendantes
cols = [i for i in telcom.columns if i not in Id_col + target_col]
train_X = train[cols]
train_Y = train[target_col]
test_X = test[cols]
test_Y = test[target_col]
# Attributs de fonction
# dataframe - trame de données traitée
# Algorithm - Algorithme utilisé
# training_x - trame de données de variables prédictives (formation)
# testing_x - variables du prédicteur dataframe (testing)
# training_y - variable cible (training)
# training_y - variable cible (test)
# cf - ["coefficients", "features"] (cooefficients pour la logistique
# régression, fonctionnalités pour les modèles arborescents)
# threshold_plot - si True renvoie le tracé du seuil pour le modèle
def telecom_churn_prediction(algorithm,training_x,testing_x,
training_y,testing_y,cols,cf,threshold_plot) :
#model
algorithm.fit(training_x,training_y)
predictions = algorithm.predict(testing_x)
probabilities = algorithm.predict_proba(testing_x)

78
#coeffs
if cf == "coefficients" :
coefficients = pd.DataFrame(algorithm.coef_.ravel())
elif cf == "features" :
coefficients = pd.DataFrame(algorithm.feature_importances_)
column_df = pd.DataFrame(cols)
coef_sumry = (pd.merge(coefficients,column_df,left_index= True,
right_index= True, how = "left"))
coef_sumry.columns = ["coefficients","features"]
coef_sumry = coef_sumry.sort_values(by = "coefficients",ascending = False)
print (algorithm)
print ("\n Classification report : \n",classification_report(testing_y,predictions))
print ("Accuracy Score : ",accuracy_score(testing_y,predictions))
#confusion matrix
conf_matrix = confusion_matrix(testing_y,predictions)
#roc_auc_score
model_roc_auc = roc_auc_score(testing_y,predictions)
print ("Area under curve : ",model_roc_auc,"\n")
fpr,tpr,thresholds = roc_curve(testing_y,probabilities[:,1])
#plot confusion matrix
trace1 = go.Heatmap(z=conf_matrix,
x = ["Not churn","Churn"],
y = ["Not churn","Churn"],
showscale = True ,colorscale = "Portland",
name = "matrix",xaxis="x2",yaxis="y2")
#plot roc curve
trace2 = go.Scatter(x = fpr,y = tpr,
name = "Roc : " + str(model_roc_auc),
line = dict(color = ('#000103'),width = 2),
)
trace3 = go.Scatter(x = [0,1],y=[0,1],
line = dict(color = ('#fc0505'),width = 2,
dash = 'dot'))
#plot coeffs
trace4 = go.Bar(x = coef_sumry["features"],y = coef_sumry["coefficients"],
name = "coefficients"
,
marker = dict(color = coef_sumry["coefficients"],
colorscale = "blues",
line = dict(width = .6,color = "black")))

layout = go.Layout(dict(title="Performance_du_modèle
Matrice_de_confusion",
autosize = False,height = 500,width = 800,
showlegend = False,
plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
xaxis = dict(title= 'Courbe_ROC(Receiver operating characteristic)',
gridcolor = 'rgb(255, 255, 255)',
domain=[0, 0.6],ticklen=5,gridwidth=2),

79
yaxis = dict(gridcolor = 'rgb(255, 255, 255)',
zerolinewidth=1,
ticklen=5,gridwidth=2),
margin = dict(b=200),
xaxis2 =dict(title ="Positive/Negative(actual)",
domain =[0.7, 1],
gridcolor = 'rgb(255, 255, 255)') ,
yaxis2 =dict(title = "Positive/Negative(prédiction)",
anchor='x2',gridcolor = 'rgb(255, 255, 255)')
)
)
data = [trace1,trace2,trace3]
fig = go.Figure(data=data,layout=layout)
py.iplot(fig)
layout = go.Layout(dict(title = "Feature_Importances",
autosize = False,height = 800,width = 800,
plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
)
)
data1=[trace4]
fig1=go.Figure(data1,layout=layout)
py.iplot(fig1)
logit = LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
verbose=0, warm_start=False)
telecom_churn_prediction(logit,train_X,test_X,train_Y,test_Y,
cols,"coefficients",threshold_plot = True)

##########
from imblearn.over_sampling import SMOTE
cols = [i for i in telcom.columns if i not in Id_col+target_col]
smote_X = telcom[cols]
smote_Y = telcom[target_col]
#Données de train et d'essai fractionnées
smote_train_X,smote_test_X,smote_train_Y,smote_test_Y =
train_test_split(smote_X,smote_Y,
test_size = .1 ,
random_state = 100)

#suréchantillonnage de la classe minoritaire à l'aide de smote


os = SMOTE(random_state = 0)
os_smote_X,os_smote_Y = os.fit_sample(smote_train_X,smote_train_Y)
os_smote_X = pd.DataFrame(data = os_smote_X,columns=cols)
os_smote_Y = pd.DataFrame(data = os_smote_Y,columns=target_col)
###
logit_smote = LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
penalty='l2', random_state=None, solver='liblinear', tol=0.0001,

80
verbose=0, warm_start=False)
telecom_churn_prediction(logit_smote,os_smote_X,test_X,os_smote_Y,test_Y,
cols,"coefficients",threshold_plot = True)

##########
from sklearn.feature_selection import RFE

logit = LogisticRegression()
rfe = RFE(logit,10)
rfe = rfe.fit(os_smote_X,os_smote_Y.values.ravel())
rfe.support_
rfe.ranking_
#colonnes identifiées Élimination récursive de caractéristiques
idc_rfe = pd.DataFrame({"rfe_support" :rfe.support_,
"columns" : [i for i in telcom.columns if i not in Id_col + target_col],
"ranking" : rfe.ranking_,
})
cols = idc_rfe[idc_rfe["rfe_support"] == True]["columns"].tolist()
#separating train and test data
train_rf_X = os_smote_X[cols]
train_rf_Y = os_smote_Y
test_rf_X = test[cols]
test_rf_Y = test[target_col]
logit_rfe = LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
verbose=0, warm_start=False)
#applying model
telecom_churn_prediction(logit_rfe,train_rf_X,test_rf_X,train_rf_Y,test_rf_Y,
cols,"coefficients",threshold_plot = True)
tab_rk = ff.create_table(idc_rfe)
py.iplot(tab_rk)

##########
from sklearn.feature_selection import chi2
from sklearn.feature_selection import SelectKBest
#select columns
cols = [i for i in telcom.columns if i not in Id_col + target_col ]
#dataframe with non negative values
df_x = df_telcom_og[cols]
df_y = df_telcom_og[target_col]
#fit model with k= 3
select = SelectKBest(score_func = chi2,k = 3)
fit = select.fit(df_x,df_y)
#Summerize scores
print ("scores")
print (fit.scores_)
print ("P - Values")
print (fit.pvalues_)
#create dataframe

81
score = pd.DataFrame({"features":cols,"scores":fit.scores_,"p_values":fit.pvalues_ })
score = score.sort_values(by = "scores" ,ascending =False)
#createing new label for categorical and numerical columns
score["feature_type"] =
np.where(score["features"].isin(num_cols),"Numerical","Categorical")
#plot
trace = go.Scatter(x = score[score["feature_type"] == "Categorical"]["features"],
y = score[score["feature_type"] == "Categorical"]["scores"],
name = "Categorial",mode = "lines+markers",
marker = dict(color = "green",
line = dict(width =1))
)
trace1 = go.Bar(x = score[score["feature_type"] == "Numerical"]["features"],
y = score[score["feature_type"] == "Numerical"]["scores"],name = "Numerical",
marker = dict(color = "red",
line = dict(width =1)),
xaxis = "x2",yaxis = "y2"
)
layout = go.Layout(dict(title = "Scores_Categorical & Numerical_features",
plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
xaxis = dict(gridcolor = 'rgb(255, 255, 255)',
tickfont = dict(size =10),
domain=[0, 0.7],
tickangle = 90,zerolinewidth=1,
ticklen=5,gridwidth=2),
yaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "scores",
zerolinewidth=1,ticklen=5,gridwidth=2),
margin = dict(b=200),
xaxis2=dict(domain=[0.8, 1],tickangle = 90,
gridcolor = 'rgb(255, 255, 255)'),
yaxis2=dict(anchor='x2',gridcolor = 'rgb(255, 255, 255)')
)
)
data=[trace,trace1]
fig = go.Figure(data=data,layout=layout)
py.iplot(fig)

##########
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
from sklearn import tree
from graphviz import Source
from IPython.display import SVG,display
import ipywidgets as wg
from ipywidgets import interactive
#top 3 categorical features
features_cat = score[score["feature_type"] == "Categorical"]["features"][:1].tolist()
#top 3 numerical features

82
features_num = score[score["feature_type"] == "Numerical"]["features"][:1].tolist()
# Attributs de fonction
# colonnes - colonnes sélectionnées
# maximum_depth - profondeur de l'arbre
# critere_type - ["gini" ou "entropie"]
# split_type - ["meilleur" ou "aléatoire"]
# Model Performance - True (donne la sortie du modèle
def plot_decision_tree(columns,maximum_depth,criterion_type,
split_type,model_performance = None) :
#séparer les variables dépendantes et indépendantes
dtc_x = df_x[columns]
dtc_y = df_y[target_col]
#model
dt_classifier = DecisionTreeClassifier(max_depth = maximum_depth,
splitter = split_type,
criterion = criterion_type,
)
dt_classifier.fit(dtc_x,dtc_y)
#plot decision tree
graph = Source(tree.export_graphviz(dt_classifier,out_file=None,
rounded=False,
proportion = False,
feature_names = columns,
precision = 2,
class_names=["Not churn","Churn"],
filled = True
)
)

display(graph)
plot_decision_tree(features_num,3,"gini","best")

##########
from sklearn.ensemble import RandomForestClassifier
# attributs de fonction
# colonnes - colonne utilisée
# nf_estimators - Le nombre d'arbres dans la forêt.
# installed_tree - numéro d'arbre à afficher
# maximum_depth - profondeur de l'arbre
# critere_type - type de critere scinde ["gini" ou "entropie"]
# Performance du modèle - imprime les performances du modèle
def plot_tree_randomforest(columns,nf_estimators,
estimated_tree,maximum_depth,
criterion_type,model_performance = None) :
dataframe = df_telcom_og[columns + target_col].copy()
#train and test datasets
rf_x = dataframe[[i for i in columns if i not in target_col]]
rf_y = dataframe[target_col]

#random forest classifier

83
rfc = RandomForestClassifier(n_estimators = nf_estimators,
max_depth = maximum_depth,
criterion = criterion_type,
)
rfc.fit(rf_x,rf_y)
estimated_tree = rfc.estimators_[estimated_tree]
graph = Source(tree.export_graphviz(estimated_tree,out_file=None,
rounded=False,proportion = False,
feature_names = columns,
precision = 2,
class_names=["Not churn","Churn"],
filled = True))
display(graph)
#model performance
if model_performance == True :
telecom_churn_prediction(rfc,
rf_x,test_X[columns],
rf_y,test_Y,
columns,"features",threshold_plot = True)

cols1 = [ i for i in train_X.columns if i not in target_col + Id_col]


plot_tree_randomforest(cols1,700,99,5,"gini",True)

##########
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB(priors=None)
telecom_churn_prediction_alg(gnb,os_smote_X,test_X,os_smote_Y,test_Y)

##########
from sklearn.svm import SVC
#Support vector classifier
#using linear hyper plane
svc_lin = SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma=1.0, kernel='linear',
max_iter=-1, probability=True, random_state=None, shrinking=True,
tol=0.001, verbose=False)
cols = [i for i in telcom.columns if i not in Id_col + target_col]
telecom_churn_prediction(svc_lin,os_smote_X,test_X,os_smote_Y,test_Y,
cols,"coefficients",threshold_plot = False)

##########
from lightgbm import LGBMClassifier

lgbm_c = LGBMClassifier(boosting_type='gbdt', class_weight=None, colsample_bytree=1.0,


learning_rate=0.5, max_depth=7, min_child_samples=20,
min_child_weight=0.001, min_split_gain=0.0, n_estimators=100,
n_jobs=-1, num_leaves=500, objective='binary', random_state=None,
reg_alpha=0.0, reg_lambda=0.0, silent=True, subsample=1.0,
subsample_for_bin=200000, subsample_freq=0)

84
cols = [i for i in telcom.columns if i not in Id_col + target_col]
telecom_churn_prediction(lgbm_c,os_smote_X,test_X,os_smote_Y,test_Y,
cols,"features",threshold_plot = True)
##########
from xgboost import XGBClassifier

xgc = XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,


colsample_bytree=1, gamma=0, learning_rate=0.9, max_delta_step=0,
max_depth = 7, min_child_weight=1, missing=None, n_estimators=100,
n_jobs=1, nthread=None, objective='binary:logistic', random_state=0,
reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,
silent=True, subsample=1)

telecom_churn_prediction(xgc,os_smote_X,test_X,os_smote_Y,test_Y,
cols,"features",threshold_plot = True)
##########
from sklearn.metrics import f1_score
from sklearn.metrics import cohen_kappa_score
#gives model report in dataframe
def model_report(model,training_x,testing_x,training_y,testing_y,name) :
model.fit(training_x,training_y)
predictions = model.predict(testing_x)
accuracy = accuracy_score(testing_y,predictions)
recallscore = recall_score(testing_y,predictions)
precision = precision_score(testing_y,predictions)
roc_auc = roc_auc_score(testing_y,predictions)
f1score = f1_score(testing_y,predictions)

df = pd.DataFrame({"Model" : [name],
"Accuracy(%)" : [accuracy*100],
"Recall(%)" : [recallscore*100],
"Precision(%)" : [precision*100],
"f1_score(%)" : [f1score*100],
"AUC" : [roc_auc],
"error_rate(%)" : [(1-accuracy)*100],
})
return df
#outputs for every model
model1 = model_report(logit,train_X,test_X,train_Y,test_Y,
"LR")
model2 = model_report(logit_smote,os_smote_X,test_X,os_smote_Y,test_Y,
"LR(SMOTE)")
model3 = model_report(logit_rfe,train_rf_X,test_rf_X,train_rf_Y,test_rf_Y,
"LR(RFE)")
decision_tree = DecisionTreeClassifier(max_depth = 9,
random_state = 123,
splitter = "best",
criterion = "gini",

85
)
model4 = model_report(decision_tree,train_X,test_X,train_Y,test_Y,
"Decision Tree")
rfc = RandomForestClassifier(n_estimators = 1000,
random_state = 123,
max_depth = 9,
criterion = "gini")
model6 = model_report(rfc,train_X,test_X,train_Y,test_Y,
"Random Forest")
model7 = model_report(gnb,os_smote_X,test_X,os_smote_Y,test_Y,
"Naive Bayes")
model8 = model_report(svc_rbf,os_smote_X,test_X,os_smote_Y,test_Y,
"SVM")
model9 = model_report(lgbm_c,os_smote_X,test_X,os_smote_Y,test_Y,
"LGBM")
model10 = model_report(xgc,os_smote_X,test_X,os_smote_Y,test_Y,
"XGBoost")
#concat all models
model_performances = pd.concat([model1,model2,model3,
model4,model6,
model7,model8,model9,
model10],axis = 0).reset_index()
model_performances = model_performances.drop(columns = "index",axis =1)
colorscale = [[0, '#4d004c'],[.5, '#f2e5ff'],[1, '#ffffff']]
table = ff.create_table(np.round(model_performances,3),colorscale=colorscale)
py.iplot(table)
##########
model_performances
def output_tracer(metric,color) :
tracer = go.Scatter(x = model_performances["Model"] ,
y = model_performances[metric],
name = metric ,
marker = dict(line = dict(width =.7))
)
return tracer
layout = go.Layout(dict(plot_bgcolor = "rgb(243,243,243)",
paper_bgcolor = "rgb(243,243,243)",
xaxis = dict(gridcolor = 'rgb(255, 255, 255)',
title = "metric",
zerolinewidth=1,
ticklen=5,gridwidth=2),
yaxis = dict(gridcolor = 'rgb(255, 255, 255)',
zerolinewidth=1,ticklen=5,gridwidth=2),
margin = dict(l = 50),
height = 780
)
)
trace1 = output_tracer("Accuracy(%)","#6699FF")
trace2 = output_tracer('Recall(%)',"red")
trace3 = output_tracer('Precision(%)',"#33CC99")

86
trace4 = output_tracer('f1_score(%)',"lightgrey")
trace5 = output_tracer('AUC(%)',"yellow")
trace6 = output_tracer('error_rate(%)',"#000000")
data = [trace1,trace2,trace3,trace4,trace5,trace6]
fig = go.Figure(data=data,layout=layout)
py.iplot(fig)

87
Résumé
La perte de clientèle est un problème majeur et l’une des préoccupations majeures des grandes
entreprises. En raison de l’effet direct sur les revenus des entreprises, en particulier dans le
secteur des télécommunications, les entreprises cherchent à mettre au point des moyens de
prédire le nombre de clients potentiels à la fermeture. Par conséquent, il est important de
rechercher les facteurs qui augmentent le taux de désabonnement des clients pour prendre les
mesures adéquates. La principale contribution de notre travail est de développer un modèle de
prévision du taux de désabonnement qui aide les opérateurs de télécommunications à prédire
les clients les plus susceptibles de subir un désabonnement. Le modèle développé dans ce
travail utilise des techniques d'apprentissage automatique, sur jupyter-notebook, afin de
développer un modèle pour mesurer leur performance, la mesure standard de l'aire sous la
courbe (AUC) et le Matrice de confusion.

Mots clés: Prédiction du désabonnement des clients - Apprentissage automatique - Sélection


des fonctionnalités - Données volumineuses - Analyse de donnée.

Abstract
Customer churn is a major problem and one of the most important concerns for large
companies. Due to the direct effect on the revenues of the companies, especially in the
telecom field, companies are seeking to develop a model to predict potential customer to
churn. Therefore, finding factors that increase customer churn is important to take necessary
actions to reduce this churn. The main contribution of our work is to develop a churn
prediction model which assists telecom operators to predict customers who are most likely
subject to churn. The model developed in this work uses machine learning techniques, on
jupyter-notebook, in order to developed and measure the performance of the model, using the
Area Under Curve (AUC) and the Confusion Matrix.

Keywords: Customer churn prediction - Churn in telecom - Machine learning - Feature


selection - Data Mining - Data Analytics.

5 rue Salah Ayache 7100 Le Kef Tunisie 5 ‫ الكاف عياش صالح شارع‬7100 ‫تونس‬
Tél. : 21678 201 ‫ الهاتف‬: 056 Fax : 21678 200 ‫ الفاكس‬: 237
Site web:www.isikef.rnu.tn: ‫اإللكتون الموقع‬