{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A Primer on Empirical Risk Minimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Notations and Definitions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>Let's first set up some notation and ideas:</p>\n", "<ul>\n", "<li>Let $X \\in \\mathbb{R}^p$ be a $p$-dimensional real valued vector of predictor variables</li>\n", "<br>\n", "<li>Let $Y$ be a target variable, where \n", "<ul>\n", "<li> $Y\\in \\mathbb{R}$ is real valued</li> \n", "<li> $Y\\in C$ is an element in some set of classes $C=\\{c_1,c_2,...c_k\\}$</li> \n", "</ul>\n", "</li>\n", "<br>\n", "<li>$X$ and $Y$ are governed by a joint distribution $P(Y,X)$ (that we likely don't know)</li>\n", "<br>\n", "<li>We seek a function $f(X)$ for predicting $Y$, given $X$, whose output can be</li>\n", "<ul>\n", "<li> Real valued, i.e. $f(X)=E[Y|X]$</li> \n", "<li> Discrete valued, i.e. $f(x) \\in \\{c_1,c_2,...c_k\\}$</li> \n", "</ul>\n", "</ul>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>Second, let's define two more things</p>\n", "<ul>\n", "<br>\n", "<li>$\\mathbb{F}$ is a family of functions, such that $f(x) \\in \\mathbb{F}$, examples are:\n", "<ul>\n", "<li> All linear hyper-planes, such that $f(x)=\\alpha+\\beta x$ </li>\n", "<li> All quadratic polynomials, such that $f(x)=\\alpha+\\beta_1 x +\\beta_2x^2$ </li>\n", "<li> All decision trees with max(depth)=$k$</li>\n", "</ul>\n", "</li>\n", "<br>\n", "<li> A loss function $\\mathbb{L}(f(X),Y)$ that measures how well $f(X)$ approximates $Y$.\n", "<ul>\n", "<li> Squared Loss: $\\mathbb{L}(f(x),y)=(f(x)-y)^2$</li>\n", "<li> 0-1 Loss: $\\mathbb{L}(f(x),y)=\\mathbb{I}(f(x)==y)$</li>\n", "<li> Logistic Loss: $\\mathbb{L}(f(x),y)=-[y*Ln(f(x))+(1-y)*Ln(1-f(x))]$</li>\n", "<li> Hinge Loss: $\\mathbb{L}(f(x),y)=max(0,1-f(x)*y)$</li>\n", "</ul>\n", "</ul>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Emprical Risk Minimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>The main goal of Supervised Learning can be stated using the Empirical Risk Minimization framework of Statistical Learning.<br><br>\n", "We are looking for a function <span style=\"color:red\">$f\\in \\mathbb{F}$</span> that minimizes the expected loss: \n", "<br>\n", "<br>\n", "<center><span style=\"color:red\">$E[\\mathbb{L}(f(x),y)]=\\int \\mathbb{L}(f(x),y)\\, P(x,y)\\:\\mathrm{d}x\\mathrm{d}y$</span></center>\n", "\n", "<br>\n", "Because we don't know the distribution <span style=\"color:red\">$P(X,Y)$</span>, we can't minimize the expected loss. However, we can minimize the empirical loss, or risk, by computing the average loss over our training data.<br><br> Thus, in Supervised Learning, we choose the function <span style=\"color:red\">$f(X)$</span> that minimizes the loss over training data:\n", "<br><br>\n", "<center><span style=\"color:red\">$f^{opt}= \\underset{f \\in \\mathbb{F}} {\\mathrm{argmin}} \\frac{1}{n} \\sum\\limits_{i=1}^n \\mathbb{L}(f(x_i),y_i)$</span></center>\n", "\n", "\n", "</p>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Logistic Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p><b>Logistic Regression:</b> a member of the class of generalized linear models (glm) using the logit as its link function.<br><br>\n", "\n", "The goal of Logistic Regression is to model the posterior probability of membership in class <span style=\"color:red\">$c_i$</span> as a function of <span style=\"color:red\">$X$</span>. I.e.,\n", "<br>\n", "<br>\n", "<br>\n", "<center><span style=\"color:red\">$P(c_i|x)=f(x)=\\frac{1}{1+e^{-(\\alpha+\\beta x))}}$</span></center>\n", "<br>\n", "<br>\n", "To make this a linear model in <span style=\"color:red\">$X$</span>, we take the log of the odds ratio of <span style=\"color:red\">$p$</span> (called the log-odds):\n", "<br>\n", "<br>\n", "<br>\n", "<center><span style=\"color:red\">$ln \\frac{P(c_i|x)}{1-P(c_i|x)} = ln \\frac{1}{e^{-(\\alpha+\\beta x))}} = \\alpha+\\beta x$</span></center>\n", "<br>\n", "<br>\n", "And effectively we do a linear regression against the log-odds of <span style=\"color:red\">$P(c_i|x)$</span> (though we don't use least squares).\n", "</p>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LogReg as ERM" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>How do we fit Logistic Regression into the ERM framework?<br><br>\n", "\n", "We find the parameters <span style=\"color:red\">$\\alpha$</span> and <span style=\"color:red\">$\\beta$</span> using the method of <u>Maximum Likelihood Estimation</u>.<br><br>\n", "\n", "If we consider each observation to be an indepedent Bernoulli draw with <span style=\"color:red\">$p_i=P(y_i|x_i)$</span>, then the likelihood of each draw can be defined as: <span style=\"color:red\">$p_i^{y_i}(1-p_i)^{1-y_i}$</span>, with <span style=\"color:red\">$p_i$</span> given by the inverse logit function. In MLE, we wish to maximize the likelihood of observing the data as a function of the independent parameters of the model (i.e., <span style=\"color:red\">$\\alpha$</span> and <span style=\"color:red\">$\\beta$</span>). The total likelihood function looks like:<br><br>\n", "\n", "<center><span style=\"color:red\">$L(\\alpha,\\beta|X,Y)=\\prod\\limits_{i=1}^nP(x_i,y_i|\\alpha,\\beta)=\\prod\\limits_{i=1}^np_i^{y_i}(1-p_i)^{1-y_i}$</span></center>\n", "<br><br>\n", "This is actually a difficult equation to maximize directly, so we do a little trick. We take the negative log and call this our loss function for ERM!\n", "\n", "<center><span style=\"color:red\">$\\mathbb{L}(f(X),Y)=-Ln [L(\\alpha,\\beta|X,Y)]=-\\sum\\limits_{i=1}^n y_i\\,ln\\,(p_i)+(1-y_i)\\,ln\\,(1-p_i)$</span></center>\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "</p>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 1 - Building and Looking at a Model" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Warning: Maximum number of iterations has been exceeded.\n", " Current function value: 0.245774\n", " Iterations: 35\n" ] } ], "source": [ "'''\n", "Let's train an actual model and see how well it generalizes\n", "'''\n", "import math\n", "from sklearn.metrics import confusion_matrix, roc_auc_score\n", "from sklearn import linear_model\n", "import numpy as np\n", "import os\n", "import course_utils as bd\n", "import pandas as pd\n", "import statsmodels.api as sm\n", "import matplotlib.pyplot as plt\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "import imp\n", "imp.reload(bd)\n", "%matplotlib inline\n", "\n", "#For mac users\n", "cwd = os.getcwd()\n", "datadir = '/'.join(cwd.split('/')[0:-1]) + '/data/'\n", "#For window's users, hardcode the dir:\n", "#datadir = \n", "\n", "\n", "#Load data and downsample for a 1/10 pos/neg ratio, then split into a train/test\n", "f = datadir + 'ads_dataset_cut.txt'\n", "target = 'y_buy'\n", "tdat = pd.read_csv(f, header = 0, sep = '\\t')\n", "moddat = bd.downSample(tdat, target, 10)\n", "\n", "#We know the dataset is sorted so we can just split by index\n", "train_split = 0.75\n", "train = moddat[:int(math.floor(moddat.shape[0]*train_split))]\n", "test = moddat[int(math.floor(moddat.shape[0]*train_split)):]\n", "\n", "#Using Scikit-learn the model is built with two easy steps.\n", "logreg = linear_model.LogisticRegression(C = 1e30)\n", "logreg.fit(train.drop(target, 1), train[target])\n", "\n", "#But we are going to also build using the statsmodel package\n", "logit_sm = sm.Logit(train[target], train.drop(target, 1))\n", "lr_fit = logit_sm.fit()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>Logistic Regression has long been used as a tool in statistics and econometrics so there are a lot of additional data points one can get out of logistic regression model than one might get with standard machine learning tools.<br><br>\n", "We showed how to use scikit-learn to fit a model, but we also used statsmodel. The reason is that statsmodel returns summary statistics on each coefficient fit to the variables. In machine learning, we often only focus on the generalizability of the prediction. But in many analytical applications we want to know how statistically significant are the estimates within our model.\n", "</p>" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "<table class=\"simpletable\">\n", "<caption>Logit Regression Results</caption>\n", "<tr>\n", " <th>Dep. Variable:</th> <td>y_buy</td> <th> No. Observations: </th> <td> 2087</td> \n", "</tr>\n", "<tr>\n", " <th>Model:</th> <td>Logit</td> <th> Df Residuals: </th> <td> 2074</td> \n", "</tr>\n", "<tr>\n", " <th>Method:</th> <td>MLE</td> <th> Df Model: </th> <td> 12</td> \n", "</tr>\n", "<tr>\n", " <th>Date:</th> <td>Mon, 24 Sep 2018</td> <th> Pseudo R-squ.: </th> <td>0.1601</td> \n", "</tr>\n", "<tr>\n", " <th>Time:</th> <td>20:18:41</td> <th> Log-Likelihood: </th> <td> -512.93</td> \n", "</tr>\n", "<tr>\n", " <th>converged:</th> <td>False</td> <th> LL-Null: </th> <td> -610.74</td> \n", "</tr>\n", "<tr>\n", " <th> </th> <td> </td> <th> LLR p-value: </th> <td>2.621e-35</td>\n", "</tr>\n", "</table>\n", "<table class=\"simpletable\">\n", "<tr>\n", " <td></td> <th>coef</th> <th>std err</th> <th>z</th> <th>P>|z|</th> <th>[0.025</th> <th>0.975]</th> \n", "</tr>\n", "<tr>\n", " <th>isbuyer</th> <td> -23.0178</td> <td> 6.48e+04</td> <td> -0.000</td> <td> 1.000</td> <td>-1.27e+05</td> <td> 1.27e+05</td>\n", "</tr>\n", "<tr>\n", " <th>buy_freq</th> <td> 23.9668</td> <td> 6.48e+04</td> <td> 0.000</td> <td> 1.000</td> <td>-1.27e+05</td> <td> 1.27e+05</td>\n", "</tr>\n", "<tr>\n", " <th>visit_freq</th> <td> -0.0074</td> <td> 0.016</td> <td> -0.462</td> <td> 0.644</td> <td> -0.039</td> <td> 0.024</td>\n", "</tr>\n", "<tr>\n", " <th>buy_interval</th> <td> -0.0109</td> <td> 0.014</td> <td> -0.804</td> <td> 0.422</td> <td> -0.038</td> <td> 0.016</td>\n", "</tr>\n", "<tr>\n", " <th>sv_interval</th> <td> 0.0102</td> <td> 0.007</td> <td> 1.423</td> <td> 0.155</td> <td> -0.004</td> <td> 0.024</td>\n", "</tr>\n", "<tr>\n", " <th>expected_time_buy</th> <td> 0.0106</td> <td> 0.016</td> <td> 0.656</td> <td> 0.512</td> <td> -0.021</td> <td> 0.042</td>\n", "</tr>\n", "<tr>\n", " <th>expected_time_visit</th> <td> -0.0334</td> <td> 0.008</td> <td> -4.313</td> <td> 0.000</td> <td> -0.049</td> <td> -0.018</td>\n", "</tr>\n", "<tr>\n", " <th>last_buy</th> <td> 0.0102</td> <td> 0.005</td> <td> 2.086</td> <td> 0.037</td> <td> 0.001</td> <td> 0.020</td>\n", "</tr>\n", "<tr>\n", " <th>last_visit</th> <td> -0.0635</td> <td> 0.006</td> <td> -10.851</td> <td> 0.000</td> <td> -0.075</td> <td> -0.052</td>\n", "</tr>\n", "<tr>\n", " <th>multiple_buy</th> <td> -22.6427</td> <td> 6.48e+04</td> <td> -0.000</td> <td> 1.000</td> <td>-1.27e+05</td> <td> 1.27e+05</td>\n", "</tr>\n", "<tr>\n", " <th>multiple_visit</th> <td> -0.1607</td> <td> 0.213</td> <td> -0.755</td> <td> 0.450</td> <td> -0.578</td> <td> 0.257</td>\n", "</tr>\n", "<tr>\n", " <th>uniq_urls</th> <td> -0.0103</td> <td> 0.002</td> <td> -6.443</td> <td> 0.000</td> <td> -0.013</td> <td> -0.007</td>\n", "</tr>\n", "<tr>\n", " <th>num_checkins</th> <td> 8.671e-05</td> <td> 8.28e-05</td> <td> 1.048</td> <td> 0.295</td> <td>-7.55e-05</td> <td> 0.000</td>\n", "</tr>\n", "</table>" ], "text/plain": [ "<class 'statsmodels.iolib.summary.Summary'>\n", "\"\"\"\n", " Logit Regression Results \n", "==============================================================================\n", "Dep. Variable: y_buy No. Observations: 2087\n", "Model: Logit Df Residuals: 2074\n", "Method: MLE Df Model: 12\n", "Date: Mon, 24 Sep 2018 Pseudo R-squ.: 0.1601\n", "Time: 20:18:41 Log-Likelihood: -512.93\n", "converged: False LL-Null: -610.74\n", " LLR p-value: 2.621e-35\n", "=======================================================================================\n", " coef std err z P>|z| [0.025 0.975]\n", "---------------------------------------------------------------------------------------\n", "isbuyer -23.0178 6.48e+04 -0.000 1.000 -1.27e+05 1.27e+05\n", "buy_freq 23.9668 6.48e+04 0.000 1.000 -1.27e+05 1.27e+05\n", "visit_freq -0.0074 0.016 -0.462 0.644 -0.039 0.024\n", "buy_interval -0.0109 0.014 -0.804 0.422 -0.038 0.016\n", "sv_interval 0.0102 0.007 1.423 0.155 -0.004 0.024\n", "expected_time_buy 0.0106 0.016 0.656 0.512 -0.021 0.042\n", "expected_time_visit -0.0334 0.008 -4.313 0.000 -0.049 -0.018\n", "last_buy 0.0102 0.005 2.086 0.037 0.001 0.020\n", "last_visit -0.0635 0.006 -10.851 0.000 -0.075 -0.052\n", "multiple_buy -22.6427 6.48e+04 -0.000 1.000 -1.27e+05 1.27e+05\n", "multiple_visit -0.1607 0.213 -0.755 0.450 -0.578 0.257\n", "uniq_urls -0.0103 0.002 -6.443 0.000 -0.013 -0.007\n", "num_checkins 8.671e-05 8.28e-05 1.048 0.295 -7.55e-05 0.000\n", "=======================================================================================\n", "\n", "Possibly complete quasi-separation: A fraction 0.13 of observations can be\n", "perfectly predicted. This might indicate that there is complete\n", "quasi-separation. In this case some parameters will not be identified.\n", "\"\"\"" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Use statsmodel if you want to understand the fit statistics of the LR model\n", "lr_fit.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>\n", "<b>A Practical Aside</b><br><br>\n", "\n", "What exactly does the estimate of $\\beta$ really mean? How can we interpret it?<br><br>\n", "\n", "Recall that $Ln \\frac{p}{1-p}=\\alpha+\\beta x$. This means that a unit change in the value of $x$ changes the log-odds by the value of $\\beta$. This is a mathematical statement that IMHO does not offer much intuitive value.<br><br>\n", "\n", "<center><span style=\"color:red\">So what can we learn by looking at betas? (IMHO, not much!)</span></center><br><Br>\n", "<b>Some helpful tips, garnered from theory and experience:</b>\n", "<ul>\n", "<li>$|\\beta_1|>|\\beta_2|$ does not guarantee that feature $X_1$ is more predictive than $X_2$. The magnitude of $\\beta$ is inversely proportional to the scale of $X$, so comparing betas only makes sense when the features have the same scale (such as binary features).</li><br>\n", "<li>Likewise, the z-score of $\\beta$ is influences by sample size and should not be used to rank features by predictiveness</li><br>\n", "<li>sign($\\beta$) does tell you whether $Y$ is positively or negatively correlated with $X$. However, if the features have a lot of multi-collinearity, sign($\\beta$) can be misleading.</li><br>\n", "<li>Multi-collinearity in $X$ means the betas will have covariance with each other. The betas will \"split\" the effect. Sometimes they'll split the effect as positive numbers (i.e. 1=0.5+0.5) and other times they'll split as negatives (i.e., 1=2-1). This makes interpreting $\\beta$ that much more difficult.\n", "</ul>\n", "\n", "</p>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 2 - Robustness" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>In this example we test the sensitivity of out-of-sample performance to training set sample size. Our goal is to plot test-set $AUC$ as a function of $N$, the number of samples in the training set. Because we expect a lot of variance in the lower range of $N$, we use bootstrap algorithm to compute standard errors of AUC measurements.<br><br>\n", "\n", "<b>To Bootstrap:</b>\n", "<ul>\n", " <li>Generate $k$ training sets of size $N$, where we sample from original training set with replacement.</li>\n", " <li>Compute and store the AUC on the test set for each bootstrapped sample</li>\n", " <li>Get Mean and Standard Error of bootstrapped AUC estimates</li>\n", "</ul>\n", "\n", "\n", "</p>" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'Test Set AUC')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nefXVVxk0aBCfffYZH374IZMnT2bChAnk5eWRn59PUlISAIsXL2bNmjXk5uaSl5dHbm4ufn5+vPDC\nCwBcddVVvP/++3WCyD59+rBhwwbAed9FpE7APWLECJ555hkA/v73v1NWVuZdFhUVRZcuXUhMTGzw\nWI5WAJiTk8O8efPqBMzbtm3jueee48ILL+Tjjz/mnHPOwd/fn27dutG9e3eSkpKYPn06ffr0QURI\nTk4mODi4TsAcHh6Or69vs/WzqY7nNg9j31byYYw59s2cOfO4Dajb4peJqqoq1q1bR0pKCikpKezd\nu9e7rLq6+oiDCXP4du3axQMPPMCCBQvIzMzEx8eHcePGeQPgCRMmMGHCBO/6ERERREREeF+PHz+e\n8ePHN9j+nDlzACgvL/cG3H/5y1/qZEhVldzcXOLi4oiMjMTj8XiXPfnkk2zevLlOm+eeey4LFy4E\n4OSTT6akpKROwF3b7bffTmVlZZ15p556KpdffjnV1dXcfvvtB/T57LPP5qKLLqKkpIR77rnHO3/C\nhAls27aNu+66i1/84hfs2bOHadOmISJ07dqV7t27c9ZZZ9GpUyfvuUlNTSUuLq7Bz/SwYcMaPHdt\nxYwZM9pFm+2CqraradiwYWqMMaqqHo9HAV28eHFrd6VVOP+Et56KigpdtWqV9/X999+vQUFBCjQ4\nDRkyRNesWdOKvT52paam6nPPPadvvPGGqqoWFRVpp06d9NJLL9V//etfmp2d3eC2M2bMaPb+HOrz\nWVlZqVlZWbpx40ZdsmSJLliwQL/++mvv8t/85jd65ZVXas+ePev9LIWFhWlsbGyd6a677vK2HR0d\nfcD00EMPqarqPffcU2+bV155pao6n+0tW7ZoeXn5ER17S5zPlmizvWjNYweStRHxqZV8GGPandtu\nu41nn332gPlTp07ln//852HVELZXRUVFhIWFsXz5chISEujcuXOztHuwrHdaWhoff/yxN/u8cuVK\nysvLycjIoEuXLrz55pssW7aMYcOGMWzYME488UR8fHwQEYqKirjrrrv45z//SWlpKRMnTuTOO+9k\n4sSJx8X71Zxqv0cpKSl88MEHzJ8/nx9++AFwRnB4++23AafcozlrmA9He/np30qSzME0tuSj1TPO\nhztZhtqY49euXbv0hhtuUB8fH50zZ46qOlmwp59+WuPi4hTQMWPGHNMZ62nTptWbWZsxY4ZWV1fr\nCSecoH369NGxY8fq5MmT9ZprrtH33ntPVZ2s21tvvaWfffaZ/vDDD5qamqp79+6t0z6g5eXlumLF\nCv373/+uN998s65fv15VVV977TVvZvD000/X6dOn69y5c7WwsPCgfaZWpjI7O1tnzZqlXbp0UUDf\nf//9Zj5Dx67q6mpNTU2tcz4nTZqkPj4+esopp+gf/vAHXbdunXo8nlbs5T6tkfVuK22aYweNzFC3\neoB8uJMF1MYcf0pKSnTWrFnaoUMH9fPz09tvv93783XNf4ZlZWX6t7/9Tbt166Yffvihd7vq6upW\n63dzKS4u9j4fNmyYhoaG6vXXX6+Azps3T5OTk1VVtbS0VG+++Wb92c9+pmeeeaYOHjxYExIS9PHH\nH1dV1YyMjHqD8SeeeEJVVdPT0xXQgIAA77Lw8HCdP3++qqrm5ubqpk2bDvuc1hdYlZeX69y5c7Wy\nslJVVZ955hmdMWOGZmZmHvb5OZZUV1fr9u3btaKiQlVV58+frxdddJH279+/TjnNrl27VFV148aN\nBy3lONZYKYU52iygNsYcM04//XQF9OKLL9aNGzfWWbb/f4YVFRXeDN29996r/fr10zlz5ngDt/ai\nsrJSP/zwQ50yZYqGhYVpfn6+qqquX79ei4qKVPXwM2s1Nc+ff/65vv322/riiy/q448/7g3O959+\n+ctfHrUvJP/3f/+ngAYGBuq0adN09erVR2W/La2+YK2qqsr7eVy1apXeeeedOnnyZO3bt68GBgYq\n4K1Nf/nll7V///7ap0+fBn+ZMMa0HAuojTHt2uLFi7WkpERVVT/55BP94osvDruNd999V/v376+A\n9urVS//xj394M39tVUZGht5///3eEpbY2FidPn267tmz54B128tP6o21YcMG/cUvfqHBwcEK6AMP\nPHBU998c59Pj8WhhYaG3lAbQZ599Vn/961/rBRdcoH369FF/f39dsGCBqqouWLBAg4ODdcCAATpl\nyhS966679MUXX6z3/a5hJQrGHD2NDajtokRjTJvy448/cs899/DOO+/wxz/+kenTpzepPY/Hwwcf\nfMCjjz7KihUruOGGG7y3vW0rSktLyc/Pp0uXLqxfv54BAwYwadIkrr/+ei644AICAgKOWl/awgVa\nOTk5vPjii4wfP55TTjmFHTt28PHHH3P11VcTHBwMtMyQgbWPveZivsrKSpYvX15nLOa8vDxOO+00\n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\nRFJUdfih1mvJDPVOIKHW667uvNquB94CUNUlQBAQ04J9MsYYY4wxplm1ZED9HdBbRLqLSADORYfz\n9lsnFZgAICJ9cQLq9l/TcRhmzJjR2l0wxhhjjDFN0GIBtapWAbcBi4D1OKN5rBWRh0XkQne16cAN\nIrISeB24Vo+z+germzbGGGOMad9a9MYuqroQ52LD2vMerPV8HTCuJftgjDHGGGNMS7JbjxtjjDHG\nGNMEFlAbY4wxxhjTBBZQG2OMMcYY0wQWUBtjjDHGGNMEFlAbY4wxxhjTBBZQG2OMMcYY0wQWUBtj\njDHGGNMEFlAbY4wxxhjTBBZQG2OMMcYY0wQWUBtjjDHGGNMEFlAbY4wxxhjTBBZQG2OMMcYY0wQW\nUBtjjDHGGNMEFlAbY4wxxhjTBBZQG2OMMcYY0wQWUBtjjDHGmDanrLKa975P54H317R2Vw7Jr7U7\nYIwxxhhjDICqsmZnIW8mp/LBDxkUlVWRGBVCQUkl4SH+rd29BllAbYwxxhhjWlV+SQXvf7+TN5PT\nWb+rkEA/H84d0JlLRyQwuns0Pj7S2l08KAuojTHGGGPMUefxKN/+mMObyWksWptJRZWHAfFhPHJR\nfy4cHE94cNvNSO/PAmpjjDHGGHPUZOSX8p/kdP6TkkZ6Xinhwf5cMSKBS0ck0D8uvLW7d0QsoDbG\nGGOMMS2qvKqaT9ft4c3kNL7enIUqjOsVzV3n9OGc/p0J8vdt7S42iQXUxhhjjDGmRWzaXcSb36Xx\n3vc7yd1bQZfwIH55Ri9+NjyBhKiQ1u5es7GA2hhjjDHGNJuisko+XLWLN79L44e0fPx9hbP7ncCl\nwxM4pXcsvm38AsMjYQG1McYYY4xpsvW7CvnH4m0sWLWL0spqenfqwO/O78uUIfFEdwhs7e61KAuo\njTHGGGPMEduWvZenPtnEvJUZhAb4ctHgOC4dkcCQhAhEjr1sdH0soDbGGGOMMYctI7+Uv/5vM28l\npxPg68OtZ/TkxlN6tukbsLQUC6iNMcYYY0yj5RSX89wXP/KvpTtQVaaO7sYtZ/SkU8eg1u5aq7GA\n2hhjjDHGHFJhWSUvfbWVfyzeRmllNZcM7crtZ/Wma+SxM1rHkbKA2hhjjDHGNKi0opp/LtnO3774\nkYLSSs4f2IU7zj6RXp06tHbX2gwLqI0xxhhj2rDCskqyispJig49qkPOVVR5eDM5jb9+tpk9ReWc\n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\nFtQqsTQzQcfaXJUmIiIiMnTc8kFERERElA8sqImIiIiI8oEFNRERERFRPrCgJiIiIiLKBxbURERE\nRET5wIKaiIiIiCgfWFATEREREeUDC2oiIiIionxgQU1ERERElA8sqImIiIiI8oEFNRERERFRPrCg\nJiIiIiLKBxbURERERET5wIKaiIiIiCgfWFATEREREeUDC2oiIiIionxgQU1ERERElA8sqImIiIiI\n8oEFNRERERFRPrCgJiIiIiLKBxbURERERET5wIKaiIiIiCgfWFATEREREeUDC2oiIiIionxgQU1E\nRERElA8sqImIiIiI8oEFNRERERFRPry2oBZCVBFCvP+K6+8LISorG4uIiIiIyDDktEK9AEDSK64n\nApivTBwiIiIiIsOSU0FdTkp55r8XpZRnAVRRLhIRERERkeHIqaC2yeE1C10HISIiIiIyRDkV1KeE\nEJ/996IQoj+AU4olIiIiIiIyICY5vPYVgK1CiN4ATjy9Vg9AcQCdlQ5GRERERGQIXltQSylvA3hP\nCNEKgNvTy7OklPv0koyIiIiIyAC8tqAWQpR4+ttjT39JKeUjvaQiIiIiIjIQOW35uABAPn9BCGEF\nIAzAICnlDSWDEREREREZgpy2fFR81XUhRA8ASwG0UyoUEREREZGhyPXR41LKEABlFchCRERERGRw\ncl1QP932kev3EREREREVRjk9lDj0FZdLAugC4DttBhdCtMWTI8yNASyXUs58xT09AEzCk/3aZ6SU\nn2gzNhERERFRQZDTQ4ml//OxBHAfwAAp5RsPdhFCGAMIAtAKQAyAMCHEdinlxefucQYwFsAHUso4\nIUSZ3H4CRERERERqyumhxAmvui6EMBNCeEopt7xhbA8AUVLKq0/ftwFPDoS5+Nw9XgCCpJRxT+e8\nm5vwRERERERq02ovtBDCSAjRWgjxA4BoAP20eJvD03ufiXl67XnVAVQXQvwphDj6dIsIEREREZHB\nyGnLB4QQHwD4BEAnAKcA1AdQVUr5WIfzOwNoCqACgN+FELWklPH/yTEIwCAAcHR01NHURERERET5\n99oVaiHEPwBmAzgOoLaUsjOApFwU0zcBPN/LusLTa8+LAbBdSpkupbwG4BKeFNgvkFIuk1LWk1LW\nK136v1u7iYiIiIjUk9OWjx14skWjM4DWQggL/OfkxDcIA+AshKgshDAD0BPA9v/csxVPVqchhLDH\nky0gV3MxBxERERGRql5bUEsphwCohCedOtoCiAJQWgjxkRDC8k0DSykzAAwBsBdAOIAQKeUFIcQU\nIcSHT2/bC+C+EOIigN8AjJJS3s/PJ0REREREpE9CSu0WnZ+uMrcH0AtACymlvZLBXqdevXry+PHj\nakxNREREREWIEOKElLLem+7L8aHE50kp0/Bki8bWp6clEhEREREVeXk6QlxKmajrIEREREREhihP\nBTURERERET3xxoJaCPGRNteIiIiIiIoibVao/V5xbbyugxARERERGaLXPpQohGiDJ+3yHIQQc597\nqQSALKWDEREREREZgpy6fNwFcB5ACoALz11/BMBXyVBERERERIbitQW1lPIUgFNCiHV4siLtKKWM\n0lsyIiIiIiIDoM0e6hYAzgHYDwBCiDpCiC2KpiIiIiIiMhDaFNRTALwHIB4ApJSnAVRTMhQRERER\nkaHQpqBOl1LG/+eadueVExEREREVctocPR4uhOgBwEgIURnAUABHlY1FRERERGQYtFmhHgKgLp48\nmLgFQBqAr5QMRURERERkKN64Qi2lTAQwBsAYIURxKeUj5WMRERERERmG165QCyHGCyE0T39vJoTY\nByBaCPGvEKK53hISERERERVgOW35+ARA5NPffwrAHEBpAM0BzFA4FxERERGRQcipoE6TUj7r5tEW\nwI9SynQp5QUApspHIyIiIiIq+HIqqFOFEK5CiFJ4siq977nXLJSNRURERERkGHJ6KHEEgO0A7AEs\nkFJeBQAhRHs8OTmRiIiIiKjIe21BLaX8E4DzK67vArBLyVBERERERIZCmz7URERERET0GiyoiYiI\niIjy4Y0FtRDipW0hr7pGRERERFQUabNCHarlNSIiIiKiIue1K81CiDIAygOwEELUAiCevlQCgKUe\nshERERERFXg5bd3oAGAAgAoAgvD/BfUjABMUzkVEREREZBByapv3A4AfhBA9pJQhesxERERERGQw\ntNlDXUYIUQIAhBBLhBChQogWCuciIiIiIjII2hTUg6SUCUKI1niyp9oLQICysYiIiIiIDIM2BbV8\n+t/2AIKllGe0fB8RERERUaGnTWF8RgixC0BHALuFENb4/yKbiIiIiEjnpDScclObgvozAJMAeEgp\nkwCYAxioZCgiIiIiKpouXLiAbt26YezYsWpH0dobC2opZSaAKgC8n16y0OZ9RERERETaunz5Mvr0\n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\nERERKYX/DyP/X1NqYPT0AAAAAElFTkSuQmCC\n", "text/plain": [ "<Figure size 1200x800 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "'''\n", "The datasets train and test are defined in the above examples.\n", "'''\n", "\n", "target='y_buy'\n", "\n", "def modAUC(X_train, Y_train, X_test, Y_test):\n", " '''\n", " trains a model on train set and returns AUC on test set\n", " '''\n", " logreg = linear_model.LogisticRegression(C = 10)\n", " logreg.fit(X_train, Y_train)\n", " return roc_auc_score(Y_test, logreg.predict_proba(X_test)[:, 1])\n", "\n", "def LrBootstrapper(train, test, nruns, sampsize):\n", " '''\n", " Samples with replacement, runs multiple train/eval attempts\n", " returns mean and stdev of AUC\n", " '''\n", " auc_res = []\n", " for i in range(nruns):\n", " train_samp = train.loc[np.random.randint(0, len(train), size=sampsize)]\n", " try:\n", " auc_res.append(modAUC(train_samp.drop(target,1), train_samp[target], test.drop(target,1), test[target]))\n", " except:\n", " oops = 1\n", " return (np.mean(auc_res), np.percentile(auc_res, 2.5), np.percentile(auc_res, 97.5))\n", " \n", "#Run the analysis \n", "n_seq = np.logspace(3, 7, base=2.0, num=30)\n", "\n", "avg = []; lowers = []; uppers = []; sz = []\n", "for n in n_seq:\n", " mu, low, up =LrBootstrapper(train, test, 500, int(n))\n", " avg.append(mu)\n", " lowers.append(low)\n", " uppers.append(up)\n", " sz.append(n) \n", "\n", " \n", "\n", "\n", "#Plot the analysis\n", "#lower = np.ones(len(avg)) * (avg[len(avg)-1]-1.96*stderr[len(avg)-1])\n", "\n", "fig = plt.figure(figsize = (12, 8))\n", "ax = fig.add_subplot(111)\n", "plt.title('Bootstrapped AUC + Confidence Limits \\n as a Function of N Samples')\n", "plt.plot(np.log2(n_seq), np.array(avg), label='Avg AUC')\n", "#plt.plot(np.log2(n_seq), np.array(avg) + 1.96 * np.array(stderr), 'k--+', label = 'Upper 95% CI')\n", "#plt.plot(np.log2(n_seq), np.array(avg) - 1.96 * np.array(stderr), 'k--', label = 'Lower 95% CI')\n", "\n", "plt.plot(np.log2(n_seq), np.array(uppers), 'k--+', label = 'Upper 95% CI')\n", "plt.plot(np.log2(n_seq), np.array(lowers), 'k--', label = 'Lower 95% CI')\n", "\n", "#plt.plot(np.log2(n_seq), lower,'r-')\n", "\n", "plt.legend(loc = 4)\n", "ax.set_xlabel('Log2(N)')\n", "ax.set_ylabel('Test Set AUC')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<p>We can see in the above plot that Logistic Regression does fairly well with small sample sizes. The lower bound of the $95%$ at the $max(N)$ overlaps with the confidence interval at most levels of $N$, suggesting that in expectation, the smaller samples could perform as well as the larger samples.<br><br>\n", "\n", "While this is true, always try to use as much data as you can to reduce the variance!\n", "\n", "</p> " ] } ], "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 }