Skip to content

Instantly share code, notes, and snippets.

@justmarkham
Created April 7, 2016 16:32
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 14 You must be signed in to fork a gist
  • Save justmarkham/6d5c061ca5aee67c4316471f8c2ae976 to your computer and use it in GitHub Desktop.
Save justmarkham/6d5c061ca5aee67c4316471f8c2ae976 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:fd10b4e5fc2a798d21a4e1ca297bcf9570f7867c9cc483fc47d560e82b9083f1"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Logistic Regression with scikit-learn\n",
"\n",
"This is an example of logistic regression in Python with the [scikit-learn module](http://scikit-learn.org/), performed for an [assignment](https://github.com/ajschumacher/gadsdc/tree/master/logistic_assignment) with my [General Assembly Data Science class](https://generalassemb.ly/education/data-science).\n",
"\n",
"## Dataset\n",
"\n",
"The dataset I chose is the [affairs dataset](http://statsmodels.sourceforge.net/stable/datasets/generated/fair.html) that comes with [Statsmodels](http://statsmodels.sourceforge.net/). It was derived from a survey of women in 1974 by Redbook magazine, in which married women were asked about their participation in extramarital affairs. More information about the study is available in a [1978 paper](http://fairmodel.econ.yale.edu/rayfair/pdf/1978a200.pdf) from the Journal of Political Economy.\n",
"\n",
"## Description of Variables\n",
"\n",
"The dataset contains 6366 observations of 9 variables:\n",
"\n",
"* `rate_marriage`: woman's rating of her marriage (1 = very poor, 5 = very good)\n",
"* `age`: woman's age\n",
"* `yrs_married`: number of years married\n",
"* `children`: number of children\n",
"* `religious`: woman's rating of how religious she is (1 = not religious, 4 = strongly religious)\n",
"* `educ`: level of education (9 = grade school, 12 = high school, 14 = some college, 16 = college graduate, 17 = some graduate school, 20 = advanced degree)\n",
"* `occupation`: woman's occupation (1 = student, 2 = farming/semi-skilled/unskilled, 3 = \"white collar\", 4 = teacher/nurse/writer/technician/skilled, 5 = managerial/business, 6 = professional with advanced degree)\n",
"* `occupation_husb`: husband's occupation (same coding as above)\n",
"* `affairs`: time spent in extra-marital affairs\n",
"\n",
"## Problem Statement\n",
"\n",
"I decided to treat this as a classification problem by creating a new binary variable `affair` (did the woman have at least one affair?) and trying to predict the classification for each woman.\n",
"\n",
"Skipper Seabold, one of the primary contributors to Statsmodels, did a similar classification in his [Statsmodels demo](https://github.com/jseabold/pydc) at a [Statistical Programming DC Meetup](http://www.meetup.com/stats-prog-dc/events/173693192/). However, he used Statsmodels for the classification (whereas I'm using scikit-learn), and he treated the occupation variables as continuous (whereas I'm treating them as categorical)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Import modules"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import pandas as pd\n",
"import statsmodels.api as sm\n",
"import matplotlib.pyplot as plt\n",
"from patsy import dmatrices\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.cross_validation import train_test_split\n",
"from sklearn import metrics\n",
"from sklearn.cross_validation import cross_val_score"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Pre-Processing\n",
"\n",
"First, let's load the dataset and add a binary `affair` column."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# load dataset\n",
"dta = sm.datasets.fair.load_pandas().data\n",
"\n",
"# add \"affair\" column: 1 represents having affairs, 0 represents not\n",
"dta['affair'] = (dta.affairs > 0).astype(int)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Exploration"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dta.groupby('affair').mean()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>rate_marriage</th>\n",
" <th>age</th>\n",
" <th>yrs_married</th>\n",
" <th>children</th>\n",
" <th>religious</th>\n",
" <th>educ</th>\n",
" <th>occupation</th>\n",
" <th>occupation_husb</th>\n",
" <th>affairs</th>\n",
" </tr>\n",
" <tr>\n",
" <th>affair</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td> 4.329701</td>\n",
" <td> 28.390679</td>\n",
" <td> 7.989335</td>\n",
" <td> 1.238813</td>\n",
" <td> 2.504521</td>\n",
" <td> 14.322977</td>\n",
" <td> 3.405286</td>\n",
" <td> 3.833758</td>\n",
" <td> 0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td> 3.647345</td>\n",
" <td> 30.537019</td>\n",
" <td> 11.152460</td>\n",
" <td> 1.728933</td>\n",
" <td> 2.261568</td>\n",
" <td> 13.972236</td>\n",
" <td> 3.463712</td>\n",
" <td> 3.884559</td>\n",
" <td> 2.187243</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
" rate_marriage age yrs_married children religious educ \\\n",
"affair \n",
"0 4.329701 28.390679 7.989335 1.238813 2.504521 14.322977 \n",
"1 3.647345 30.537019 11.152460 1.728933 2.261568 13.972236 \n",
"\n",
" occupation occupation_husb affairs \n",
"affair \n",
"0 3.405286 3.833758 0.000000 \n",
"1 3.463712 3.884559 2.187243 "
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can see that on average, women who have affairs rate their marriages lower, which is to be expected. Let's take another look at the `rate_marriage` variable."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dta.groupby('rate_marriage').mean()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>yrs_married</th>\n",
" <th>children</th>\n",
" <th>religious</th>\n",
" <th>educ</th>\n",
" <th>occupation</th>\n",
" <th>occupation_husb</th>\n",
" <th>affairs</th>\n",
" <th>affair</th>\n",
" </tr>\n",
" <tr>\n",
" <th>rate_marriage</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td> 33.823232</td>\n",
" <td> 13.914141</td>\n",
" <td> 2.308081</td>\n",
" <td> 2.343434</td>\n",
" <td> 13.848485</td>\n",
" <td> 3.232323</td>\n",
" <td> 3.838384</td>\n",
" <td> 1.201671</td>\n",
" <td> 0.747475</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td> 30.471264</td>\n",
" <td> 10.727011</td>\n",
" <td> 1.735632</td>\n",
" <td> 2.330460</td>\n",
" <td> 13.864943</td>\n",
" <td> 3.327586</td>\n",
" <td> 3.764368</td>\n",
" <td> 1.615745</td>\n",
" <td> 0.635057</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td> 30.008056</td>\n",
" <td> 10.239174</td>\n",
" <td> 1.638469</td>\n",
" <td> 2.308157</td>\n",
" <td> 14.001007</td>\n",
" <td> 3.402820</td>\n",
" <td> 3.798590</td>\n",
" <td> 1.371281</td>\n",
" <td> 0.550856</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td> 28.856601</td>\n",
" <td> 8.816905</td>\n",
" <td> 1.369536</td>\n",
" <td> 2.400981</td>\n",
" <td> 14.144514</td>\n",
" <td> 3.420161</td>\n",
" <td> 3.835861</td>\n",
" <td> 0.674837</td>\n",
" <td> 0.322926</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td> 28.574702</td>\n",
" <td> 8.311662</td>\n",
" <td> 1.252794</td>\n",
" <td> 2.506334</td>\n",
" <td> 14.399776</td>\n",
" <td> 3.454918</td>\n",
" <td> 3.892697</td>\n",
" <td> 0.348174</td>\n",
" <td> 0.181446</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
" age yrs_married children religious educ \\\n",
"rate_marriage \n",
"1 33.823232 13.914141 2.308081 2.343434 13.848485 \n",
"2 30.471264 10.727011 1.735632 2.330460 13.864943 \n",
"3 30.008056 10.239174 1.638469 2.308157 14.001007 \n",
"4 28.856601 8.816905 1.369536 2.400981 14.144514 \n",
"5 28.574702 8.311662 1.252794 2.506334 14.399776 \n",
"\n",
" occupation occupation_husb affairs affair \n",
"rate_marriage \n",
"1 3.232323 3.838384 1.201671 0.747475 \n",
"2 3.327586 3.764368 1.615745 0.635057 \n",
"3 3.402820 3.798590 1.371281 0.550856 \n",
"4 3.420161 3.835861 0.674837 0.322926 \n",
"5 3.454918 3.892697 0.348174 0.181446 "
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"An increase in `age`, `yrs_married`, and `children` appears to correlate with a declining marriage rating."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Visualization"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# show plots in the notebook\n",
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's start with histograms of education and marriage rating."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# histogram of education\n",
"dta.educ.hist()\n",
"plt.title('Histogram of Education')\n",
"plt.xlabel('Education Level')\n",
"plt.ylabel('Frequency')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": [
"<matplotlib.text.Text at 0x16e48ac8>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x16c6eef0>"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# histogram of marriage rating\n",
"dta.rate_marriage.hist()\n",
"plt.title('Histogram of Marriage Rating')\n",
"plt.xlabel('Marriage Rating')\n",
"plt.ylabel('Frequency')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 7,
"text": [
"<matplotlib.text.Text at 0x16eac550>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nDzMz69r/B1eCI8zJqwWNAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x16c6eac8>"
]
}
],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's take a look at the distribution of marriage ratings for those having affairs versus those not having affairs."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# barplot of marriage rating grouped by affair (True or False)\n",
"pd.crosstab(dta.rate_marriage, dta.affair.astype(bool)).plot(kind='bar')\n",
"plt.title('Marriage Rating Distribution by Affair Status')\n",
"plt.xlabel('Marriage Rating')\n",
"plt.ylabel('Frequency')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
"<matplotlib.text.Text at 0x1710c5f8>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nvP/972f69Onsu+++HHHEEUybNo3HH3+cHXfckSuuuAJgtWsSJLFs2TIeeeSRqiaHaqv3+mpfcixy\njkWu3mPRL66DqKaLL76Y227Lbi47b968VaWkwrfyjt/On3rqKb71rW+xePFili5dytixpX899cgj\nj6xiq83M1swJohfa2tq47777eOihhxgyZAgHHHAAb731FtD5BWjjx4/n9ttvZ+edd+bqq6/u9BvE\nOuusU61m95nW1tZaN6FuOBY5xyJX77FwiakXlixZwsiRIxkyZAgzZ87koYfyX0ztrK6/dOlSNtlk\nE5YtW8Z11123KpGUc292M7O+5ATRC2PHjmX58uWMHj2aiRMn8uEPf3jVvOIjiOLh73znO+y1117s\nu+++7Ljjjqst02y3vaj3+mpfcixyjkWu3mPhs5j6uWrGp62tre4PofuKY5FzLHL1EAuf5tok21gN\njo9Z/+bTXM3MrNucIKxq6r2+2pcci5xjkav3WDhBmJlZSe6D6OccH7P+zX0QZmbWbU4QVjX1Xl/t\nS45FzrHI1XssnCAaSGtr66qb+5lZbRUubu3N44ADDqj1ZnSpX96LqS+uWC6nrt/S0sLLL7+86vce\nJDFr1iw22WSTkss32tXWtb4AqJ44FrnmikVv++/q+/+5XyaITDU7Zst70yVx5513cuCBB1axLWZm\nPeMSUx159dVXOfjgg9loo41Yf/31+fSnP017e3vJZWfPns3+++/PiBEj2HDDDTnqqKNWzZs5cyYH\nHXQQ733ve9lhhx245ZZb+moTVlPv9dW+5FjkHIvG4QRRY8WlqBUrVnD88cczd+5c5s6dy9ChQ/nK\nV75S8nlnn302Y8eO5dVXX6W9vZ2TTz4ZgNdff52DDjqIY445hoULF3LTTTcxYcIEnnnmmT7ZHjNr\nHk4QNRQRHHbYYYwcOZKRI0dywgkncPjhhzNkyBCGDRvGWWedxQMPPFDyuYMHD2bOnDm0t7czePBg\nPvKRjwBw5513svXWWzNu3DgGDBjAmDFjOOKII2pyFNFctebecSxyjkXjcIKoIUn8+te/ZtGiRSxa\ntIjrr7+eE088kZaWFtZbbz32339/Fi9eXLLD+/zzzyci2HPPPdlpp5246qqrAPjb3/7Gww8/vCrp\njBw5khtuuIEFCxb09eaZWYNzgqgjF1xwAbNmzWLatGksXryYBx54oNMfEtp4442ZPHky7e3tXH75\n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\n",
"text": [
"<matplotlib.figure.Figure at 0x16ea0ef0>"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's use a stacked barplot to look at the percentage of women having affairs by number of years of marriage."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"affair_yrs_married = pd.crosstab(dta.yrs_married, dta.affair.astype(bool))\n",
"affair_yrs_married.div(affair_yrs_married.sum(1).astype(float), axis=0).plot(kind='bar', stacked=True)\n",
"plt.title('Affair Percentage by Years Married')\n",
"plt.xlabel('Years Married')\n",
"plt.ylabel('Percentage')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 9,
"text": [
"<matplotlib.text.Text at 0x17d83a20>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x16e314e0>"
]
}
],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Prepare Data for Logistic Regression\n",
"\n",
"To prepare the data, I want to add an intercept column as well as dummy variables for `occupation` and `occupation_husb`, since I'm treating them as categorial variables. The dmatrices function from the [patsy module](http://patsy.readthedocs.org/en/latest/) can do that using formula language."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# create dataframes with an intercept column and dummy variables for\n",
"# occupation and occupation_husb\n",
"y, X = dmatrices('affair ~ rate_marriage + age + yrs_married + children + \\\n",
" religious + educ + C(occupation) + C(occupation_husb)',\n",
" dta, return_type=\"dataframe\")\n",
"print X.columns"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Index([u'Intercept', u'C(occupation)[T.2.0]', u'C(occupation)[T.3.0]', u'C(occupation)[T.4.0]', u'C(occupation)[T.5.0]', u'C(occupation)[T.6.0]', u'C(occupation_husb)[T.2.0]', u'C(occupation_husb)[T.3.0]', u'C(occupation_husb)[T.4.0]', u'C(occupation_husb)[T.5.0]', u'C(occupation_husb)[T.6.0]', u'rate_marriage', u'age', u'yrs_married', u'children', u'religious', u'educ'], dtype='object')\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The column names for the dummy variables are ugly, so let's rename those."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# fix column names of X\n",
"X = X.rename(columns = {'C(occupation)[T.2.0]':'occ_2',\n",
" 'C(occupation)[T.3.0]':'occ_3',\n",
" 'C(occupation)[T.4.0]':'occ_4',\n",
" 'C(occupation)[T.5.0]':'occ_5',\n",
" 'C(occupation)[T.6.0]':'occ_6',\n",
" 'C(occupation_husb)[T.2.0]':'occ_husb_2',\n",
" 'C(occupation_husb)[T.3.0]':'occ_husb_3',\n",
" 'C(occupation_husb)[T.4.0]':'occ_husb_4',\n",
" 'C(occupation_husb)[T.5.0]':'occ_husb_5',\n",
" 'C(occupation_husb)[T.6.0]':'occ_husb_6'})"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We also need to flatten `y` into a 1-D array, so that scikit-learn will properly understand it as the response variable."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# flatten y into a 1-D array\n",
"y = np.ravel(y)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Logistic Regression\n",
"\n",
"Let's go ahead and run logistic regression on the entire data set, and see how accurate it is!"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# instantiate a logistic regression model, and fit with X and y\n",
"model = LogisticRegression()\n",
"model = model.fit(X, y)\n",
"\n",
"# check the accuracy on the training set\n",
"model.score(X, y)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 13,
"text": [
"0.72588752748978946"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"73% accuracy seems good, but what's the null error rate?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# what percentage had affairs?\n",
"y.mean()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 14,
"text": [
"0.32249450204209867"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Only 32% of the women had affairs, which means that you could obtain 68% accuracy by always predicting \"no\". So we're doing better than the null error rate, but not by much.\n",
"\n",
"Let's examine the coefficients to see what we learn."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# examine the coefficients\n",
"pd.DataFrame(zip(X.columns, np.transpose(model.coef_)))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0 </th>\n",
" <td> Intercept</td>\n",
" <td> [1.48988372957]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1 </th>\n",
" <td> occ_2</td>\n",
" <td> [0.188045598942]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2 </th>\n",
" <td> occ_3</td>\n",
" <td> [0.498926222393]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3 </th>\n",
" <td> occ_4</td>\n",
" <td> [0.25064662018]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4 </th>\n",
" <td> occ_5</td>\n",
" <td> [0.838982982602]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5 </th>\n",
" <td> occ_6</td>\n",
" <td> [0.833921262629]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6 </th>\n",
" <td> occ_husb_2</td>\n",
" <td> [0.190546828287]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7 </th>\n",
" <td> occ_husb_3</td>\n",
" <td> [0.297744578502]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8 </th>\n",
" <td> occ_husb_4</td>\n",
" <td> [0.161319424129]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9 </th>\n",
" <td> occ_husb_5</td>\n",
" <td> [0.187683007035]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td> occ_husb_6</td>\n",
" <td> [0.193916860892]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td> rate_marriage</td>\n",
" <td> [-0.70312052711]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td> age</td>\n",
" <td> [-0.0584177439191]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td> yrs_married</td>\n",
" <td> [0.10567679013]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td> children</td>\n",
" <td> [0.0169195866351]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td> religious</td>\n",
" <td> [-0.371135218074]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td> educ</td>\n",
" <td> [0.0040161519299]</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 15,
"text": [
" 0 1\n",
"0 Intercept [1.48988372957]\n",
"1 occ_2 [0.188045598942]\n",
"2 occ_3 [0.498926222393]\n",
"3 occ_4 [0.25064662018]\n",
"4 occ_5 [0.838982982602]\n",
"5 occ_6 [0.833921262629]\n",
"6 occ_husb_2 [0.190546828287]\n",
"7 occ_husb_3 [0.297744578502]\n",
"8 occ_husb_4 [0.161319424129]\n",
"9 occ_husb_5 [0.187683007035]\n",
"10 occ_husb_6 [0.193916860892]\n",
"11 rate_marriage [-0.70312052711]\n",
"12 age [-0.0584177439191]\n",
"13 yrs_married [0.10567679013]\n",
"14 children [0.0169195866351]\n",
"15 religious [-0.371135218074]\n",
"16 educ [0.0040161519299]"
]
}
],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Increases in marriage rating and religiousness correspond to a decrease in the likelihood of having an affair. For both the wife's occupation and the husband's occupation, the lowest likelihood of having an affair corresponds to the baseline occupation (student), since all of the dummy coefficients are positive."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model Evaluation Using a Validation Set\n",
"\n",
"So far, we have trained and tested on the same set. Let's instead split the data into a training set and a testing set."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# evaluate the model by splitting into train and test sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)\n",
"model2 = LogisticRegression()\n",
"model2.fit(X_train, y_train)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 16,
"text": [
"LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, penalty='l2', random_state=None, tol=0.0001)"
]
}
],
"prompt_number": 16
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We now need to predict class labels for the test set. We will also generate the class probabilities, just to take a look."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# predict class labels for the test set\n",
"predicted = model2.predict(X_test)\n",
"print predicted"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 1. 0. 0. ..., 0. 0. 0.]\n"
]
}
],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# generate class probabilities\n",
"probs = model2.predict_proba(X_test)\n",
"print probs"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[ 0.3514255 0.6485745 ]\n",
" [ 0.90952541 0.09047459]\n",
" [ 0.72576645 0.27423355]\n",
" ..., \n",
" [ 0.55736908 0.44263092]\n",
" [ 0.81213879 0.18786121]\n",
" [ 0.74729574 0.25270426]]\n"
]
}
],
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As you can see, the classifier is predicting a 1 (having an affair) any time the probability in the second column is greater than 0.5.\n",
"\n",
"Now let's generate some evaluation metrics."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# generate evaluation metrics\n",
"print metrics.accuracy_score(y_test, predicted)\n",
"print metrics.roc_auc_score(y_test, probs[:, 1])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"0.729842931937\n",
"0.74596198609\n"
]
}
],
"prompt_number": 19
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The accuracy is 73%, which is the same as we experienced when training and predicting on the same data.\n",
"\n",
"We can also see the confusion matrix and a classification report with other metrics."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print metrics.confusion_matrix(y_test, predicted)\n",
"print metrics.classification_report(y_test, predicted)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[1169 134]\n",
" [ 382 225]]\n",
" precision recall f1-score support\n",
"\n",
" 0.0 0.75 0.90 0.82 1303\n",
" 1.0 0.63 0.37 0.47 607\n",
"\n",
"avg / total 0.71 0.73 0.71 1910\n",
"\n"
]
}
],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model Evaluation Using Cross-Validation\n",
"\n",
"Now let's try 10-fold cross-validation, to see if the accuracy holds up more rigorously."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# evaluate the model using 10-fold cross-validation\n",
"scores = cross_val_score(LogisticRegression(), X, y, scoring='accuracy', cv=10)\n",
"print scores\n",
"print scores.mean()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0.72100313 0.70219436 0.73824451 0.70597484 0.70597484 0.72955975\n",
" 0.7327044 0.70440252 0.75157233 0.75 ]\n",
"0.724163068551\n"
]
}
],
"prompt_number": 21
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks good. It's still performing at 73% accuracy."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Predicting the Probability of an Affair\n",
"\n",
"Just for fun, let's predict the probability of an affair for a random woman not present in the dataset. She's a 25-year-old teacher who graduated college, has been married for 3 years, has 1 child, rates herself as strongly religious, rates her marriage as fair, and her husband is a farmer."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"model.predict_proba(np.array([1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 3, 25, 3, 1, 4,\n",
" 16]))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 22,
"text": [
"array([[ 0.77472334, 0.22527666]])"
]
}
],
"prompt_number": 22
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The predicted probability of an affair is 23%."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Next Steps\n",
"\n",
"There are many different steps that could be tried in order to improve the model:\n",
"\n",
"* including interaction terms\n",
"* removing features\n",
"* regularization techniques\n",
"* using a non-linear model"
]
}
],
"metadata": {}
}
]
}
@xiangyiwen22
Copy link

y, X = dmatrices('affair ~ rate_marriage + age + yrs_married + children +
religious + educ + C(occupation) + C(occupation_husb)',
dta, return_type="data frame")

I got the error from the above line:

TypeError: 'QuadContourSet' object is not callable.

Which step goes wrong? I copy and paste every step from this file.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment