Hébergeur de fichiers indépendant

VISA ELHILA MAMET.ipynb

À propos

Type de fichier
Fichier IPYNB de 461 Ko (text/html)
Confidentialité
Fichier public, envoyé le 18 décembre 2016 à 20:20, depuis l'adresse IP 41.141.x.x (Maroc)
Sécurité
Ne contient aucun Virus ou Malware connus - Dernière vérification: 17/06/19
Statistiques
La présente page de téléchargement a été vue 294 fois depuis l'envoi du fichier
Page de téléchargement

Aperçu du fichier


{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Projet d'apprentissage Statistique <a href=\"http://www.insa-toulouse.fr/\" ><img src=\"http://www.math.univ-toulouse.fr/~besse/Wikistat/Images/logo-insa.jpg\" style=\"float:right; max-width: 120px; display: inline\" alt=\"INSA\"/></a> \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Score d'appétence de la carte visa premier\n",
    "###### ELHILA Salim, MAMET Matthieu\n",
    "\n",
    "## Introduction\n",
    "\n",
    "Suite à l'exploration des données bancaires qui a été faite lors du projet d'exploration de quatrième année, nous abordons ici la construction de modèles de prévision de la probabilité de possession d’une carte visa premier\n",
    "ou score d’appétence. Ce type d'études permet une économie d'energie, de temps et de ressources en terme de Marketing, permettant de cibler spécifiquement les clients potentiellement intéressés lors d'une campagne d'advertising. \n",
    "\n",
    "Les méthodes telles que la régression logistique, l'analyse discriminante, les arbres de discrimination, les Support Vector Machines ou les méthodes d'agrégation de modèles sont abordées et comparées. \n",
    "\n",
    "## 1. Principaux résultats obtenus, comparaison et choix de la méthode à obtenir\n",
    "\n",
    "* Nous avons tout d'abord procédé par une Regression logistique simple, que l'on a comparé avec une Regression logistique pénalisée avec le critère de Lasso. On obtient une erreur sensiblement plus basse pour la méthode régularisée, avec un modèle naturellement plus parcimonieux et donc plus propice à l'interprétation.\n",
    "\n",
    "* Nous avons ensuite utilisé des Analyses discriminantes linéaires, quadratiques, puis la méthode des K-Nearest-Neighbors. C'est la linéaire qui donne les meilleurs résultats, suivit de la quadratique et de KNN.\n",
    "\n",
    "* Arbres binaires de décision : le modèle basé sur les variables qualitatives a une erreur de prévision sensiblement meilleure mais les courbes ROC ne permettent pas de conclure étant donné qu'elles se chevauchent.\n",
    "\n",
    "* Réseaux de neurones, avec un nombre de neurones optimal = 5. Celui qui a appris sur les variables qualitatives semble meilleur avec une ROC présentant une AUC plus grande.\n",
    "\n",
    "* On met en place des forêts aléatoires, en optimisant dans un premier temps le nombre d'arbres, puis dans un second temps le nombre de variables tirées aléatoirement. C'est la deuxième manière de procéder qui donne les meilleurs résultats.\n",
    "\n",
    "* Utilisation du gradient boosting, avec optimisation du nombre de modèles à estimer. \n",
    "\n",
    "* SVM, en optimisant l'écart type du noyau gaussien et le paramètre de régularisation. On trouve que la SVM sur les variables qualitatives donne de bien meilleurs résultats.\n",
    "\n",
    "On procéde finalement à une comparaison des courbes ROC de tous ces modèles, puis à une validation croisée de Monte-Carlo. Les deux modèles se démarquant des autres sont finalement ** Random Forest ** et le ** Gradient Boosting **.\n",
    "\n",
    "\n",
    "## 2. Préparation des données\n",
    "\n",
    "La préparation des données ayant déjà été faite pour le projet de quatrième année, nous nous contentons ici de récupérer les données qui servent pour le scénario d'apprentissage sur R.\n",
    "\n",
    "### 2.1 Lecture des données"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>familr</th>\n",
       "      <th>sexer</th>\n",
       "      <th>RELAT</th>\n",
       "      <th>AGER</th>\n",
       "      <th>OPGNBL</th>\n",
       "      <th>MOYRVL</th>\n",
       "      <th>TAVEPL</th>\n",
       "      <th>ENDETL</th>\n",
       "      <th>GAGETL</th>\n",
       "      <th>GAGECL</th>\n",
       "      <th>...</th>\n",
       "      <th>relatq</th>\n",
       "      <th>qsmoyq</th>\n",
       "      <th>opgnbq</th>\n",
       "      <th>moyrvq</th>\n",
       "      <th>tavepq</th>\n",
       "      <th>dmvtpq</th>\n",
       "      <th>boppnq</th>\n",
       "      <th>jnbjdq</th>\n",
       "      <th>itavcq</th>\n",
       "      <th>CARVP</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>238</td>\n",
       "      <td>51</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.753590</td>\n",
       "      <td>13.461603</td>\n",
       "      <td>1.609438</td>\n",
       "      <td>11.688701</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>...</td>\n",
       "      <td>R2</td>\n",
       "      <td>Q2</td>\n",
       "      <td>O0</td>\n",
       "      <td>M2</td>\n",
       "      <td>T2</td>\n",
       "      <td>D0</td>\n",
       "      <td>B2</td>\n",
       "      <td>J1</td>\n",
       "      <td>I2</td>\n",
       "      <td>Coui</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>139</td>\n",
       "      <td>58</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.713572</td>\n",
       "      <td>8.132413</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>...</td>\n",
       "      <td>R1</td>\n",
       "      <td>Q0</td>\n",
       "      <td>O0</td>\n",
       "      <td>M2</td>\n",
       "      <td>T1</td>\n",
       "      <td>D1</td>\n",
       "      <td>B0</td>\n",
       "      <td>J0</td>\n",
       "      <td>I2</td>\n",
       "      <td>Coui</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>99</td>\n",
       "      <td>27</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.890372</td>\n",
       "      <td>11.242717</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>...</td>\n",
       "      <td>R1</td>\n",
       "      <td>Q2</td>\n",
       "      <td>O0</td>\n",
       "      <td>M1</td>\n",
       "      <td>T2</td>\n",
       "      <td>D0</td>\n",
       "      <td>B1</td>\n",
       "      <td>J0</td>\n",
       "      <td>I2</td>\n",
       "      <td>Coui</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>89</td>\n",
       "      <td>49</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.926926</td>\n",
       "      <td>13.067592</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>12.250391</td>\n",
       "      <td>10.54165</td>\n",
       "      <td>...</td>\n",
       "      <td>R1</td>\n",
       "      <td>Q2</td>\n",
       "      <td>O0</td>\n",
       "      <td>M2</td>\n",
       "      <td>T2</td>\n",
       "      <td>D0</td>\n",
       "      <td>B2</td>\n",
       "      <td>J1</td>\n",
       "      <td>I2</td>\n",
       "      <td>Coui</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>216</td>\n",
       "      <td>64</td>\n",
       "      <td>1.791759</td>\n",
       "      <td>3.218876</td>\n",
       "      <td>11.270382</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>...</td>\n",
       "      <td>R2</td>\n",
       "      <td>Q1</td>\n",
       "      <td>O2</td>\n",
       "      <td>M2</td>\n",
       "      <td>T2</td>\n",
       "      <td>D0</td>\n",
       "      <td>B2</td>\n",
       "      <td>J1</td>\n",
       "      <td>I2</td>\n",
       "      <td>Coui</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 56 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   familr  sexer  RELAT  AGER    OPGNBL    MOYRVL     TAVEPL    ENDETL  \\\n",
       "0       1      0    238    51  0.000000  4.753590  13.461603  1.609438   \n",
       "1       1      0    139    58  0.000000  3.713572   8.132413  0.000000   \n",
       "2       0      0     99    27  0.000000  2.890372  11.242717  0.000000   \n",
       "3       0      0     89    49  0.000000  5.926926  13.067592  0.000000   \n",
       "4       1      0    216    64  1.791759  3.218876  11.270382  0.000000   \n",
       "\n",
       "      GAGETL    GAGECL  ...    relatq  qsmoyq  opgnbq  moyrvq  tavepq  dmvtpq  \\\n",
       "0  11.688701   0.00000  ...        R2      Q2      O0      M2      T2      D0   \n",
       "1   0.000000   0.00000  ...        R1      Q0      O0      M2      T1      D1   \n",
       "2   0.000000   0.00000  ...        R1      Q2      O0      M1      T2      D0   \n",
       "3  12.250391  10.54165  ...        R1      Q2      O0      M2      T2      D0   \n",
       "4   0.000000   0.00000  ...        R2      Q1      O2      M2      T2      D0   \n",
       "\n",
       "   boppnq  jnbjdq  itavcq  CARVP  \n",
       "0      B2      J1      I2   Coui  \n",
       "1      B0      J0      I2   Coui  \n",
       "2      B1      J0      I2   Coui  \n",
       "3      B2      J1      I2   Coui  \n",
       "4      B2      J1      I2   Coui  \n",
       "\n",
       "[5 rows x 56 columns]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Lecture des données\n",
    "path=\"\"\n",
    "vispremv=pd.read_csv(path+\"vispremv.dat\",sep=\",\",header=0)\n",
    "\n",
    "# Verification\n",
    "vispremv.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# variable contenant la liste des noms de variables\n",
    "var=vispremv.columns.values\n",
    "# liste des variables explicatives quantitatives\n",
    "varquant=var[0:30]\n",
    "# liste des variables explicatives qualitatives\n",
    "varqual=var[30:55]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 Variables indicatrices"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On transforme les variables qualitatives en paquets d'indicatrices ou \"dummy variables\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# On recupere les dummy variables\n",
    "vispremvdum=pd.get_dummies(vispremv[varqual])\n",
    "# vispremvdum.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Construction de la matrice de design\n",
    "X = vispremv[varquant].join(vispremvdum)\n",
    "# X.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Construction du vecteur reponse binaire\n",
    "Yb = vispremv[\"CARVP\"]==\"Coui\"\n",
    "Yb = Yb.map(lambda x: int(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# liste des noms des nouvelles variables ainsi créées\n",
    "var=X.columns.values\n",
    "# liste des variables explicatives quantitatives (ne change pas)\n",
    "varquant=var[0:30]\n",
    "# liste des variables explicatives qualitatives (beaucoup plus grande que la précédente)\n",
    "varqual=var[30:96]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 Extraction des échantillons d'apprentissage et de test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split  \n",
    "X_train,X_test,Yb_train,Yb_test=train_test_split(X,Yb,test_size=200,random_state=118218)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.  Méthodes de modélisation et de prédiction\n",
    "\n",
    "### 3.1.1 Régression logistique\n",
    "Uniquement avec les variables qualitatives. Sur python, les procédures de sélection de variables itératives ne sont pas disponibles. Pour faire de la sélection de variables, on utilise la méthode Lasso."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "# Regression logistique sans penalite\n",
    "logit=LogisticRegression()\n",
    "m1=logit.fit(X_train[varqual],Yb_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.68820688,  0.59143604,  0.01223025, -0.1090011 ,  0.73851736,\n",
       "        -0.20032794,  1.00971977, -1.3703932 , -0.27428683, -0.68540834,\n",
       "         0.5886375 , -0.11885055,  0.02207971, -0.08045554, -0.30689102,\n",
       "         0.29057572, -0.06429458,  0.1221869 , -0.15466316,  0.2251147 ,\n",
       "        -0.16309058, -0.15879496, -0.14465823,  0.04788738,  0.29345846,\n",
       "        -0.39022931,  0.52780915, -0.62458   , -0.5834179 ,  0.48664706,\n",
       "        -0.30890532,  0.21213447, -0.00351295, -0.09325789, -0.22395432,\n",
       "         0.12718348, -0.08414273,  0.16208121, -0.17470932,  0.73121112,\n",
       "        -0.21937275, -0.60860922,  0.08159286, -0.29289123,  0.11452753,\n",
       "        -0.36284326,  0.10119967,  0.16487275, -0.92967955, -0.39671018,\n",
       "         1.22961889,  0.24900124, -0.13703494, -0.20873714, -0.42440783,\n",
       "        -0.19089674,  0.51853373,  0.55648694, -0.31593451, -0.33732328,\n",
       "        -0.18414415, -0.14022   ,  0.2275933 , -0.74068484,  0.24892222,\n",
       "         0.39499178]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Coefficients\n",
    "m1.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.10999999999999999"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# erreur sur l'échantillon test\n",
    "1-m1.score(X_test[varqual], Yb_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CARVP    0   1\n",
      "row_0         \n",
      "0      134  12\n",
      "1       10  44\n"
     ]
    }
   ],
   "source": [
    "# Prévision\n",
    "y_chap = m1.predict(X_test[varqual])\n",
    "# matrice de confusion\n",
    "table=pd.crosstab(y_chap,Yb_test)\n",
    "print(table)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1.2 Regression logistique Lasso"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On va chercher ici à optimiser le critère de Lasso, pénalisant la taille des coefficients."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Meilleur score = 0.192352, Meilleur paramètre = {'C': 0.5}\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "# Optimisation du paramètre de pénalisation\n",
    "# grille de valeurs\n",
    "param=[{\"C\":[0.05,0.2,0.5,1,3,5]}]\n",
    "logitOpt = GridSearchCV(LogisticRegression(penalty=\"l1\"), param,cv=10,n_jobs=-1)\n",
    "m2=logitOpt.fit(X_train[varqual], Yb_train)\n",
    "# paramètre optimal\n",
    "m2.best_params_[\"C\"]\n",
    "print(\"Meilleur score = %f, Meilleur paramètre = %s\" % (1.-m2.best_score_,m2.best_params_))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Le critère optimal obtenu par validation croisée est donc égal à 0.5."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-1.19613125,  0.        ,  0.        , -0.02450155,  0.89921893,\n",
       "         0.        ,  1.12602293, -0.98694861,  0.        , -0.37312958,\n",
       "         0.72212051, -0.01982165,  0.        ,  0.        , -0.38521984,\n",
       "         0.        ,  0.        ,  0.15087516,  0.        ,  0.18182765,\n",
       "        -0.01244696,  0.        , -0.00262296,  0.        ,  0.        ,\n",
       "        -0.51193805,  0.        , -0.8073799 , -0.66956887,  0.12221713,\n",
       "        -0.39233928,  0.        ,  0.        ,  0.        , -0.33845503,\n",
       "         0.        ,  0.        ,  0.23894988, -0.00770831,  0.85876641,\n",
       "         0.        , -0.31464239,  0.        , -0.31429795,  0.0220621 ,\n",
       "        -0.39063945,  0.        ,  0.        , -0.35455222,  0.        ,\n",
       "         1.61434009,  0.19665538,  0.        ,  0.        , -0.23198929,\n",
       "         0.        ,  0.58718987,  0.57117599,  0.        ,  0.        ,\n",
       "        -0.04893052,  0.        ,  0.25959751, -0.83874545,  0.        ,\n",
       "         0.10390671]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Coefficients\n",
    "LogisticRegression(penalty=\"l1\",C=m2.best_params_['C']).fit(X_train[varqual], Yb_train).coef_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On remarque qu'un grand nombre de coefficients sont mis à 0. Notre modèle est donc plus parcimonieux et interprétable que le précédent !"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.099999999999999978"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# erreur sur l'échantillon test\n",
    "1-m2.score(X_test[varqual], Yb_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Erreur sensiblement plus basse que celle de la regression logistique sans régularisation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CARVP    0   1\n",
      "row_0         \n",
      "0      135  11\n",
      "1        9  45\n"
     ]
    }
   ],
   "source": [
    "# Prévision\n",
    "y_chap = m2.predict(X_test[varqual])\n",
    "# matrice de confusion\n",
    "table=pd.crosstab(y_chap,Yb_test)\n",
    "print(table)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Un faux positif de moins et un faux négatif de plus que la regression logistique normale."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nbWeXjIbi14DXWjOy5OW317QPEWmcEhCRDNDUrJZa8bNLOnaEiMeMJSy/fT599tC0DxFpnBIQkQzS\n0KyWOjk4u0REslemLMUuIiIiOUQtINJmJTJoM16mLhGeyKBSDe4UaR2TJ0/mxhtvZOvWrekOJaco\nAZE2KaFBm/EyfYnwBAeVanCnZLPZs2czatQoFi9eHNksHzMjL69+h8DUqVM58MADOf300yOJIRcp\nAZE2KZFBm/EyfYnwRAaVanCn5AIzi/R8EydO5Nprr61XdtNNNzFs2DAlIK1ICYi0aU0O2oynQZwi\n0oC8vDzat2+f7jByjgahiohIm7JixQouuOACunbtyi677MIhhxzCnDlztqm3evVqzj33XDp16sTX\nvvY1Ro0axTvvvENeXl69+pMnT67XBZOXl8eGDRuYNWsWeXl55OXlcf7550dybblELSAiItJm1NTU\ncNRRR/HJJ58wduxYevXqxeOPP87IkSOpqqpi7NixALg7p5xyCosXL2bMmDH069ePp59+mhEjRmzT\nxWNm9cpKSkq44IILOOyww7jooosA2H///aO7yByhBEQiVbmqkurNic9CWbYM1q/ftjyZpcg1i0Sk\n7Zs5cyYffvghDz/8MGeffTYAF198MUceeSTXX389559/Ph07duQPf/gDixYt4o477uCyyy4D4JJL\nLuH4449v9hzDhw9n9OjR7LfffgwfPrxVryeXKQGRyFSuqqTvnSmchZLkUuSaRSK5ZMMG+OCD1j1H\n//7QoUPrnqPW/Pnz6dq1a13yAdCuXTvGjRvH8OHDefXVVxkyZAjPP/887du358ILL6y3/6WXXspL\nL70UTbDSJCUgEpnalo+SM0oo2LP5WSgVFVBcDFOmQO/e236ezFLkmkUiueaDD2DAgNY9R1lZCwaD\nb6elS5fSp8+2/w8XFBTg7ixduhSAZcuW0a1bN3beeed69Q444IBI4pTmKQGRyBXsmeAslOXBNuTQ\n6H65iWSb/v2DBKG1zyHSUkpARESyWIcO2ZXA9+zZk3fffXeb8oqKYIxXr1696uq98sor1NTU1GsF\nqaysTOg8Ua9Fkos0DVdSrnJVJeXLy7fZNAhURLbXkCFD+Oyzz3j00UfryrZs2cKMGTPIz8/nyCOP\nBGDw4MFs3ryZ++67r66eu3PXXXcllFx07NiRNWvWpP4CpI5aQCSlEhloqkGgItIUd+eBBx5g/vz5\n23w2fvx4Zs6cyciRI1m8eHHdNNyFCxdy++2307FjRwCGDh3KwIEDufLKK6msrKR///7MnTu3Lqlo\nLgkZMGAAL774ItOnT6d79+707t2bgQMHpv5ic5gSEEmp5gaaahCoiDTHzLjnnnsa/GzUqFG8+uqr\nXHPNNcyZM4e1a9fSr18/Zs2axbnnnltXLy8vj+eee47x48czZ84c8vLyOP3005k4cSJHHHHENoNT\n4xOSadOmMXr0aCZOnMjGjRsZMWKEEpAUUwIirSLhgaYiIjFGjBjBiBEjmq13//33N1tn991353e/\n+129sqeeegozY5999qkrmzRpEpMmTapXr2/fvrz88ssJRi3J0BgQERHJSjU1NfXeb926lRkzZrDb\nbrtF9qRdaZxaQEREJCuNHTuWjRs3MmjQIDZt2sQTTzzBokWLmDp1KjvttFO6w8t5SkCkSZWVUB2u\nnL5sXSXrv2p6GfUl64KZLhUVJLxEemMqNGlGRLbDsccey7Rp03j22WepqanhgAMO4M477+SSSy5J\nd2iCEhBpQmUl9K2d0LJ7JYxLfBn14mH5sDo1ceRr0oyIJKGoqIiioqJ0hyGNUAIijapt+SgpAbpV\nU/waTDm0hN67Nr2Mescd8ulxampmuuTnQwOrLouISBunBESaVVAAdANegyHf0ewWERHZfpoFIyIi\nIpFTC0iOqlxVWbdoWGMq1gDdwp87aESoiIikjhKQHJTIcul1RkPxa/99q2XURUQkFZSA5KDmlkuv\nVVEBxcXBINSCAi2jLiIiqaMEJIc1u1z68mAr6AyF3SILS0REcoAGoYqISE6bPHkyeXnb93WYimPk\nGt0tERHJGLNnzyYvL4/y8vLIzmlm2yQPU6dO5emnn27RMeKfqCtNUxdMhktktgrAsmWwfn1ix0x0\nuXQthS4i6RD1F/nEiRO59tpr65XddNNNDBs2jNNPPz3SWHKJEpAM1qLZKklIdLl0LYUuItksLy+P\n9u3bpzuMnKMEJIO1dLbKlCnQu3dix050uXQthS4imWbFihVcc801PPvss1RVVdGvXz+uuOIKzjvv\nvHr1Vq9ezfjx45k7dy55eXkMHTqUCRMmcMghhzBr1qy6+pMnT+bGG29k69atQJCQmBmzZs1i1qxZ\nAIwcOZIHH3ywRXE+9NBDlJSU8N5771FVVcX+++/P2LFjufjii+vVW7x4Mddddx3l5eWsX7+erl27\ncswxx/DAAw/U1fn973/PLbfcwkcffYSZ0bNnTy688ELGjRtXV2fJkiVcffXVvPTSS9TU1HDQQQcx\nceJEhgwZ0qK4o6IEpA1IdLbKkEOhUKuki0gWq6mp4aijjuKTTz5h7Nix9OrVi8cff5yRI0dSVVXF\n2LFjAXB3TjnlFBYvXsyYMWPo168fTz/9NCNGjNimiyd+/EZJSQkXXHABhx12GBdddBEA+++/f4tj\nveeee/jmN7/J6aefzg477MC8efMYM2YM7l73RN4VK1YwePBg9tprL6699lo6d+7Mp59+ypNPPll3\nnP/93/9l+PDh/OAHP+Dmm28GoKKigjfffLMuAfniiy8YNGgQNTU1jB8/nt13353Zs2dz2mmn8cQT\nT2RmV5K758QGFAJeVlbmbUXZf8qcyXjZf5qOuazMHYKfIpLdysrKvK39LmuJWbNmeV5eXqPXd9tt\nt3leXp6XlpbWlX311Vf+ve99z3fbbTdft26du7s/8cQTbmY+Y8aMevsfd9xxnpeX57Nnz64rmzx5\nsufl5dWrt+uuu/qoUaMSjruhY9TU1GxT78QTT/QDDjig7v1TTz3leXl5Xl5e3uixL7/8cu/cuXOT\n57/88ss9Ly/P33zzzbqydevW+X777ef77bdfk/sm8m+qtg5Q6Cn6XlYLiIhIFtvw5QY+WPlBq56j\nf5f+dNixQ6ueo9b8+fPp2rUrZ599dl1Zu3btGDduHMOHD+fVV19lyJAhPP/887Rv354LL7yw3v6X\nXnopL730UiSx7rTTTnWv165dy5dffsmRRx7JCy+8QHV1Nfn5+XTu3Bl3Z+7cuXzrW99ihx22/Vru\n3Lkz69evZ8GCBQwePLjBc82fP5+BAwcyaNCgurKOHTty0UUX8bOf/Yz333+fAw88MPUXuR2UgIiI\nZLEPVn7AgHsHtOo5yi4qi+wp2UuXLqVPAwPTCgoKcHeWLl0KwLJly+jWrRs777xzvXoHHHBA0uf+\n8ssvWb26/sj9vfbaq9FZO2+88QaTJk1i0aJFbNiwoa7czKiqqiI/P5+jjjqKM888kxtvvJHp06dz\n9NFHM3ToUIYPH143MHbMmDE8/vjjDBkyhO7du3PCCSdw1lln1UtGli5dyne/+91tYigoKKj7XAmI\niIhEpn+X/pRdVNbq58gFb775JscccwxmhrtjZixZsoQePXpsU/eTTz7h+OOPp6CggOnTp7PvvvvS\nvn17nn32WW677ba6Aa8Ajz32GG+99Rbz5s1jwYIFnH/++UybNo1FixbRoUMH9txzT95++20WLFjA\n/PnzmT9/Pg899BDnnXde3SDZtkgJiIhIFuuwY4fIWiei0LNnT959991tyivChYt69epVV++VV16h\npqamXitIZWVlQudpqFXjkEMO4cUXX6xX1rVr1wb3nzdvHps3b2bevHl8/etfryv/4x//2GD9gQMH\nMnDgQKZMmUJpaSnnnHMOv//97zn//PMB2GGHHTj55JM5+eSTAbjkkku49957+fnPf85+++1Hz549\n+fDDD7c5bu196dmzZwJXHS2thCoiIm3GkCFD+Oyzz3j00UfryrZs2cKMGTPIz8/nyCOPBGDw4MFs\n3ryZ++67r66eu3PXXXcltNBZx44dWbNmTb2yTp06ceyxx9bbGls/pF27dgD1Wjqqqqq2abGIPwfA\nwQcfDMCmTZsAtun2AfjWt75Vr86QIUN46623+POf/1xXZ/369dx777307t0747pfQC0gIiKSYdyd\nBx54gPnz52/z2fjx45k5cyYjR45k8eLFddNwFy5cyO23307Hjh0BGDp0KAMHDuTKK6+ksrKS/v37\nM3fu3Lov/OaSkAEDBvDiiy8yffp0unfvTu/evRk4cGDC13DCCSew4447csoppzB69Giqq6u5//77\n2Xvvvfnss8/q6s2ePZu7776bM844g/3335/q6mruu+8+OnXqVLd+x4UXXsjq1as59thj2Wefffj0\n00+58847OfTQQ+vGeFxzzTWUlpZy4oknMm7cOHbffXdmzZrF0qVL603pzSRKQDJAY8utV6zQWugi\nknvMjHvuuafBz0aNGsWrr77KNddcw5w5c1i7di39+vVj1qxZnHvuuXX18vLyeO655xg/fjxz5swh\nLy+P008/nYkTJ3LEEUdsMzg1PiGZNm0ao0ePZuLEiWzcuJERI0Y0m4DEHqNv37488cQTXH/99Vx1\n1VV07dqVMWPGsMcee3DBBRfU1TvqqKP4y1/+wqOPPsrnn39Op06dOOyww3jkkUfquk3OPfdc7r33\nXn7729+yZs0aunbtSlFREZMmTao7zl577cXChQv56U9/yp133lm3ENkzzzzDiSee2MwdTw/zYI2M\nrGdmhUBZWVkZhRm0Wlciy61/dNlH9Nmj8eVIy8thwAAoK9NCZCLZrry8nAEDBpBpv8vaiqeeeoof\n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\nIhI5JSAiIiISOSUgIiIiEjklICIiIhI5JSAiIiISOSUgIiIiEjklICIiIhI5JSAiIiISOSUgIiIi\nErmMSUDM7FIzW2JmG81skZl9p4m6Z5jZC2b2hZlVmdmbZnZClPGKiIhI8jIiATGzHwO3ApOAQ4G/\nAQvMrEsjuxwJvACcBBQCLwPzzOzgCMIVERGR7ZQRCQgwAZjp7nPc/QPgYmADcH5Dld19grvf4u5l\n7v6xu18HVAKnRheyiIiIJCvtCYiZ7QgMAP5YW+buDrwIDErwGAbkA6tbI0YRERFJrbQnIEAXoB3w\neVz550DXBI9xFdAReCyFcYmIiEgr2SHdAWwvMxsOTAROc/eV6Y5HREREmpcJCchKYAuwd1z53sBn\nTe1oZmcD9wJnuvvLiZxswoQJVH8JrIJbF0zg0S6dKCoqoqioKInQRUREsktpaSmlpaX1yqqqqlJ+\nHguGW6SXmS0C/uzu48P3BiwD7nD33zSyTxFwP/Bjd38mgXMUAmVlZWVUrIHi1wZQckQZ5xxbmLoL\nERERyULl5eUMGDAAYIC7l6fimJnQAgIwDZhlZmXAWwSzYjoAswDMbCrQ3d1HhO+Hh5+NA/5iZrWt\nJxvdfW20oYuIiEhLZUQC4u6PhWt+3EjQ9fI2MNjdV4RVugL7xuzyE4KBq3eFW63ZNDJ1V0RERDJH\nRiQgAO5+N3B3I5+Nint/TCRBiYiISKvIhGm4IiIikmOUgIiIiEjklICIiIhI5JSAiIiISOSUgIiI\niEjklICIiIhI5JSAiIiISOSUgIiIiEjklICIiIhI5JSAiIiISOSUgIiIiEjklICIiIhI5JSAiIiI\nSOSUgIiIiEjklICIiIhI5JSAiIiISOSUgIiIiEjklICIiIhI5JSAiIiISOSUgIiIiEjklICIiIhI\n5JSAiIiISOR2SHcAUatYUcGSTemOQkREJLflXAJS/GQxdA9ed9whP73BiIiI5Kic64KZcuwUSo4o\ngzs+oseufdIdjoiISE7KuRaQ3p17U9C5EFanOxIREZHclXMtICIiIpJ+SkBEREQkckpAREREJHJK\nQERERCRySkBEREQkckpAREREJHJKQERERCRyObcOyJIlwMp0RyEiIpLbci4BmTiRugQkXyuxi4iI\npEXOdcFccgmUlcFHH0EfrcQuIiKSFjnXAtK9OxQWpjsKERGR3JZzLSAiIiKSfkpAREREJHJKQERE\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb9e6b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_curve\n",
    "listMethod=[[\"Logit\",logit],[\"Logit-lasso\",logitOpt]]\n",
    "for method in enumerate(listMethod):\n",
    "    probas_ = method[1][1].fit(X_train[varqual], Yb_train).predict_proba(X_test[varqual])\n",
    "    fpr, tpr, thresholds = roc_curve(Yb_test, probas_[:,1])\n",
    "    plt.plot(fpr, tpr, lw=1,label=\"%s\"%method[1][0])\n",
    "plt.xlabel('Taux de faux positifs')\n",
    "plt.ylabel('Taux de vrais positifs')\n",
    "plt.legend(loc=\"best\")\n",
    "plt.title('Courbes ROC')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On voit que l'ajout de la pénalisation n'a que peu d'influence sur l'erreur de prédiction. L'erreur de prévision pour Lasso semble légèrement plus faible, et le modèle est plus parcimonieux (nombreux coefficients nuls) : le modèle est donc plus robuste et plus interprétable."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** Comparaison avec R :  ** Sous R l'interprétabilité est réalisée de manière bien plus facile, étant donné que le passage au paquets d'indicatrices n'est pas préconisé : des tests de significativités rendent directement compte de l'importance des variables dans notre modèle.\n",
    "Aussi, sous R il y a possibilité d'optimiser nos modèles à l'aide de démarches itératives de selection de variables, utilisant des critères de pénalisation (AIC, BIC).\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3 Analyse discriminante\n",
    "\n",
    "Uniquement sur les variables quantitatives. On commence par effectuer des analyses discriminantes paramétriques : linéaire et quadratique. Puis, on effectue une dscrimination non-paramétrique grâce à la méthode des k plus proches voisins."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Meilleur score = 0.194670, Meilleur paramètre = {'tol': 0}\n"
     ]
    }
   ],
   "source": [
    "# Analyse discriminante linéaire\n",
    "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
    "\n",
    "# Optimisation du paramètre de tolérance\n",
    "# grille de valeurs\n",
    "param=[{'tol':[0,0.0001,0.001,0.1]}] \n",
    "LDA=GridSearchCV(LinearDiscriminantAnalysis(), param,cv=10,n_jobs=-1)\n",
    "m3=LDA.fit(X_train[varquant], Yb_train)\n",
    "# paramètres optimaux\n",
    "print(\"Meilleur score = %f, Meilleur paramètre = %s\" % (1.-m3.best_score_,m3.best_params_))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Le critère optimal obtenu est nul."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.14000000000000001"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# erreur sur l'échantillon test\n",
    "1-m3.score(X_test[varquant], Yb_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CARVP    0   1\n",
      "row_0         \n",
      "0      137  21\n",
      "1        7  35\n"
     ]
    }
   ],
   "source": [
    "# Prévision\n",
    "y_chap = m3.predict(X_test[varquant])\n",
    "# matrice de confusion\n",
    "table=pd.crosstab(y_chap,Yb_test)\n",
    "print(table)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Meilleur score = 0.239861, Meilleur paramètre = {'tol': 0}\n"
     ]
    }
   ],
   "source": [
    "# Analyse discriminante quadratique\n",
    "from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis\n",
    "\n",
    "# Optimisation du paramètre de tolérance\n",
    "# grille de valeurs\n",
    "param=[{'tol':[0,0.0001,0.001,0.1]}] #,\n",
    "QDA=GridSearchCV(QuadraticDiscriminantAnalysis(), param,cv=10,n_jobs=-1)\n",
    "m4=QDA.fit(X_train[varquant], Yb_train)\n",
    "# paramètres optimaux\n",
    "print(\"Meilleur score = %f, Meilleur paramètre = %s\" % (1.-m4.best_score_,m4.best_params_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.19999999999999996"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# erreur sur l'échantillon test\n",
    "1-m4.score(X_test[varquant], Yb_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CARVP    0   1\n",
      "row_0         \n",
      "0      118  14\n",
      "1       26  42\n"
     ]
    }
   ],
   "source": [
    "# Prévision\n",
    "y_chap = m4.predict(X_test[varquant])\n",
    "# matrice de confusion\n",
    "table=pd.crosstab(y_chap,Yb_test)\n",
    "print(table)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Meilleur score = 0.318656, Meilleur paramètre = {'n_neighbors': 8}\n"
     ]
    }
   ],
   "source": [
    "# K plus proches voisins\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "# Optimisation de k=nombre de voisins\n",
    "# grille de valeurs\n",
    "param=[{\"n_neighbors\":list(range(1,15))}]\n",
    "knn=GridSearchCV(KNeighborsClassifier(),param,cv=10,n_jobs=-1)\n",
    "m5=knn.fit(X_train[varquant], Yb_train)  # GridSearchCV est lui même un estimateur\n",
    "# paramètre optimal\n",
    "print(\"Meilleur score = %f, Meilleur paramètre = %s\" % (1.-m5.best_score_,m5.best_params_))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Le nombre de voisins optimal obtenu est 8, ce qui est confirmé graphiquement par la courbe de la cellule ci-après."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xbaf4198>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAF5CAYAAADK5sO7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl8lNX1x/HPGYhIIGAtKKJgAm4IPxXiloBLKyK2hapo\na6ytu1JFakStCpW9aCsgKrZaW61aUautghXBrYsKqEHQ2uDK5obgAjEIBnJ+f9yJhpiEzCSZZ5J8\n369XXiTP3OfOyUCYk3vPvdfcHREREZFkxKIOQERERJouJRIiIiKSNCUSIiIikjQlEiIiIpI0JRIi\nIiKSNCUSIiIikjQlEiIiIpI0JRIiIiKSNCUSIiIikjQlEiIiIpK0pBIJM7vIzJab2RdmttDMDqml\nbX8ze9bM1pnZRjMrNrNLqml3iZkti7dZZWbTzKxNMvGJiIhIarRO9AYz+zEwFTgfeAEoBOaZ2T7u\nvq6aW0qBm4BX4p8PAG4zs8/d/fZ4n6cBU4AzgQXAPsCdQDlwWaIxioiISGpYood2mdlCYJG7/yL+\ntQGrgRvd/Td17OMh4HN3PyP+9U3Afu5+bKU21wOHuvuRCQUoIiIiKZPQ1IaZZQC5wFMV1zxkIk8C\neXXso2+87T8rXX4eyK2YIjGzHsD3gH8kEp+IiIikVqJTG52AVsCaKtfXAPvWdqOZrQY6x+8f5+53\nVDzm7rPMrBPwbHyEoxXwe3e/rpb+vg0cB6wANiX4fYiIiLRkOwLZwDx3/7g+HSVcI1EPA4D2wOHA\ndWb2lrvfD2BmRwNXA8MJdRd7ATea2QfuPqmG/o4D/tLoUYuIiDRfPwHurU8HiSYS64CtwK5Vru8K\nfFjbje6+Mv7pa2bWBRgH3B+/NgG4u9IoxWtm1h64FagpkVgBcM8999CrV68EvoXGUVhYyPTp06MO\nI23p9amZXpva6fWpmV6b2un1qVlxcTGnn346xN9L6yOhRMLdy8ysCDgGmA1fFVseA9yYQFetgMpL\nOzOBLVXalFf079VXhG4C6NWrF/369UvgqRtHx44d0yKOdKXXp2Z6bWqn16dmem1qp9enTupdGpDM\n1MY04M54QlGx/DOTsFwTM5sCdK20IuNCYBWwLH7/UcAo4IZKfc4BCs1sKbAI2JswSjG7hiRCRERE\n0kDCiYS7PxAvjJxAmNJYAhzn7mvjTboA3SrdEiPsEZFNGHV4G7jc3W+r1GYiYQRiIrA7sJYw4jEm\n0fhEREQkdZIqtnT3W4BbanjsrCpf3wzcvJ3+KpKIicnEIyIiItHQWRsNpKCgIOoQ0ppen5rptamd\nXp+a6bWpnV6f1Eh4Z8t0YWb9gKKioiIV04iIiCRg8eLF5ObmAuS6++L69JXKfSRERCQJq1atYt26\n6o4yEqlep06d6N69e0qeS4mEiEgaW7VqFb169WLjxo1RhyJNSGZmJsXFxSlJJpRIiIiksXXr1rFx\n48a02XxP0l/FZlPr1q1TIiEiIkG6bL4nUpVWbYiIiEjSlEiIiIhI0pRIiIiISNKUSIiIiEjSlEiI\niIhI0pRIiIhIZBYsWMD48ePZsGFDoz3HlClTeOSRRxqt/5ZOiYSIiETm+eefZ8KECXz22WeN9hy/\n/vWvlUg0IiUSIiLNTGOeodTQfTfV857qYtOmTdVed3c2b95cr74boo+GokRCRKQZKCkpYeTIseTk\nDKRbtxPIyRnIyJFjKSkpSdu+x48fzxVXXAFAdnY2sViMVq1asWrVKgDuueceDj74YDIzM/n2t79N\nQUEB77777jZ9vPXWWwwbNozddtuNtm3b0q1bNwoKCr6KLRaLsXHjRu68805isRixWIyzzz67zjG6\nOzfccAN9+vShbdu2dOnSheHDh39jBCU7O5uhQ4cyf/58DjnkENq2bcttt932VQwjR47k3nvvpU+f\nPuy4447MmzcPgI0bNzJq1Ci6d+/OjjvuyH777cfUqVO/EUdtfURNO1uKiDRxJSUl5OUNo7j4UsrL\nxwEGODNnzuPpp4exYMFDZGVlpV3fw4YN44033uC+++5jxowZfPvb3wagc+fOTJ48mWuuuYZTTz2V\n8847j7Vr13LjjTdy1FFH8fLLL9OhQwfKysoYNGgQZWVljBw5ki5duvDee+/x6KOP8tlnn5GVlcU9\n99zDOeecw2GHHcb5558PQM+ePesc4/nnn89dd93F2WefzS9+8QuWL1/OTTfdxJIlS3juuedo1aoV\nAGbGsmXLOO2007jgggs4//zz2Xfffb/q56mnnuKBBx5gxIgRdOrUiezsbACGDBnCv/71L84991wO\nPPBA5s2bx+WXX87777//jYSipj4i5+5N8gPoB/huux3iF198jW/YsMFFRJqboqIiB7yoqKjGNhdf\nfI3HYnMd/BsfsdhjPnLk2KSfvzH7dne//vrrPRaL+cqVK7+6tnLlSm/durVfe+2127R97bXXPCMj\n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\nAsw//AHuuSdscvTyy3W799prw9LDiy5q3Bil7qov3nNisbn06jWdSZNGteh4WopkpjaSNQBoDxwO\nXGdmb7n7N1aam9mVwI+Ao9z9y+11WlhYSMcqm/wXFBRQUFDQMFGLSIMyC1tbH3FEOKr6sMPClEVh\nYc2bAK1eHaZDJkwIJ1NKesjKymLBgocYM2Yqs2dPo6wsk4yMjQwd2p9Jkx4iK8XbQqZbPOli1qxZ\nzJo1a5tr69evb7D+E1q1EZ/a2AgMc/fZla7fCXR09xPr2M9o4HR371Xl+mXA1cAx7l7r7ylatSHS\n9G3eHHbEvP56OPbYsGR0t922bePujBhh3H9/WKnRQt8LmoR0K2RMt3jSyeLFiyuKLVN71oa7lxGW\nZh5Tcc3C39IxhBUXddUKaFP5gpldAYwGjtteEiEizUObNmFnwfnz4dVXQyHmnDnb7k7YtesJ3HLL\nQPbZZywQzW6JUjfp9qadbvE0V8lMbUwD7jSzIr5e/pkJ3AlgZlOAru5+RvzrC4FVwLL4/UcBo4DK\n+0j8EhgPFACrzKzikNrP3T2BciwRaYqOPTYUYp5zDgwdWsLOOw/js88upbx8HKEC31m0aB55ecNY\nsKDlDlGLpKOEd7Z09wcIm1FNAF4GDiCMIqyNN+kCdKvyHFPibV8Efg5c7u5jK7UZTlil8SDwfqUP\nVcaItBCdO8Mjj8BRR13PJ59UvzthFLslikjtktrZMh2oRkKkedrebonanVCk/iKrkRARaUx12S2x\nYndCEUkPSiREJG1s/6hj7U4okm6USIhIWtHuhCJNixIJEUkr2p1QpGlRIiEiaaVid8IRIxaRnT2I\n3Xf/IdnZgxgxYpGWfoqkoVRukS0iUicVRx3PmKHdCUXSnUYkRCStKYkQSW9KJERERCRpSiREREQk\naUokREREJGlKJERERCRpSiREREQkaUokREREJGlKJERERCRpSiREREQkaUokREREJGlKJERERCRp\nSiREREQkaUokREREJGlKJERERCRpSiREREQkaUokREREJGlKJERERCRpSiREREQkaUokREREJGlK\nJERERCRpSiREREQkaUokREREJGlKJERERCRpSiREREQkaUokREREJGlKJERERCRpSiQayKxZs6IO\nIa3p9amZXpva6fWpmV6b2un1SY2kEgkzu8jMlpvZF2a20MwOqaVtfzN71szWmdlGMys2s0uqtNnf\n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\nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xbc69d68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Affichage de l'erreur de validation croisee en fonction du nombre de voisins\n",
    "infos=pd.DataFrame(m5.cv_results_)\n",
    "infos['test_error']=1-infos['mean_test_score']\n",
    "infos.plot(x='param_n_neighbors',y='test_error',marker='o')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.245"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# erreur sur l'échantillon test\n",
    "1-m5.score(X_test[varquant], Yb_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CARVP    0   1\n",
      "row_0         \n",
      "0      133  38\n",
      "1       11  18\n"
     ]
    }
   ],
   "source": [
    "# Prévision\n",
    "y_chap = m5.predict(X_test[varquant])\n",
    "# matrice de confusion\n",
    "table=pd.crosstab(y_chap,Yb_test)\n",
    "print(table)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb9f5358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "listMethod=[[\"LDA\",LDA],[\"QDA\",QDA],[\"KNN\",knn]]\n",
    "for method in enumerate(listMethod):\n",
    "    probas_ = method[1][1].fit(X_train[varquant], Yb_train).predict_proba(X_test[varquant])\n",
    "    fpr, tpr, thresholds = roc_curve(Yb_test, probas_[:,1])\n",
    "    plt.plot(fpr, tpr, lw=1,label=\"%s\"%method[1][0])\n",
    "plt.xlabel('Taux de faux positifs')\n",
    "plt.ylabel('Taux de vrais positifs')\n",
    "plt.legend(loc=\"best\")\n",
    "plt.title('Courbes ROC')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Comme l'on aurait pu l'intuiter, les résultats pour KNN sont très médiocres, cette méthode n'étant réellement efficace que lorsque l'on a un très petit nombre de variables.\n",
    "La méthode qui semble la plus performante est la Linear Discrimination Analysis avec un coef de pénalisation nul."



Partager le fichier

Télécharger VISA_ELHILA_MAMET.ipynb

Télécharger le fichier (461 Ko)