{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Dummy variable and interaction: 더미변수와 상호작용"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np     #넘피\n",
    "import pandas as pd    #판다스\n",
    "import matplotlib.pyplot as plt  #시각화\n",
    "import os\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.linear_model import LinearRegression  #선형회귀\n",
    "from sklearn import metrics  #metrics가져오면 평가지표 가져올 수 있음\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.1. Read in the data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "os.chdir(r'C:\\Users\\Gram\\Desktop\\myPyCode\\04 머신러닝 - 실습\\data')                  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "df = pd.read_csv('data_studentlist.csv', header='infer',encoding='latin1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "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>name</th>\n",
       "      <th>gender</th>\n",
       "      <th>age</th>\n",
       "      <th>grade</th>\n",
       "      <th>absence</th>\n",
       "      <th>bloodtype</th>\n",
       "      <th>height</th>\n",
       "      <th>weight</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>Jared Diamond</td>\n",
       "      <td>M</td>\n",
       "      <td>23</td>\n",
       "      <td>3</td>\n",
       "      <td>Y</td>\n",
       "      <td>O</td>\n",
       "      <td>165.3</td>\n",
       "      <td>68.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>Sarah O'Donnel</td>\n",
       "      <td>F</td>\n",
       "      <td>22</td>\n",
       "      <td>2</td>\n",
       "      <td>N</td>\n",
       "      <td>AB</td>\n",
       "      <td>170.1</td>\n",
       "      <td>53.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>Brian Martin</td>\n",
       "      <td>M</td>\n",
       "      <td>24</td>\n",
       "      <td>4</td>\n",
       "      <td>N</td>\n",
       "      <td>B</td>\n",
       "      <td>175.0</td>\n",
       "      <td>80.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>David Hassel</td>\n",
       "      <td>M</td>\n",
       "      <td>23</td>\n",
       "      <td>3</td>\n",
       "      <td>N</td>\n",
       "      <td>AB</td>\n",
       "      <td>182.1</td>\n",
       "      <td>85.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>Clara Rodriquez</td>\n",
       "      <td>F</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "      <td>A</td>\n",
       "      <td>168.0</td>\n",
       "      <td>49.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              name gender  age  grade absence bloodtype  height  weight\n",
       "0    Jared Diamond      M   23      3       Y         O   165.3    68.2\n",
       "1   Sarah O'Donnel      F   22      2       N        AB   170.1    53.0\n",
       "2     Brian Martin      M   24      4       N         B   175.0    80.1\n",
       "3     David Hassel      M   23      3       N        AB   182.1    85.7\n",
       "4  Clara Rodriquez      F   20      1       Y         A   168.0    49.5"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#변수 heigt,weight,gender 3개 사용\n",
    "df.head(5)   \n",
    "\n",
    "#더미변수 1개 필요(유형 가짓수 -1 )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2. Linear regression without dummy variable: 더미변수가 없는 선형회귀\n",
    "<br>\n",
    "명목형 설명 변수가 없는 경우: weight ~ height (y~x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "lm = LinearRegression()    #함수실행해서 선형회귀 객체 만듬(함수에 아무것도 안 넣어서 결과안나옴)\n",
    "X = df.height.values.reshape(-1,1) #시리즈에서 값을 뽑아 넘피배열을 reshape해서 행열 맞춰줌\n",
    "Y = df.weight.values.reshape(-1,1)\n",
    "\n",
    "lm.fit(X,Y)  #학습(in sample이라 안쪼갬)\n",
    "\n",
    "b0 = lm.intercept_[0] #intercept가 넘피배열이라 원소값 가져옴\n",
    "b1 = lm.coef_[0][0]   #coef라는 넘피배열에서 가져옴\n",
    "\n",
    "rsq1 = lm.score(X,Y) #R^2 구하는 공식  \n",
    "rmse1 = np.sqrt(metrics.mean_squared_error(Y, lm.predict(X))) #y랑 예측된y 넣어 계산"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3de3SU1bnH8e8DMUoElat6FJKKJhGwoMR6V9B6VygqFJpFPVIP1ksRBGuRFvVwUIpYFSpIzlHQEq8UBYqCIIoXBCGIqIR4BQQBQRS5RCDJc/6YSYmYQEIy887l91kra2Z2ZpJfXvGZPXu/797m7oiISPKoF3QAERGJLhV+EZEko8IvIpJkVPhFRJKMCr+ISJJJCTpAdTRr1swzMjKCjiEiElcKCgo2uXvzvdvjovBnZGSwePHioGOIiMQVM1tVWbuGekREkowKv4hIklHhFxFJMir8IiJJRoVfRCTJqPCLSODy8yEjA+rVC93m5wedKLHFxemcIpK48vOhb1/YsSP0eNWq0GOA3NzgciUy9fhFJFBDhuwp+uV27Ai1S2So8ItIoFavrlm71J4Kv4gEqlWrmrVL7anwi0ighg+HtLQft6WlhdolMlT4RSRQubmQlwfp6WAWus3L08RuJOmsHhEJXG6uCn00qccvIpJkVPhFRJKMCr+ISJJR4RcRSTIq/CIiSUaFX0Qkyajwi4gkGRV+EZEko8IvIpJkVPhFRJKMCr+ISJJR4RcRSTIq/CIiSUaFX0Qkyajwi4gkGRV+EZEko8IvIpJkVPhFRGLM9u3bueeee5g7d25Efr4Kv4hIjCgtLeWxxx4jMzOToqIiWrduHZHfo8IvEkPy8yEjA+rVC93m5wedSKJl8+bNlJWV8cYbb/DCCy/w1FNPkZ6eHpHfFdHN1s1sAHA94MAHwHXA0cAzQBNgCdDb3XdFModIPMjPh759YceO0ONVq0KPQRuRJ7IPP/yQ22+/nXr16jFjxgyeeOKJiP/OiPX4zewYoB+Q4+7tgPpAT+CvwIPufgLwLfC7SGUQiSdDhuwp+uV27Ai1S2IaOXIkF1xwAZdeeikvvPBC1H5vpId6UoAGZpYCpAHrgPOByeHvPwH8KsIZROLC6tU1a5f4tH37dkaNGkVxcTFdunRhxYoV9OvXj9TU1KhliFjhd/e1wChgNaGCvwUoAL5z95Lw09YAx1T2ejPra2aLzWzxxo0bIxVTJGa0alWzdokvpaWlTJgwgaysLAoKCti+fTvZ2dk0btw46lkiOdTTGOgK/Az4D+BQ4NJKnuqVvd7d89w9x91zmjdvHqmYIjFj+HBIS/txW1paqF3iW2lpKcuWLWPChAn885//5Omnn6ZZs2aB5YnkUM8vgS/cfaO77wamAGcCR4SHfgCOBb6KYAaRuJGbC3l5kJ4OZqHbvDxN7Mazjz76iMsuu4xRo0Zx8sknM2/ePE477bSgY0W08K8GTjezNDMz4AJgOfAacE34OdcCUyOYQSSu5ObCypVQVha6VdGPT+7OTTfdROfOnbn44osZMGAAAKFSGLxIjvEvJDSJu4TQqZz1gDzgDuA2M/sUaAo8FqkMIiLRtGPHDmbNmoWZ0blzZ4qKirj11lujOnFbHRE9q8fd73L3bHdv5+693X2nu3/u7r9w9+Pdvbu774xkBhGRSCsrK2PixIlkZmbyj3/8A3ene/fugUzcVkdEL+ASEUkGo0aN4sUXX+T555/njDPOCDrOfmnJBhGRA1BYWEiXLl1YtmwZt956K2+//XZcFH1Q4RcRqZFvv/2WG2+8kfPOO4/OnTuTlZXFwQcfHDMTt9WhoR4RkWrYsWMHGzdupEmTJjRp0oQVK1bQpEmToGMdEPX4RUT2oaysjCeffJKsrCwmTJhAo0aNGD58eNwWfVCPX0Rkn6655hrWrVvHs88+y5lnnhl0nDqhHr+IyF5WrFhB//79KS0t5eGHH2b+/PkJU/RBhV9E5N++/vprbrrpJs455xyOPfZYysrKaNmyZVxN3FaHhnpEJOkVFxeTkpLCokWLSE1NZcWKFTRt2jToWBGjHr+IJK2ysjImTZpEdnY2s2bN4vLLL+ehhx5K6KIP6vGLSJLaunUrnTt3pn79+uTn53P22WcHHSlq1OMXkQMSrxvDFxUVMWXKFBo1asSoUaNYsGBBUhV9UOEXkQNQvjH8qlXgvmdj+Fgu/hs3buSWW27h7LPPZt26dQB06tQp4SZuq0NDPSJSY/vaGD7W9hBwd8yMv/zlLxx88MEUFhYGuvtVLFDhF5Eai4eN4cvKynjmmWcYNmwYb775JuPGjUvK3n1lVPhFpMZatQoN71TWHguWL1/OtddeC8D48eOTvoe/N43xi0iNxerG8B9//DErV66kSZMmDBgwgIULF3LuuecGGyoGqfCLSI3F2sbwmzZtol+/fpx55pksXbqUo446it/85jfUq6cSVxkN9YjIAcnNjY2J3NLSUs466ywuuugiCgsLad68edCRYp4Kv4jEHXfn2WefZfbs2Tz22GMUFBTQsGHDoGPFDRV+EYkrCxYs4NZbb6W0tJQHHngAQEW/hjQAJiJxYeXKlbg7q1evpl+/frz77rucd955QceKS+rxi0hM++abbxg2bBiTJk3i7bffpkePHkFHinvq8YtIzCoqKiI7O5vdu3ezfPlysrKygo6UENTjF5GY4u4899xzpKSkcNVVV/HOO+9w/PHHBx0roajHLyIxY/78+ZxxxhmMHDmSI488EjNT0Y8A9fhFJHDFxcU0aNCA8ePHc/PNN5Obm6uLryJIhV9EArN582aGDRvGSy+9xPLly3niiSeCjpQU9JYqIoGYNm0aWVlZ/PDDD7zxxhvUr18/6EhJQz1+EYkad2fy5Mmce+65tGvXjnnz5tGmTZugYyUdFX4RiYp33nmHgQMHUlxcTJs2bWjbtm3QkZKWhnpEJKLcnU2bNvHb3/6WG264gYKCAhX9gKnHLyIRsXnzZoYPH05xcTFjx46lqKhIZ+rECP1XEJE6N378eLKzs9m+fTtDhw4FUNGPIerxi0idcHfmz5/PWWedRePGjXnttdc0pBOjVPhFpNYWLlzIwIED2bZtG2+++aYWUotx+uwlIrUyY8YMrr76aq6//noKCgpo1KhR0JFkP9TjF5Ea+/bbb7n33nu54IILuPDCCykqKuLQQw8NOpZUk3r8Elfy8yEjA+rVC93m5wedKLmUlJQwevRosrOz2bJlC+3btyc1NVVFP85ErMdvZlnAsxWajgOGAk+G2zOAlUAPd/82UjkkceTnQ9++sGNH6PGqVaHHEBubficyd2f9+vW0aNGCoqIiXn31Vdq1axd0LDlA5u6R/yVm9YG1wGnAzcBmdx9hZn8CGrv7Hft6fU5Oji9evDjiOSW2ZWSEiv3e0tNh5cpop0ke7777LgMHDqRJkyZMnTo16DhSA2ZW4O45e7dHa6jnAuAzd18FdAXKl+B7AvhVlDJInFu9umbtUnvDhg2jW7duXHfddUyZMiXoOFJHolX4ewJPh+8f6e7rAMK3LSp7gZn1NbPFZrZ448aNUYopsaxVq5q1y4H57rvvuPvuu9m2bRu5ubkUFRXRp08frZ6ZQCJe+M0sFegCPF+T17l7nrvnuHtO8+bNIxNO4srw4ZCW9uO2tLRQu9Te7t27GTNmDFlZWaxZs4Zdu3Zx3HHH0bBhw6CjSR2LxumclwJL3H1D+PEGMzva3deZ2dHA11HIIAmgfAJ3yJDQ8E6rVqGir4nd2nF3du/eTWFhITNmzGD27Nn8/Oc/DzqWRFA0hnp6sWeYB2AacG34/rWAZouk2nJzQxO5ZWWhWxX92lm0aBGdOnXiwQcfpH379sycOVNFPwlEtPCbWRpwIVBxVmgEcKGZfRL+3ohIZhCRn3J3rr32Wrp27Urv3r0ZNGhQ0JEkiiI61OPuO4Cme7V9Q+gsHxGJsi1btjB37ly6detGjx49eOSRRzSGn4R05a7Uiq6kjQ+7d+/mkUceISsri5dffhl35/LLL1fRT1Jaq0cOmK6kjR9/+9vfmDNnDrNmzaJ9+/ZBx5GAVavHb2ZnVadNksuQIXuKfrkdO0LtEryCggLOP/983nvvPQYOHMgrr7yioi9A9Yd6xlSzTZKIrqSNTd988w29e/fmyiuvpFevXpx00kmkpKRgZkFHkxixz6EeMzsDOBNobma3VfjWYYAu40tyrVpVvnaOrqQNxvfff8+GDRs45phjaNOmDWPHjtXa+FKp/fX4U4GGhN4gGlX4+h64JrLRJNbpStrYUFJSwrhx48jMzGTy5MmkpaUxePBgFX2p0j57/O4+D5hnZhPDC6yJ/JuupI0N3bp1o7i4mJkzZ9KhQ4eg40gcqNayzGaWCQwitIb+v98s3P38iCWrQMsyi/zYkiVLGDt2LI8++ijffvstzZo10xi+/ERVyzJX93TO54FHgf8DSusymIhU35o1a7jzzjuZPXs2d999NwBaxFBqqrqFv8Tdx0U0iYhUaevWraSmplJYWEjLli0pKirisMMOCzqWxKl9Tu6aWRMzawJMN7ObzOzo8rZwu4hEUElJCePHjyczM5NXX32VCy+8kOHDh6voS63sr8dfADhQPnh4e4XvOaF9dEUkArZu3crpp5/OkUceyYwZMzjllFOCjiQJYn9n9fwsWkFEJGTp0qV89NFH5ObmMnHiRHJycjRxK3Wquks2XFXJ1wVmVum2iSJSc2vWrOG6667jkksuYefOnQCceuqpKvpS56o7ufs74AzgtfDjTsACINPM/tvd/xGBbCJJoaSkhJSUFEaOHMnRRx/Nxx9/rDF8iajqFv4y4MTy7RPN7EhgHHAa8Aagwi9SQyUlJTz++OPcd999LFq0iNGjRwcdSZJEdQt/RoU9cyG0T26mu282s90RyCWS0D744AN69epFs2bNeP7552nWrFnQkSSJVLfwv2lm/yJ0IRfA1cAbZnYo8F1EkokkoPfff5+0tDSOOuoo7r33Xq688kqN4UvUVXdZ5puBiUAH4GTgSeBmd9/u7p0jlE0kYaxdu5Y+ffpw0UUX8fHHH9O8eXO6dOmioi+BqFbh95DJ7j7A3fuH7+9/kR8RobS0lF/+8pe0aNGCjz/+mMsvvzzoSD+hLTSTy/7W43/L3c82s62ELtj697cIvR/o1AORSpSWljJhwgTmzJnDM888w9KlSzn44IODjlUpbaGZfPbZ43f3s8O3jdz9sApfjVT0RSr3+uuv06FDB5588kkGDhwIELNFH7SFZjKq7hg/Zna2mV0Xvt/MzHRVr0gFhYWFlJWVsWXLFoYNG8a8efM49dRTg461X9pCM/lU98rdu4A7gMHhplRgUqRCicSTr776iuuvv55OnTrx6aef0rVrV371q1/FzcRtVVtlagvNxFXdHn83oAuwHcDdvyK0BaNIUisqKuKkk06iadOmFBUVkZmZGXSkGtMWmsmnuufx73J3NzMHCJ+/L5KUSktLeeKJJzjkkEPo1asXy5Yt45hjjgk61gHTFprJp7o9/ufMbDxwhJn9FzAH+N/IxRKJTbNnz+aUU05hwoQJnHDCCZhZXBf9crm5sHIllJWFblX0E9v+TufsD7wNPAR0Br4HsoCh7j478vFEYsOWLVs4/PDDeeGFF7jrrrvo1q1b3Izhi+xtf0M9xwIPA9nAMmA+oTeCggjnEokJ69evZ+jQocybN4/ly5czduzYoCOJ1Nr+zuMf5O5nAkcBdwKbgT7Ah2a2PAr5RKolEleeTpkyhXbt2nHEEUewcOFC6tevX/sfKhIDqjvG3wA4DDg8/PUVsDBSoSQ51FWxLr/ydNUqcN9z5emB/LzS0lImTpzI2rVrycnJYdGiRYwcOZIjjjjiwMKJxCDb15I7ZpYHtAW2Eir0C4AF7v5tdOKF5OTk+OLFi6P5KyXC9l4mAEKnEObl1XxiMSMjVOz3lp4emqisrjlz5jBo0CAaNmzIY489RlZWVs2CiMQYMytw95y92/fX428FHAysB9YCa9AyzFIH6nKZgNpeeVpWVsamTZu47bbb+Mtf/sKbb76poi8JbX9j/JcApwKjwk0DgUVm9oqZ3RPpcJK46nKZgAO98nT9+vXccMMN3HDDDTRr1oz333+fq6++Oi7O1tFqmlIb+x3jDy/J/CHwEvAyobN6WgO3RjibJLC6XCbgQK48feihh2jXrh0NGzZk5MiRAHFR8KFu5zQkOe2z8JtZPzN7xsy+JLS37hVAEXAV0CQK+SRB1eUyAbm5obmB9HQwC91WNldQVlbGrFmzAGjdujXvvvsuDzzwAI0bNz7AvyIYWk1Tamt/k7t/I3zuvruvi1qqvWhyNzHl50dvmYC5c+cycOBAGjRowKxZs2jUKH6XmqpXL9TT35tZ6MpbkXJVTe7u8wIud78tcpEk2eXmRmdpgOnTp9O/f39GjBjBNddcEzdDOlVp1arys5i0mqZUV7XX4xeJJxs2bODGG29k6tSpXHrppSxfvpzu3bvHfdEHraYptRfRwm9mR5jZZDNbYWaFZnaGmTUxs9lm9kn4Nr4GWCWm7dq1i3vvvZe2bdvSoEEDzjnnHFJSUmJ6B6yaqu6chkhVqrss84F6GJjp7teYWSqQRmjph1fdfYSZ/Qn4E6FNXkQOWFlZGatWrSI9PZ3vvvuOBQsWcPzxxwcdK2KiNUwmiWmfk7u1+sFmhwHvA8d5hV9iZkVAJ3dfZ2ZHA6+7+z6vltHkruzL66+/zsCBAznuuON4/vnng44jEjMO9Mrd2jgO2AhMMLP3zOz/whu4HFl+hlD4tkUVgfua2WIzW7xx48YIxpR4NnToUPr06cMdd9zBc889F3QckbgQycKfApwCjHP3kwlt2/in6r7Y3fPcPcfdc5o3bx6pjBKHvv76awYNGsT3339P3759KSwspEePHgkxcSsSDZEs/GuANe5evornZEJvBBvCQzyEb7+OYAZJIMXFxYwYMYI2bdpQUlKCu3Pssccm1MStSDREbHLX3deb2ZdmluXuRcAFwPLw17XAiPDt1EhlkMRQVlbGzp07+fzzz1m8eDHvvPMOJ5xwQtCxROJWpM/j/wOQb2bLgA7AvYQK/oVm9glwYfixSKXmzZvHL37xC8aMGUPbtm2ZPHmyir5ILUX0dE53Xwr8ZEaZUO9fpEruzq9//WsWLVrEfffdx69//eugI4kkDF25KzFl48aN5OfnY2bceOONFBYW0rNnT03citQhFX6JCT/88AN//etfOfHEE1m0aBHuTufOnTnkkEOCjiaScCJ95a7IPrk7Zsbo0aNZsGAB8+fPJzMzM+hYIglNhV8C88YbbzBo0CDGjRvHoEGDqFdPH0BFokGFX6Ju48aN9O3blyVLlnDfffdx8sknq+iLRJEKv0TNpk2b2LBhA61bt6Zz5848/fTTGsMXCYC6WRJxP/zwA/fffz8nnngiM2fO5JBDDqFfv34q+iIBUY9fIu6qq64iNTWVt956i6ysfS7EKiJRoB6/RMRbb71Fz5492bVrF08//TQvvviiir5IjFDhlzr12WefcfXVV/Ob3/yGK664gpSUFA4//PCgY4lIBRrqkTrxzTffkJaWxtq1a8nJyWHSpEk0aNAg6FgiUgn1+KVWdu7cyQMPPEB2djbz5s3j3HPPZfDgwSr6IjFMPX45YNu2baNDhw60adOGN998k+zs7KAjiUg1qPBLjc2fP5/ly5dz/fXXM23aNNq0aRN0JBGpAQ31JKD8fMjIgHr1Qrf5+XXzcz/77DO6d+9Oz549OfTQQwFU9EXikAp/gsnPh759YdUqcA/d9u1bu+K/c+dOAMaPH8/JJ5/MihUr6NWrVx0lljoVqXd9SSjm7kFn2K+cnBxfvHhx0DHiQkZGqNjvLT0dVq6s2c/auXMnjzzyCKNGjWLZsmU0a9asLiJKpJS/6+/YsactLQ3y8iA3N7hcEhgzK3D3n2yGpR5/glm9umbtVXnvvfdo06YNc+fOZc6cOSr68WDIkB8XfQg9HjIkmDwSszS5m2Bataq8x9+qVfVe/84773D44YeTkZFBXl4eF1ygXTLjRl2960vCU48/wQwfHvp0X1FaWqh9Xz7//HN69OhBjx49WLNmDY0bN1bRjzdVvbtX911fkoYKf4LJzQ0N6aang1nodn9DvKWlpXTt2pX27dtTVFTERRddFL3AUncO9F1fko4md5PUrl27GDduHHPnzmXq1KmUlJSQkqKRv7iXnx8a01+9OtTTHz5cE7tJrKrJXf2fnoRmzpzJLbfcQmZmJvfffz+Ain6iyM1VoZf90v/tSWTJkiW0b98eM2PcuHFceOGFQUcSkQCo8CeBL774gsGDB/PWW2/x2muvcfHFFwcdSUQCpMndBFdUVMSpp55K27ZtKSoq4oQTTgg6UvQl4tWsifg3SdSox5+Adu3axaOPPsqhhx5Knz59WLFiRfJegLX31azla1hA/I6FJ+LfJFGlHn+CeeGFF2jbti0vv/wyp512GmaWvEUfEvNq1kT8mySq1ONPEF9//TUtWrRg/vz5PPLIIzoXv1wiXs2aiH+TRJV6/HFu5cqV9OrVi3PPPZfS0lLuv/9+Ff2KEvFq1kT8mySqVPjj2LPPPkvHjh3Jzs5m8eLF1H/mGU347S0Rr2ZNxL9JosvdY/6rY8eOLiG7du3yMWPG+MqVK33t2rW+du3a0DcmTXJPS3MPLcMf+kpLC7Unu0mT3NPT3c1Ct4lwTBLxb5I6Byz2SmqqlmyIE+7O1KlT+eMf/0hGRgZjx47l+OOP3/OEulyIX0QSgpZsiGMlJSV89913jBw5kjFjxlR+AZYm/ESkmlT4Y9iqVasYMmQIqampPP7448yfP7/qJ9d2IX4RSRqa3I1RI0aM4JRTTqF169aMHj16/y/QhJ+IVJN6/DFk9+7dTJ8+nW7dutGxY0eWLVvGMcccU70Xl1+xqSV5RWQ/NLkbA9yd6dOn88c//pGWLVsyZcoUGjVqFHQsEYlzmtyNYdOnT2fw4ME8+OCDXHLJJZhZ0JFEJIFFtPCb2UpgK1AKlLh7jpk1AZ4FMoCVQA93/zaSOWLRl19+yZAhQ+jSpQvdunXjsssu02YoIhIV0Zjc7ezuHSp83PgT8Kq7nwC8Gn6cNHbt2sWdd95Jhw4dyMjI4OKLL6Z+/foq+iISNUFUm65Ap/D9J4DXgTsCyBFVJSUlfPLJJ2RnZ3PIIYfw/vvvc+yxxwYdS0SSUKR7/A68YmYFZhZeMJwj3X0dQPi2RYQzBMrd+de//sVJJ53E//zP/2BmDB06VEW/OrTZiEhERLrHf5a7f2VmLYDZZraiui8Mv1H0BWgVxxchDR48mGnTpnH//fdz+eWXBx0nfmizEZGIidrpnGZ2N7AN+C+gk7uvM7OjgdfdPWtfr4230znXrFnD8OHDuffee9m9ezdNmjTRGH5Nae0hkVqr6nTOiA31mNmhZtao/D5wEfAhMA24Nvy0a4GpkcoQbVu3buXPf/4z7du3p2nTphx00EG0aNFCRf9AaO0hkYiJZEU6EnghfE56CvCUu880s0XAc2b2O2A10D2CGaKipKSE4uJi1q1bx5o1a1i6dCktW7YMOlZ809pDIhETsR6/u3/u7u3DX23dfXi4/Rt3v8DdTwjfbo5Uhkhzd1566SXat29PXl4emZmZTJw4UUW/LmjtIZGI0RjEAXJ3unTpwqeffqqJ20jQ2kMiEaO1empo7dq1zJgxg759+7JgwQI6duzIQQcdFHQsEZGfiPrkbqLZtm0bQ4cO5ec//zmrVq3C3Tn99NNV9EUk7mioZz/KysqoV68eeXl5fPHFF7z33ntxfV2BiIgKfxXcnZkzZ3L77bczceJEBgwYoFUzRSQhqPBXYsOGDfTu3ZvVq1czcuRIOnbsqKIvIglDhb+Cr776ivXr19OuXTt69uxJ7969NYYvIglHk7uEJm7vuusuTjrpJN5++21SU1Pp06ePir6IJCT1+IHu3bvTtGlTlixZQnp6etBxREQiKmkL/6xZs/j73//O5MmTmTJlCg0aNAg6kohIVCRd4S8sLKR///588cUXjBw5ktTUVE3cikhSSZrCv27dOho1asSWLVu44oor+P3vf68xfBFJSgk/ubt9+3buuece2rVrx/z58zn99NP5wx/+oKIvIkkroXv8W7dupW3btpx99tkUFBSQkZERdCQRkcAldI+/UaNGzBswgKfmzyfjuOO0b6uICAle+MnP52d//nNoQw/3Pfu2RqL4a2NwEYkTiV34hwzZs1l3uR07Qu11qXxj8Gi8wYiI1FJiF/5o7dsarTcYEZE6kNiFv6rlk+t6WWVtDC4icSSxC3+09m2N1huMiEgdSOzCn5sLeXmQng5modu8vLrft1Ubg4tIHEno8/iBUJGP9Abd2hhcROJI4hf+aInGG4yISB1I7KEeERH5CRV+EZEko8IvIpJkVPhFRJKMCr+ISJJR4RcRSTIq/CIiScbcPegM+2VmG4FVB/jyZsCmOowTafGUV1kjJ57yxlNWiK+8tc2a7u7N926Mi8JfG2a22N1zgs5RXfGUV1kjJ57yxlNWiK+8kcqqoR4RkSSjwi8ikmSSofDnBR2ghuIpr7JGTjzljaesEF95I5I14cf4RUTkx5Khxy8iIhWo8IuIJJm4L/xm9riZfW1mH1Zou9vM1prZ0vDXZeH2DDMrrtD+aNBZw+1/MLMiM/vIzEZWaB9sZp+Gv3dxNLPWNG8sHlsze7ZCnpVmtrTC92Lu2FaVN0aPbQczWxDOs9jMfhFuNzMbHT62y8zslGhmPYC8ncxsS4VjOzQGsrY3s3fM7AMzm25mh1X4Xt38u3X3uP4CzgVOAT6s0HY3MKiS52ZUfF6MZO0MzAEODj9uEb5tA7wPHAz8DPgMqB/DeWPu2O71/QeAobF8bPeRN+aOLfAKcGn4/mXA6xXuvwwYcDqwMMbzdgL+FWPHdhFwXvh+H2BY+H6d/buN+x6/u78BbA46R3VUkfVGYIS77ww/5+twe1fgGXff6e5fAJ8Cv4haWGqcN1D7+ndgZgb0AJ4ON8XqsQUqzRuoKrI6UN4TPRz4Kny/K/CkhywAjjCzo6OTNBysZnkDVUXWLOCN8P3ZwNXh+215nM4AAAQ+SURBVHX27zbuC/8+3BL+qPm4mTWu0P4zM3vPzOaZ2TmBpdsjEzjHzBaGM50abj8G+LLC89aE24JWVV6IvWNb7hxgg7t/En4cq8e23N55IfaObX/gfjP7EhgFDA63x+qxrSovwBlm9r6ZvWxmbYOJ9yMfAl3C97sDLcP36+zYJmrhHwe0BjoA6wh9bCZ8v5W7nwzcBjxVcfwsIClAY0Ifi28Hngv3+KyS58bCubdV5Y3FY1uuFz/uPcfqsS23d95YPLY3AgPcvSUwAHgs3B6rx7aqvEsIrWfTHhgDvBhQvor6ADebWQHQCNgVbq+zY5uQhd/dN7h7qbuXAf9L+ONQ+CPSN+H7BYTGyDKDSwqE3rWnhD8avwuUEVqYaQ173ukBjiU2Pp5WmjdGjy1mlgJcBTxboTlWj22leWP02F4LTAnff549Qw6xemwrzevu37v7tvD9l4CDzKxZMBFD3H2Fu1/k7h0JdQA+C3+rzo5tQhb+vcYUuxH66ISZNTez+uH7xwEnAJ9HP+GPvAicD2BmmUAqodX4pgE9zexgM/sZoazvBpZyj0rzxuixBfglsMLd11Roi9VjC5XkjdFj+xVwXvj++UD5sNQ04Lfhs3tOB7a4+7ogAu6l0rxmdlT4EyvhM33qAd8EkjDMzFqEb+sBfwbKz+Kqu3+3Qc1m19UXoXfEdcBuQu+IvwP+AXwALAsfrKPDz70a+IjQzPgS4MoYyJoKTCL05rQEOL/C84cQercvInxGQqzmjcVjG26fCPy+kufH3LGtKm8sHlvgbKAgnGkh0DH8XAMeCR/bD4CcWDi2+8h7S4VjuwA4Mway3gp8HP4aQXiFhbr8d6slG0REkkxCDvWIiEjVVPhFRJKMCr+ISJJR4RcRSTIq/CIiSUaFX5KemW3b6/F/mtnf9/OaLmb2p/08p5OZ/auK7/U3s7SapxWpPRV+kQPg7tPcfUQtfkR/QIVfAqHCL7IP4atm/2lmi8JfZ4Xb//2pwMxah9d6X2Rm/73XJ4iGZjbZzFaYWX74itZ+wH8Ar5nZawH8WZLkUoIOIBIDGliFTVqAJoSu+AZ4GHjQ3d8ys1bALODEvV7/MPCwuz9tZr/f63snA20JLRnwNnCWu482s9uAzu6+qa7/GJH9UeEXgWJ371D+wMz+E8gJP/wl0Ca8nAvAYWbWaK/XnwH8Knz/KULL/pZ718Pr7oTfXDKAt+oyvEhNqfCL7Fs94Ax3L67YWOGNYH92Vrhfiv6fkxigMX6RfXuF0EJeQGjv1kqes4A9uyT1rObP3UporXWRqFPhF9m3fkBOeDe35cDeY/gQOkPnNjN7Fzga2FKNn5sHvKzJXQmCVucUqaXw+fjF7u5m1hPo5e5dg84lUhWNN4rUXkfg7+ENPb4jtHWeSMxSj19EJMlojF9EJMmo8IuIJBkVfhGRJKPCLyKSZFT4RUSSzP8D8CNIhESImeAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 시각화 (회귀선을 성별로 구분할 필요 없음)\n",
    "df_m = df[df.gender=='M']   # 색깔 따로 입혀 남성 여성 쪼갬 \n",
    "df_f = df[df.gender=='F']   \n",
    "\n",
    "x_grid = np.linspace(155,190,10)  #linsapce로 시작과 끝점 정하고, 10점으로 쪼갬\n",
    "\n",
    "plt.scatter(x=df_m.height, y=df_m.weight, color='blue')  #가로는 남성신장,세로는 남성무게 파랗게 \n",
    "plt.scatter(x=df_f.height, y=df_f.weight, color='red')\n",
    "\n",
    "plt.plot(x_grid, b0 + b1*x_grid, linestyle='--',linewidth=1,color='black') #추세선 그리기\n",
    "         #가로   #세로\n",
    "plt.xlabel('Height')\n",
    "plt.ylabel('Weight')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3. Linear regression with dummy variable: 더미변수를 사용한 선형회귀\n",
    "<br>\n",
    "gender라는 명목형 변수가 있는 경우: weight ~ height + gender"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#pandas의 get_dummies함수로 젠더시리즈가지고 더미변수 만듬\n",
    "gender_dummy = pd.get_dummies(df.gender, drop_first=True, prefix='gender')  \n",
    "\n",
    "#drop_first=True: male,female 2개 칼럼 만들어짐 (유형개수-1개 만들기 위해)\n",
    "#drop_first=False면 더미변수 한 개 더 많아짐\n",
    "\n",
    "#prefix='gender'하면 Gender_M 생김\n",
    "#gender로 이름을 시작해 명목형 변수의 값을 추가해 만든다라는 뜻\n",
    "\n",
    "X = df[['height']].join(gender_dummy)  \n",
    "Y = df[['weight']]\n",
    "\n",
    "#Gender_M 생김"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#회귀 수행\n",
    "lm.fit(X,Y)  #학습\n",
    "\n",
    "b0 = lm.intercept_[0]\n",
    "b1 = lm.coef_[0][0]\n",
    "b2 = lm.coef_[0][1]\n",
    "\n",
    "rsq2 = lm.score(X,Y) \n",
    "rmse2 = np.sqrt(metrics.mean_squared_error(Y, lm.predict(X)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "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": [
    "#시각화(성별로 회귀선 구별)\n",
    "df_m = df[df.gender=='M']  \n",
    "df_f = df[df.gender=='F']\n",
    "\n",
    "x_grid = np.linspace(155,190,10)\n",
    "\n",
    "plt.scatter(x=df_m.height, y=df_m.weight, color='blue')\n",
    "plt.scatter(x=df_f.height, y=df_f.weight, color='red')\n",
    "\n",
    "plt.plot(x_grid, b0 + b1*x_grid, linestyle='--',linewidth=1,color='red')\n",
    "plt.plot(x_grid, (b0 + b2) + b1*x_grid, linestyle='--',linewidth=1,color='blue')\n",
    "\n",
    "plt.xlabel('Height')\n",
    "plt.ylabel('Weight')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.4. Linear regression with dummy variable that interacts: 상호 작용하는 더미 변수를 사용한 선형 회귀\n",
    "<br>\n",
    "gender라는 명목형 변수가 상호작용하는 경우: weight ~ height + gender + height $\\times$ gender"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "#gender로 더미변수 만듬\n",
    "gender_dummy = pd.get_dummies(df.gender, drop_first=True, prefix='gender')\n",
    "X = df[['height']].join(gender_dummy)\n",
    "Y = df[['weight']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "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>height</th>\n",
       "      <th>gender_M</th>\n",
       "      <th>height x gender_M</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>165.3</td>\n",
       "      <td>1</td>\n",
       "      <td>165.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>170.1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>175.0</td>\n",
       "      <td>1</td>\n",
       "      <td>175.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>182.1</td>\n",
       "      <td>1</td>\n",
       "      <td>182.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>168.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   height  gender_M  height x gender_M\n",
       "0   165.3         1              165.3\n",
       "1   170.1         0                0.0\n",
       "2   175.0         1              175.0\n",
       "3   182.1         1              182.1\n",
       "4   168.0         0                0.0"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create the interaction term. \n",
    "X['height x gender_M'] = X['height']*X['gender_M']\n",
    "  #서로 교차한 것          #서로 곱함\n",
    "\n",
    "#gender_M이 0이면 기여안함\n",
    "#gender_M이 1인경우만 기여함\n",
    "\n",
    "X.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "#회귀 수행\n",
    "lm.fit(X,Y) #학습\n",
    "\n",
    "b0 = lm.intercept_[0]\n",
    "b1 = lm.coef_[0][0]\n",
    "b2 = lm.coef_[0][1]\n",
    "b3 = lm.coef_[0][2]\n",
    "\n",
    "rsq3 = lm.score(X,Y)\n",
    "rmse3 = np.sqrt(metrics.mean_squared_error(Y, lm.predict(X)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "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": [
    "#시각화(성별로 회귀선 구별)\n",
    "df_m = df[df.gender=='M']\n",
    "df_f = df[df.gender=='F']\n",
    "\n",
    "x_grid = np.linspace(155,190,10)\n",
    "\n",
    "plt.scatter(x=df_m.height, y=df_m.weight, color='blue')\n",
    "plt.scatter(x=df_f.height, y=df_f.weight, color='red')\n",
    "\n",
    "plt.plot(x_grid, b0 + b1*x_grid, linestyle='--',linewidth=1,color='red') #절편은 b0, 기울기는 b1\n",
    "plt.plot(x_grid, (b0 + b2) + (b1+b3)*x_grid, linestyle='--',linewidth=1,color='blue') #절편은 (b0 + b2), 기울기(b1 + b3)\n",
    "\n",
    "plt.xlabel('Height')\n",
    "plt.ylabel('Weight')\n",
    "\n",
    "plt.show()\n",
    "\n",
    "#절편말고 기울기 또한 바뀜"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.5. Compare  $R^2$, RMSE for the different cases: 결정계수 R^2와 rmse 비교"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.441, 0.762, 0.787])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.round([rsq1, rsq2, rsq3],3)                # R^2 (결정계수는 클수록 좋음)   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([8.595, 5.613, 5.307])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.round([rmse1, rmse2, rmse3],3)       #계속 숫자가 작아짐- 남녀구분짓지않고 rmse\n",
    "                                        #더미변수와 상호작용한거는 더 작아짐"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "결정계수 R^2은 커지고, rmse는 작아짐 = > 더 정교해지는 그래프다"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}