{ "metadata": { "name": "", "signature": "sha256:89ec5fe448450af3302c00dd31d03641933cd484f8b7fc7faca92973bdbe6245" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "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. \n", "\n", "<br><br>\n", "For given threshold $t$, defining an infintesimal interval $[t, t+dt]$, the probability that a negative has $v$ in that interval is $s^-(t)\\:dt$. The probability that a positive will have a score greater than $t$ is $TPR(t)=1-S^+(t)$, so that the probability that a positive will have a score higher than a negative, given that the negative has a score within the interval $[t, t+dt]$ is $(1-S^+(t))\\:s^-(t)\\:dt$\n", "\n", "<br><br>\n", "Marginalize out $t$ by integrating over all possible values to get the probaility that a positive ranks higher than a negative.\n", "<br><br>\n", "\n", "<center>$\\int_{-\\infty}^{\\infty}\\:(1-S^+(t))\\:s^-(t)\\:dt$</center>\n", "\n", "<br><br> \n", "Which, as we showed above, is equal to the AUC.\n", "\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", "collapsed": false, "input": [ "#Build the datasets\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 course_utils as bd\n", "import pandas as pd\n", "import numpy as np\n", "reload(bd)\n", "\n", "#Load data and downsample for a 50/50 split, then split into a train/test\n", "f='/Users/briand/Desktop/ds course/datasets/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])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", " n_neighbors=10, p=2, weights='uniform')" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "#plt.clf()\n", "\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()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nwSpKVAAAAABJRU5ErkJggg==\n", "text": [ "<matplotlib.figure.Figure at 0x10739c990>" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>A calibration chart</p>\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "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)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "\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" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "<matplotlib.figure.Figure at 0x1091e5d50>" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\ngImJCaysrPDVV18p3fb69euQyWSwtraGnp4erl27pvD8+++/j549e8LY2Bg2NjZYvHgxqqurhefn\nzJkDZ2dndOjQATt37lTbZ3pSo8nh6aefFqbofvDgAZydnZGVlSX6DZryJY6Li8O2bdvqHZfQNXPm\n1E4Q5+9f262iTm+88QADBkSjZ895sLGxxauvvoq7d+/iyy+/RGFhIX766Se88sorTUraTDMkEonS\n3wFra2uUlZWhtLQU69evx/z583H+/HlR+1XH2dL58+cxd+5c7N69G4WFhejcuTPmz59f77Z3797F\n0KFDkZqaiuLiYkyfPh0TJ07EvXv3FLY7efIkrly5UqcNDA0N8fvvv6O0tBQ7d+7EwoULkZiYqPLP\npC4Pz9yuXbuGuLg4rF27FocPH653Wz09Pfj7+yssf/C4WbNmITMzE6WlpUhJScGRI0fw/fffC897\neHhg48aNePbZZzW7zkljhRCTJ0+m27dvU0hICI0cOZKkUin5+fmJLqRITEwkHx8f4f7KlStp9erV\ndbZLT08ne3t7unTpUr37AUAhISHCLS4uTnQM6jB6NBFQe5syRfX7LywspG3bttELL7xAHToYEzCS\ngLXk43OBampqVP+GrZSIr7BW2dnZUWxsbJ3H4+LiyMbGRuGx7t270y+//CJqvyEhIfTaa68REdHV\nq1dJIpGQXC5vUaxLly6lwMBA4X52djY99dRTdPfuXVGvNzY2ptTUVOF+VVUVDRw4kDIyMkgikVB2\ndrbS18pkMvriiy/qfW779u00fPhwWrRoEZmampK9vT0lJCTQtm3byNbWlrp37047d+4Utv/999/J\nw8ODjI2NydbWlkJDQxX2l5iYSF5eXmRqakru7u4UHx8v6vM9rkePHvTHH38I9z/++GMKCAho8DVV\nVVUkkUgoNzdX6Tb5+fk0YMAAOnDgQJ3nRo4cqfA5n/TwdyEuLk7hWNnc35EmvSouLo4iIiKooqJC\n9GuqqqqoT58+dPXqVaqoqCB3d3fKzMxU2CY3N5fs7e0pMTFReaA6dhDw86tNDJ6eqqn+bag6efz4\nmyp9r4bMnl2b+Pz81P9eqtDY90IVn6cl+xCTHORyOUVERFCnTp3o8uXLRFT7O2Fqakp5eXn17reh\n5DBv3jwyNTWt9+bu7q401ueff57Wrl2r8JiRkZHCAV+ZtLQ0evrpp6m0tFR4bO3atRQUFERE1GBy\n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\n", "text": [ "<matplotlib.figure.Figure at 0x1091e5f90>" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>Loop through features to get AUC and LL</p>" ] }, { "cell_type": "code", "collapsed": false, "input": [ "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" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>A quick Lift chart</p>" ] }, { "cell_type": "code", "collapsed": false, "input": [ "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" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "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" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "<matplotlib.legend.Legend at 0x10956ea10>" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nACEuQ7V1ONo+onUAAAAASUVORK5CYII=\n", "text": [ "<matplotlib.figure.Figure at 0x1091df2d0>" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }