{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Multiple Regression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's grab a data set of of car values:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Price | \n",
" Mileage | \n",
" Make | \n",
" Model | \n",
" Trim | \n",
" Type | \n",
" Cylinder | \n",
" Liter | \n",
" Doors | \n",
" Cruise | \n",
" Sound | \n",
" Leather | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 17314.103129 | \n",
" 8221 | \n",
" Buick | \n",
" Century | \n",
" Sedan 4D | \n",
" Sedan | \n",
" 6 | \n",
" 3.1 | \n",
" 4 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 17542.036083 | \n",
" 9135 | \n",
" Buick | \n",
" Century | \n",
" Sedan 4D | \n",
" Sedan | \n",
" 6 | \n",
" 3.1 | \n",
" 4 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 16218.847862 | \n",
" 13196 | \n",
" Buick | \n",
" Century | \n",
" Sedan 4D | \n",
" Sedan | \n",
" 6 | \n",
" 3.1 | \n",
" 4 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" 16336.913140 | \n",
" 16342 | \n",
" Buick | \n",
" Century | \n",
" Sedan 4D | \n",
" Sedan | \n",
" 6 | \n",
" 3.1 | \n",
" 4 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 16339.170324 | \n",
" 19832 | \n",
" Buick | \n",
" Century | \n",
" Sedan 4D | \n",
" Sedan | \n",
" 6 | \n",
" 3.1 | \n",
" 4 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Price Mileage Make Model Trim Type Cylinder Liter \\\n",
"0 17314.103129 8221 Buick Century Sedan 4D Sedan 6 3.1 \n",
"1 17542.036083 9135 Buick Century Sedan 4D Sedan 6 3.1 \n",
"2 16218.847862 13196 Buick Century Sedan 4D Sedan 6 3.1 \n",
"3 16336.913140 16342 Buick Century Sedan 4D Sedan 6 3.1 \n",
"4 16339.170324 19832 Buick Century Sedan 4D Sedan 6 3.1 \n",
"\n",
" Doors Cruise Sound Leather \n",
"0 4 1 1 1 \n",
"1 4 1 1 0 \n",
"2 4 1 1 0 \n",
"3 4 1 0 0 \n",
"4 4 1 0 1 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"df = pd.read_excel('https://admintuts.tech/wp-content/downloads/xls/cars.xls')\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Mileage Price\n",
"Mileage \n",
"(0, 10000] 5588.629630 24096.714451\n",
"(10000, 20000] 15898.496183 21955.979607\n",
"(20000, 30000] 24114.407104 20278.606252\n",
"(30000, 40000] 33610.338710 19463.670267\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"\n",
"df1 = df[['Mileage','Price']]\n",
"bins = np.arange(0,50000,10000)\n",
"groups = df1.groupby(pd.cut(df1['Mileage'],bins)).mean()\n",
"\n",
"print(groups.head())\n",
"groups['Price'].plot.line()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can use pandas to split up this matrix into the feature vectors we're interested in, and the value we're trying to predict.\n",
"\n",
"Note how we are avoiding the make and model; regressions don't work well with ordinal values, unless you can convert them into some numerical order that makes sense somehow.\n",
"\n",
"Let's scale our feature data into the same range so we can easily compare the coefficients we end up with."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Mileage Cylinder Doors\n",
"0 -1.417485 0.527410 0.556279\n",
"1 -1.305902 0.527410 0.556279\n",
"2 -0.810128 0.527410 0.556279\n",
"3 -0.426058 0.527410 0.556279\n",
"4 0.000008 0.527410 0.556279\n",
"5 0.293493 0.527410 0.556279\n",
"6 0.335001 0.527410 0.556279\n",
"7 0.382369 0.527410 0.556279\n",
"8 0.511409 0.527410 0.556279\n",
"9 0.914768 0.527410 0.556279\n",
"10 -1.171368 0.527410 0.556279\n",
"11 -0.581834 0.527410 0.556279\n",
"12 -0.390532 0.527410 0.556279\n",
"13 -0.003899 0.527410 0.556279\n",
"14 0.430591 0.527410 0.556279\n",
"15 0.480156 0.527410 0.556279\n",
"16 0.509822 0.527410 0.556279\n",
"17 0.757160 0.527410 0.556279\n",
"18 1.594886 0.527410 0.556279\n",
"19 1.810849 0.527410 0.556279\n",
"20 -1.326046 0.527410 0.556279\n",
"21 -1.129860 0.527410 0.556279\n",
"22 -0.667658 0.527410 0.556279\n",
"23 -0.405792 0.527410 0.556279\n",
"24 -0.112796 0.527410 0.556279\n",
"25 -0.044552 0.527410 0.556279\n",
"26 0.190700 0.527410 0.556279\n",
"27 0.337442 0.527410 0.556279\n",
"28 0.566102 0.527410 0.556279\n",
"29 0.660837 0.527410 0.556279\n",
".. ... ... ...\n",
"774 -0.161262 -0.914896 0.556279\n",
"775 -0.089234 -0.914896 0.556279\n",
"776 -0.040523 -0.914896 0.556279\n",
"777 0.002572 -0.914896 0.556279\n",
"778 0.236603 -0.914896 0.556279\n",
"779 0.249666 -0.914896 0.556279\n",
"780 0.357220 -0.914896 0.556279\n",
"781 0.365521 -0.914896 0.556279\n",
"782 0.434131 -0.914896 0.556279\n",
"783 0.517269 -0.914896 0.556279\n",
"784 0.589908 -0.914896 0.556279\n",
"785 0.599186 -0.914896 0.556279\n",
"786 0.793052 -0.914896 0.556279\n",
"787 1.033554 -0.914896 0.556279\n",
"788 1.045762 -0.914896 0.556279\n",
"789 1.205567 -0.914896 0.556279\n",
"790 1.541414 -0.914896 0.556279\n",
"791 1.561070 -0.914896 0.556279\n",
"792 1.725026 -0.914896 0.556279\n",
"793 1.851502 -0.914896 0.556279\n",
"794 -1.709871 0.527410 0.556279\n",
"795 -1.474375 0.527410 0.556279\n",
"796 -1.187849 0.527410 0.556279\n",
"797 -1.079929 0.527410 0.556279\n",
"798 -0.682430 0.527410 0.556279\n",
"799 -0.439853 0.527410 0.556279\n",
"800 -0.089966 0.527410 0.556279\n",
"801 0.079605 0.527410 0.556279\n",
"802 0.750446 0.527410 0.556279\n",
"803 1.932565 0.527410 0.556279\n",
"\n",
"[804 rows x 3 columns]\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/nikolas/Desktop/venv/lib/python3.6/site-packages/ipykernel_launcher.py:8: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
" \n",
"/home/nikolas/Desktop/venv/lib/python3.6/site-packages/sklearn/utils/validation.py:595: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
" warnings.warn(msg, DataConversionWarning)\n",
"/home/nikolas/Desktop/venv/lib/python3.6/site-packages/sklearn/utils/validation.py:595: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
" warnings.warn(msg, DataConversionWarning)\n",
"/home/nikolas/Desktop/venv/lib/python3.6/site-packages/ipykernel_launcher.py:8: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
" \n",
"/home/nikolas/Desktop/venv/lib/python3.6/site-packages/pandas/core/indexing.py:543: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
" self.obj[item] = s\n"
]
},
{
"data": {
"text/html": [
"\n",
"OLS Regression Results\n",
"\n",
" Dep. Variable: | Price | R-squared (uncentered): | 0.064 | \n",
"
\n",
"\n",
" Model: | OLS | Adj. R-squared (uncentered): | 0.060 | \n",
"
\n",
"\n",
" Method: | Least Squares | F-statistic: | 18.11 | \n",
"
\n",
"\n",
" Date: | Sun, 01 Sep 2019 | Prob (F-statistic): | 2.23e-11 | \n",
"
\n",
"\n",
" Time: | 03:30:21 | Log-Likelihood: | -9207.1 | \n",
"
\n",
"\n",
" No. Observations: | 804 | AIC: | 1.842e+04 | \n",
"
\n",
"\n",
" Df Residuals: | 801 | BIC: | 1.843e+04 | \n",
"
\n",
"\n",
" Df Model: | 3 | | | \n",
"
\n",
"\n",
" Covariance Type: | nonrobust | | | \n",
"
\n",
"
\n",
"\n",
"\n",
" | coef | std err | t | P>|t| | [0.025 | 0.975] | \n",
"
\n",
"\n",
" Mileage | -1272.3412 | 804.623 | -1.581 | 0.114 | -2851.759 | 307.077 | \n",
"
\n",
"\n",
" Cylinder | 5587.4472 | 804.509 | 6.945 | 0.000 | 4008.252 | 7166.642 | \n",
"
\n",
"\n",
" Doors | -1404.5513 | 804.275 | -1.746 | 0.081 | -2983.288 | 174.185 | \n",
"
\n",
"
\n",
"\n",
"\n",
" Omnibus: | 157.913 | Durbin-Watson: | 0.008 | \n",
"
\n",
"\n",
" Prob(Omnibus): | 0.000 | Jarque-Bera (JB): | 257.529 | \n",
"
\n",
"\n",
" Skew: | 1.278 | Prob(JB): | 1.20e-56 | \n",
"
\n",
"\n",
" Kurtosis: | 4.074 | Cond. No. | 1.03 | \n",
"
\n",
"
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
],
"text/plain": [
"\n",
"\"\"\"\n",
" OLS Regression Results \n",
"=======================================================================================\n",
"Dep. Variable: Price R-squared (uncentered): 0.064\n",
"Model: OLS Adj. R-squared (uncentered): 0.060\n",
"Method: Least Squares F-statistic: 18.11\n",
"Date: Sun, 01 Sep 2019 Prob (F-statistic): 2.23e-11\n",
"Time: 03:30:21 Log-Likelihood: -9207.1\n",
"No. Observations: 804 AIC: 1.842e+04\n",
"Df Residuals: 801 BIC: 1.843e+04\n",
"Df Model: 3 \n",
"Covariance Type: nonrobust \n",
"==============================================================================\n",
" coef std err t P>|t| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"Mileage -1272.3412 804.623 -1.581 0.114 -2851.759 307.077\n",
"Cylinder 5587.4472 804.509 6.945 0.000 4008.252 7166.642\n",
"Doors -1404.5513 804.275 -1.746 0.081 -2983.288 174.185\n",
"==============================================================================\n",
"Omnibus: 157.913 Durbin-Watson: 0.008\n",
"Prob(Omnibus): 0.000 Jarque-Bera (JB): 257.529\n",
"Skew: 1.278 Prob(JB): 1.20e-56\n",
"Kurtosis: 4.074 Cond. No. 1.03\n",
"==============================================================================\n",
"\n",
"Warnings:\n",
"[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
"\"\"\""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import statsmodels.api as sm\n",
"from sklearn.preprocessing import StandardScaler\n",
"scale = StandardScaler()\n",
"\n",
"X = df[['Mileage', 'Cylinder', 'Doors']]\n",
"y = df['Price']\n",
"\n",
"X[['Mileage', 'Cylinder', 'Doors']] = scale.fit_transform(X[['Mileage', 'Cylinder', 'Doors']].as_matrix())\n",
"\n",
"print (X)\n",
"\n",
"est = sm.OLS(y, X).fit()\n",
"\n",
"est.summary()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The table of coefficients above gives us the values to plug into an equation of form:\n",
" B0 + B1 * Mileage + B2 * cylinders + B3 * doors\n",
" \n",
"In this example, it's pretty clear that the number of cylinders is more important than anything based on the coefficients.\n",
"\n",
"Could we have figured that out earlier?"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Doors\n",
"2 23807.135520\n",
"4 20580.670749\n",
"Name: Price, dtype: float64"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y.groupby(df.Doors).mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Surprisingly, more doors does not mean a higher price! (Maybe it implies a sport car in some cases?) So it's not surprising that it's pretty useless as a predictor here. This is a very small data set however, so we can't really read much meaning into it."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[0.02051781 1.96971667 0.55627894]]\n",
"[10198.25991671]\n"
]
}
],
"source": [
"scaled = scale.transform([[20000, 8, 4]])\n",
"print(scaled)\n",
"predicted = est.predict(scaled[0])\n",
"print(predicted)"
]
}
],
"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.8"
}
},
"nbformat": 4,
"nbformat_minor": 1
}