Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Data Preprocessing

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for Fallou Fallou
July 04, 2019

Data Preprocessing

This presentation meaning a data preprocessing.

Avatar for Fallou

Fallou

July 04, 2019

Other Decks in Business

Transcript

  1. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 1/28 Fallou Diagne

    Data Scientist Contexte L'objectif de ce document est de traiter et d'analyser le comportement des clients d'une banque enfin de prédire l'issue d'un énventuel crédit bancaire Etudier les liaisons entre les variables et la variable cible Visualiser les données Et préparer les données à une étude de ML pour une prédiction Nous somme en présence de données réelles pour mieux axer l'analyse dans le milieu pratique. NB: Vous pouvez toujours m'envoyé un mail pour toutes suggestions ou autres questions. mail: [email protected] ou par Linkdln In [2]: # libraries de python # Calcul et manipulation import pandas as pd import numpy as np # graphiques import seaborn as sns import matplotlib.pyplot as plt import plotly.offline as py import plotly.graph_objs as go from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot import plotly.tools as tls import plotly.figure_factory as ff py.init_notebook_mode(connected=True) import squarify plt.style.use('fivethirtyeight') %matplotlib inline # Dummification et imputatation from sklearn.preprocessing import StandardScaler, LabelEncoder from sklearn.model_selection import train_test_split #Partitionnement de la dataset from sklearn.preprocessing import Imputer #Pour l'imputation des valeurs manquante #Pas de message d'alertes import warnings warnings.filterwarnings('ignore') pd.options.mode.chained_assignment = None #masque les avertissements de pandas
  2. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 2/28 In [38]:

    df=pd.read_excel('data_credit.xlsx') In [12]: df.columns Regardns notre dataset(en 5 ligne pa défaut) In [13]: df.head() Dimension lignes*colonnes In [14]: df.shape L'ensemble des colonnes Out[12]: Index(['Comptes', 'Duree_credit', 'Historique_credit', 'Objet_credit', 'Montant_credit', 'Epargne', 'Anciennete_emploi', 'Taux_effort', 'Situation_familiale', 'Garanties', 'Anciennete_domicile', 'Biens', 'Age', 'Autres_credits', 'Statut_domicile', 'Nb_credits', 'Type_emp loi', 'Nb_pers_charge', 'Telephone', 'Etranger', 'Cible', 'ID'], dtype='object') Out[13]: Comptes Duree_credit Historique_credit Objet_credit Montant_credit Epargne Ancien 0 A11 6 A34 A43 1169 A65 1 A12 48 A32 A43 5951 A61 2 A14 12 A34 A46 2096 A61 3 A11 42 A32 A42 7882 A61 4 A11 24 A33 A40 4870 A61 5 rows × 22 columns Out[14]: (1000, 22)
  3. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 3/28 In [15]:

    df.columns Assurons la conversion de la variable cible(variable à prédire également) In [39]: df['Cible'] = df['Cible'].astype('object') Description de la variable cible In [17]: df['Cible'].describe(), df['Cible'].head() Nous allons recodé le notre variable cible en 0/1 car il est codé en 1/2 In [40]: df['Cible'][df['Cible'] ==1 ] = '0' df['Cible'][df['Cible'] ==2 ] = '1' Vérification du recodage Out[15]: Index(['Comptes', 'Duree_credit', 'Historique_credit', 'Objet_credit', 'Montant_credit', 'Epargne', 'Anciennete_emploi', 'Taux_effort', 'Situation_familiale', 'Garanties', 'Anciennete_domicile', 'Biens', 'Age', 'Autres_credits', 'Statut_domicile', 'Nb_credits', 'Type_emp loi', 'Nb_pers_charge', 'Telephone', 'Etranger', 'Cible', 'ID'], dtype='object') Out[17]: (count 1000 unique 2 top 1 freq 700 Name: Cible, dtype: int64, 0 1 1 2 2 1 3 1 4 2 Name: Cible, dtype: object)
  4. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 4/28 In [6]:

    df['Cible'].describe(), df['Cible'].head() visualisons les types de l'ensemble des variables In [20]: df.dtypes Out[6]: (count 1000 unique 2 top 0 freq 700 Name: Cible, dtype: object, 0 0 1 1 2 0 3 0 4 1 Name: Cible, dtype: object) Out[20]: Comptes object Duree_credit int64 Historique_credit object Objet_credit object Montant_credit int64 Epargne object Anciennete_emploi object Taux_effort int64 Situation_familiale object Garanties object Anciennete_domicile int64 Biens object Age int64 Autres_credits object Statut_domicile object Nb_credits int64 Type_emploi object Nb_pers_charge int64 Telephone object Etranger object Cible object ID int64 dtype: object
  5. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 5/28 Création de

    Métadonnées Pour faciliter la gestion des données, nous stockons des méta-informations sur les variables dans un DataFrame. Cela sera utile lorsque nous voudrons sélectionner des variables spécifiques pour l'analyse, la visualisation, la modélisation, etc. Nous notons que lorque les variables de la base sont nombreuses la création d'une métadonné reste capitale. Concrètement nous allons stocker: level: nominal, interval, binaire Keep: True ou False dtype: int, object
  6. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 6/28 In [41]:

    data = [] for f in df.columns: # Definissons le role if f == 'Cible': role = 'Cible' elif f == 'ID': role = 'id' else: role = 'input' # Définition du niveau des variables if f == 'Cible': level = 'binary' elif f == 'ID': level = 'nominal' elif df[f].dtypes == 'object': level = 'nominal' elif df[f].dtypes == 'int64': level = 'interval' #On initialise Keep à True pour toutes les variables sauf id keep = True if f == 'ID': keep = False # définition du type dtype = df[f].dtype # Créer un Dict contenant toutes les métadonnées de la variable f_dict = { 'varname': f, 'role': role, 'level': level, 'keep': keep, 'dtype': dtype } data.append(f_dict) meta = pd.DataFrame(data, columns=['varname', 'role', 'level', 'keep', 'dtype']) meta.set_index('varname', inplace=True) Nous allons voir maintenant notre dico
  7. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 7/28 In [22]:

    meta L'ensemble des variables qualitatives Out[22]: role level keep dtype varname Comptes input nominal True object Duree_credit input interval True int64 Historique_credit input nominal True object Objet_credit input nominal True object Montant_credit input interval True int64 Epargne input nominal True object Anciennete_emploi input nominal True object Taux_effort input interval True int64 Situation_familiale input nominal True object Garanties input nominal True object Anciennete_domicile input interval True int64 Biens input nominal True object Age input interval True int64 Autres_credits input nominal True object Statut_domicile input nominal True object Nb_credits input interval True int64 Type_emploi input nominal True object Nb_pers_charge input interval True int64 Telephone input nominal True object Etranger input nominal True object Cible Cible binary True object ID id nominal False int64
  8. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 8/28 In [23]:

    meta[(meta.level == 'nominal') & (meta.keep)].index Lensemble des variables quantitatives In [24]: meta[(meta.level == 'interval') & (meta.keep)].index Nombre de variable par role et niveau In [25]: pd.DataFrame({'count' : meta.groupby(['role', 'level'])['role'].size()}).reset_index() Nous pouvons également appliquer la méthode describe sur le dataframe. Grâce à notre métadonnée, nous pouvons facilement sélectionner les variables sur lesquelles nous voulons calculer les statistiques descriptives. Pour que tout soit clair, nous allons le faire par type de données. Description des variables quantitatives Out[23]: Index(['Comptes', 'Historique_credit', 'Objet_credit', 'Epargne', 'Anciennete_emploi', 'Situation_familiale', 'Garanties', 'Biens', 'Autres_credits', 'Statut_domicile', 'Type_emploi', 'Telephone', 'Etranger'], dtype='object', name='varname') Out[24]: Index(['Duree_credit', 'Montant_credit', 'Taux_effort', 'Anciennete_domici le', 'Age', 'Nb_credits', 'Nb_pers_charge'], dtype='object', name='varname') Out[25]: role level count 0 Cible binary 1 1 id nominal 1 2 input interval 7 3 input nominal 13
  9. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 9/28 In [26]:

    v = meta[(meta.level == 'interval') & (meta.keep)].index df[v].describe().transpose() Description des variables qualitatives In [27]: v = meta[(meta.level == 'nominal') & (meta.keep)].index df[v].describe().transpose() Description de la variables Cible: Out[26]: count mean std min 25% 50% 75% max Duree_credit 1000.0 20.903 12.058814 4.0 12.0 18.0 24.00 72.0 Montant_credit 1000.0 3271.258 2822.736876 250.0 1365.5 2319.5 3972.25 18424.0 Taux_effort 1000.0 2.973 1.118715 1.0 2.0 3.0 4.00 4.0 Anciennete_domicile 1000.0 2.845 1.103718 1.0 2.0 3.0 4.00 4.0 Age 1000.0 26.427 18.498185 -1.0 20.0 28.0 38.00 75.0 Nb_credits 1000.0 1.407 0.577654 1.0 1.0 1.0 2.00 4.0 Nb_pers_charge 1000.0 1.155 0.362086 1.0 1.0 1.0 1.00 2.0 Out[27]: count unique top freq Comptes 1000 4 A14 394 Historique_credit 1000 5 A32 530 Objet_credit 1000 11 -1 262 Epargne 1000 5 A61 603 Anciennete_emploi 1000 5 A73 339 Situation_familiale 1000 4 A93 548 Garanties 1000 3 A101 907 Biens 1000 4 A123 332 Autres_credits 1000 3 A143 814 Statut_domicile 1000 4 A152 562 Type_emploi 1000 4 A173 630 Telephone 1000 3 A191 442 Etranger 1000 3 -1 609
  10. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 10/28 In [28]:

    v = meta[(meta.level == 'binary') & (meta.keep)].index df[v].describe().transpose() Etude des valeurs manquantes Cette algorithme nous donne informations sur les valeurs manquantes de chaque variable dans notre dataset. Attention: les valeurs manquantes sont codées en -1 In [17]: vars_with_missing = [] for f in df.columns: missings = df[df[f] == -1][f].count() if missings > 0: vars_with_missing.append(f) missings_perc = missings/df.shape[0] print('La Variable {} a {} enregistré ({:.2%}) valeurs manquantes'.format(f, mi ssings, missings_perc)) print('En total, il a {} variables avec des valeurs manquantes'.format(len(vars_with_mi ssing))) La variable Etranger a 60.90% de valeurs manquantes, alors nous décidons de la supprimer de la base. In [42]: vars_to_drop = ['Etranger']#Si nous avions plusieurs variables # supprimer nous pourrions les regrouper #ans "vars_to_drop" très pratique n'est ce pas ! df.drop(vars_to_drop, inplace=True, axis=1) meta.loc[(vars_to_drop),'keep'] = False # mise à jour le dataframme crée(meta) Out[28]: count unique top freq Cible 1000 2 0 700 La Variable Objet_credit a 262 enregistré (26.20%) valeurs manquantes La Variable Age a 247 enregistré (24.70%) valeurs manquantes La Variable Statut_domicile a 218 enregistré (21.80%) valeurs manquantes La Variable Telephone a 250 enregistré (25.00%) valeurs manquantes La Variable Etranger a 609 enregistré (60.90%) valeurs manquantes En total, il a 5 variables avec des valeurs manquantes
  11. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 11/28 Imputation des

    valeurs manquantes Nous avons alors 4 variables à imputer, l'une est l'Age et les trois autres sont Statut_domicile, Objet_credit, Telephone In [43]: df['Statut_domicile'] = df['Statut_domicile'].astype('object') df['Objet_credit'] = df['Objet_credit'].astype('object') df['Telephone'] = df['Telephone'].astype('object') Imputation de la variables quatitative "Age" par sa moyenne In [44]: mean_imp = Imputer(missing_values=-1, strategy='mean', axis=0) df['Age'] = mean_imp.fit_transform(df[['Age']]).ravel() Imputation des variables qualitatives par leur mode In [45]: df['Telephone'][df['Telephone'] ==-1 ] =df['Telephone'].mode() df['Objet_credit'][df['Objet_credit'] ==-1 ] =df['Objet_credit'].mode() df['Statut_domicile'][df['Statut_domicile'] ==-1 ] =df['Statut_domicile'].mode() Vérification de l'application de l'imputation sur les variables concernées In [91]: vars_with_missing = [] for f in df.columns: missings = df[df[f] == -1][f].count() if missings > 0: vars_with_missing.append(f) missings_perc = missings/df.shape[0] print('Variable {} has {} records ({:.2%}) with missing values'.format(f, missi ngs, missings_perc)) print('En total, il a {} variables avec des valeurs manquantes'.format(len(vars_with_mi ssing))) Revoir notre dataset pour s'assurer que tout va bien En total, il a 0 variables avec des valeurs manquantes
  12. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 12/28 In [23]:

    df.head() Vérification de la cardinalité des variables catégoriques La cardinalité fait référence au nombre de valeurs différentes dans une variable. Comme nous allons créer des variables nominales à partir des variables qualitatives, nous devons vérifier s’il existe des variables avec beaucoup de valeurs distinctes. Nous devrions traiter ces variables différemment car elles donneraient lieu à de nombreuses variables nominales. In [36]: v = meta[(meta.level == 'nominal') & (meta.keep)].index for f in v: dist_values = df[f].value_counts().shape[0] print('La variable {} a {} modalités'.format(f, dist_values)) Seule la variable Objet_credit posséde 10 modalités et c'est raisonnable pour cette variable. Out[23]: Comptes Duree_credit Historique_credit Objet_credit Montant_credit Epargne Ancienne 0 A11 6 A34 A43 1169 A65 1 A12 48 A32 A43 5951 A61 2 A14 12 A34 A46 2096 A61 3 A11 42 A32 A42 7882 A61 4 A11 24 A33 A40 4870 A61 5 rows × 21 columns La variable Comptes a 4 modalités La variable Historique_credit a 5 modalités La variable Objet_credit a 10 modalités La variable Epargne a 5 modalités La variable Anciennete_emploi a 5 modalités La variable Situation_familiale a 4 modalités La variable Garanties a 3 modalités La variable Biens a 4 modalités La variable Autres_credits a 3 modalités La variable Statut_domicile a 3 modalités La variable Type_emploi a 4 modalités La variable Telephone a 2 modalités
  13. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 13/28 Visualisation des

    données Nous allons visualiser en graphiques l'ordre de grandeur des variables quantitatives et leur statistiques de base In [37]: df_qual=df.select_dtypes(exclude=['object']) df_qual.drop('ID', axis=1, inplace=True) df_qual.describe().plot(kind = "area",fontsize=22, figsize = (18,8), table = True,color map="rainbow") plt.xlabel('',) plt.ylabel('Value') plt.title("Statistiques générales des variables ") Zoom sur notre variables cibles Nous voyons bien que 30% des clients de notr datasets n'ont payé leur crédit. Out[37]: Text(0.5, 1.0, 'Statistiques générales des variables ')
  14. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 14/28 In [38]:

    df['Cible'][df['Cible'] =='0' ] = 'payés' df['Cible'][df['Cible'] =='1' ] = 'impayés' f,ax=plt.subplots(1,2,figsize=(16,7)) df['Cible'].value_counts().plot.pie(explode=[0.1,0.1],autopct='%1.1f%%',ax=ax[0],shadow =True) ax[0].set_title('df Cible Count') ax[0].set_ylabel('Count') sns.countplot('Cible',data=df,ax=ax[1]) ax[1].set_title('df Cible Count') plt.show() In [92]: a = sns.FacetGrid( df, hue = 'Cible', aspect=4 ) a.map(sns.kdeplot, 'Duree_credit', shade= True ) a.set(xlim=(0 , df['Duree_credit'].max())) a.add_legend() Out[92]: <seaborn.axisgrid.FacetGrid at 0x7f1e692a0128>
  15. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 15/28 In [93]:

    a = sns.FacetGrid( df, hue = 'Cible', aspect=4 ) a.map(sns.kdeplot, 'Montant_credit', shade= True ) a.set(xlim=(0 , df['Montant_credit'].max())) a.add_legend() In [94]: a = sns.FacetGrid( df, hue = 'Cible', aspect=4 ) a.map(sns.kdeplot, 'Age', shade= True ) a.set(xlim=(0 , df['Age'].max())) a.add_legend() Voyons comment les clients se sont réparties autours des variables quantitaive discriminé par la variables à prédire Out[93]: <seaborn.axisgrid.FacetGrid at 0x7f1e691f3f98> Out[94]: <seaborn.axisgrid.FacetGrid at 0x7f1e698314e0>
  16. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 16/28 In [39]:

    df_cont = df[['Duree_credit', 'Montant_credit', 'Taux_effort', 'Anciennete_domicile', 'Age', 'Nb_credits', 'Nb_pers_charge', 'Cible']] from pandas.tools.plotting import radviz radviz(df_cont,"Cible") On peut vrément avoir une petite idée sur l'importance des variables sur notre variable cible. Le montant de credit, le taux d'effort, ancienneté et la durée de credit semblent etre des variables plus importantes, Nous allons vérifié ceci, et axé plus l'étude descriptive sur ces variables en liason avec notre variable à prédire Boxplot de quelques variables selon les types de paiment Out[39]: <matplotlib.axes._subplots.AxesSubplot at 0x7f1e733a7ba8>
  17. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 17/28 In [40]:

    plt.figure(figsize=(15,10)) plt.subplot(2,2,1) sns.boxenplot(x='Cible',y='Age',data=df) plt.subplot(2,2,2) sns.boxenplot(x='Cible',y='Montant_credit',data=df) plt.subplot(2,2,3) sns.violinplot(x='Cible',y='Taux_effort',data=df) plt.subplot(2,2,4) sns.violinplot(x='Cible',y='Duree_credit',data=df) In [41]: g = sns.FacetGrid(df, col="Comptes", hue="Cible", palette="Set1") g.map(sns.distplot, "Age") g = g.add_legend() g.fig.suptitle('Age vs Comptes vs Cible', fontsize=16) g.fig.set_size_inches(15,8) Out[40]: <matplotlib.axes._subplots.AxesSubplot at 0x7f1e731213c8>
  18. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 18/28 In [42]:

    g = sns.FacetGrid(df, col="Garanties", hue="Cible", palette="Set1") g.map(sns.distplot, "Montant_credit") g = g.add_legend() g.fig.suptitle('Montant_credit vs Comptes vs Garanties', fontsize=16) g.fig.set_size_inches(15,8) Distribution des variables quatitatives discriminées par le type de client(impayés u non)
  19. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 21/28 Corrélogrammes des

    variables quantitatives pour voir la laison entre eux In [44]: def corr_heatmap(v): correlations = df[v].corr() # Create color map ranging between two colors cmap = sns.diverging_palette(220, 10, as_cmap=True) fig, ax = plt.subplots(figsize=(10,10)) sns.heatmap(correlations, cmap=cmap, vmax=1.0, center=0, fmt='.2f', square=True, linewidths=.5, annot=True, cbar_kws={"shrink": .75}) plt.show(); v = meta[(meta.level == 'interval') & (meta.keep)].index corr_heatmap(v) Seul les variables Duree_credit et Montant_credit ont une corrélarion assez élevé(62%) Nous allons étudié la similarité de leur comportement sur la variable à prédire
  20. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 22/28 In [45]:

    sns.lmplot(x='Duree_credit', y='Montant_credit', data=df, hue='Cible', palette='Set1', scatter_kws={'alpha':0.3}) Out[45]: <seaborn.axisgrid.FacetGrid at 0x7f1e6c697198>
  21. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 23/28 In [46]:

    sns.jointplot("Duree_credit", "Montant_credit", data=df, kind="kde",space=0,color='g') Out[46]: <seaborn.axisgrid.JointGrid at 0x7f1e6bf23400>
  22. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 24/28 Le test

    de pearson donne 62% de correlation entre les deux variables Duree_credit et Montant_credit avec un test de corrélation largement inférieur au seuil de rejet, ce qui montre une corrélation assez importante entre ses deux variables. Personnellement, je garde les deux variables car je n'ai pas beaucoup de variables dans la dataset, je risquerai pas alors de perdre la moindre information Attention: La suppression de l'un de ces deux variables reste à la décision du statisticien. Zoom sur les variables qualitatives In [70]: df=pd.read_excel('data_credit.xlsx') #graph individual features by survival fig, saxis = plt.subplots(2, 3,figsize=(16,12)) sns.barplot(x = 'Comptes', y = 'Cible', data=df, ax = saxis[0,0]) sns.barplot(x = 'Historique_credit', y = 'Cible', data=df, ax = saxis[0,1]) sns.barplot(x = 'Type_emploi', y = 'Cible', data=df, ax = saxis[0,2]) sns.pointplot(x = 'Epargne', y = 'Cible', data=df, ax = saxis[1,0]) sns.pointplot(x = 'Biens', y = 'Cible', data=df, ax = saxis[1,1]) sns.pointplot(x = 'Situation_familiale', y = 'Cible', data=df, ax = saxis[1,2]) Out[70]: <matplotlib.axes._subplots.AxesSubplot at 0x7f1e6a701400>
  23. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 25/28 Dummification des

    variables catégoriques Pour les variables catégoriques, nous devons créer des variables factices. Je vais laisser tomber la première catégorie de chacun. Par exemple, plutôt que d'avoir «payés» et «impayés», nous avons avec des valeurs de 0 ou 1 (avec 1 étant impayés et 0 donc payés) Création de test et train In [46]: train, test = train_test_split(df, test_size=0.3) In [ ]: Ajout d'une colonne dans chaque jeu de données avant la fusion In [47]: train['Type'] = 'train' test['Type'] = 'test' Suppression de la variable Cible dans la dataset test In [48]: test.drop('Cible' ,axis = 1, inplace=True) Refusionner les tables train et test In [49]: df = train.append(test) # df=data+test Combien de lignes et de colonnes dans le jeu de données In [50]: df.shape Out[50]: (1000, 22)
  24. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 26/28 Dimmension de

    nos datasets In [51]: train.shape, test.shape #On a enlevé Cible dans test Maintenant: Pour les variables qualitatives, nous allons les dummifier Pour les variables quantitatives, nous allons les centrer en 0 In [52]: data=df target_col = ["Cible"] id_dataset = ["Type"] cat_cols = data.nunique()[data.nunique() < 12].keys().tolist() cat_cols = [x for x in cat_cols ] #numerical columns num_cols = [x for x in data.columns if x not in cat_cols + target_col + id_dataset] #Binary columns with 2 values bin_cols = data.nunique()[data.nunique() == 2].keys().tolist() #Columns more than 2 values multi_cols = [i for i in cat_cols if i not in bin_cols] #Label encoding Binary columns le = LabelEncoder() #for i in bin_cols : # data[i] = le.fit_transform(data[i]) #Duplicating columns for multi value columns data = pd.get_dummies(data = data,columns = multi_cols ) #Scaling Numerical columns std = StandardScaler() scaled = std.fit_transform(data[num_cols]) scaled = pd.DataFrame(scaled,columns=num_cols) #dropping original values merging scaled values for numerical columns df_data_og = data.copy() data = data.drop(columns = num_cols,axis = 1) data = data.merge(scaled,left_index=True,right_index=True,how = "left") data = data.drop(columns = ['ID'],axis = 1) Out[51]: ((700, 22), (300, 21))
  25. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 27/28 In [54]:

    def correlation_plot(): #correlation correlation = data.drop(columns=['Cible']).corr() #definition des labels matrix_cols = correlation.columns.tolist() #convertir en tableau corr_array = np.array(correlation) trace = go.Heatmap(z = corr_array, x = matrix_cols, y = matrix_cols, colorscale='Viridis', colorbar = dict() , ) layout = go.Layout(dict(title = 'Correlation Matrix for variables', margin = dict(r = 0 ,l = 100, t = 0,b = 100, ), yaxis = dict(tickfont = dict(size = 9)), xaxis = dict(tickfont = dict(size = 9)), ) ) fig = go.Figure(data = [trace],layout = layout) py.iplot(fig)
  26. 27/02/2019 Noyau => préparation visualisation dummification file:///C:/Users/DIAGNE-10527/Pictures/Noyau%20pr%C3%A9paration%20visualisation%20dummification.html 28/28 In [55]:

    correlation_plot() Conclusion: Alors les données sont pretes à vous servir. :) Fin pour cette partie, alors il ne reste qu'à utiliser une méthode de maching Learning pour modéliser et prédire la probabilité de remboursement de crédit. L'autre partie sera l'application de RandomForest sur les données et un tableau de bord sera effectué integralement sur python pour présenter les résultats du modèle @Fallou Diagne datascientist. Nb_pers_charge Anciennete_domicil Anciennete_domicil Anciennete_domicil Anciennete_domicil Anciennete_emploi_ Anciennete_emploi_ Anciennete_emploi_ Anciennete_emploi_ Anciennete_emploi_ Autres_credits_A14 Autres_credits_A14 Autres_credits_A14 Biens_A121 Biens_A122 Biens_A123 Biens_A124 Comptes_A11 Comptes_A12 Comptes_A13 Comptes_A14 Epargne_A61 Epargne_A62 Epargne_A63 Epargne_A64 Epargne_A65 Garanties_A101 Garanties_A102 Garanties_A103 Historique_credit_A Historique_credit_A Historique_credit_A Historique_credit_A Historique_credit_A Nb_credits_1 Nb_credits_2 Nb_credits_3 Nb_credits_4 Objet_credit_A40 Objet_credit_A41 Objet_credit_A410 Nb_pers_charge ciennete_domicile_2 ciennete_domicile_4 iennete_emploi_A72 iennete_emploi_A74 Autres_credits_A141 Autres_credits_A143 Biens_A122 Biens_A124 Comptes_A12 Comptes_A14 Epargne_A62 Epargne_A64 Garanties_A101 Garanties_A103 istorique_credit_A31 istorique_credit_A33 Nb_credits_1 Nb_credits_3 Objet_credit_A40 Objet_credit_A410 Objet_credit_A43 Objet_credit_A45 Objet_credit_A48 uation_familiale_A91 uation_familiale_A93 tatut_domicile_A151 tatut_domicile_A153 Taux_effort_2 Taux_effort_4 Type_emploi_A172 Type_emploi_A174 Duree_credit Co e at o at o a