{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Build and Evaluate a Linear Risk model\n", "\n", "Welcome to the first assignment in Course 2!\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Outline\n", "\n", "- [1. Import Packages](#1)\n", "- [2. Load Data](#2)\n", "- [3. Explore the Dataset](#3)\n", "- [4. Mean-Normalize the Data](#4)\n", " - [Exercise 1](#Ex-1)\n", "- [5. Build the Model](#Ex-2)\n", " - [Exercise 2](#Ex-2)\n", "- [6. Evaluate the Model Using the C-Index](#6)\n", " - [Exercise 3](#Ex-3)\n", "- [7. Evaluate the Model on the Test Set](#7)\n", "- [8. Improve the Model](#8)\n", " - [Exercise 4](#Ex-4)\n", "- [9. Evalute the Improved Model](#9)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "DU20mFeib5Kd" }, "source": [ "## Overview of the Assignment\n", "\n", "In this assignment, you'll build a risk score model for retinopathy in diabetes patients using logistic regression.\n", "\n", "As we develop the model, we will learn about the following topics:\n", "\n", "- Data preprocessing\n", " - Log transformations\n", " - Standardization\n", "- Basic Risk Models\n", " - Logistic Regression\n", " - C-index\n", " - Interactions Terms\n", " \n", "### Diabetic Retinopathy\n", "Retinopathy is an eye condition that causes changes to the blood vessels in the part of the eye called the retina.\n", "This often leads to vision changes or blindness.\n", "Diabetic patients are known to be at high risk for retinopathy. \n", " \n", "### Logistic Regression \n", "Logistic regression is an appropriate analysis to use for predicting the probability of a binary outcome. In our case, this would be the probability of having or not having diabetic retinopathy.\n", "Logistic Regression is one of the most commonly used algorithms for binary classification. It is used to find the best fitting model to describe the relationship between a set of features (also referred to as input, independent, predictor, or explanatory variables) and a binary outcome label (also referred to as an output, dependent, or response variable). Logistic regression has the property that the output prediction is always in the range $[0,1]$. Sometimes this output is used to represent a probability from 0%-100%, but for straight binary classification, the output is converted to either $0$ or $1$ depending on whether it is below or above a certain threshold, usually $0.5$.\n", "\n", "It may be confusing that the term regression appears in the name even though logistic regression is actually a classification algorithm, but that's just a name it was given for historical reasons." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "pzuRKOt1cU8B" }, "source": [ "<a name='1'></a>\n", "## 1. Import Packages\n", "\n", "We'll first import all the packages that we need for this assignment. \n", "\n", "- `numpy` is the fundamental package for scientific computing in python.\n", "- `pandas` is what we'll use to manipulate our data.\n", "- `matplotlib` is a plotting library." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": {}, "colab_type": "code", "id": "qHjB-KVmwmtR" }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3J7NXuQadLnY" }, "source": [ "<a name='2'></a>\n", "## 2. Load Data\n", "\n", "First we will load in the dataset that we will use for training and testing our model.\n", "\n", "- Run the next cell to load the data that is stored in csv files.\n", "- There is a function `load_data` which randomly generates data, but for consistency, please use the data from the csv files." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": {}, "colab_type": "code", "id": "FN5Y5hU5yXnE" }, "outputs": [], "source": [ "from utils import load_data\n", "\n", "# This function creates randomly generated data\n", "# X, y = load_data(6000)\n", "\n", "# For stability, load data from files that were generated using the load_data\n", "X = pd.read_csv('X_data.csv',index_col=0)\n", "y_df = pd.read_csv('y_data.csv',index_col=0)\n", "y = y_df['y']" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "5yF06E6sZMmD" }, "source": [ "`X` and `y` are Pandas DataFrames that hold the data for 6,000 diabetic patients. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a name='3'></a>\n", "## 3. Explore the Dataset\n", "\n", "The features (`X`) include the following fields:\n", "* Age: (years)\n", "* Systolic_BP: Systolic blood pressure (mmHg)\n", "* Diastolic_BP: Diastolic blood pressure (mmHg)\n", "* Cholesterol: (mg/DL)\n", " \n", "We can use the `head()` method to display the first few records of each. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 204 }, "colab_type": "code", "id": "qp1SgI7PT024", "outputId": "3ff454c2-65fb-4fea-858a-647c7a5d750d" }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Age</th>\n", " <th>Systolic_BP</th>\n", " <th>Diastolic_BP</th>\n", " <th>Cholesterol</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>77.196340</td>\n", " <td>85.288742</td>\n", " <td>80.021878</td>\n", " <td>79.957109</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>63.529850</td>\n", " <td>99.379736</td>\n", " <td>84.852361</td>\n", " <td>110.382411</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>69.003986</td>\n", " <td>111.349455</td>\n", " <td>109.850616</td>\n", " <td>100.828246</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>82.638210</td>\n", " <td>95.056128</td>\n", " <td>79.666851</td>\n", " <td>87.066303</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>78.346286</td>\n", " <td>109.154591</td>\n", " <td>90.713220</td>\n", " <td>92.511770</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Age Systolic_BP Diastolic_BP Cholesterol\n", "0 77.196340 85.288742 80.021878 79.957109\n", "1 63.529850 99.379736 84.852361 110.382411\n", "2 69.003986 111.349455 109.850616 100.828246\n", "3 82.638210 95.056128 79.666851 87.066303\n", "4 78.346286 109.154591 90.713220 92.511770" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.head()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Q0o8DaDayXnM" }, "source": [ "The target (`y`) is an indicator of whether or not the patient developed retinopathy.\n", "\n", "* y = 1 : patient has retinopathy.\n", "* y = 0 : patient does not have retinopathy." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "colab_type": "code", "id": "2d6L8BHO3-QJ", "outputId": "1b58dfe9-178e-491d-e2cb-738b083a1db7" }, "outputs": [ { "data": { "text/plain": [ "0 1.0\n", "1 1.0\n", "2 1.0\n", "3 1.0\n", "4 1.0\n", "Name: y, dtype: float64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y.head()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "DAobb_-hFtAn" }, "source": [ "Before we build a model, let's take a closer look at the distribution of our training data. To do this, we will split the data into train and test sets using a 75/25 split.\n", "\n", "For this, we can use the built in function provided by sklearn library. See the documentation for [sklearn.model_selection.train_test_split](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html). " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": {}, "colab_type": "code", "id": "C9FxG6hDyXnQ" }, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": {}, "colab_type": "code", "id": "1fvqevMtFsHh" }, "outputs": [], "source": [ "X_train_raw, X_test_raw, y_train, y_test = train_test_split(X, y, train_size=0.75, random_state=0)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "nYgcS0vjdbpc" }, "source": [ "Plot the histograms of each column of `X_train` below: " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "colab_type": "code", "id": "EBckdYHyUudi", "outputId": "2e987230-a0eb-40d1-f3a6-ac943cbedf4d" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for col in X.columns:\n", " X_train_raw.loc[:, col].hist()\n", " plt.title(col)\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, the distributions have a generally bell shaped distribution, but with slight rightward skew.\n", "\n", "Many statistical models assume that the data is normally distributed, forming a symmetric Gaussian bell shape (with no skew) more like the example below." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEICAYAAABWJCMKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deZgU5dX38e+vexYW2QRUNhkUUMBdBOJKxAXc0IgGNUYT35hEzfKYxKCJRo3m0Sya5Ikx7lGM+4qA4L4rgiub4IAgIMqwyA4z3X3eP6rGNGMP0zBL9XSfz3X1NdVVd911qqunT9VdVXfJzHDOOVd4YlEH4JxzLhqeAJxzrkB5AnDOuQLlCcA55wqUJwDnnCtQngCcc65AeQJwdZJ0rqTXGqFeSbpL0ipJbzd0/U1BkknqHQ7/W9I1jbisdZJ2a6C6LpN0ezhcFq5HUUPUvR2xXCnp3iiWXeg8AURM0gJJG8N/7urXP6KOq4kcChwNdDezQTUnhonHJF1SY/xiSUObKMZGJ2mopFTa9l8s6SFJB6WXM7MdzGx+FnUtrmuZZvYHM/t/9Y09XOYCSUc1RF0Z6s7qs6mjDk8wtfAEkBtODP+5q18XRR1QE+kJLDCz9VspsxK4RFKb+i4sqj3cLH1mZjsAbYAhwEfAq5KGNfSCcvxzyKTJPptC4wkgh0m6WdKjae+vl/R82HTSQdJ4SRVhE8p4Sd3Tyr4k6RpJb4R7Tk9J6ijpP5LWSJoqqSytvEn6qaT5kpZL+pOkjN8PSXtKelbSSklzJJ2+lXXoKmlcWLZc0g/C8ecBtwPfCOO7qpYqZgNvAhfXUn+ppL9K+ix8/VVSaThtaLjH+GtJnwN3pY27RNIySUslnSzpOElzwzgvS6t/kKQ3JX0Zlv2HpJLa1jdtvhmSTkx7Xxx+rvtvbT4LLDazK8LP5/q0OtKbm46TNEvSWklLJP1SUmvgaaBr2h5z13AP+BFJ90paA5xby17x98PPcKmkX6Ytd4umrfSjDEljgV2Bp8LlXRKOHxJ+976U9IHSjtgk9ZL0chj7s0Cnuj7PLD6bv0laFH6335F0WDh+OHAZ8O0wvg/C8d+TNDuMYb6kH2YTQ94xM39F+AIWAEfVMq0VMBc4FzgMWE7QXALQETg1LNMGeBh4Im3el4ByYHegHTArrOsooAi4B7grrbwBLwI7EvxDzwX+XzjtXOC1cLg1sAj4XljP/mFc/WtZh1eAfwItgP2ACuDImvXWMu+5wGvhfKuAHcPxi4Gh4fDVwFvATkBn4A3g9+G0oUCC4IeiFGiZNu4KoBj4QRjTfeHnOADYCPQK6ziQYK+zCCgjSEg/r/G59Q6H/w1cEw5fAjyYVm4kML2W9RwKLM4w/kggBbTOsKylwGHhcAfggNrqAq4EqoCTCXb6Wobj7g2nl4V13x9u373Dz+SomuuVaRnU+A4D3YAVwHHh8o4O33cOp78J3BBuk8OBtdWx1OOz+Q7B/0QR8Avgc6BF2vrfW2P+4wn+NwQcAWyo/gwL6eVHALnhiXBPqfr1AwAz2wCcTfDPci/wEzNbHE5bYWaPmtkGM1sLXEvwRU53l5nNM7PVBHuG88zsOTNLECSMmnuj15vZSjP7FPgrcEaGWE8gaLa5y8wSZvYe8ChwWs2CknoAhwC/NrNNZvY+wZ7bd7flwwnnexb4dYbJZwFXm9kyM6sAriL4zKqlgN+Z2WYz2xiOqwKuNbMq4AGCPdC/mdlaM5tJkCz3DZf9jpm9Fa7rAuAWvv45Z3IvcJyktuH7s4Gx2a81AJ8R/EC1zzCtCugvqa2ZrTKzd+uo600ze8LMUmmfQ01Xmdl6M5sO3EXm7Z+N7wATzWxiuLxngWkEn8euwEHA5eE2eQV4ajuWscVnY2b3hv8TCTP7C0Fy2aO2mc1sQvi/YWb2MvAMwU5WQfEEkBtONrP2aa/bqieY2RRgPsGX/aHq8ZJaSbpF0sLwsP4VoL2keFq9X6QNb8zwfocacSxKG14IdM0Qa09gcHrCIvgR3iVD2a7AyjBBpdfbLUPZulwB/FjSzhmWsXArcVeY2aYa86wws2Q4XP1jmPGzkdRXQfPa5+Hn/AeyaLIws8+A14FTJbUHRgD/qWu+GroR7Jl/mWHaqQR72AvD5pRv1FHXojqm1yxT2/bPRk/gtBrfkUOBLmGdq2zL8z4LM1VShy0+m7AJbLak1eHy2rGV7SRphKS3wia/Lwk+y6yaovKJJ4AcJ+lCgr2ZzwiaFar9gmAPZ7CZtSU4lIYgUWyvHmnDu4bLrGkR8HKNhLWDmf04Q9nPgB215QncXYEl2xqYmX0EPAb8JsMyem4l7vp2d3szwUnHPuHnfBnZf8Z3E+wNn0awB76t630K8K5lOEluZlPNbCRB09cT/HfnoLb1zeZzqG37rydoaqxWM9nXrHsRMLbGd6S1mV1H0HTVITxfkb6sbfXVZxO2918CnA50MLP2wGr+u522iC88R/Qo8Gdg57D8ROr3v9MseQLIYZL6AtcQ/IicTXA1zH7h5DYEe6pfStoR+F0DLPJXCk4u9wB+BjyYocx4oK+ks8MTm8WSDpLUr2ZBM1tE0Cb/v5JaSNoHOI+geWR7XEVw7iG9SeR+4LeSOkvqRHCk0JCX/LUB1gDrJO0JZEp0tXkCOIDgs7wnmxkU6Cbpd8D/I0g4NcuUSDpLUruwGWsNQVMXBEcyHSW124Y4q10eHlkOIPicq7f/+wTNNztK2gX4eY35vgDS70+4FzhR0rGS4uG2Hyqpu5ktJGgOuipcj0OBE8nCVj6bNgTndSqAIklXAG3TZv0CKNN/L2ooIdipqgASkkYAx2QTQ77xBJAbqq+gqH49ruBSvXsJ2uU/MLOPCb7wY8M9mL8SnMxbTnASdFIDxPEk8A7BP/wE4I6aBcLmnGOA0QR7iJ/z35OsmZxBcJLxM+Bxgvb457YnODP7hKAdPX3v8RqCH5QPgenAu+G4hvJL4EyCE5W3kTkpZhS2tT8K9CI4etmarpLWAeuAqQQnYoea2TO1lD8bWBA2S/2IoBmu+kjpfmB+2PyyLc04LxNcOPA88Oe0ZY8FPiA42fsMX/8M/pcgCX8p6Zdh4h9J8H2tIDgi+BX//b05ExhMcInv76g7Odb12Uwm+P7PJWhO2sSWzVkPh39XSHo3/A7/lOCoaVUYz7g6YshLMvMHwrjgEkOCZo7yqGPJJ+HeaF8z+07UsThXU3O7IcS5ZiNsmjuPLa9Kci5neBOQc40gvJR3EfB0eKmjcznHm4Ccc65A+RGAc84VqGZ1DqBTp05WVlYWdRjOOdesvPPOO8vNrHPN8c0qAZSVlTFt2rSow3DOuWZFUsa7rb0JyDnnCpQnAOecK1CeAJxzrkB5AnDOuQLlCcA55wqUJwDnnCtQngCcc65AeQJwzrkC5QnAOecKVLO6E9i5XFc2ZsIW7xdcd3xEkThXN08Azm2F/6C7fOZNQM45V6A8ATjnXIHyBOCccwXKE4BzzhWorBKApOGS5kgqlzQmw/RSSQ+G06dIKgvHD5L0fvj6QNIpafMskDQ9nOad/DvnXBOr8yogSXHgJuBoYDEwVdI4M5uVVuw8YJWZ9ZY0Grge+DYwAxhoZglJXYAPJD1lZolwvm+a2fKGXCHnnHPZyeYIYBBQbmbzzawSeAAYWaPMSODucPgRYJgkmdmGtB/7FoA/gd4553JENvcBdAMWpb1fDAyurUy4t78a6AgslzQYuBPoCZydlhAMeEaSAbeY2a2ZFi7pfOB8gF133TWrlXIul/m9BS5XNPpJYDObYmYDgIOASyW1CCcdamYHACOACyUdXsv8t5rZQDMb2Lnz155p7JxzbjtlkwCWAD3S3ncPx2UsI6kIaAesSC9gZrOBdcBe4fsl4d9lwOMETU3OOeeaSDYJYCrQR1IvSSXAaGBcjTLjgHPC4VHAC2Zm4TxFAJJ6AnsCCyS1ltQmHN8aOIbghLFzzrkmUuc5gLBN/yJgMhAH7jSzmZKuBqaZ2TjgDmCspHJgJUGSADgUGCOpCkgBF5jZckm7AY9Lqo7hPjOb1NAr51xjq9me71xzklVncGY2EZhYY9wVacObgNMyzDcWGJth/Hxg320N1jnnXMPxO4Gdc65AeXfQztVDZ1bRVhtoQSVxUsy2nlT5v5VrJvyb6ty2MoOFb8BrNzK1xbNbTKqwtjyUHMr9yWEsNr9s2eU2TwDObYsV8+CJC2DRW9CqEzdUjWKedWUzxZRQxcnx1/lR/Cl+HH+KW5InQGoExLyl1eUmTwDOZWlvzYc7fgqWghF/gv2/w9+veHGLMhNTQ+jCCn5e9Cg/LnoKHjobvnUrlLSOKGrnaue7Js5l4bDYhzxQ8nsoaQXnPQuDzw+GM1hKR36d+AFXVn0X5kyEO4fDms+aOGLn6uYJwLk6HB77gDuL/8RC2yX48e/UO4u5xL+Tw+HMh2DlfLjvdKjc0OixOrctPAE4txVdWMFfi2+i3Lry7crLoc0u21ZBn6Nh1F3w+Qx46mfBCWTncoQnAOdqk6jkppK/UUySC6p+zloyN/nUqe8x8M3fwPSHYMq/GjZG5+rBE4BztXnudxwQK+fXVT/gE+tSv7oO+wXseQJM/g2DNbth4nOunjwBOJfJnEnw1j+5K3EsE1ND6l9fLAYn3wwdyvhj8S2UUln/Op2rJ78M1BWsWh/MUrURnv4VdO7HHxad1XALbNEWTriRnvecxAVF47gxMarh6nZuO/gRgHM1vfF/8OWncNwfG75bh92O4InkwfwoPo4yLW3Yup3bRp4AnEv35afw6g3Q/2TolfEhdfV2bdVZbKaYq4ruxh+T7aLkCcC5dM/8Nvh7zDWNtogKOnBD4jSOiH/IiNjbjbYc5+riCcC5ap+8ArOeDK7Yad+j7vL1MDZ5NLNSPfl10QOQTDTqspyrjScA5wAweP730LY7HPyTRl9akjh/SYyiLPYFfPhgoy/PuUz8KiDngINjM2Hx2/y26nvce/nzTbLM51MHMD1VRpvHr2LYg21IEgfSrkZyrpH5EYBzwE+LHudz68DDySOacKnir4lTKYt9wSnx15pwuc4FskoAkoZLmiOpXNKYDNNLJT0YTp8iqSwcP0jS++HrA0mnZFunc03lIH3EkNhsbkmcwGZKmnTZ1UcBF8WfIE6ySZftXJ0JQFIcuAkYAfQHzpDUv0ax84BVZtYbuBG4Phw/AxhoZvsBw4FbJBVlWadzTeInRY9TYW25P3lkBEv3owAXnWyOAAYB5WY238wqgQeAkTXKjATuDocfAYZJkpltMLPqSxxa8N+LnrOp07lGt78+5vD4dG5LHM8mSiOJofoo4MfxcYhUJDG4wpRNAugGLEp7vzgcl7FM+IO/GugIIGmwpJnAdOBH4fRs6iSc/3xJ0yRNq6ioyCJc57L3w6LxrLIduDd5dIRRiNsSx7N7bClHxD6MMA5XaBr9JLCZTTGzAcBBwKWSWmzj/Lea2UAzG9i5sz9k2zWcrizn6Ng0Hkh+kw1s09eywT2dGswX1p5z45MjjcMVlmwSwBIg/a6Y7uG4jGUkFQHtgBXpBcxsNrAO2CvLOp1rVN8peg6AexNHRRwJVFHEvYmjGBr/ACrmRh2OKxDZJICpQB9JvSSVAKOBcTXKjAPOCYdHAS+YmYXzFAFI6gnsCSzIsk7nGk/VRkbHX+DZ1ECWkBtHlvclh7HZiuDtW6IOxRWIOm8EM7OEpIuAyUAcuNPMZkq6GphmZuOAO4CxksqBlQQ/6ACHAmMkVQEp4AIzWw6Qqc4GXjfnajfjUXbUOu5OHtOoi6nZ5fTWrKAd45IHc9r798ORl0PL9o0YmXNZ3glsZhOBiTXGXZE2vAk4LcN8Y4Gx2dbpXJMwgym3MCfVnTdTuXX18V3J4ZxW9Qq8N7ZJuqRwhc27gnCFZ9Hb8PmH3JP8PqBtmnVb9ui3xywrg56HwNTbYciFwZPEnGsk/u1yhWfqbVDajseTh0YdSWYHfg9WLYAFr0YdictzngBcYdm4CmaNg31Oj/zSz9rscV8Rq60VT9x1XaMfcbjC5gnAFZYZj0JyM+z/nagjqdVmSngieQgjYlNpy7qow3F5zBOAKyzv3Qs77w1d9o06kq16KPlNSlXFyPgbUYfi8pgnAFc4Pp8Bn70X7P1r207+NrWZVsaMVBmj4y9GHYrLY34VkMtbNdvPFwx9DeIlsM/pEUW0bR5MDuX3xf+Gz96HrvtFHY7LQ34E4ApCMYng0Yt7HAetdow6nKw8mTyYzVYc3BPgXCPwBOAKwpGxd2HDCtj/7KhDydoaduDp1EEw/WFIbI46HJeHPAG4gnBa/GVo0xV2/2bUoWyTx5KHwabV8PEzUYfi8pAnAJf3OrAm6Gd/n9MgFo86nG3yemovaL1T0HzlXAPzBODy3vHxKRQrCXs3j5O/6ZLEYa9TYe5k2Phl1OG4POMJwOW9kfHXmZPqDjsPiDqU7bPP6ZCshFlPRh2JyzOeAFxe664KDorN5cnkITl/7X+tuu4PHXsHJ4Oda0B+H4DLayfFgjtpx6UO5p/NtV8dCfb5Nrx4LaxeDO26Rx2RyxN+BODymDEy/jpTU31ZbLnx1K/tUTZmAodP6gTA//7xGu8gzjUYTwAub/XTp+wRWxw0/zRzn9rOvJPqw8nx16IOxeURTwAub42Mv0GVxZmQHBx1KA3iyeTB9Istoo8WRx2KyxOeAFx+MuOE+Ju8mtqbVbSNOpoG8XRyMCkTx8ffijoUlyeySgCShkuaI6lc0pgM00slPRhOnyKpLBx/tKR3JE0P/x6ZNs9LYZ3vh6+dGmqlnGPxNLprOeOTQ6KOpMFU0J4pqX6cEHsreK6xc/VUZwKQFAduAkYA/YEzJNV8kvZ5wCoz6w3cCFwfjl8OnGhmewPn8PUHxJ9lZvuFr2X1WA/ntjTrCTZbEc+lDow6kgY1ITWY3rHPYNmsqENxeSCbI4BBQLmZzTezSuABYGSNMiOBu8PhR4BhkmRm75nZZ+H4mUBLSaUNEbhztUqlYOYTvJLahzW0jjqaBvV0chBJE8x8POpQXB7IJgF0AxalvV8cjstYxswSwGqgY40ypwLvmll6t4Z3hc0/l0uZ79KRdL6kaZKmVVRUZBGuK3hLpsGaxUzMk5O/6VbQjjdT/WHGY94M5OqtSU4CSxpA0Cz0w7TRZ4VNQ4eFr4z99JrZrWY20MwGdu7cfK/ldk1o5hMQL8m75p9qE1JDYOU8+Hx61KG4Zi6bBLAE6JH2vns4LmMZSUVAO2BF+L478DjwXTObVz2DmS0J/64F7iNoanKuflIpmPUE9D6KtbSKOppGMSl5ECjuzUCu3rJJAFOBPpJ6SSoBRgPjapQZR3CSF2AU8IKZmaT2wARgjJm9Xl1YUpGkTuFwMXACMKN+q+IcsHgqrFkCA06JOpJGs4q2sNsRMNObgVz91JkAwjb9i4DJwGzgITObKelqSSeFxe4AOkoqBy4Gqi8VvQjoDVxR43LPUmCypA+B9wmOIG5ryBVzBWrm4xAvhb7Do46kUf36o91h1QKOv+yf3jWE225ZdQZnZhOBiTXGXZE2vAk4LcN81wDX1FJtfjbQuuikUkGXyb2HQYv8uPmrNs8mD+QPRbczPP42MxNlUYfjmim/E9jlhbIxEzjlN3+HtZ/xP9N75v1e8UraMiXVjxGxt6MOxTVjngBc3jg2PpVKi/N86oCoQ2kSE8Obwnp730BuO3kCcHnCGBF7mzdSe+XdzV+1mZwcSMrkRwFuu3kCcHmhvxbSM7aMSamDog6lyVTQgXesDyPiU6MOxTVTngBcXjg2PpWkiWeSA6MOpUlNSg6if2whrJwfdSiuGfIE4PLCiNjbvJ3qx8o86fo5W5OS4RHPrJq35jhXN08ArvmrmEvf2JKCav6ptoTOfJDaDWZ7AnDbzhOAa/7CH7+v9oYLzKTkIFjyTvDAeOe2gScA1/zNHse7qd58wY5RRxKJr458Psrvex9cw/ME4Jq3VQth6QdMLtC9f4BPrAt07gezn4o6FNfMeAJwzVu411uI7f9b6HcCLHwd1q+IOhLXjHgCcM3bR+Nhp/4stF2ijiRae54AloI5E+su61zIE4BrvtYvh0/fDH78Cl2XfaHdrkFCdC5LngBc8zVnYrDX2+/EqCOJnhQ0A817ETavjToa10x4AnDN1+zx0H5X2GXvqCPJDXueAMnN8PGzUUfimglPAK552rQG5r8Ie54Y7P062HUItOrkzUAua54AXPNU/iwkK4NmDxeIxWHP42DuM5DYHHU0rhnI6olgzuWc2eODvd0eg6OOJCdUPwBnaGxn/l2ylnOv+BMvpfb/avqC646PKjSXw/wIwDU/ibCde8/jgr1e95U3Unux1lpybGxa1KG4ZsATgGt+5r8MlWuh30lRR5JzKinmpdS+HB1/hxipqMNxOS6rBCBpuKQ5ksoljckwvVTSg+H0KZLKwvFHS3pH0vTw75Fp8xwYji+X9HfJz+S5LH30FGutJX3vWE/ZmAl5//zfbTU5eRCdtIYDNTfqUFyOqzMBSIoDNwEjgP7AGZL61yh2HrDKzHoDNwLXh+OXAyea2d7AOcDYtHluBn4A9Alfw+uxHq5QpJLw0UReSu1LJcVRR5OTXkrty2Yr4pi4NwO5rcvmCGAQUG5m882sEngAGFmjzEjg7nD4EWCYJJnZe2b2WTh+JtAyPFroArQ1s7fMzIB7gJPrvTYu/y2aAhuWF3Tnb3VZRyteT+3FsbGpgEUdjsth2SSAbsCitPeLw3EZy5hZAlgNdKxR5lTgXTPbHJZP77w8U50ASDpf0jRJ0yoqKrII1+W12eMhXsJLqX2jjiSnTU4dxK6xCvrp06hDcTmsSU4CSxpA0Cz0w22d18xuNbOBZjawc+fODR+caz7MgpucdhvKOlpFHU1Oez55ACkTx/oD491WZJMAlgA90t53D8dlLCOpCGgHrAjfdwceB75rZvPSynevo07ntvTFDPhyoXf+loXltGOa9fXLQd1WZZMApgJ9JPWSVAKMBmo+gHQcwUlegFHAC2ZmktoDE4AxZvZ6dWEzWwqskTQkvPrnu8CT9VwXl+9mjwfFYI/joo6kWZicHEi/2Kf00BdRh+JyVJ0JIGzTvwiYDMwGHjKzmZKullR9IfYdQEdJ5cDFQPWlohcBvYErJL0fvnYKp10A3A6UA/OApxtqpVye+mg89BgCO3hTYDYmhw/J8aMAV5usuoIws4nAxBrjrkgb3gSclmG+a4BraqlzGrDXtgTrCtjK+UET0DHXRh1Js7HYdmJmqqefB3C18juBXfMwO+zh0vv+3yaTkwdxoD6Gtd4M5L7OE4BrHmY/BbvsAx16Rh1JszIpdRAxGczxu6Xd13kCcLlv7eew+G3+vGgP7/phG8217sxP7RIkUOdq8ATgcl/4gJNJKb/7d9uJZ1IHwSevwMYvow7G5RhPAC73zX6KeakulFvGm8VdHSYlD4JUAuZOjjoUl2M8AbjctmElfPJquPfvHcZujw9sN2jTBT7yZiC3JU8ALrfNnQSWZFJyUNSRNFtGLLh7+uPnoHJD1OG4HOIJwOW22eOhbXemW6+oI2ne+p0AiY0w7/moI3E5xBOAy12b1wU/WP1OwJt/6qnnIdByR5hVsxcXV8g8AbjcVf4sJDb5zV8NIV4cPEN57qTgmcrO4QnA5bJZT0LrzrDrN6KOJD/0Gwmb18D8l6KOxOUITwAuJ+055jHWz5jIvav3oeyySVGHkx92OwJK23kzkPuKJwCXk46IfUhrbebplF/902CKSmGP4cGNdcmqqKNxOcATgMtJw+Nvs9J2YEqqX9Sh5Jf+I2HTl7Dg1agjcTnAE4DLPYnNHBV7l2eSA0lk12O5y9buR0Jx6+D8iit4ngBc7pn3Im20kadTg6OOJP8Ut4S+xwT3V6SSUUfjIuYJwOWeWU+yxlrxRmpA1JHkp/4jYcNyWPhG1JG4iHkCcLklUQlzJvBs6kCqvPmncfQ+GopaejOQ8wTgcswnL8Om1Tztff80ntIdgmagWU96M1CByyoBSBouaY6kckljMkwvlfRgOH2KpLJwfEdJL0paJ+kfNeZ5Kayz5sPiXSGb+TiUtuWV1D5RR5LfBpwC65fBwtejjsRFqM4EICkO3ASMAPoDZ0jqX6PYecAqM+sN3AhcH47fBFwO/LKW6s8ys/3C17LtWQGXRxKbg5OTex5PJcVRR5Pf+hwDxa2ChOsKVjZHAIOAcjObb2aVwAPAyBplRgJ3h8OPAMMkyczWm9lrBInAua2b9wJsXg0DvhV1JPmvpDX0HR7cFZxMRB2Ni0g2CaAbsCjt/eJwXMYyZpYAVgMds6j7rrD553JJGbt7lHS+pGmSplVUVGRRpWu2ZjwGLdrDbkOjjqQwDDgluBrIbworWFGeBD7LzPYGDgtfZ2cqZGa3mtlAMxvYuXPnJg3QNaGqjTBnYtDzZ1FJ1NEUhj5HQ8kO3gxUwLJJAEuAHmnvu4fjMpaRVAS0A1ZsrVIzWxL+XQvcR9DU5ApV+XNQuQ728uafJlPcEvYYAbOf8r6BClQ2F1pPBfpI6kXwQz8aOLNGmXHAOcCbwCjgBTOz2ioMk0R7M1suqRg4AXhuO+J3+WLGY9CqI5QdHnUkealszIQt3i+47vhgYMApMP1h+OQV6D0sgshclOpMAGaWkHQRMBmIA3ea2UxJVwPTzGwccAcwVlI5sJIgSQAgaQHQFiiRdDJwDLAQmBz++McJfvxva9A1czmr5o9RSzYxu80k2OfbEPebv5rU7sOgtC3MeNQTQAHK6r/NzCYCE2uMuyJteBNwWi3zltVS7YHZhejy3bDYe1C1wZt/olDcAvqdFNwUdvxfgmYhVzB8d8tFbmT8dWjTJXhurWsS6Udhh8R68J+StfDxM0E/Qa5geFcQLlLtWcvQ2Aew16kQi0cdTkF6MzWAZdYePnwo6lBcE/ME4CJ1fHwKxUrCPqdHHUrBShHjqeQ3giOAjV9GHY5rQp4AXKRGxl/n41Q32MX7/onSk8mDIVkJs/15wYXEE4CLTDcqGBSbwxPJQyDzjeCuiXxou8GOuwWXhLqC4QnARWZkPHggyZOpgyOOxIFg79Phk1dhzdKog3FNxBOAi/Gn390AABRnSURBVIgxMv4601J9WWzeE3hO2Ps0wIJ7AlxB8ATgItFPn7JHbHHQ/ONyQ6fe0PUA+OCBqCNxTcQTgIvEt+KvUmVxJiT9we85Zb8z4YvpsPTDqCNxTcATgGtyRSQ4Of4az6cOYBVtow7HhcrGTGDfx9qy2Yq486Zrow7HNQG/E9g1uaGxD+isNTyc/G/HbzX7B3LRWM0OPJc6ILg7O1HpXXPnOT8CcE1uVPwVKqwtL6f2jToUl8EjySPoqLVQ/mzUobhG5gnANa31yxkWe5fHk4eR8APQnPRKah8qrB28f1/UobhG5gnANa3pD1OsJI8kvd//XJUkzuPJQ2HuJFi/POpwXCPyBOCa1nv/4YPUbsy1HnWXdZF5NHkYpBJ+Z3Ce8wTgms7SD+GL6TycPCLqSFwd5tiu0GU/eHcs1P5wP9fMeQJwTefdeyBeGvQ86XLepZ8eCMtmcsplf/OrtPKUJwDXNCrXw4cPwoCTWc0OUUfjsjAueTDrrAVnxF+IOhTXSDwBuEZXNmYCl1z1O9i8hlFT94g6HJel9bRkXPJgToy/SVvWRx2OawRZJQBJwyXNkVQuaUyG6aWSHgynT5FUFo7vKOlFSesk/aPGPAdKmh7O83fJ+wPOZ2fGn2dOqjvTzBNAc3Jf8khaqjK4MczlnToTgKQ4cBMwAugPnCGpf41i5wGrzKw3cCNwfTh+E3A58MsMVd8M/ADoE76Gb88KuNw3QJ+wX2w+9yWHAZ7nm5MZthsfpnpxZvx5Pxmch7I5AhgElJvZfDOrBB4Aaj45eiRwdzj8CDBMksxsvZm9RpAIviKpC9DWzN4yMwPuAU6uz4q43HVW/Hk2Wklwbblrdu5PHkm/2CJYPC3qUFwDyyYBdAMWpb1fHI7LWMbMEsBqoGMddS6uo04AJJ0vaZqkaRUVFVmE63LKpjWMjL/OU8lvsIbWUUfjtkP1yWDeuSvqUFwDy/mTwGZ2q5kNNLOBnTt3jjoct62mP0RrbeY/yWFRR+K203paBkdv0x/xO4PzTDYJYAmQfttm93BcxjKSioB2wIo66uxeR52uuUulYMotTE+V8YHtHnU0rh7+nTwWkpv9KCDPZJMApgJ9JPWSVAKMBsbVKDMOOCccHgW8ELbtZ2RmS4E1koaEV/98F3hym6N3uW3+C7B8LnckjsNP/jZv86wb7H4kTL0DklVRh+MaSJ0JIGzTvwiYDMwGHjKzmZKulnRSWOwOoKOkcuBi4KtLRSUtAG4AzpW0OO0KoguA24FyYB7wdMOskssZb90MO+zMhNSQqCNxDWHwj2DtUpjl+2r5Iqv+eM1sIjCxxrgr0oY3AafVMm9ZLeOnAXtlG6hrZirmQPlz8M3fUvW0d/ucF3ofDTvuDlP+BXuPijoa1wBy/iSwa6am/AvipTDwe1FH4hpKLAaDfwiLp8Lid6KOxjUATwCu4W1YCe/fD/ucDq07RR2Na0j7nQklbWDKzVFH4hqAH5u7eqvZU+SC4+dAYiMM+XFEEblGU9oGDjwnOL9z5OXQoWfUEbl68CMA16BKqQx+HHb7Juw8IOpwXGMYcgEoBm/8X9SRuHryBOAa1Gnxl2H9MjjsF1GH4hpLu26w72h4byysWxZ1NK4ePAG4BlNEgh8VPQU9BkOZ9/uT1w75GSQ2B0d7rtnyBOAazMjYG3TX8mDv33v3zm+d+kD/k2Dq7bBpddTRuO3kCcA1iBgpLih6klmpntDnmKjDcU3g+PcGweY1XP/7SygbM8EfG9kMeQJwDeLY2FR2jy3lpsRI3/svEDOtF68k9+a8oom02rLHd9dMeAJw9RYjxc+KHmNeqgtPpwZFHY5rQjcmRtFJazg3PinqUNx28ATg6u2k2BvsGVvEjYlRpPwrVVDesz48mzyAHxaN9+cGN0N+I5irn0QlFxc9zMxUTyakBkcdjWtEtbXx35A4jadLL+UHRROA05s2KFcvvrvm6ufdu9k1VsEfE6Mx/zoVpNnWk6eSQ/h+/GlY50/ta078P9Ztv8r18PIfmZLak5dT+0QdjYvQDYnTKKUKXrsh6lDcNvAE4LbflH/B+mVcXzUaf+BLYfvEuvBI8vDgvoCV86MOx2XJE4DbPms/h1dvhL4jeNf6Rh2NywE3JE6DWDE8c3nUobgseQJw2+e5K4NnxB57bdSRuByxjA5w+C/go/Ew78Wow3FZ8KuA3Lb7dAp8cD8cejF03B34aIvJfkdo4dpjwm48U7ITm+++kBGV1zHvupPqnslFxo8A3LZJJeHpX0Gbrt7jp/uazZRwbeIs+saWcFb8uajDcXXIKgFIGi5pjqRySWMyTC+V9GA4fYqksrRpl4bj50g6Nm38AknTJb0vaVpDrIxrAu/eA0s/gGN+D6U7RB2Ny0HPpAbyWnIAvyh62LuLznF1JgBJceAmYATQHzhDUv8axc4DVplZb+BG4Ppw3v7AaGAAMBz4Z1hftW+a2X5mNrDea+Ia39ovgrb/nofAXqdGHY3LWeJ3iXNpQSVM/GXUwbityOYcwCCg3MzmA0h6ABgJzEorMxK4Mhx+BPiHJIXjHzCzzcAnksrD+t5smPBdkzGD8f/D5o3rGTH3FOZfOjHqiFwOm2fd+FviW1wy6yGYNS7oOtrlnGyagLoBi9LeLw7HZSxjZglgNdCxjnkNeEbSO5LO3/bQXZOa8SjMmcBfEqOYb12jjsY1A7cmT4Bd9g6OAjauijocl0GUJ4EPNbMDCJqWLpR0eKZCks6XNE3StIoKv808EuuWwcRfQbeB3J48PupoXDORoAhG3gTrl8Pk30QdjssgmwSwBOiR9r57OC5jGUlFQDtgxdbmNbPqv8uAxwmahr7GzG41s4FmNrBz585ZhOsalBlMuDjo9uHkf3pvn27bdNk3eHzk+/+B2U9FHY2rIZv/5qlAH0m9JJUQnNQdV6PMOOCccHgU8IKZWTh+dHiVUC+gD/C2pNaS2gBIag0cA8yo/+q4Bjf19uAf98jfQOc9oo7GNUdDL4Wu+8OTF8KXn0YdjUtT50lgM0tIugiYDMSBO81spqSrgWlmNg64AxgbnuRdSZAkCMs9RHDCOAFcaGZJSTsDjwfniSkC7jMzf6JErvnsfZh8GfQ+Gr7xk6ijcc1Q9U2Bu+q7TCi5jDaPfB++9zTEiyOOzAEo2FFvHgYOHGjTpvktA42p+h+2DRsYX3IZPdsXww9fhdYdt5ju3LY6IfYm/yj5Pzjk53D0VVGHU1AkvZPpcntv0HUZGNcX30o3LYdRd3714+9cfYxPfQMOOAde/6ufD8gR3heQ+5qLix7muPjbXFt1Jrf9cwXge/2ugYy4Hr6YAY+dHzQFdd0v6ogKmicAt4VR8Zf5adETPJAYym1+yadraMUtYfT9cNuRcP9oBlf8hi/Y8avJC67z71xT8iYg91/zX+Z/i27nteQAfpv4Pv6QF9fQysZMoOzaaQyvuIh1a1Zxe8mfacWmqMMqWJ4AXOCz9+DBs/nEduGCqp8HN/E410g+sl35SdVP6K+F3FH8Z1qwOeqQCpInABf8+N8zElq249zKX7OG1lFH5ArAi6n9+Z+qCxgcm81txX+hlMqoQyo4ngAK3Wfvwz0nQ2k7OGc8n9Ep6ohcARmXOoRLEudzWHwG/yq+ERJ+JNCU/Di/wKRfx3+QPuLhdn+H0rZw7njo0BO/Ids1tUeSR1BEkuuKb+etq4/g/MqLtzgK9RPDjcePAArUSbHXubfkD9C6c9qPv3PReCB5JD+tvJADNJeHS66iK8ujDqkg+BFAwTEuij/BL4sfZkpqT85fcjGrr5+B7/m7qI1LHUJFVXtuKb6Bx0p/x/mVF/Oh7R51WHnNjwAKyYaV3Fb8F35Z/DCPJQ/l7MpLWY0/1tHljjdTAxhVeSUJ4jxSciXnxicFPdK6RuEJoFAseA1uPoTDYx9yVdXZXFz1YyrxDrlc7plrPTh+8x94ObUvVxbfAw9+xx8o00i8M7g8VjZmAjuwgYuLHuGc+GQW2s78pOonzLReUYfmXBaM8+ITubz0QWi5Y9CNxIBTQH6D4raqrTM4PweQr8wYHnubK4vvZie+5D/JYVyXOIP1tIw6MueyJO5IHs/lP/ghjPspPPI9+OABDpsxnEW281el/Cqh7edHAPlowevwwu/h0zeZmerJb6rO433rHXVUzm23OEnOiT/DL4oeopgE9yWH8Y/EKSyn3dfKekL4Oj8CyHdmsOBVePUGmP8i7LALv636HvcnjyRJPOronKuXJHHuTI5gfHIIPyt6jO/En+O0+MvcmzyKuxPH+g2M28lPAjd3m9fBO/+Gmw+Gu0+Ez6fDMdfCz97n3uTR/uPv8soyOvCbxHkcVfknnksdyHnxp3ml9Of8o/jvDNJsRCrqEJsVbwLKUZmevPXVoW2iEua9ANMfgo8mQmIj7Lw3v1r8DcYlD2YzJU0crXPR6MpyzimazBnxF2mrDSy2TnQ//FzY61TYqZ+fMA7V1gTkCSBHbZkAjB5axqunCsqfg/kvQeU6VtkOTEgO5vHkobxjffHum12haskmjo1N41vxVzm8aCZYCtrvCn2HQ++jYNch0OLr5wsKhZ8DaE7Wr+Dg2AwGaAH7xcoZGJvLzvoSxgPtesA+p0Pf4Qy6cxNVvgmdYyMteCJ1KE+kDmXBJQfCnKdh7mR4dyy8fSsg2GUv6DEYuuwHXfaBzv2gqLCPlrM6ApA0HPgbEAduN7PrakwvBe4BDgRWAN82swXhtEuB84Ak8FMzm5xNnZk0pyOAmk04W1yZkNjMwb99gF20km5aTlet4NLBJbBiHqz4GNZ98VXRxdaJaam+TEvtwVupfpRbN3xP37nslFLJAbGPOUhzGBSbzb6x+bTRRgASFmOh7cx868LRhx4M7XtC+x7Qrju06RLcexDLj9Ok290EJCkOzAWOBhYDU4EzzGxWWpkLgH3M7EeSRgOnmNm3JfUH7gcGAV2B54C+4WxbrTOTBk8AZuErFb6Swd9UMhhOpSCV2PKVrOK4G5+nmAQlJChVFfeesy9UbYSqDVC5AarW83+T3mcHNtJWG2jLejpoHR1YS0etob3Wfz2WVp2gY+/g1XkPzpywkdmpXVlF24ZbX+cKnEjRU18wQAvZM/Ypu+kzdtdS9iypgESNJ5PFioLOElvuCK12hJYdgmakFu2CHnRLWkFJayhuDcUtoKhl8DdeCvFiKCqFWDHEi4K/saLwFQ9eioGq/6a/1ODnLurTBDQIKDez+WFFDwAjgfQf65HAleHwI8A/JCkc/4CZbQY+kVQe1kcWdTacmw+BZbOB8Aef+p33mFhaY8T9Xy9zQVysoyVracVqa82XtgMf0YPlqXYst3Yspx1LrSNLrBOfWUfWb2oJK4GP6xWac24rjBgLrAsLrAsTUkP+O6HS6MQauquCrlpOZ61mJ62ic+VqOny5jqPLqqDiI9i0BjavhaoMO3GNojoZCC5bEjxTuQFlkwC6AYvS3i8GBtdWxswSklYDHcPxb9WYt1s4XFedAEg6Hzg/fLtO0pwsYs6kEzR1H7Orm3ZxXxfBOkfO1zn/Ncr6LgTeaehKG04nrmxVn3XO2N97zp9BNLNbgVvrW4+kaZkOgfKZr3NhKLR1LrT1hcZb52zOcCwBeqS97x6Oy1hGUhHQjuBkcG3zZlOnc865RpRNApgK9JHUS1IJMBoYV6PMOOCccHgU8IIFZ5fHAaMllUrqBfQB3s6yTuecc42oziagsE3/ImAywSWbd5rZTElXA9PMbBxwBzA2PMm7kuAHnbDcQwQndxPAhWaWBMhUZ8Ov3hbq3YzUDPk6F4ZCW+dCW19opHVuVncCO+ecazj5cZeDc865beYJwDnnClTeJwBJwyXNkVQuaUzU8TQGST0kvShplqSZkn4Wjt9R0rOSPg7/dog61oYmKS7pPUnjw/e9JE0Jt/eD4UUGeUNSe0mPSPpI0mxJ38j37Szpf8Lv9QxJ90tqkW/bWdKdkpZJmpE2LuN2VeDv4bp/KOmA7V1uXieAsBuLm4ARQH/gjLB7inyTAH5hZv2BIcCF4XqOAZ43sz7A8+H7fPMzYHba++uBG82sN7CKoB+qfPI3YJKZ7QnsS7DuebudJXUDfgoMNLO9CC4aGU3+bed/A8NrjKttu44guKKyD8FNsjdv70LzOgGQ1o2FmVUC1V1O5BUzW2pm74bDawl+FLoRrOvdYbG7gZOjibBxSOoOHA/cHr4XcCRBdySQZ+ssqR1wOMFVd5hZpZl9SZ5vZ4KrFVuG9xi1ApaSZ9vZzF4huIIyXW3bdSRwjwXeAtpL6rI9y833BJCpG4tutZTNC5LKgP2BKcDOZrY0nPQ5sHMtszVXfwUuga8eA9UR+NLMEuH7fNvevYAK4K6w2et2Sa3J4+1sZkuAPwOfEvzwrybosSGft3O12rZrg/2u5XsCKCiSdgAeBX5uZmvSp4U35uXNNb+STgCWmVkOd9/S4IqAA4CbzWx/YD01mnvycDt3INjj7UXQo3Brvt5Ukvcaa7vmewIomC4nJBUT/Pj/x8weC0d/UX1oGP5dFlV8jeAQ4CRJCwia9o4kaB9vHzYVQP5t78XAYjObEr5/hCAh5PN2Pgr4xMwqzKwKeIxg2+fzdq5W23ZtsN+1fE8ABdHlRNj2fQcw28xuSJuU3kXHOcCTTR1bYzGzS82su5mVEWzXF8zsLOBFgu5IIP/W+XNgkaQ9wlHDCO6yz9vtTND0M0RSq/B7Xr3Oebud09S2XccB3w2vBhoCrE5rKto2ZpbXL+A4gofPzAN+E3U8jbSOhxIcHn4IvB++jiNoE3+e4CkDzwE7Rh1rI63/UGB8OLwbQX9T5cDDQGnU8TXwuu4HTAu39RNAh3zfzsBVwEfADGAsUJpv25ngqSJLgSqCI73zatuuBI8EvCn8TZtOcIXUdi3Xu4JwzrkCle9NQM4552rhCcA55wqUJwDnnCtQngCcc65AeQJwzrkC5QnAOecKlCcA55wrUP8fe+iaApYuinwAAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy.stats import norm\n", "data = np.random.normal(50,12, 5000)\n", "fitting_params = norm.fit(data)\n", "norm_dist_fitted = norm(*fitting_params)\n", "t = np.linspace(0,100, 100)\n", "plt.hist(data, bins=60, density=True)\n", "plt.plot(t, norm_dist_fitted.pdf(t))\n", "plt.title('Example of Normally Distributed Data')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "jhZ3UKs3U-FG" }, "source": [ "We can transform our data to be closer to a normal distribution by removing the skew. One way to remove the skew is by applying the log function to the data.\n", "\n", "Let's plot the log of the feature variables to see that it produces the desired effect." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "colab_type": "code", "id": "r3fiFAipU9nm", "outputId": "c46e9627-4db9-4992-8736-ba974ffadde0" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEICAYAAACzliQjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAYbklEQVR4nO3df5BddX3/8eeLpCiymkWCOzRJCa2xlrKtJVug1am7xmkDQYKtpaSIiQPNOAWlZakEawer9Wv8QfHH19JGQwmCrJTaIQaoxMiOogYlSgkBkRWjZMVEIEQXohB894/zibnd3OzevT9P+LweMzs5Pz73nNe92X3dc8/9pYjAzMzycEinA5iZWfu49M3MMuLSNzPLiEvfzCwjLn0zs4y49M3MMuLSN6uTpK2SXpum3yHpk53OZDYZl74dtCS9StJXJe2S9Likr0j6/Qa298sSn6qI+H8RcV4D+75a0tOSxiT9VNImSa+uWL9M0rNp/U8k3S3ptHr3Z/ly6dtBSdKLgHXAx4AXA7OAfwR+3slcDfpARHQBLwKuBD4raVrF+q+l9d3AauAGSUd0IKcdxFz6drB6GUBEXB8Rz0bE7oi4Dfh2Ourv3TtQ0kskPSXpKEkzJa2T9EQa92VJh0j6FPBrwOfS0fTb02VPl7QljR+W9FvVwkh6l6RrK+b3Pgp5QtLDkpbVesWieJv8pynuzHqqrP8FcBVwGPAbtW7XDFz6dvD6DvCspDWSTtl7xBsRTwNDwBsrxi4BNkTEj4FBYBtwFEWhvqO4WJwD/AB4XUR0RcQHJL0MuB74mzT+Foo7hUMnCibpGOBWikchRwGvAO6u9Yqlo/s3Ad8DtldZPx04DxgDHqx1u2bg0reDVET8BHgVEMAngB9LWiupB1gDLJGkNPwc4FNp+hngaOCYiHgmIr4cB/4Aqr8Abo6I9RHxDPAhiqPrP5wk3l8CX0iPQp6JiMciopbSv1jSExRl/mHgHyLi2Yr1J6f1P6K4I3t9ROyqYbtmv+TSt4NWRNwfEcsiYjZwPPCrwIcj4k7gKaBf0suBlwJr08U+CIwAt0l6SNKKCXbxq8D3K/b3C+BhiucPJjIH+G4dV+lDEdENvADoAz4o6ZSK9RsjojsiZkbEyRHxhTr2YZlz6dtzQkR8G7iaovyhONp/I8VR/o0R8bM07qcRMRgRvw6cDlwkacHezYzb7A+BY/bOpEcOc4DRSeI8TAPn2qNwL/AVYFG92zGrxqVvByVJL5c0KGl2mp9DccpjYxpyLfB6iuK/puJyp0l6aSrwXcCzwC/S6u3Ar1fs5gZgkaQFkn6F4vmAnwNfnSTedcBrJZ0pabqkIyW9YqrXj+L01ZapXM5sMi59O1j9FDgJuFPSkxRlfy9FMRMRDwPfpDh6/3LF5eYBX6A4b/414F8i4va07n3AO9Mrbi6OiAco7jQ+BjwKvI7iid6nJwoWET8ATk1ZHqd4Evd3a7hOb0+vHHoSuA34d+DfaricWc3kL1Gx5ypJVwE/jIh3djqLWVlM73QAs1aQNBf4U+D3OpvErFx8eseecyS9h+JUzwcj4nudzrNXepPXWJWfszudzfLh0ztmZhnxkb6ZWUZKfU5/5syZMXfu3E7H2M+TTz7J4Ycf3ukYVZU5G5Q7X5mzQbnzlTkblDtfK7Jt2rTp0Yg4qurKiCjtz/z586OMbr/99k5HOKAyZ4sod74yZ4sod74yZ4sod75WZAPuigP0qk/vmJllxKVvZpYRl76ZWUZc+mZmGXHpm5llxKVvZpYRl76ZWUZc+mZmGXHpm5llpNQfw2A2mbkrbm7atgZ797BsCtvbutLfZGgHHx/pm5llxKVvZpaRSUtf0lWSdki6t2LZByV9W9I9kv5LUnfFuksljUh6QNKfVCxfmJaNSFrR/KtiZmaTqeVI/2pg4bhl64HjI+J3gO8AlwJIOg44C/jtdJl/kTRN0jTg48ApwHHAkjTWzMzaaNLSj4gvAY+PW3ZbROxJsxuB2Wl6MTAUET+P4mvqRoAT089IRDwUEU8DQ2msmZm1UU1fl5i+ZHpdRBxfZd3ngM9ExLWS/j+wMSKuTetWA7emoQsj4ry0/BzgpIi4oMr2lgPLAXp6euYPDQ3Vc71aamxsjK6urk7HqKrM2aD5+TaP7mratnoOg+27ax/fO2tG0/ZdizL/35Y5G5Q7XyuyDQwMbIqIvmrrGnrJpqS/B/YA1zWynUoRsQpYBdDX1xf9/f3N2nTTDA8PU8ZcUO5s0Px8U3mJ5WQGe/dw+eba/yS2nt3ftH3Xosz/t2XOBuXO1+5sdZe+pGXAacCC2PdwYRSYUzFsdlrGBMvNzKxN6nrJpqSFwNuB0yPiqYpVa4GzJD1P0rHAPODrwDeAeZKOlXQoxZO9axuLbmZmUzXpkb6k64F+YKakbcBlFK/WeR6wXhIU5/HfEhFbJN0A3Edx2uf8iHg2becC4PPANOCqiNjSgutjZmYTmLT0I2JJlcWrJxj/XuC9VZbfAtwypXRmZtZUfkeumVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlp6KOVzXI2t4kf61yLwd49LFtxM1tXLmrrfu25xUf6ZmYZcembmWXEpW9mlhGXvplZRlz6ZmYZcembmWXEpW9mlhGXvplZRlz6ZmYZcembmWXEpW9mlhGXvplZRlz6ZmYZmbT0JV0laYekeyuWvVjSekkPpn+PSMsl6aOSRiTdI+mEisssTeMflLS0NVfHzMwmUsuR/tXAwnHLVgAbImIesCHNA5wCzEs/y4ErobiTAC4DTgJOBC7be0dhZmbtM2npR8SXgMfHLV4MrEnTa4AzKpZfE4WNQLeko4E/AdZHxOMRsRNYz/53JGZm1mKKiMkHSXOBdRFxfJp/IiK607SAnRHRLWkdsDIi7kjrNgCXAP3A8yPin9LyfwB2R8SHquxrOcWjBHp6euYPDQ01eh2bbmxsjK6urk7HqKrM2aD5+TaP7mratnoOg+27m7a5ptubr3fWjE5H2U9uv3fN1IpsAwMDmyKir9q6hr85KyJC0uT3HLVvbxWwCqCvry/6+/ubtemmGR4epoy5oNzZoPn5ljXx26sGe/dw+ebyfpnc3nxbz+7vdJT95PZ710ztzlbvq3e2p9M2pH93pOWjwJyKcbPTsgMtNzOzNqq39NcCe1+BsxS4qWL5m9KreE4GdkXEI8DngT+WdER6AveP0zIzM2ujSR/LSrqe4pz8TEnbKF6FsxK4QdK5wPeBM9PwW4BTgRHgKeDNABHxuKT3AN9I494dEeOfHDYzsxabtPQjYskBVi2oMjaA8w+wnauAq6aUzszMmsrvyDUzy4hL38wsIy59M7OMuPTNzDLi0jczy4hL38wsIy59M7OMuPTNzDLi0jczy4hL38wsIy59M7OMuPTNzDLi0jczy0h5vybIDipza/wGq8HePU39tiszmxof6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGGip9SX8raYukeyVdL+n5ko6VdKekEUmfkXRoGvu8ND+S1s9txhUwM7Pa1V36kmYBbwP6IuJ4YBpwFvB+4IqIeCmwEzg3XeRcYGdafkUaZ2ZmbdTo6Z3pwGGSpgMvAB4BXgPcmNavAc5I04vTPGn9AklqcP9mZjYFioj6LyxdCLwX2A3cBlwIbExH80iaA9waEcdLuhdYGBHb0rrvAidFxKPjtrkcWA7Q09Mzf2hoqO58rTI2NkZXV1enY1TVqWybR3fVNK7nMNi+u8Vh6lTmbLAvX++sGZ2Osp8y/01AufO1ItvAwMCmiOirtq7uz9OXdATF0fuxwBPAfwAL693eXhGxClgF0NfXF/39/Y1usumGh4cpYy7oXLZaPyN/sHcPl28u59c4lDkb7Mu39ez+TkfZT5n/JqDc+dqdrZHTO68FvhcRP46IZ4DPAq8EutPpHoDZwGiaHgXmAKT1M4DHGti/mZlNUSOl/wPgZEkvSOfmFwD3AbcDb0hjlgI3pem1aZ60/ovRyLklMzObsrpLPyLupHhC9pvA5rStVcAlwEWSRoAjgdXpIquBI9Pyi4AVDeQ2M7M6NHQCMyIuAy4bt/gh4MQqY38G/Hkj+zMzs8b4HblmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGGip9Sd2SbpT0bUn3S/oDSS+WtF7Sg+nfI9JYSfqopBFJ90g6oTlXwczMatXokf5HgP+OiJcDvwvcD6wANkTEPGBDmgc4BZiXfpYDVza4bzMzm6K6S1/SDOCPgNUAEfF0RDwBLAbWpGFrgDPS9GLgmihsBLolHV13cjMzmzJFRH0XlF4BrALuozjK3wRcCIxGRHcaI2BnRHRLWgesjIg70roNwCURcde47S6neCRAT0/P/KGhobrytdLY2BhdXV2djlFVp7JtHt1V07iew2D77haHqVOZs8G+fL2zZnQ6yn7K/DcB5c7XimwDAwObIqKv2rrpDWx3OnAC8NaIuFPSR9h3KgeAiAhJU7pXiYhVFHcm9PX1RX9/fwMRW2N4eJgy5oLOZVu24uaaxg327uHyzY382rVOmbPBvnxbz+7vdJT9lPlvAsqdr93ZGjmnvw3YFhF3pvkbKe4Etu89bZP+3ZHWjwJzKi4/Oy0zM7M2qbv0I+JHwMOSfjMtWkBxqmctsDQtWwrclKbXAm9Kr+I5GdgVEY/Uu38zM5u6Rh/LvhW4TtKhwEPAmynuSG6QdC7wfeDMNPYW4FRgBHgqjTUzszZqqPQj4m6g2pMFC6qMDeD8RvZnZmaN8TtyzcwyUt6XKphZVXNrfKVUK2xduahj+7bm8JG+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZaTh0pc0TdK3JK1L88dKulPSiKTPSDo0LX9emh9J6+c2um8zM5uaZhzpXwjcXzH/fuCKiHgpsBM4Ny0/F9iZll+RxpmZWRs1VPqSZgOLgE+meQGvAW5MQ9YAZ6TpxWmetH5BGm9mZm2iiKj/wtKNwPuAFwIXA8uAjeloHklzgFsj4nhJ9wILI2JbWvdd4KSIeHTcNpcDywF6enrmDw0N1Z2vVcbGxujq6up0jKo6lW3z6K6axvUcBtt3tzhMncqcDcqRr3fWjKrLy/w3AeXO14psAwMDmyKir9q66fVuVNJpwI6I2CSpv97tjBcRq4BVAH19fdHf37RNN83w8DBlzAWdy7Zsxc01jRvs3cPlm+v+tWupMmeDcuTbenZ/1eVl/puAcudrd7ZGfoNeCZwu6VTg+cCLgI8A3ZKmR8QeYDYwmsaPAnOAbZKmAzOAxxrYv5mZTVHdpR8RlwKXAqQj/Ysj4mxJ/wG8ARgClgI3pYusTfNfS+u/GI2cW7KqNo/uqvmo28zy04rX6V8CXCRpBDgSWJ2WrwaOTMsvAla0YN9mZjaBppwgjIhhYDhNPwScWGXMz4A/b8b+zMysPn5HrplZRlz6ZmYZcembmWXEpW9mlhGXvplZRlz6ZmYZcembmWXEpW9mlhGXvplZRlz6ZmYZcembmWXEpW9mlhGXvplZRlz6ZmYZcembmWXEpW9mlhGXvplZRlz6ZmYZcembmWXEpW9mlhGXvplZRlz6ZmYZcembmWXEpW9mlpG6S1/SHEm3S7pP0hZJF6blL5a0XtKD6d8j0nJJ+qikEUn3SDqhWVfCzMxq08iR/h5gMCKOA04Gzpd0HLAC2BAR84ANaR7gFGBe+lkOXNnAvs3MrA51l35EPBIR30zTPwXuB2YBi4E1adga4Iw0vRi4JgobgW5JR9ed3MzMpkwR0fhGpLnAl4DjgR9ERHdaLmBnRHRLWgesjIg70roNwCURcde4bS2neCRAT0/P/KGhoYbzNdvY2BhdXV2djlHVjsd3sX13p1McWM9hlDZfmbNBOfL1zppRdXmZ/yag3PlakW1gYGBTRPRVWze90Y1L6gL+E/ibiPhJ0fOFiAhJU7pXiYhVwCqAvr6+6O/vbzRi0w0PD1PGXAAfu+4mLt/c8H9rywz27iltvjJng5Lk2/xk1cWDvc9y+R3V1zXD1pWLGrp8mf9m252toVfvSPoVisK/LiI+mxZv33vaJv27Iy0fBeZUXHx2WmZmZm3SyKt3BKwG7o+If65YtRZYmqaXAjdVLH9TehXPycCuiHik3v2bmdnUNfJY8ZXAOcBmSXenZe8AVgI3SDoX+D5wZlp3C3AqMAI8Bby5gX2bmVkd6i799ISsDrB6QZXxAZxf7/7MzKxxfkeumVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZaS8Xwh6EJu74uaO7Xuwt2O7NrODgI/0zcwy4tI3M8uIS9/MLCMufTOzjLj0zcwy4tI3M8uIS9/MLCN+nb6ZlV6j730Z7N3Dsjq3sXXloob2XTbP6dJv1ZukGvkFMjPrpLaf3pG0UNIDkkYkrWj3/s3MctbW0pc0Dfg4cApwHLBE0nHtzGBmlrN2n945ERiJiIcAJA0Bi4H72pzDzKwmrf4srQOdLm7VcwmKiJZsuOrOpDcACyPivDR/DnBSRFxQMWY5sDzN/ibwQNsC1m4m8GinQxxAmbNBufOVORuUO1+Zs0G587Ui2zERcVS1FaV7IjciVgGrOp1jIpLuioi+TueopszZoNz5ypwNyp2vzNmg3Pnana3dT+SOAnMq5menZWZm1gbtLv1vAPMkHSvpUOAsYG2bM5iZZautp3ciYo+kC4DPA9OAqyJiSzszNEmZTz+VORuUO1+Zs0G585U5G5Q7X1uztfWJXDMz6yx/9o6ZWUZc+mZmGXHpT0DSNEnfkrSuyrq3SNos6W5Jd3TincUT5asY82eSQlJbX642yW23TNKP0213t6Tz2pltsnxp/ZmS7pO0RdKny5JN0hUVt9t3JD3Rzmw15Ps1Sben9fdIOrVE2Y6RtCHlGpY0u83ZtlZ0xl1V1kvSR9NH1Nwj6YRW5Cjd6/RL5kLgfuBFVdZ9OiL+FUDS6cA/AwvbmA0mzoekF6Yxd7YzVDJhNuAzlW/K64AD5pM0D7gUeGVE7JT0krJki4i/3Tst6a3A77Ux114T/d++E7ghIq5MB0K3AHNLku1DwDURsUbSa4D3Aee0MRvAQEQc6I1YpwDz0s9JwJXp36bykf4BpKOARcAnq62PiJ9UzB4OtPUZ8cnyJe8B3g/8rC2hkhqzdUwN+f4K+HhE7ASIiB0lylZpCXB9axP9XzXkC/YV7gzgh+3IBTVlOw74Ypq+neIjYMpkMcWdUkTERqBb0tHN3olL/8A+DLwd+MWBBkg6X9J3gQ8Ab2tXsGTCfOmh4ZyI6MRnQE962wF/lh7C3ihpzgTjWmGyfC8DXibpK5I2SmrnI7habjskHQMcy74Sa5fJ8r0LeKOkbRRH+W9tUy6YPNv/AH+apl8PvFDSke0IlgRwm6RN6eNmxpsFPFwxvy0tayqXfhWSTgN2RMSmicZFxMcj4jeASyge1rbFZPkkHUJxummwXZkq9l3Lbfc5YG5E/A6wHljTlnDUnG86xUPsfoqj6U9I6i5Jtr3OAm6MiGdbHOuXasy3BLg6ImYDpwKfSr+PZch2MfBqSd8CXk3xaQBtu/2AV0XECRSncc6X9Edt3Pc+EeGfcT8U5/q2AVuBHwFPAddOMP4QYFdZ8lE8rH40rd9KcXrnh0Bfp7NVGT+tTLddGvOvwJsr5jcAv1+GbBVjvwX8YbtutyncdlsoHmHunX8IeEkZso0b3wVsa+ftN27/7wIuHrfs34AlFfMPAEc3fd+dutIHyw/F0d66KsvnVUy/DrirTPnGjRluR+FP4bY7umL69cDGMt12FE/Ir0nTMykech9Zhmxp3ctTuakTt9skt92twLI0/VvpYKOtOSfINhM4JE2/F3h3GzMdDrywYvqrFJ84XDlmUbr9BJwMfL0VWXx6ZwokvTu9UgfggvRyvruBi4ClHYwG7JevVMZle1u67f6H4rmQZZ1LVhiX7/PAY5Luo3jC7+8i4rGSZIPi1M5QpKbotHH5BoG/Sv+311PcAXQs57hs/cADkr4D9FAUf7v0AHek2+XrwM0R8d/ppd9vSWNuoXhkNAJ8AvjrVgTxxzCYmWXER/pmZhlx6ZuZZcSlb2aWEZe+mVlGXPpmZhlx6ZuZZcSlb2aWkf8FKtrFXtH33mwAAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for col in X_train_raw.columns:\n", " np.log(X_train_raw.loc[:, col]).hist()\n", " plt.title(col)\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "84vqBnYZT80j" }, "source": [ "We can see that the data is more symmetric after taking the log." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "gnj1zUmaG94h" }, "source": [ "<a name='4'></a>\n", "## 4. Mean-Normalize the Data\n", "\n", "Let's now transform our data so that the distributions are closer to standard normal distributions.\n", "\n", "First we will remove some of the skew from the distribution by using the log transformation.\n", "Then we will \"standardize\" the distribution so that it has a mean of zero and standard deviation of 1. Recall that a standard normal distribution has mean of zero and standard deviation of 1. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a name='Ex-1'></a>\n", "### Exercise 1\n", "* Write a function that first removes some of the skew in the data, and then standardizes the distribution so that for each data point $x$,\n", "$$\\overline{x} = \\frac{x - mean(x)}{std(x)}$$\n", "* Keep in mind that we want to pretend that the test data is \"unseen\" data. \n", " * This implies that it is unavailable to us for the purpose of preparing our data, and so we do not want to consider it when evaluating the mean and standard deviation that we use in the above equation. Instead we want to calculate these values using the training data alone, but then use them for standardizing both the training and the test data.\n", " * For a further discussion on the topic, see this article [\"Why do we need to re-use training parameters to transform test data\"](https://sebastianraschka.com/faq/docs/scale-training-test.html). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Note\n", "- For the sample standard deviation, please calculate the unbiased estimator:\n", "$$s = \\sqrt{\\frac{\\sum_{i=1}^n(x_{i} - \\bar{x})^2}{n-1}}$$\n", "- In other words, if you numpy, set the degrees of freedom `ddof` to 1.\n", "- For pandas, the default `ddof` is already set to 1." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<details> \n", "<summary>\n", " <font size=\"3\" color=\"darkgreen\"><b>Hints</b></font>\n", "</summary>\n", "<p>\n", " <ul>\n", " <li> When working with Pandas DataFrames, you can use the aggregation functions <code>mean</code> and <code>std</code> functions. Note that in order to apply an aggregation function separately for each row or each column, you'll set the axis parameter to either <code>0</code> or <code>1</code>. One produces the aggregation along columns and the other along rows, but it is easy to get them confused. So experiment with each option below to see which one you should use to get an average for each column in the dataframe.\n", "<code>\n", "avg = df.mean(axis=0)\n", "avg = df.mean(axis=1) \n", "</code>\n", " </li>\n", " <br></br>\n", " <li>Remember to use <b>training</b> data statistics when standardizing both the training and the test data.</li>\n", " </ul>\n", "</p>\n", "</details> " ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": {}, "colab_type": "code", "id": "wwqPOiZGRfhv" }, "outputs": [], "source": [ "# UNQ_C1 (UNIQUE CELL IDENTIFIER, DO NOT EDIT)\n", "def make_standard_normal(df_train, df_test):\n", " \"\"\"\n", " In order to make the data closer to a normal distribution, take log\n", " transforms to reduce the skew.\n", " Then standardize the distribution with a mean of zero and standard deviation of 1. \n", " \n", " Args:\n", " df_train (dataframe): unnormalized training data.\n", " df_test (dataframe): unnormalized test data.\n", " \n", " Returns:\n", " df_train_normalized (dateframe): normalized training data.\n", " df_test_normalized (dataframe): normalized test data.\n", " \"\"\"\n", " \n", " ### START CODE HERE (REPLACE INSTANCES OF 'None' with your code) ### \n", " # Remove skew by applying the log function to the train set, and to the test set\n", " df_train_unskewed = np.log(df_train)\n", " df_test_unskewed = np.log(df_test)\n", " \n", " #calculate the mean and standard deviation of the training set\n", " mean = df_train_unskewed.mean(axis=0)\n", " stdev = df_train_unskewed.std(axis=0)\n", " \n", " # standardize the training set\n", " df_train_standardized = (df_train_unskewed - mean) / stdev\n", " \n", " # standardize the test set (see instructions and hints above)\n", " df_test_standardized = (df_test_unskewed - mean) / stdev\n", " \n", " ### END CODE HERE ###\n", " return df_train_standardized, df_test_standardized" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "9ohs6TqjUEHU" }, "source": [ "#### Test Your Work" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set transformed field1 has mean -0.0000 and standard deviation 1.0000 \n", "Test set transformed, field1 has mean 0.1144 and standard deviation 0.9749\n", "Skew of training set field1 before transformation: 1.6523\n", "Skew of training set field1 after transformation: 1.0857\n", "Skew of test set field1 before transformation: 1.3896\n", "Skew of test set field1 after transformation: 0.1371\n" ] } ], "source": [ "# test\n", "tmp_train = pd.DataFrame({'field1': [1,2,10], 'field2': [4,5,11]})\n", "tmp_test = pd.DataFrame({'field1': [1,3,10], 'field2': [4,6,11]})\n", "tmp_train_transformed, tmp_test_transformed = make_standard_normal(tmp_train,tmp_test)\n", "\n", "print(f\"Training set transformed field1 has mean {tmp_train_transformed['field1'].mean(axis=0):.4f} and standard deviation {tmp_train_transformed['field1'].std(axis=0):.4f} \")\n", "print(f\"Test set transformed, field1 has mean {tmp_test_transformed['field1'].mean(axis=0):.4f} and standard deviation {tmp_test_transformed['field1'].std(axis=0):.4f}\")\n", "print(f\"Skew of training set field1 before transformation: {tmp_train['field1'].skew(axis=0):.4f}\")\n", "print(f\"Skew of training set field1 after transformation: {tmp_train_transformed['field1'].skew(axis=0):.4f}\")\n", "print(f\"Skew of test set field1 before transformation: {tmp_test['field1'].skew(axis=0):.4f}\")\n", "print(f\"Skew of test set field1 after transformation: {tmp_test_transformed['field1'].skew(axis=0):.4f}\")" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "XpqHiFfwyXne" }, "source": [ "#### Expected Output:\n", "```CPP\n", "Training set transformed field1 has mean -0.0000 and standard deviation 1.0000 \n", "Test set transformed, field1 has mean 0.1144 and standard deviation 0.9749\n", "Skew of training set field1 before transformation: 1.6523\n", "Skew of training set field1 after transformation: 1.0857\n", "Skew of test set field1 before transformation: 1.3896\n", "Skew of test set field1 after transformation: 0.1371\n", "```" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "gran7yoORxQ9" }, "source": [ "#### Transform training and test data \n", "Use the function that you just implemented to make the data distribution closer to a standard normal distribution." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": {}, "colab_type": "code", "id": "DDC2ThP_K3Ea" }, "outputs": [], "source": [ "X_train, X_test = make_standard_normal(X_train_raw, X_test_raw)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "TnmdKuXDyXnk" }, "source": [ "After transforming the training and test sets, we'll expect the training set to be centered at zero with a standard deviation of $1$.\n", "\n", "We will avoid observing the test set during model training in order to avoid biasing the model training process, but let's have a look at the distributions of the transformed training data." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "colab_type": "code", "id": "WUYtMPVyyXnk", "outputId": "213ebd54-8d2b-4317-9f78-d946bd7fff49" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for col in X_train.columns:\n", " X_train[col].hist()\n", " plt.title(col)\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ovLMYBz6dteZ" }, "source": [ "<a name='5'></a>\n", "## 5. Build the Model\n", "\n", "Now we are ready to build the risk model by training logistic regression with our data.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a name='Ex-2'></a>\n", "### Exercise 2\n", "\n", "* Implement the `lr_model` function to build a model using logistic regression with the `LogisticRegression` class from `sklearn`. \n", "* See the documentation for [sklearn.linear_model.LogisticRegression](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression.fit)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<details> \n", "<summary>\n", " <font size=\"3\" color=\"darkgreen\"><b>Hints</b></font>\n", "</summary>\n", "<p>\n", " <ul>\n", " <li>You can leave all the parameters to their default values when constructing an instance of the <code>sklearn.linear_model.LogisticRegression</code> class. If you get a warning message regarding the <code>solver</code> parameter, however, you may want to specify that particular one explicitly with <code>solver='lbfgs'</code>. \n", " </li>\n", " <br></br>\n", " </ul>\n", "</p>\n", "</details> " ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": {}, "colab_type": "code", "id": "iLvr0IgoyXnz" }, "outputs": [], "source": [ "# UNQ_C2 (UNIQUE CELL IDENTIFIER, DO NOT EDIT)\n", "def lr_model(X_train, y_train):\n", " \n", " ### START CODE HERE (REPLACE INSTANCES OF 'None' with your code) ###\n", " # import the LogisticRegression class\n", " from sklearn.linear_model import LogisticRegression\n", " \n", " # create the model object\n", " model = LogisticRegression()\n", " \n", " # fit the model to the training data\n", " model.fit(X_train, y_train)\n", " \n", " ### END CODE HERE ###\n", " #return the fitted model\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Test Your Work\n", "\n", "Note: the `predict` method returns the model prediction *after* converting it from a value in the $[0,1]$ range to a $0$ or $1$ depending on whether it is below or above $0.5$." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 198 }, "colab_type": "code", "id": "9Fr-HA-TyXnv", "outputId": "68ba88ab-be91-4543-8c2c-481bdb3a3f84" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1.]\n", "[1.]\n" ] } ], "source": [ "# Test\n", "tmp_model = lr_model(X_train[0:3], y_train[0:3] )\n", "print(tmp_model.predict(X_train[4:5]))\n", "print(tmp_model.predict(X_train[5:6]))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "LpafSX3tyXny" }, "source": [ "#### Expected Output:\n", "```CPP\n", "[1.]\n", "[1.]\n", "```" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "FhuY1GjlyXn1" }, "source": [ "Now that we've tested our model, we can go ahead and build it. Note that the `lr_model` function also fits the model to the training data." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": {}, "colab_type": "code", "id": "sG6nr4hCyXn2" }, "outputs": [], "source": [ "model_X = lr_model(X_train, y_train)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "YI34GRSgeAaL" }, "source": [ "<a name='6'></a>\n", "## 6. Evaluate the Model Using the C-index\n", "\n", "Now that we have a model, we need to evaluate it. We'll do this using the c-index. \n", "* The c-index measures the discriminatory power of a risk score. \n", "* Intuitively, a higher c-index indicates that the model's prediction is in agreement with the actual outcomes of a pair of patients.\n", "* The formula for the c-index is\n", "\n", "$$ \\mbox{cindex} = \\frac{\\mbox{concordant} + 0.5 \\times \\mbox{ties}}{\\mbox{permissible}} $$\n", "\n", "* A permissible pair is a pair of patients who have different outcomes.\n", "* A concordant pair is a permissible pair in which the patient with the higher risk score also has the worse outcome.\n", "* A tie is a permissible pair where the patients have the same risk score.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a name='Ex-3'></a>\n", "### Exercise 3\n", "\n", "* Implement the `cindex` function to compute c-index.\n", "* `y_true` is the array of actual patient outcomes, 0 if the patient does not eventually get the disease, and 1 if the patient eventually gets the disease.\n", "* `scores` is the risk score of each patient. These provide relative measures of risk, so they can be any real numbers. By convention, they are always non-negative.\n", "* Here is an example of input data and how to interpret it:\n", "```Python\n", "y_true = [0,1]\n", "scores = [0.45, 1.25]\n", "```\n", " * There are two patients. Index 0 of each array is associated with patient 0. Index 1 is associated with patient 1.\n", " * Patient 0 does not have the disease in the future (`y_true` is 0), and based on past information, has a risk score of 0.45.\n", " * Patient 1 has the disease at some point in the future (`y_true` is 1), and based on past information, has a risk score of 1.25." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": {}, "colab_type": "code", "id": "a6fzYxG0R7Sp" }, "outputs": [], "source": [ "# UNQ_C3 (UNIQUE CELL IDENTIFIER, DO NOT EDIT)\n", "def cindex(y_true, scores):\n", " '''\n", "\n", " Input:\n", " y_true (np.array): a 1-D array of true binary outcomes (values of zero or one)\n", " 0: patient does not get the disease\n", " 1: patient does get the disease\n", " scores (np.array): a 1-D array of corresponding risk scores output by the model\n", "\n", " Output:\n", " c_index (float): (concordant pairs + 0.5*ties) / number of permissible pairs\n", " '''\n", " n = len(y_true)\n", " assert len(scores) == n\n", "\n", " concordant = 0\n", " permissible = 0\n", " ties = 0\n", " \n", " ### START CODE HERE (REPLACE INSTANCES OF 'None' with your code) ###\n", " # use two nested for loops to go through all unique pairs of patients\n", " for i in range(n):\n", " for j in range(i+1, n): #choose the range of j so that j>i\n", " \n", " # Check if the pair is permissible (the patient outcomes are different)\n", " if y_true[i] != y_true[j]:\n", " # Count the pair if it's permissible\n", " permissible += 1\n", "\n", " # For permissible pairs, check if they are concordant or are ties\n", "\n", " # check for ties in the score\n", " if scores[i] == scores[j]:\n", " # count the tie\n", " ties += 1\n", " # if it's a tie, we don't need to check patient outcomes, continue to the top of the for loop.\n", " continue\n", "\n", " # case 1: patient i doesn't get the disease, patient j does\n", " if y_true[i] == 0 and y_true[j] == 1:\n", " # Check if patient i has a lower risk score than patient j\n", " if scores[i] < scores[j]:\n", " # count the concordant pair\n", " concordant += 1\n", " # Otherwise if patient i has a higher risk score, it's not a concordant pair.\n", " # Already checked for ties earlier\n", "\n", " # case 2: patient i gets the disease, patient j does not\n", " if y_true[i] == 1 and y_true[j] == 0:\n", " # Check if patient i has a higher risk score than patient j\n", " if scores[i] > scores[j]:\n", " #count the concordant pair\n", " concordant += 1\n", " # Otherwise if patient i has a lower risk score, it's not a concordant pair.\n", " # We already checked for ties earlier\n", "\n", " # calculate the c-index using the count of permissible pairs, concordant pairs, and tied pairs.\n", " c_index = (concordant + 0.5 * ties) / permissible\n", " ### END CODE HERE ###\n", " \n", " return c_index" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "b5l0kdOkUO_Y" }, "source": [ "#### Test Your Work\n", "\n", "You can use the following test cases to make sure your implementation is correct." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "colab_type": "code", "id": "CzmPPfVQN8ET", "outputId": "6e4af0e8-1666-4704-f83a-a27b90ce7103" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Case 1 Output: 0.0\n", "Case 2 Output: 1.0\n", "Case 3 Output: 0.875\n" ] }, { "data": { "text/plain": [ "0.875" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# test\n", "y_true = np.array([1.0, 0.0, 0.0, 1.0])\n", "\n", "# Case 1\n", "scores = np.array([0, 1, 1, 0])\n", "print('Case 1 Output: {}'.format(cindex(y_true, scores)))\n", "\n", "# Case 2\n", "scores = np.array([1, 0, 0, 1])\n", "print('Case 2 Output: {}'.format(cindex(y_true, scores)))\n", "\n", "# Case 3\n", "scores = np.array([0.5, 0.5, 0.0, 1.0])\n", "print('Case 3 Output: {}'.format(cindex(y_true, scores)))\n", "cindex(y_true, scores)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "qHKVO2ipyXoA" }, "source": [ "#### Expected Output:\n", "\n", "```CPP\n", "Case 1 Output: 0.0\n", "Case 2 Output: 1.0\n", "Case 3 Output: 0.875\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Note\n", "Please check your implementation of the for loops. \n", "- There is way to make a mistake on the for loops that cannot be caught with unit tests.\n", "- Bonus: Can you think of what this error could be, and why it can't be caught by unit tests?" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "GOEaZigmOPVF" }, "source": [ "<a name='7'></a>\n", "## 7. Evaluate the Model on the Test Set\n", "\n", "Now, you can evaluate your trained model on the test set. \n", "\n", "To get the predicted probabilities, we use the `predict_proba` method. This method will return the result from the model *before* it is converted to a binary 0 or 1. For each input case, it returns an array of two values which represent the probabilities for both the negative case (patient does not get the disease) and positive case (patient the gets the disease). " ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "_J5TbdH_LSjB", "outputId": "e5b8802a-8c41-4f7f-e3ba-428c6cfb5f87" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c-index on test set is 0.8182\n" ] } ], "source": [ "scores = model_X.predict_proba(X_test)[:, 1]\n", "c_index_X_test = cindex(y_test.values, scores)\n", "print(f\"c-index on test set is {c_index_X_test:.4f}\")" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "8Iy7rIiyyXoD" }, "source": [ "#### Expected output:\n", "```CPP\n", "c-index on test set is 0.8182\n", "```" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "-BC_HAM6MXWU" }, "source": [ "Let's plot the coefficients to see which variables (patient features) are having the most effect. You can access the model coefficients by using `model.coef_`" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 316 }, "colab_type": "code", "id": "lZeo6AJbMdCq", "outputId": "613b4ce8-2d04-40b1-e2ce-d2232a62005f" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "coeffs = pd.DataFrame(data = model_X.coef_, columns = X_train.columns)\n", "coeffs.T.plot.bar(legend=None);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question: \n", "> __Which three variables have the largest impact on the model's predictions?__" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "7KbLT-zkNgLT" }, "source": [ "<a name='8'></a>\n", "## 8. Improve the Model\n", "\n", "You can try to improve your model by including interaction terms. \n", "* An interaction term is the product of two variables. \n", " * For example, if we have data \n", " $$ x = [x_1, x_2]$$\n", " * We could add the product so that:\n", " $$ \\hat{x} = [x_1, x_2, x_1*x_2]$$\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a name='Ex-4'></a>\n", "### Exercise 4\n", "\n", "Write code below to add all interactions between every pair of variables to the training and test datasets. " ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": {}, "colab_type": "code", "id": "biuVl-lGSaJp" }, "outputs": [], "source": [ "# UNQ_C4 (UNIQUE CELL IDENTIFIER, DO NOT EDIT)\n", "def add_interactions(X):\n", " \"\"\"\n", " Add interaction terms between columns to dataframe.\n", "\n", " Args:\n", " X (dataframe): Original data\n", "\n", " Returns:\n", " X_int (dataframe): Original data with interaction terms appended. \n", " \"\"\"\n", " features = X.columns\n", " m = len(features)\n", " X_int = X.copy(deep=True)\n", "\n", " ### START CODE HERE (REPLACE INSTANCES OF 'None' with your code) ###\n", " # 'i' loops through all features in the original dataframe X\n", " for i in range(m):\n", " \n", " # get the name of feature 'i'\n", " feature_i_name = features[i]\n", " \n", " # get the data for feature 'i'\n", " feature_i_data = X.loc[:, feature_i_name]\n", " \n", " # choose the index of column 'j' to be greater than column i\n", " for j in range(i+1, m):\n", " \n", " # get the name of feature 'j'\n", " feature_j_name = features[j]\n", " \n", " # get the data for feature j'\n", " feature_j_data = X.loc[:, feature_j_name]\n", " \n", " # create the name of the interaction feature by combining both names\n", " # example: \"apple\" and \"orange\" are combined to be \"apple_x_orange\"\n", " feature_i_j_name = f\"{feature_i_name}_x_{feature_j_name}\"\n", " \n", " # Multiply the data for feature 'i' and feature 'j'\n", " # store the result as a column in dataframe X_int\n", " X_int[feature_i_j_name] = feature_i_data * feature_j_data\n", " \n", " ### END CODE HERE ###\n", "\n", " return X_int" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "qV4rRIdwVJPm" }, "source": [ "#### Test Your Work\n", "\n", "Run the cell below to check your implementation. " ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 255 }, "colab_type": "code", "id": "x5Q7eUpBcyLG", "outputId": "18722d74-ce4c-4b36-ca29-196b4010ed06" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original Data\n", " Age Systolic_BP\n", "1824 -0.912451 -0.068019\n", "253 -0.302039 1.719538\n", "1114 2.576274 0.155962\n", "3220 1.163621 -2.033931\n", "2108 -0.446238 -0.054554\n", "Data w/ Interactions\n", " Age Systolic_BP Age_x_Systolic_BP\n", "1824 -0.912451 -0.068019 0.062064\n", "253 -0.302039 1.719538 -0.519367\n", "1114 2.576274 0.155962 0.401800\n", "3220 1.163621 -2.033931 -2.366725\n", "2108 -0.446238 -0.054554 0.024344\n" ] } ], "source": [ "print(\"Original Data\")\n", "print(X_train.loc[:, ['Age', 'Systolic_BP']].head())\n", "print(\"Data w/ Interactions\")\n", "print(add_interactions(X_train.loc[:, ['Age', 'Systolic_BP']].head()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Expected Output:\n", "```CPP\n", "Original Data\n", " Age Systolic_BP\n", "1824 -0.912451 -0.068019\n", "253 -0.302039 1.719538\n", "1114 2.576274 0.155962\n", "3220 1.163621 -2.033931\n", "2108 -0.446238 -0.054554\n", "Data w/ Interactions\n", " Age Systolic_BP Age_x_Systolic_BP\n", "1824 -0.912451 -0.068019 0.062064\n", "253 -0.302039 1.719538 -0.519367\n", "1114 2.576274 0.155962 0.401800\n", "3220 1.163621 -2.033931 -2.366725\n", "2108 -0.446238 -0.054554 0.024344\n", "```" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "rKKiFF5Pdwtv" }, "source": [ "Once you have correctly implemented `add_interactions`, use it to make transformed version of `X_train` and `X_test`." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "colab": {}, "colab_type": "code", "id": "mYcDf7nsd2nh" }, "outputs": [], "source": [ "X_train_int = add_interactions(X_train)\n", "X_test_int = add_interactions(X_test)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Y6IgFZWxLqTa" }, "source": [ "<a name='9'></a>\n", "## 9. Evaluate the Improved Model\n", "\n", "Now we can train the new and improved version of the model." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "model_X_int = lr_model(X_train_int, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's evaluate our new model on the test set." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "xn7U6_bEfWKI", "outputId": "d43fe99f-e3c0-4575-b44c-93efe24917bb" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c-index on test set without interactions is 0.8182\n", "c-index on test set with interactions is 0.8281\n" ] } ], "source": [ "scores_X = model_X.predict_proba(X_test)[:, 1]\n", "c_index_X_int_test = cindex(y_test.values, scores_X)\n", "\n", "scores_X_int = model_X_int.predict_proba(X_test_int)[:, 1]\n", "c_index_X_int_test = cindex(y_test.values, scores_X_int)\n", "\n", "print(f\"c-index on test set without interactions is {c_index_X_test:.4f}\")\n", "print(f\"c-index on test set with interactions is {c_index_X_int_test:.4f}\")" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "-tYVyw-6jLfV" }, "source": [ "You should see that the model with interaction terms performs a bit better than the model without interactions.\n", "\n", "Now let's take another look at the model coefficients to try and see which variables made a difference. Plot the coefficients and report which features seem to be the most important." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 389 }, "colab_type": "code", "id": "9PpyFFqFjRpW", "outputId": "9cc3ce2c-3a8a-4d3a-cf76-bef5862cc6c3" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "int_coeffs = pd.DataFrame(data = model_X_int.coef_, columns = X_train_int.columns)\n", "int_coeffs.T.plot.bar();" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "1bvx65OqOCUT" }, "source": [ "### Questions:\n", "> __Which variables are most important to the model?__<br>\n", "> __Have the relevant variables changed?__<br>\n", "> __What does it mean when the coefficients are positive or negative?__<br>\n", "\n", "You may notice that Age, Systolic_BP, and Cholesterol have a positive coefficient. This means that a higher value in these three features leads to a higher prediction probability for the disease. You also may notice that the interaction of Age x Cholesterol has a negative coefficient. This means that a higher value for the Age x Cholesterol product reduces the prediction probability for the disease.\n", "\n", "To understand the effect of interaction terms, let's compare the output of the model we've trained on sample cases with and without the interaction. Run the cell below to choose an index and look at the features corresponding to that case in the training set. " ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 204 }, "colab_type": "code", "id": "Xj8v7ZxSShC7", "outputId": "0d80937f-7645-4e68-eafa-766b228ed981" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Age 2.502061\n", "Systolic_BP 1.713547\n", "Diastolic_BP 0.268265\n", "Cholesterol 2.146349\n", "Age_x_Systolic_BP 4.287400\n", "Age_x_Diastolic_BP 0.671216\n", "Age_x_Cholesterol 5.370296\n", "Systolic_BP_x_Diastolic_BP 0.459685\n", "Systolic_BP_x_Cholesterol 3.677871\n", "Diastolic_BP_x_Cholesterol 0.575791\n", "Name: 5970, dtype: float64\n" ] } ], "source": [ "index = index = 3432\n", "case = X_train_int.iloc[index, :]\n", "print(case)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "0LbyZ8a39hSw" }, "source": [ "We can see that they have above average Age and Cholesterol. We can now see what our original model would have output by zero-ing out the value for Cholesterol and Age." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 204 }, "colab_type": "code", "id": "2HcpczwN9sB4", "outputId": "8570702b-9b8d-4420-a2dc-0913bc4d84f9" }, "outputs": [ { "data": { "text/plain": [ "Age 2.502061\n", "Systolic_BP 1.713547\n", "Diastolic_BP 0.268265\n", "Cholesterol 2.146349\n", "Age_x_Systolic_BP 4.287400\n", "Age_x_Diastolic_BP 0.671216\n", "Age_x_Cholesterol 0.000000\n", "Systolic_BP_x_Diastolic_BP 0.459685\n", "Systolic_BP_x_Cholesterol 3.677871\n", "Diastolic_BP_x_Cholesterol 0.575791\n", "Name: 5970, dtype: float64" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_case = case.copy(deep=True)\n", "new_case.loc[\"Age_x_Cholesterol\"] = 0\n", "new_case" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "iasI8KMLmcPO", "outputId": "5c7d8884-ae10-4453-9717-d4818d45f0d7" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Output with interaction: \t0.9448\n", "Output without interaction: \t0.9965\n" ] } ], "source": [ "print(f\"Output with interaction: \\t{model_X_int.predict_proba([case.values])[:, 1][0]:.4f}\")\n", "print(f\"Output without interaction: \\t{model_X_int.predict_proba([new_case.values])[:, 1][0]:.4f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Expected output\n", "```CPP\n", "Output with interaction: 0.9448\n", "Output without interaction: 0.9965\n", "```" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "rdYQijiWnhyZ" }, "source": [ "We see that the model is less confident in its prediction with the interaction term than without (the prediction value is lower when including the interaction term). With the interaction term, the model has adjusted for the fact that the effect of high cholesterol becomes less important for older patients compared to younger patients." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "zY6_1iIeajok" }, "source": [ "# Congratulations! \n", "\n", "You have finished the first assignment of Course 2. " ] } ], "metadata": { "colab": { "collapsed_sections": [], "include_colab_link": true, "name": "C2M1_Assignment.ipynb", "provenance": [], "toc_visible": true }, "coursera": { "schema_names": [ "AI4MC2-1" ] }, "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.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }