{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Solution - Multidimensional Linear Regression\n",
"\n",
""
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"## Goals\n",
"\n",
"After completing this notebook, you will be able to:\n",
"1. Read in a fixed width data set and assign column names\n",
"2. Clean missing data from a data set\n",
"3. Construct a set of linear regression model usings `scikit-learn`\n",
"4. Evaluate the quality of fit for a set of models using adjusted $R^2$ and by comparing true and predicted values\n",
"5. Explain why that model is the best fit for this data"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 0. Our imports"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"\n",
"from IPython.display import HTML\n",
"\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.linear_model import LinearRegression\n",
"import sklearn.metrics as metrics\n",
"\n",
"%matplotlib inline"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Working with example data \n",
"\n",
"We are going to work with some data generated by U.N.E.S.C.O. (United Nations Education, Scientific, and Cultural Organization) and data they collected relating to poverty and inequality in the world. There are two files you need to do the work:\n",
"\n",
"- `unesco.dat` which is the data file itself\n",
"- `unesco.txt` which describes the data columns as **fixed width column** data. That is, this file describes the columns of the data for each category. For example, the data in columns 1-6 of `unesco.dat` contain the \"live birth rates per 1,000 population\".\n",
"\n",
"[https://raw.githubusercontent.com/dannycab/MSU_REU_ML_course/main/notebooks/day-3/unesco.dat](https://raw.githubusercontent.com/dannycab/MSU_REU_ML_course/main/notebooks/day-3/unesco.dat)\n",
"\n",
"[https://raw.githubusercontent.com/dannycab/MSU_REU_ML_course/main/notebooks/day-3/unesco.txt](https://raw.githubusercontent.com/dannycab/MSU_REU_ML_course/main/notebooks/day-3/unesco.txt)\n",
"\n",
"Conveniently there is a fixed width column pandas data reader called `read_fwf` ([Documentation](https://pandas.pydata.org/docs/reference/api/pandas.read_fwf.html)). You will need to specific column names also. No column headers appear in this data file, so look at the `unesco.txt` file and give them short but useful names.\n",
"\n",
"✎ Do This - Read in the data into a DataFrame and print the `head()`."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"## your code here"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
birth rate
\n",
"
death rate
\n",
"
infant mortality
\n",
"
male LE
\n",
"
female LE
\n",
"
GNP
\n",
"
country group
\n",
"
country
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
24.7
\n",
"
5.7
\n",
"
30.8
\n",
"
69.6
\n",
"
75.5
\n",
"
600
\n",
"
1
\n",
"
Albania
\n",
"
\n",
"
\n",
"
1
\n",
"
12.5
\n",
"
11.9
\n",
"
14.4
\n",
"
68.3
\n",
"
74.7
\n",
"
2250
\n",
"
1
\n",
"
Bulgaria
\n",
"
\n",
"
\n",
"
2
\n",
"
13.4
\n",
"
11.7
\n",
"
11.3
\n",
"
71.8
\n",
"
77.7
\n",
"
2980
\n",
"
1
\n",
"
Czechoslovakia
\n",
"
\n",
"
\n",
"
3
\n",
"
12.0
\n",
"
12.4
\n",
"
7.6
\n",
"
69.8
\n",
"
75.9
\n",
"
*
\n",
"
1
\n",
"
Former_E._Germany
\n",
"
\n",
"
\n",
"
4
\n",
"
11.6
\n",
"
13.4
\n",
"
14.8
\n",
"
65.4
\n",
"
73.8
\n",
"
2780
\n",
"
1
\n",
"
Hungary
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" birth rate death rate infant mortality male LE female LE GNP \\\n",
"0 24.7 5.7 30.8 69.6 75.5 600 \n",
"1 12.5 11.9 14.4 68.3 74.7 2250 \n",
"2 13.4 11.7 11.3 71.8 77.7 2980 \n",
"3 12.0 12.4 7.6 69.8 75.9 * \n",
"4 11.6 13.4 14.8 65.4 73.8 2780 \n",
"\n",
" country group country \n",
"0 1 Albania \n",
"1 1 Bulgaria \n",
"2 1 Czechoslovakia \n",
"3 1 Former_E._Germany \n",
"4 1 Hungary "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"### ANSWER ###\n",
"\n",
"poverty_df = pd.read_fwf('https://raw.githubusercontent.com/dannycab/MSU_REU_ML_course/main/notebooks/day-3/unesco.dat', \n",
" names = ['birth rate',\n",
" 'death rate',\n",
" 'infant mortality',\n",
" 'male LE',\n",
" 'female LE',\n",
" 'GNP',\n",
" 'country group',\n",
" 'country'])\n",
"poverty_df.head()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.1 Type of the data\n",
"\n",
"Now look at the `.dtypes` of your DataFrame and describe to me anything unusual. Can you explain why? Please write below. Don't skimp and look ahead, think about it and answer! We'll all wait ⏲"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"✎ Answer here"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.2 Handling missing data - Imputation\n",
"\n",
"Let's face it, sometimes data is bad. Values are not recorded, or are mis-recorded, or are so far out of expectation that you expect there is something wrong. On the other hand, just **changing** the data seems like cheating. We have to work with what we have, and if we have to make changes it would be good to do that programmatically so that it is recorded for others to see. \n",
"\n",
"The process of imputation is the statistical replacement of missing/bad data with substitute values. We have that problem here. In the **GNP** column some of the values are set to \" \\* \" indicating missing data. When pandas read in the column the only type that makes sense for both characters and numbers is a string. Therefore it set the type to `object` instead of the expected `int64` or `float64`.\n",
"\n",
"#### Using numpy.nan\n",
"\n",
"For better or worse, pandas assumes that \"bad values\" are marked in the data as numpy **NaN**. NaN is short for \"Not a Number\". If they are so marked we have access to some of the imputation methods, replacing NaN with various values (mean, median, specific value, etc.). \n",
"\n",
"There are two ways to do this:\n",
"1. you can do a `.replace` on the column using a dictionary of {value to replace : new value, ...} pairs. Remember to save the result. This leaves you with changing the column type using `.astype` but you will have convert to a float, perhaps `\"float64\"` would be good. You cannot convert a `np.nan` to an integer but you can to a float.\n",
"2. you can convert the everything that can be converted to a number using `.to_numeric`. Conveniently if it can't do the conversion on a particular value it is set to a `np.nan`\n",
"\n",
"✎ Do This - Convert the missing entries in the GNP column to `np.nan` and show the head of your modified DataFrame. Also print the `dtypes` to show that the column has change type."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"## your code here"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/5_/9z7lhk0s2y95hvkzs6lzdvvc0000gn/T/ipykernel_18113/3843585704.py:3: FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.\n",
"The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.\n",
"\n",
"For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.\n",
"\n",
"\n",
" poverty_df['GNP'].replace(to_replace='*', value=np.nan, inplace=True)\n"
]
},
{
"data": {
"text/plain": [
"birth rate float64\n",
"death rate float64\n",
"infant mortality float64\n",
"male LE float64\n",
"female LE float64\n",
"GNP float64\n",
"country group int64\n",
"country object\n",
"dtype: object"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"### ANSWER ###\n",
"\n",
"poverty_df['GNP'].replace(to_replace='*', value=np.nan, inplace=True)\n",
"poverty_df['GNP'] = poverty_df['GNP'].astype('float64')\n",
"\n",
"poverty_df.dtypes"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Changing numpy.nan\n",
"\n",
"Now that \"bad values\" are marked as `numpy.nan`, we can use the DataFrame method `fillna` to change those values. For example:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 600.0\n",
"1 2250.0\n",
"2 2980.0\n",
"3 0.0\n",
"4 2780.0\n",
" ... \n",
"92 220.0\n",
"93 110.0\n",
"94 220.0\n",
"95 420.0\n",
"96 640.0\n",
"Name: GNP, Length: 97, dtype: float64"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## Uncomment to run\n",
"\n",
"poverty_df[\"GNP\"].fillna(0)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"returns a new DataFrame where all the `np.nan` in the GNP column are replaced with 0. You can do other things are well, for example:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
birth rate
\n",
"
death rate
\n",
"
infant mortality
\n",
"
male LE
\n",
"
female LE
\n",
"
GNP
\n",
"
country group
\n",
"
country
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
24.7
\n",
"
5.7
\n",
"
30.8
\n",
"
69.6
\n",
"
75.5
\n",
"
600.000000
\n",
"
1
\n",
"
Albania
\n",
"
\n",
"
\n",
"
1
\n",
"
12.5
\n",
"
11.9
\n",
"
14.4
\n",
"
68.3
\n",
"
74.7
\n",
"
2250.000000
\n",
"
1
\n",
"
Bulgaria
\n",
"
\n",
"
\n",
"
2
\n",
"
13.4
\n",
"
11.7
\n",
"
11.3
\n",
"
71.8
\n",
"
77.7
\n",
"
2980.000000
\n",
"
1
\n",
"
Czechoslovakia
\n",
"
\n",
"
\n",
"
3
\n",
"
12.0
\n",
"
12.4
\n",
"
7.6
\n",
"
69.8
\n",
"
75.9
\n",
"
5741.252747
\n",
"
1
\n",
"
Former_E._Germany
\n",
"
\n",
"
\n",
"
4
\n",
"
11.6
\n",
"
13.4
\n",
"
14.8
\n",
"
65.4
\n",
"
73.8
\n",
"
2780.000000
\n",
"
1
\n",
"
Hungary
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
92
\n",
"
52.2
\n",
"
15.6
\n",
"
103.0
\n",
"
49.9
\n",
"
52.7
\n",
"
220.000000
\n",
"
6
\n",
"
Uganda
\n",
"
\n",
"
\n",
"
93
\n",
"
50.5
\n",
"
14.0
\n",
"
106.0
\n",
"
51.3
\n",
"
54.7
\n",
"
110.000000
\n",
"
6
\n",
"
Tanzania
\n",
"
\n",
"
\n",
"
94
\n",
"
45.6
\n",
"
14.2
\n",
"
83.0
\n",
"
50.3
\n",
"
53.7
\n",
"
220.000000
\n",
"
6
\n",
"
Zaire
\n",
"
\n",
"
\n",
"
95
\n",
"
51.1
\n",
"
13.7
\n",
"
80.0
\n",
"
50.4
\n",
"
52.5
\n",
"
420.000000
\n",
"
6
\n",
"
Zambia
\n",
"
\n",
"
\n",
"
96
\n",
"
41.7
\n",
"
10.3
\n",
"
66.0
\n",
"
56.5
\n",
"
60.1
\n",
"
640.000000
\n",
"
6
\n",
"
Zimbabwe
\n",
"
\n",
" \n",
"
\n",
"
97 rows × 8 columns
\n",
"
"
],
"text/plain": [
" birth rate death rate infant mortality male LE female LE GNP \\\n",
"0 24.7 5.7 30.8 69.6 75.5 600.000000 \n",
"1 12.5 11.9 14.4 68.3 74.7 2250.000000 \n",
"2 13.4 11.7 11.3 71.8 77.7 2980.000000 \n",
"3 12.0 12.4 7.6 69.8 75.9 5741.252747 \n",
"4 11.6 13.4 14.8 65.4 73.8 2780.000000 \n",
".. ... ... ... ... ... ... \n",
"92 52.2 15.6 103.0 49.9 52.7 220.000000 \n",
"93 50.5 14.0 106.0 51.3 54.7 110.000000 \n",
"94 45.6 14.2 83.0 50.3 53.7 220.000000 \n",
"95 51.1 13.7 80.0 50.4 52.5 420.000000 \n",
"96 41.7 10.3 66.0 56.5 60.1 640.000000 \n",
"\n",
" country group country \n",
"0 1 Albania \n",
"1 1 Bulgaria \n",
"2 1 Czechoslovakia \n",
"3 1 Former_E._Germany \n",
"4 1 Hungary \n",
".. ... ... \n",
"92 6 Uganda \n",
"93 6 Tanzania \n",
"94 6 Zaire \n",
"95 6 Zambia \n",
"96 6 Zimbabwe \n",
"\n",
"[97 rows x 8 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## Uncomment to run\n",
"poverty_df[\"GNP\"].fillna(poverty_df[\"GNP\"].mean() )\n",
"poverty_df.fillna({\"GNP\": poverty_df[\"GNP\"].mean() })"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"The first version changes any `np.nan` in the `GNP` column to be the mean of the column. The second takes a dictionary where the the key of the dictionary is the column to change and the value is what to replace the `np.nan` with. Note you could replace with other values like: median, min, max, or some other fixed value.\n",
"\n",
"Remember that all of these examples return either a new Series (when working with just a column) or a DataFrame (if working with the entire element). Nothing is changed in the original unless you assign the result or use `inplace=True` in the call.\n",
"\n",
"Finally, if you decide that the right thing to do is **remove** any row with a `np.nan` value, we can use the `.dropna` method of DataFrames as shown below:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"97 91\n"
]
}
],
"source": [
"## Uncomment to run\n",
"len(poverty_df)\n",
"poverty_df_dropped = poverty_df.dropna()\n",
"print(len(poverty_df), len(poverty_df_dropped))"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"#### What do you think\n",
"\n",
"In the cell below, discuss with your group what you think is the best thing to do with the \"bad values\" in the DataFrame given the discussion above. Write your result below."
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"✎ Answer here"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Multiple Regression\n",
"\n",
"In the past, we have limited ourselves to either a single feature or, in the pre-class, doing polynomial regression with other features we created. However, we can just as easily use all, or some combination of all, the features available to make an ordinary least squares (OLS) model. The question is, is it a good idea to just use all the possible features available to make a model?\n",
"\n",
"Please discuss that idea with your group and record your answer below."
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"✎ Answer here"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.1 Infant Mortality model\n",
"\n",
"Using the U.N.E.S.C.O. data, we can make a model of \"Infant Mortality\" as the dependent variable against all the other available features. As a hint, an easy way to do this is the make the model with \"Infant Mortality\" as the prediction (the dependent variable) and then the entire DataFrame where \"Infant Mortality is dropped as the data (the independent variables). **You should also drop the \"Country\" column as unique strings don't play well in basic linear models.**\n",
"\n",
"✎ Do This - Make an linear model (did you split your data?) that predicts \"Infant Mortality\" using the other variables (dropping the \"Country\" column) and print the `.r2_score` of that process. "
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# your code here"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"r2: 0.9401\n"
]
}
],
"source": [
"### ANSWER ###\n",
"\n",
"X = poverty_df_dropped.drop(columns = ['infant mortality', 'country'])\n",
"y = poverty_df_dropped['infant mortality']\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"linear = LinearRegression()\n",
"\n",
"linear.fit(X_train,y_train)\n",
"\n",
"y_pred = linear.predict(X_test)\n",
"\n",
"r2=metrics.r2_score(y_test, y_pred)\n",
"print('r2: ', round(r2,4))"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.2 Visualizing your fit\n",
"\n",
"We can check how well we are justified in using this model, by comparing the actual and predicted values. Plot the predicted values against the real values. In a perfect model, they would form a line with a slope of 1.\n",
"\n",
"\n",
"✎ Do This - Make the plots mentioned above. How well does your model fit your data? What can you conclude from this graph?"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"### your code here"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"### ANSWER ###\n",
"\n",
"plt.figure(figsize=(5,5))\n",
"plt.scatter(y_test,y_pred)\n",
"plt.xlabel('True Values')\n",
"plt.ylabel('Predicted Values')\n",
"plt.plot([-50,200],[-50,200], color='k', lw=3)\n",
"plt.show()\n",
"\n",
"# res = y_test-y_pred\n",
"\n",
"# plt.figure(figsize=(5,5))\n",
"# plt.scatter(X_test['male LE'], res)\n",
"# plt.xlabel('x')\n",
"# plt.ylabel('Residuals')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.3 A \"reduced\" model using only the \"significant\" features\n",
"\n",
"Modeling data is as much a craft as it is a science. We often seek the simplest models that explain or data well because they are typically more interpretable, easier to explain, and provide the information on the main influences of the system we are studying. There are reasons we might want a more complex model to capture the details and the nuance of the system. But for the U.N.E.S.C.O. data that we have, we are likely able to capture most of the system using a smaller number of features. \n",
"\n",
"✎ Do This - use `pandas` built=in correlation function (`.corr()`) to find the top 3 variables that correlate strongly with \"Infant Mortality\""
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"# your code here"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
birth rate
\n",
"
death rate
\n",
"
infant mortality
\n",
"
male LE
\n",
"
female LE
\n",
"
GNP
\n",
"
country group
\n",
"
\n",
" \n",
" \n",
"
\n",
"
birth rate
\n",
"
1.000000
\n",
"
0.505626
\n",
"
0.856537
\n",
"
-0.866200
\n",
"
-0.894440
\n",
"
-0.629059
\n",
"
0.710212
\n",
"
\n",
"
\n",
"
death rate
\n",
"
0.505626
\n",
"
1.000000
\n",
"
0.677741
\n",
"
-0.754032
\n",
"
-0.714751
\n",
"
-0.302754
\n",
"
0.344168
\n",
"
\n",
"
\n",
"
infant mortality
\n",
"
0.856537
\n",
"
0.677741
\n",
"
1.000000
\n",
"
-0.935238
\n",
"
-0.954225
\n",
"
-0.601647
\n",
"
0.631913
\n",
"
\n",
"
\n",
"
male LE
\n",
"
-0.866200
\n",
"
-0.754032
\n",
"
-0.935238
\n",
"
1.000000
\n",
"
0.981957
\n",
"
0.642963
\n",
"
-0.642059
\n",
"
\n",
"
\n",
"
female LE
\n",
"
-0.894440
\n",
"
-0.714751
\n",
"
-0.954225
\n",
"
0.981957
\n",
"
1.000000
\n",
"
0.650040
\n",
"
-0.699097
\n",
"
\n",
"
\n",
"
GNP
\n",
"
-0.629059
\n",
"
-0.302754
\n",
"
-0.601647
\n",
"
0.642963
\n",
"
0.650040
\n",
"
1.000000
\n",
"
-0.283399
\n",
"
\n",
"
\n",
"
country group
\n",
"
0.710212
\n",
"
0.344168
\n",
"
0.631913
\n",
"
-0.642059
\n",
"
-0.699097
\n",
"
-0.283399
\n",
"
1.000000
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" birth rate death rate infant mortality male LE \\\n",
"birth rate 1.000000 0.505626 0.856537 -0.866200 \n",
"death rate 0.505626 1.000000 0.677741 -0.754032 \n",
"infant mortality 0.856537 0.677741 1.000000 -0.935238 \n",
"male LE -0.866200 -0.754032 -0.935238 1.000000 \n",
"female LE -0.894440 -0.714751 -0.954225 0.981957 \n",
"GNP -0.629059 -0.302754 -0.601647 0.642963 \n",
"country group 0.710212 0.344168 0.631913 -0.642059 \n",
"\n",
" female LE GNP country group \n",
"birth rate -0.894440 -0.629059 0.710212 \n",
"death rate -0.714751 -0.302754 0.344168 \n",
"infant mortality -0.954225 -0.601647 0.631913 \n",
"male LE 0.981957 0.642963 -0.642059 \n",
"female LE 1.000000 0.650040 -0.699097 \n",
"GNP 0.650040 1.000000 -0.283399 \n",
"country group -0.699097 -0.283399 1.000000 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"### ANSWER ###\n",
"\n",
"# Drop the 'country' column\n",
"poverty_df_dropped_no_country = poverty_df_dropped.drop('country', axis=1)\n",
"\n",
"# Now you can calculate correlation\n",
"poverty_df_dropped_no_country.corr()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"✎ Do This - Redo the model with only the top three features you found above vs \"Infant Mortality\". Print the `.r2_score`, how does it compare to the full model?"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"### your code here"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"r2: 0.8723\n"
]
}
],
"source": [
"### ANSWER ###\n",
"\n",
"X1 = poverty_df_dropped.drop(columns = ['infant mortality', 'country', 'country group', 'GNP', 'death rate'])\n",
"y1 = poverty_df_dropped['infant mortality']\n",
"\n",
"X_train1, X_test1, y_train1, y_test1 = train_test_split(X1, y1, test_size=0.2)\n",
"\n",
"linear = LinearRegression()\n",
"\n",
"linear.fit(X_train1,y_train1)\n",
"\n",
"y_pred1 = linear.predict(X_test1)\n",
"\n",
"r2=metrics.r2_score(y_test1, y_pred1)\n",
"print('r2: ', round(r2,4))"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"✎ Do This - Make the same comparison plot mentioned above. How well does your model fit your data? What can you conclude from this graph? Can you compare it to the previous fit?"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"### your code here"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"### ANSWER ###\n",
"\n",
"plt.figure(figsize=(5,5))\n",
"plt.scatter(y_test,y_pred)\n",
"plt.scatter(y_test,y_pred1)\n",
"plt.xlabel('True Values')\n",
"plt.ylabel('Predicted Values')\n",
"plt.legend(['Full Model', 'Reduced Model'])\n",
"\n",
"plt.plot([-50,200],[-50,200], color='k', lw=3)\n",
"plt.show()\n",
"\n",
"# res = y_test-y_pred\n",
"\n",
"# plt.figure(figsize=(5,5))\n",
"# plt.scatter(X_test['male LE'], res)\n",
"# plt.xlabel('x')\n",
"# plt.ylabel('Residuals')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Review this model and the one you constructed earlier in the notebook. Report how the Adjusted R-squared value changed from using only the top three vs using all the available features. How well does this reduced model appear to fit your data?"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"✎ Answer here"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "ml-short-course",
"language": "python",
"name": "ml-short-course"
},
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}