{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# 2A.ml - 2016 - Comp\u00e9tition - Pr\u00e9paration des donn\u00e9es\n", "\n", "Une comp\u00e9tition \u00e9tait propos\u00e9e dans le cadre du cours *Python pour un Data Scientist* \u00e0 l'[ENSAE](http://www.ensae.fr/ensae/fr/). Ce notebook facilite la prise en main des donn\u00e9es et montre comment comparer plusieurs classifieurs avec la courbe ROC."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}, {"name": "stdout", "output_type": "stream", "text": ["The history saving thread hit an unexpected error (OperationalError('database is locked',)).History will not be written to the database.\n"]}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [{"data": {"text/plain": ["['ensae_competition_test_X.txt', 'ensae_competition_train.txt']"]}, "execution_count": 3, "metadata": {}, "output_type": "execute_result"}], "source": ["from pyensae.datasource import download_data\n", "download_data(\"ensae_competition_2016.zip\",\n", " url=\"https://github.com/sdpython/ensae_teaching_cs/raw/master/_doc/competitions/2016_ENSAE_2A/\")"]}, {"cell_type": "code", "execution_count": 3, "metadata": {"collapsed": true}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Donn\u00e9es"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
LIMIT_BALAGEPAY_0PAY_2PAY_3PAY_4PAY_5PAY_6BILL_AMT1BILL_AMT2...EDUCATION_1EDUCATION_2EDUCATION_3EDUCATION_4EDUCATION_5EDUCATION_6MARRIAGE_0MARRIAGE_1MARRIAGE_2MARRIAGE_3
01800004700000017925395170...0100000100
11100003500000061377040...0100000100
\n", "

2 rows \u00d7 34 columns

\n", "
"], "text/plain": [" LIMIT_BAL AGE PAY_0 PAY_2 PAY_3 PAY_4 PAY_5 PAY_6 BILL_AMT1 \\\n", "0 180000 47 0 0 0 0 0 0 179253 \n", "1 110000 35 0 0 0 0 0 0 6137 \n", "\n", " BILL_AMT2 ... EDUCATION_1 EDUCATION_2 EDUCATION_3 EDUCATION_4 \\\n", "0 95170 ... 0 1 0 0 \n", "1 7040 ... 0 1 0 0 \n", "\n", " EDUCATION_5 EDUCATION_6 MARRIAGE_0 MARRIAGE_1 MARRIAGE_2 MARRIAGE_3 \n", "0 0 0 0 1 0 0 \n", "1 0 0 0 1 0 0 \n", "\n", "[2 rows x 34 columns]"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["import pandas as p\n", "import numpy as np\n", "\n", "df = p.read_csv('./ensae_competition_train.txt', header=[0,1], sep=\"\\t\", index_col=0)\n", "\n", "#### Gender dummies\n", "df['X2'] = df['X2'].applymap(str)\n", "gender_dummies = p.get_dummies(df['X2'] )\n", "### education dummies\n", "df['X3'] = df['X3'].applymap(str)\n", "educ_dummies = p.get_dummies(df['X3'] )\n", "#### marriage dummies\n", "df['X4'] = df['X4'].applymap(str)\n", "mariage_dummies = p.get_dummies(df['X4'] )\n", "### On va aussi supprimer les multi index de la table\n", "df.columns = df.columns.droplevel(0)\n", "#### on aggr\u00e8ge ensuite les 3 tables ensemble\n", "data = df.join(gender_dummies).join(educ_dummies).join(mariage_dummies)\n", "\n", "data.rename(columns = {'default payment next month' : \"Y\"}, inplace = True)\n", "\n", "data = data.drop(['SEX','EDUCATION','MARRIAGE'],1)\n", "\n", "data_resample = p.concat([data[data['Y']==1], data[data['Y']==0].sample(len(data[data['Y']==1]))])\n", "\n", "data.head(n=2)"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"data": {"text/plain": ["Index(['LIMIT_BAL', 'AGE', 'PAY_0', 'PAY_2', 'PAY_3', 'PAY_4', 'PAY_5',\n", " 'PAY_6', 'BILL_AMT1', 'BILL_AMT2', 'BILL_AMT3', 'BILL_AMT4',\n", " 'BILL_AMT5', 'BILL_AMT6', 'PAY_AMT1', 'PAY_AMT2', 'PAY_AMT3',\n", " 'PAY_AMT4', 'PAY_AMT5', 'PAY_AMT6', 'SEX_1', 'SEX_2', 'EDUCATION_0',\n", " 'EDUCATION_1', 'EDUCATION_2', 'EDUCATION_3', 'EDUCATION_4',\n", " 'EDUCATION_5', 'EDUCATION_6', 'MARRIAGE_0', 'MARRIAGE_1', 'MARRIAGE_2',\n", " 'MARRIAGE_3'],\n", " dtype='object')"]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["Y = data['Y']\n", "Y = data_resample['Y']\n", "\n", "X = data.drop('Y', 1)\n", "#X = data[[\"SEX_1\", \"AGE\", \"MARRIAGE_0\", 'PAY_0']]\n", "X = data_resample.drop('Y',1)\n", "\n", "X.columns"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"name": "stderr", "output_type": "stream", "text": []}], "source": ["from sklearn.model_selection import train_test_split\n", "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Choix du Classifieur"]}, {"cell_type": "code", "execution_count": 7, "metadata": {"collapsed": true}, "outputs": [], "source": ["from sklearn.linear_model import LogisticRegression\n", "from sklearn import svm\n", "from sklearn.ensemble import GradientBoostingClassifier, RandomForestClassifier\n", "from sklearn.linear_model import SGDClassifier, Perceptron\n", "\n", "#type_classifier = LogisticRegression\n", "#type_classifier = svm.SVC\n", "type_classifier = GradientBoostingClassifier\n", "#type_classifier = RandomForestClassifier\n", "#type_classifier = Perceptron\n", "\n", "clf = type_classifier()\n", "#clf = SGDClassifier(loss=\"hinge\", penalty=\"l2\")\n", "\n", "clf = clf.fit(X_train, Y_train.ravel())"]}, {"cell_type": "code", "execution_count": 8, "metadata": {"collapsed": true}, "outputs": [], "source": ["# Matrice de confusion"]}, {"cell_type": "code", "execution_count": 9, "metadata": {"collapsed": true}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["[[2713 1112]\n", " [ 641 2207]]\n", "[[1272 590]\n", " [ 354 1071]]\n"]}, {"data": {"text/plain": [""]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}, {"data": {"image/png": "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\nbJGV+BsAAAAASUVORK5CYII=\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["from sklearn.metrics import confusion_matrix\n", "for x,y in [ (X_train, Y_train), (X_test, Y_test) ]:\n", " yp = clf.predict(x)\n", " cm = confusion_matrix(y.ravel(), yp.ravel())\n", " print(cm.transpose())\n", " \n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "sns.set_style('ticks')\n", "plt.matshow(cm.transpose())\n", "plt.title('Confusion matrix sur Test')\n", "plt.colorbar()\n", "plt.ylabel('Predicted label')\n", "plt.xlabel('True label')"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.71280803163979312"]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["(cm.transpose()[0,0]+cm.transpose()[1,1])/ (cm[0].sum()+cm[1].sum())"]}, {"cell_type": "markdown", "metadata": {"collapsed": true}, "source": ["## Calcul du crit\u00e8re AUC "]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[ 0.14376934, 0.85623066],\n", " [ 0.78068073, 0.21931927],\n", " [ 0.76203158, 0.23796842],\n", " ..., \n", " [ 0.36898867, 0.63101133],\n", " [ 0.45767261, 0.54232739],\n", " [ 0.21353388, 0.78646612]])"]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.metrics import roc_curve, auc\n", "probas = clf.predict_proba(X_test)\n", "\n", "probas"]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["AUC : Taux de bonnes r\u00e9ponses 0.71280803164\n"]}], "source": ["rep = [ ]\n", "yt = Y_test.ravel()\n", "for i in range(probas.shape[0]):\n", " p0,p1 = probas[i,:]\n", " exp = yt[i]\n", " if p0 > p1 :\n", " if exp == 0 :\n", " # bonne r\u00e9ponse, true positive (tp)\n", " rep.append ( (1, p0) )\n", " else :\n", " # mauvaise r\u00e9ponse, false positive (fp)\n", " rep.append( (0, p0) )\n", " else :\n", " if exp == 0 :\n", " # mauvaise r\u00e9ponse, false negative (fn)\n", " rep.append ( (0, p1) )\n", " else :\n", " # bonne r\u00e9ponse, true negative (tn)\n", " rep.append( (1, p1) )\n", "mat_rep = np.array(rep)\n", "print(\"AUC : Taux de bonnes r\u00e9ponses\" , sum(mat_rep[:,0]) / len(mat_rep[:,0]))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Tous les crit\u00e8res sont d\u00e9taill\u00e9s [l\u00e0](https://en.wikipedia.org/wiki/Receiver_operating_characteristic). Attention au sens de la matrice de confusion, selon les articles, cela change."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Courbe ROC"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"data": {"text/plain": [""]}, "execution_count": 15, "metadata": {}, "output_type": "execute_result"}, {"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["fpr, tpr, thresholds = roc_curve(mat_rep[:,0], mat_rep[:, 1])\n", "roc_auc = auc(fpr, tpr)\n", "plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)\n", "plt.plot([0, 1], [0, 1], 'k--')\n", "plt.xlim([0.0, 1.0])\n", "plt.ylim([0.0, 1.0])\n", "plt.xlabel('False Positive Rate')\n", "plt.ylabel('True Positive Rate (or precision)')\n", "plt.title('ROC')\n", "plt.legend(loc=\"lower right\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["En haut \u00e0 droite, TPR et FPR valent 1 (il suffit de pr\u00e9dire toujours positif = pas de d\u00e9faut = Y_hat=0), en bas \u00e0 gauche, TPR et FPR valent 0 parce qu'il suffit de toujours pr\u00e9dire la situation n\u00e9gative (ou le d\u00e9faut, Y_hat = 1). \n", "\n", "Une autre m\u00e9trique souvent suivie consiste \u00e0 comparer Precision (= TPR) et Recall. C'est un peu le m\u00eame arbitrage. Cela devrait vous rappeler celui entre risque de premi\u00e8re esp\u00e8ce et puissance d'un test."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Pr\u00e9cision-Recall, Score F1 "]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["On retrouve la matrice de confusion :\n", " TP : 1272 FP : 590 \n", " FN : 354 TN : 1071\n", "Precision : TP / (TP + FP) = 0.6831364124597207\n", "Recall : TP / (TP + FN) = 0.7822878228782287\n", "F1 Score : T2 * P * R / (P + R) = 0.7293577981651376\n", "False Positive rate : FP / (FP + FN) = 0.35520770620108366\n"]}], "source": ["tp=0\n", "fp=0\n", "fn=0\n", "tn=0\n", "for i in range(len(probas[:,0])):\n", " if (probas[i,0] >= 0.5 and yt[i] == 0):\n", " tp+=1\n", " elif (probas[i,0] >= 0.5 and yt[i] == 1):\n", " fp+=1\n", " elif (probas[i,0] <= 0.5 and yt[i] == 0):\n", " fn+=1\n", " else:\n", " tn+=1\n", "print(\"On retrouve la matrice de confusion :\\n\", \"TP : \", tp, \"FP : \", fp, \"\\n\", \n", " \" FN : \", fn, \"TN : \", tn)\n", "print(\"Precision : TP / (TP + FP) = \", tp/(tp+fp))\n", "print(\"Recall : TP / (TP + FN) = \", tp/(tp+fn))\n", "precision = tp/(tp+fp)\n", "recall = tp/(tp+fn)\n", "print(\"F1 Score : T2 * P * R / (P + R) = \", 2 * precision * recall / (precision + recall) )\n", "print(\"False Positive rate : FP / (FP + FN) = \", fp/(fp+tn))"]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [{"data": {"text/plain": [""]}, "execution_count": 17, "metadata": {}, "output_type": "execute_result"}, {"data": {"image/png": "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\n0VnIw7CZ6AAAAABJRU5ErkJggg==\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["from sklearn.metrics import precision_recall_curve\n", "\n", "precision, recall, _ = precision_recall_curve(Y_test.ravel(), yp.ravel())\n", "\n", "lw = 2\n", "\n", "plt.plot(recall, precision, lw=lw, color='navy', label='Precision-Recall curve')\n", "plt.xlabel('Recall')\n", "plt.ylabel('Precision')\n", "plt.ylim([0.0, 1.05])\n", "plt.xlim([0.0, 1.0])\n", "plt.title('Precision-Recall')\n", "plt.legend(loc=\"lower left\")"]}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4"}}, "nbformat": 4, "nbformat_minor": 2}