{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Reciever Operator Curve\n", "<p>The Reciever Operator Curve is a useful tool for understanding how well a classification model ranks instances. <br><br> \n", "\n", "<b><u>Defining the ROC</u></b><br><br>\n", "Assume some function $f(x)$ that gives real-valued output. We define a classifier based on $f(x)$ as the following:<br><br>\n", "<center>$c(x) = I(f(x)\\geq t)$</center><br><br>\n", "for some constant $t$, and where $I(...)$ is the indicator function. For each threshold $t$ that is chosen, we can define two quantities: 1). The false positive rate, $FPR = \\frac{False Positives}{False Positives+True Negatives}$, and 2). The true positive rate, $TPR = \\frac{True Positives}{True Positives+False Negatives}$. The ROC is the result of plotting $FPR$ against $TPR$ for each value of $t$ that is possible in the data.<br><br>\n", "\n", "<b><u>The Area Under the Curve</u></b><br><br>\n", "The area under the curve captures the ROC information as a single metric. It is useful for both model and feature selection. With the ROC defined, we simply integrate across all values of FPR to get the area. <br><br>\n", "<center>$AUC = \\int_0^1 \\: TPR \\:dFPR$</center><br><br>\n", "\n", "While this is the exact definition, and is how one might measure it empirically using numeric integration, it is not necessarily intuitive to think of a classifier in the $FPR$ domain. After all, we choose the threshold $t$ and not the $FPR$. We can get around this, but first lets define a few things. Let $s^+(v)$ and $s^-(v)$ be the PDF of $v=f(x)$ for positive and negative labeled examples, respectively. Similarly, let $S^+(v)$ and $S^-(v)$ be the CDF of $v=f(x)$ for positive and negative labeled labeled, respectively.\n", "We can use these to define the $FPR$ and $TPR$ as functions of $t$.<br><br>\n", "\n", "<center>$FPR(t) = \\int_t^\\infty \\:s^-(v) \\:dv=1-S^-(t)$</center>\n", "<center>$TPR(t) = \\int_t^\\infty \\:s^+(v) \\:dv=1-S^+(t)$</center>\n", "\n", "\n", "<br><br>\n", "With $FPR$ and $TPR$ defined as functions of $t$, we can use the fact that $\\frac{dFPR(t)}{dt}=-s^-(t)$\n", "to show that:\n", "<br><br>\n", "<center>$AUC = \\int_0^1 \\: TPR(t) \\:dFPR(t) =-\\int_{\\infty}^{-\\infty} \\:TPR(t) \\:s^-(t)\\:dt = \\int_{-\\infty}^{\\infty} \\:TPR(t) \\:s^-(t)\\:dt=\\int_{-\\infty}^{\\infty}\\:(1-S^+(t))\\:s^-(t)\\:dt$</center>\n", "\n", "<br><br>\n", "This last term expresess $AUC$ as a function of both the distribution of $f(x)$ for both positive and negative instances. This gives the AUC a probabilistic interpretation. For a given threshold $t$, we can choose one negative with a score exactly $t$. This has a probability of $s^-(t)$. The probability that a positive will have a score greater than this negative is $TPR(t)=1-S^+(t)$. If we repeat this exercise for every value of $t$, the probability that a randomly drawn positve instance has a higher score than a randomly drawn negative instance is then the $AUC$. I.e.,<br><br>\n", "\n", "<center>$AUC = P(f(x^+)>f(x^-)) = \\int_{-\\infty}^{\\infty}\\:P(f(x^-)=t)*P(f(x^+)\\geq t)\\:dt=\\int_{-\\infty}^{\\infty}\\:(1-S^+(t))\\:s^-(t)\\:dt$</center>\n", "<br><br><br></p>\n", "\n", "### Putting the ROC to Work\n", "\n", "<p>\n", "So that's enough theory for now, let's do a model bakeoff and show how the ROC can be used for model selection. First we'll build a model using four different algorithms and compare their ROCs.\n", "</p>" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", " metric_params=None, n_jobs=1, n_neighbors=10, p=2,\n", " weights='uniform')" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Build the datasets\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "from sklearn.metrics import roc_curve, auc\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn import svm, linear_model\n", "from sklearn.neighbors import KNeighborsClassifier\n", "import sys\n", "import course_utils as bd\n", "import pandas as pd\n", "import math\n", "import numpy as np\n", "\n", "import imp\n", "imp.reload(bd)\n", "\n", "#Load data and downsample for a 50/50 split, then split into a train/test\n", "f='../data/ads_dataset_cut.txt'\n", "\n", "train_split = 0.5\n", "tdat = pd.read_csv(f,header=0,sep='\\t')\n", "\n", "lab = 'y_buy'\n", "\n", "moddat = bd.downSample(tdat,lab,9)\n", "#We know the dataset is sorted so we can just split by index\n", "train = moddat[:int(math.floor(moddat.shape[0]*train_split))]\n", "test = moddat[int(math.floor(moddat.shape[0]*train_split)):]\n", "\n", "#Train the models\n", "dt = DecisionTreeClassifier(criterion='entropy',min_samples_leaf = 10,max_depth = 4)\n", "dt = dt.fit(train.drop(lab,1),train[lab])\n", "\n", "lr = linear_model.LogisticRegression(C=1000)\n", "lr.fit(train.drop(lab,1), train[lab])\n", "\n", "mm = svm.SVC(kernel='linear', C=1)\n", "mm.fit(train.drop(lab,1), 2*train[lab]-1)\n", "\n", "knn = KNeighborsClassifier(n_neighbors=10, p=2)\n", "knn.fit(train.drop(lab,1), train[lab])" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 600x400 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "def plotAUC(truth, pred, lab):\n", " fpr, tpr, thresholds = roc_curve(truth, pred)\n", " roc_auc = auc(fpr, tpr)\n", " c = (np.random.rand(), np.random.rand(), np.random.rand())\n", " plt.plot(fpr, tpr, color=c, label= lab+' (AUC = %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('FPR')\n", " plt.ylabel('TPR')\n", " plt.title('ROC')\n", " plt.legend(loc=\"lower right\")\n", "\n", "plotAUC(test[lab], dt.predict_proba(test.drop(lab,1))[:,1], 'DT')\n", "plotAUC(test[lab], lr.predict_proba(test.drop(lab,1))[:,1], 'LR') \n", "plotAUC(test[lab], mm.decision_function(test.drop(lab,1)), 'SVM') \n", "plotAUC(test[lab], knn.predict_proba(test.drop(lab,1))[:,1], 'kNN') \n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>A calibration chart</p>\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def getMAE(pred, truth):\n", " return np.abs(truth - pred).mean()\n", "\n", "def getLL(pred, truth):\n", " ll_sum = 0\n", " for i in range(len(pred)):\n", " if (pred[i] == 0):\n", " p = 0.0001\n", " elif (pred[i] == 1):\n", " p = 0.9999\n", " else:\n", " p = pred[i]\n", " ll_sum += truth[i]*np.log(p)+(1-truth[i])*np.log(1-p)\n", " return (ll_sum)/len(pred)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<Figure size 600x400 with 0 Axes>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "<Figure size 600x400 with 2 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "def plotCalib(truth, pred, bins, f, l):\n", " mae = np.round(getMAE(pred, truth),3)\n", " ll = np.round(getLL(pred, truth), 3)\n", " d = pd.DataFrame({'p':pred, 'y':truth})\n", " d['p_bin'] = np.floor(d['p']*bins)/bins\n", " d_bin=d.groupby(['p_bin']).agg([np.mean,len])\n", " filt = (d_bin['p']['len']>f)\n", " plt.plot(d_bin['p']['mean'][filt], d_bin['y']['mean'][filt], 'b.', label=l+': '+'ll={},mae={}'.format(ll,mae))\n", " plt.plot([0.0, 1.0], [0.0, 1.0], 'k-')\n", " #plt.title(label+':'+'MAE={}'.format(mae, ll))\n", " plt.xlim([0.0, 1.0])\n", " plt.ylim([0.0, 1.0])\n", " plt.xlabel('prediction P(Y|X)')\n", " plt.ylabel('actual P(Y|X)')\n", " plt.legend(loc=4)\n", " \n", "plt.clf()\n", "fig = plt.figure()\n", "#plt.title('Calibration Charts for DT vs. LR')\n", "\n", "ax = fig.add_subplot(2,1,1)\n", "plotCalib(test[lab].values, dt.predict_proba(test.drop(lab,1))[:,1], 50, 10, 'DT')\n", "\n", "ax = fig.add_subplot(2,1,2)\n", "plotCalib(test[lab].values, lr.predict_proba(test.drop(lab,1))[:,1], 50, 10, 'LR') \n", "\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>Loop through features to get AUC and LL</p>" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sklearn.metrics import roc_auc_score\n", "\n", "def evalFeat(x_train, y_train, x_test, y_test):\n", " lr_f = linear_model.LogisticRegression(C=1e30)\n", " lr_f.fit(x_train, y_train)\n", " p = lr_f.predict_proba(x_test)[:,1]\n", " ll = -1*getLL(p, y_test.values)\n", " auc = roc_auc_score(y_test, p)\n", " return [ll, auc]\n", "\n", "\n", "lls = []\n", "aucs = []\n", "feats = train.drop(lab,1).columns.values\n", "for f in feats:\n", " ll_f, auc_f = evalFeat(train[[f]], train[lab], test[[f]], test[lab])\n", " lls.append(ll_f)\n", " aucs.append(auc_f)\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>A quick Lift chart</p>" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def liftTable(pred, truth, b):\n", " df = pd.DataFrame({'p':pred+np.random.rand(len(pred))*0.000001,'y':truth})\n", " df['b'] = b - pd.qcut(df['p'], b, labels=False)\n", " df['n'] = np.ones(df.shape[0])\n", " df_grp = df.groupby(['b']).sum()\n", " base = np.sum(df_grp['y'])/float(df.shape[0])\n", " df_grp['n_cum'] = np.cumsum(df_grp['n'])/float(df.shape[0])\n", " df_grp['y_cum'] = np.cumsum(df_grp['y'])\n", " df_grp['p_y_b'] = df_grp['y']/df_grp['n']\n", " df_grp['lift_b'] = df_grp['p_y_b']/base\n", " df_grp['cum_lift_b'] = (df_grp['y_cum']/(float(df.shape[0])*df_grp['n_cum']))/base\n", " return df_grp\n", " \n", "\n", "lifts_lr = liftTable(lr.predict_proba(test.drop(lab,1))[:,1], test[lab], 25)\n", "#lifts_svm = liftTable(mm.decision_function(test.drop(lab,1)), test[lab], 25)\n", "lifts_dt = liftTable(dt.predict_proba(test.drop(lab,1))[:,1]+np.random.rand(test.shape[0])*0.00001, test[lab], 25)\n", "lifts_knn = liftTable(knn.predict_proba(test.drop(lab,1))[:,1], test[lab], 25) \n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAjDGmJryF2b22OsN3FD7AAAAAElFTkSuQmCC\n", "text/plain": [ "<Figure size 600x400 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.title('A Lift Chart on Ads Data with LR')\n", "plt.plot(lifts_lr['n_cum'], lifts_lr['cum_lift_b'], label='LR')\n", "plt.plot(lifts_knn['n_cum'], lifts_knn['cum_lift_b'], label='kNN')\n", "plt.plot(lifts_dt['n_cum'], lifts_dt['cum_lift_b'], label='DT')\n", "\n", "plt.plot(lifts_lr['n_cum'], np.ones(lifts_lr.shape[0]))\n", "plt.xlim([lifts_lr['n_cum'].min(), lifts_lr['n_cum'].max()])\n", "plt.ylim([0.0, lifts_lr['cum_lift_b'].max()+1])\n", "plt.xlabel('Cumulative Ranked Users')\n", "plt.ylabel('Cumulative Lift')\n", "plt.legend()\n", "\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "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.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }